From b9c99befabd50a78f73dea94ec5e3bbd0021445a Mon Sep 17 00:00:00 2001 From: jaydee Date: Sun, 6 Apr 2025 03:14:47 +0200 Subject: [PATCH] added v3 --- omv_backup.log | 146 + omv_backup_v4.py | 56 +- requirements.txt | 5 +- venv/bin/Activate.ps1 | 247 + venv/bin/activate | 69 + venv/bin/activate.csh | 26 + venv/bin/activate.fish | 69 + venv/bin/autorandr | 8 + venv/bin/getmac | 8 + venv/bin/normalizer | 8 + venv/bin/ping3 | 8 + venv/bin/pip | 8 + venv/bin/pip3 | 8 + venv/bin/pip3.11 | 8 + venv/bin/python | 1 + venv/bin/python3 | 1 + venv/bin/python3.11 | 1 + venv/bin/wakeonlan | 8 + .../PyNaCl-1.5.0.dist-info/INSTALLER | 1 + .../PyNaCl-1.5.0.dist-info/LICENSE | 174 + .../PyNaCl-1.5.0.dist-info/METADATA | 245 + .../PyNaCl-1.5.0.dist-info/RECORD | 68 + .../PyNaCl-1.5.0.dist-info/WHEEL | 7 + .../PyNaCl-1.5.0.dist-info/top_level.txt | 2 + .../PyYAML-6.0.2.dist-info/INSTALLER | 1 + .../PyYAML-6.0.2.dist-info/LICENSE | 20 + .../PyYAML-6.0.2.dist-info/METADATA | 46 + .../PyYAML-6.0.2.dist-info/RECORD | 44 + .../PyYAML-6.0.2.dist-info/REQUESTED | 0 .../PyYAML-6.0.2.dist-info/WHEEL | 6 + .../PyYAML-6.0.2.dist-info/top_level.txt | 2 + .../__pycache__/autorandr.cpython-311.pyc | Bin 0 -> 98710 bytes ...fi_backend.cpython-311-x86_64-linux-gnu.so | Bin 0 -> 1068624 bytes .../site-packages/_distutils_hack/__init__.py | 222 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 11164 bytes .../__pycache__/override.cpython-311.pyc | Bin 0 -> 321 bytes .../site-packages/_distutils_hack/override.py | 1 + .../site-packages/_yaml/__init__.py | 33 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 938 bytes .../autorandr-1.15.post1.dist-info/INSTALLER | 1 + .../autorandr-1.15.post1.dist-info/METADATA | 422 + .../autorandr-1.15.post1.dist-info/RECORD | 10 + .../autorandr-1.15.post1.dist-info/REQUESTED | 0 .../autorandr-1.15.post1.dist-info/WHEEL | 5 + .../entry_points.txt | 3 + .../top_level.txt | 1 + .../lib/python3.11/site-packages/autorandr.py | 1704 ++++ .../bcrypt-4.3.0.dist-info/INSTALLER | 1 + .../bcrypt-4.3.0.dist-info/LICENSE | 201 + .../bcrypt-4.3.0.dist-info/METADATA | 330 + .../bcrypt-4.3.0.dist-info/RECORD | 11 + .../bcrypt-4.3.0.dist-info/WHEEL | 5 + .../bcrypt-4.3.0.dist-info/top_level.txt | 1 + .../site-packages/bcrypt/__init__.py | 43 + .../site-packages/bcrypt/__init__.pyi | 10 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 723 bytes .../site-packages/bcrypt/_bcrypt.abi3.so | Bin 0 -> 644928 bytes .../python3.11/site-packages/bcrypt/py.typed | 0 .../certifi-2025.1.31.dist-info/INSTALLER | 1 + .../certifi-2025.1.31.dist-info/LICENSE | 20 + .../certifi-2025.1.31.dist-info/METADATA | 77 + .../certifi-2025.1.31.dist-info/RECORD | 14 + .../certifi-2025.1.31.dist-info/WHEEL | 5 + .../certifi-2025.1.31.dist-info/top_level.txt | 1 + .../site-packages/certifi/__init__.py | 4 + .../site-packages/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 333 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 722 bytes .../certifi/__pycache__/core.cpython-311.pyc | Bin 0 -> 3763 bytes .../site-packages/certifi/cacert.pem | 4897 ++++++++++ .../python3.11/site-packages/certifi/core.py | 114 + .../python3.11/site-packages/certifi/py.typed | 0 .../cffi-1.17.1.dist-info/INSTALLER | 1 + .../cffi-1.17.1.dist-info/LICENSE | 26 + .../cffi-1.17.1.dist-info/METADATA | 40 + .../cffi-1.17.1.dist-info/RECORD | 48 + .../site-packages/cffi-1.17.1.dist-info/WHEEL | 6 + .../cffi-1.17.1.dist-info/entry_points.txt | 2 + .../cffi-1.17.1.dist-info/top_level.txt | 2 + .../python3.11/site-packages/cffi/__init__.py | 14 + .../cffi/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 623 bytes .../_imp_emulation.cpython-311.pyc | Bin 0 -> 4708 bytes .../_shimmed_dist_utils.cpython-311.pyc | Bin 0 -> 2314 bytes .../cffi/__pycache__/api.cpython-311.pyc | Bin 0 -> 55618 bytes .../backend_ctypes.cpython-311.pyc | Bin 0 -> 71903 bytes .../__pycache__/cffi_opcode.cpython-311.pyc | Bin 0 -> 7136 bytes .../__pycache__/commontypes.cpython-311.pyc | Bin 0 -> 3298 bytes .../cffi/__pycache__/cparser.cpython-311.pyc | Bin 0 -> 50049 bytes .../cffi/__pycache__/error.cpython-311.pyc | Bin 0 -> 2121 bytes .../__pycache__/ffiplatform.cpython-311.pyc | Bin 0 -> 6616 bytes .../cffi/__pycache__/lock.cpython-311.pyc | Bin 0 -> 633 bytes .../cffi/__pycache__/model.cpython-311.pyc | Bin 0 -> 33878 bytes .../__pycache__/pkgconfig.cpython-311.pyc | Bin 0 -> 8128 bytes .../__pycache__/recompiler.cpython-311.pyc | Bin 0 -> 90321 bytes .../setuptools_ext.cpython-311.pyc | Bin 0 -> 12596 bytes .../__pycache__/vengine_cpy.cpython-311.pyc | Bin 0 -> 57253 bytes .../__pycache__/vengine_gen.cpython-311.pyc | Bin 0 -> 38351 bytes .../cffi/__pycache__/verifier.cpython-311.pyc | Bin 0 -> 18085 bytes .../site-packages/cffi/_cffi_errors.h | 149 + .../site-packages/cffi/_cffi_include.h | 389 + .../site-packages/cffi/_embedding.h | 550 ++ .../site-packages/cffi/_imp_emulation.py | 83 + .../site-packages/cffi/_shimmed_dist_utils.py | 45 + venv/lib/python3.11/site-packages/cffi/api.py | 967 ++ .../site-packages/cffi/backend_ctypes.py | 1121 +++ .../site-packages/cffi/cffi_opcode.py | 187 + .../site-packages/cffi/commontypes.py | 82 + .../python3.11/site-packages/cffi/cparser.py | 1015 ++ .../python3.11/site-packages/cffi/error.py | 31 + .../site-packages/cffi/ffiplatform.py | 113 + .../lib/python3.11/site-packages/cffi/lock.py | 30 + .../python3.11/site-packages/cffi/model.py | 618 ++ .../site-packages/cffi/parse_c_type.h | 181 + .../site-packages/cffi/pkgconfig.py | 121 + .../site-packages/cffi/recompiler.py | 1598 +++ .../site-packages/cffi/setuptools_ext.py | 216 + .../site-packages/cffi/vengine_cpy.py | 1084 ++ .../site-packages/cffi/vengine_gen.py | 679 ++ .../python3.11/site-packages/cffi/verifier.py | 306 + .../INSTALLER | 1 + .../LICENSE | 21 + .../METADATA | 721 ++ .../charset_normalizer-3.4.1.dist-info/RECORD | 35 + .../charset_normalizer-3.4.1.dist-info/WHEEL | 6 + .../entry_points.txt | 2 + .../top_level.txt | 1 + .../charset_normalizer/__init__.py | 48 + .../charset_normalizer/__main__.py | 6 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1914 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 405 bytes .../__pycache__/api.cpython-311.pyc | Bin 0 -> 20771 bytes .../__pycache__/cd.cpython-311.pyc | Bin 0 -> 15879 bytes .../__pycache__/constant.cpython-311.pyc | Bin 0 -> 43573 bytes .../__pycache__/legacy.cpython-311.pyc | Bin 0 -> 3156 bytes .../__pycache__/md.cpython-311.pyc | Bin 0 -> 27598 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 18569 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 15400 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 411 bytes .../site-packages/charset_normalizer/api.py | 668 ++ .../site-packages/charset_normalizer/cd.py | 395 + .../charset_normalizer/cli/__init__.py | 8 + .../charset_normalizer/cli/__main__.py | 321 + .../cli/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 377 bytes .../cli/__pycache__/__main__.cpython-311.pyc | Bin 0 -> 12294 bytes .../charset_normalizer/constant.py | 1998 ++++ .../charset_normalizer/legacy.py | 66 + .../md.cpython-311-x86_64-linux-gnu.so | Bin 0 -> 16064 bytes .../site-packages/charset_normalizer/md.py | 630 ++ .../md__mypyc.cpython-311-x86_64-linux-gnu.so | Bin 0 -> 272624 bytes .../charset_normalizer/models.py | 360 + .../site-packages/charset_normalizer/py.typed | 0 .../site-packages/charset_normalizer/utils.py | 408 + .../charset_normalizer/version.py | 8 + .../cryptography-44.0.2.dist-info/INSTALLER | 1 + .../cryptography-44.0.2.dist-info/METADATA | 140 + .../cryptography-44.0.2.dist-info/RECORD | 182 + .../cryptography-44.0.2.dist-info/WHEEL | 5 + .../licenses/LICENSE | 3 + .../licenses/LICENSE.APACHE | 202 + .../licenses/LICENSE.BSD | 27 + .../site-packages/cryptography/__about__.py | 17 + .../site-packages/cryptography/__init__.py | 26 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 488 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 962 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 2965 bytes .../__pycache__/fernet.cpython-311.pyc | Bin 0 -> 12293 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 7115 bytes .../site-packages/cryptography/exceptions.py | 52 + .../site-packages/cryptography/fernet.py | 223 + .../cryptography/hazmat/__init__.py | 13 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 269 bytes .../hazmat/__pycache__/_oid.cpython-311.pyc | Bin 0 -> 18987 bytes .../site-packages/cryptography/hazmat/_oid.py | 315 + .../cryptography/hazmat/backends/__init__.py | 13 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 579 bytes .../hazmat/backends/openssl/__init__.py | 9 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 399 bytes .../__pycache__/backend.cpython-311.pyc | Bin 0 -> 13367 bytes .../hazmat/backends/openssl/backend.py | 285 + .../cryptography/hazmat/bindings/__init__.py | 3 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 212 bytes .../hazmat/bindings/_rust.abi3.so | Bin 0 -> 11514880 bytes .../hazmat/bindings/_rust/__init__.pyi | 28 + .../hazmat/bindings/_rust/_openssl.pyi | 8 + .../hazmat/bindings/_rust/asn1.pyi | 7 + .../hazmat/bindings/_rust/exceptions.pyi | 17 + .../hazmat/bindings/_rust/ocsp.pyi | 117 + .../bindings/_rust/openssl/__init__.pyi | 72 + .../hazmat/bindings/_rust/openssl/aead.pyi | 103 + .../hazmat/bindings/_rust/openssl/ciphers.pyi | 38 + .../hazmat/bindings/_rust/openssl/cmac.pyi | 18 + .../hazmat/bindings/_rust/openssl/dh.pyi | 51 + .../hazmat/bindings/_rust/openssl/dsa.pyi | 41 + .../hazmat/bindings/_rust/openssl/ec.pyi | 52 + .../hazmat/bindings/_rust/openssl/ed25519.pyi | 12 + .../hazmat/bindings/_rust/openssl/ed448.pyi | 12 + .../hazmat/bindings/_rust/openssl/hashes.pyi | 19 + .../hazmat/bindings/_rust/openssl/hmac.pyi | 21 + .../hazmat/bindings/_rust/openssl/kdf.pyi | 43 + .../hazmat/bindings/_rust/openssl/keys.pyi | 33 + .../bindings/_rust/openssl/poly1305.pyi | 13 + .../hazmat/bindings/_rust/openssl/rsa.pyi | 55 + .../hazmat/bindings/_rust/openssl/x25519.pyi | 12 + .../hazmat/bindings/_rust/openssl/x448.pyi | 12 + .../hazmat/bindings/_rust/pkcs12.pyi | 46 + .../hazmat/bindings/_rust/pkcs7.pyi | 49 + .../hazmat/bindings/_rust/test_support.pyi | 22 + .../hazmat/bindings/_rust/x509.pyi | 246 + .../hazmat/bindings/openssl/__init__.py | 3 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 220 bytes .../__pycache__/_conditional.cpython-311.pyc | Bin 0 -> 5536 bytes .../__pycache__/binding.cpython-311.pyc | Bin 0 -> 5610 bytes .../hazmat/bindings/openssl/_conditional.py | 183 + .../hazmat/bindings/openssl/binding.py | 121 + .../cryptography/hazmat/decrepit/__init__.py | 5 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 274 bytes .../hazmat/decrepit/ciphers/__init__.py | 5 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 282 bytes .../__pycache__/algorithms.cpython-311.pyc | Bin 0 -> 5678 bytes .../hazmat/decrepit/ciphers/algorithms.py | 107 + .../hazmat/primitives/__init__.py | 3 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 214 bytes .../__pycache__/_asymmetric.cpython-311.pyc | Bin 0 -> 920 bytes .../_cipheralgorithm.cpython-311.pyc | Bin 0 -> 2749 bytes .../_serialization.cpython-311.pyc | Bin 0 -> 7716 bytes .../__pycache__/cmac.cpython-311.pyc | Bin 0 -> 440 bytes .../__pycache__/constant_time.cpython-311.pyc | Bin 0 -> 786 bytes .../__pycache__/hashes.cpython-311.pyc | Bin 0 -> 9494 bytes .../__pycache__/hmac.cpython-311.pyc | Bin 0 -> 617 bytes .../__pycache__/keywrap.cpython-311.pyc | Bin 0 -> 9143 bytes .../__pycache__/padding.cpython-311.pyc | Bin 0 -> 8512 bytes .../__pycache__/poly1305.cpython-311.pyc | Bin 0 -> 452 bytes .../hazmat/primitives/_asymmetric.py | 19 + .../hazmat/primitives/_cipheralgorithm.py | 58 + .../hazmat/primitives/_serialization.py | 169 + .../hazmat/primitives/asymmetric/__init__.py | 3 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 225 bytes .../asymmetric/__pycache__/dh.cpython-311.pyc | Bin 0 -> 5929 bytes .../__pycache__/dsa.cpython-311.pyc | Bin 0 -> 6762 bytes .../asymmetric/__pycache__/ec.cpython-311.pyc | Bin 0 -> 17574 bytes .../__pycache__/ed25519.cpython-311.pyc | Bin 0 -> 5563 bytes .../__pycache__/ed448.cpython-311.pyc | Bin 0 -> 5652 bytes .../__pycache__/padding.cpython-311.pyc | Bin 0 -> 5601 bytes .../__pycache__/rsa.cpython-311.pyc | Bin 0 -> 10234 bytes .../__pycache__/types.cpython-311.pyc | Bin 0 -> 2813 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 1466 bytes .../__pycache__/x25519.cpython-311.pyc | Bin 0 -> 5349 bytes .../__pycache__/x448.cpython-311.pyc | Bin 0 -> 5433 bytes .../hazmat/primitives/asymmetric/dh.py | 135 + .../hazmat/primitives/asymmetric/dsa.py | 154 + .../hazmat/primitives/asymmetric/ec.py | 403 + .../hazmat/primitives/asymmetric/ed25519.py | 116 + .../hazmat/primitives/asymmetric/ed448.py | 118 + .../hazmat/primitives/asymmetric/padding.py | 113 + .../hazmat/primitives/asymmetric/rsa.py | 263 + .../hazmat/primitives/asymmetric/types.py | 111 + .../hazmat/primitives/asymmetric/utils.py | 24 + .../hazmat/primitives/asymmetric/x25519.py | 109 + .../hazmat/primitives/asymmetric/x448.py | 112 + .../hazmat/primitives/ciphers/__init__.py | 27 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 767 bytes .../ciphers/__pycache__/aead.cpython-311.pyc | Bin 0 -> 721 bytes .../__pycache__/algorithms.cpython-311.pyc | Bin 0 -> 6981 bytes .../ciphers/__pycache__/base.cpython-311.pyc | Bin 0 -> 7401 bytes .../ciphers/__pycache__/modes.cpython-311.pyc | Bin 0 -> 13239 bytes .../hazmat/primitives/ciphers/aead.py | 23 + .../hazmat/primitives/ciphers/algorithms.py | 183 + .../hazmat/primitives/ciphers/base.py | 145 + .../hazmat/primitives/ciphers/modes.py | 268 + .../cryptography/hazmat/primitives/cmac.py | 10 + .../hazmat/primitives/constant_time.py | 14 + .../cryptography/hazmat/primitives/hashes.py | 242 + .../cryptography/hazmat/primitives/hmac.py | 13 + .../hazmat/primitives/kdf/__init__.py | 23 + .../kdf/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1376 bytes .../kdf/__pycache__/argon2.cpython-311.pyc | Bin 0 -> 607 bytes .../kdf/__pycache__/concatkdf.cpython-311.pyc | Bin 0 -> 6061 bytes .../kdf/__pycache__/hkdf.cpython-311.pyc | Bin 0 -> 5241 bytes .../kdf/__pycache__/kbkdf.cpython-311.pyc | Bin 0 -> 12145 bytes .../kdf/__pycache__/pbkdf2.cpython-311.pyc | Bin 0 -> 3002 bytes .../kdf/__pycache__/scrypt.cpython-311.pyc | Bin 0 -> 687 bytes .../kdf/__pycache__/x963kdf.cpython-311.pyc | Bin 0 -> 3454 bytes .../hazmat/primitives/kdf/argon2.py | 13 + .../hazmat/primitives/kdf/concatkdf.py | 124 + .../hazmat/primitives/kdf/hkdf.py | 101 + .../hazmat/primitives/kdf/kbkdf.py | 302 + .../hazmat/primitives/kdf/pbkdf2.py | 62 + .../hazmat/primitives/kdf/scrypt.py | 19 + .../hazmat/primitives/kdf/x963kdf.py | 61 + .../cryptography/hazmat/primitives/keywrap.py | 177 + .../cryptography/hazmat/primitives/padding.py | 183 + .../hazmat/primitives/poly1305.py | 11 + .../primitives/serialization/__init__.py | 63 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1632 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 715 bytes .../__pycache__/pkcs12.cpython-311.pyc | Bin 0 -> 6281 bytes .../__pycache__/pkcs7.cpython-311.pyc | Bin 0 -> 16917 bytes .../__pycache__/ssh.cpython-311.pyc | Bin 0 -> 71201 bytes .../hazmat/primitives/serialization/base.py | 14 + .../hazmat/primitives/serialization/pkcs12.py | 156 + .../hazmat/primitives/serialization/pkcs7.py | 369 + .../hazmat/primitives/serialization/ssh.py | 1569 +++ .../hazmat/primitives/twofactor/__init__.py | 9 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 530 bytes .../__pycache__/hotp.cpython-311.pyc | Bin 0 -> 5638 bytes .../__pycache__/totp.cpython-311.pyc | Bin 0 -> 2763 bytes .../hazmat/primitives/twofactor/hotp.py | 100 + .../hazmat/primitives/twofactor/totp.py | 55 + .../site-packages/cryptography/py.typed | 0 .../site-packages/cryptography/utils.py | 127 + .../cryptography/x509/__init__.py | 267 + .../x509/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8322 bytes .../x509/__pycache__/base.cpython-311.pyc | Bin 0 -> 34155 bytes .../certificate_transparency.cpython-311.pyc | Bin 0 -> 1570 bytes .../__pycache__/extensions.cpython-311.pyc | Bin 0 -> 119420 bytes .../__pycache__/general_name.cpython-311.pyc | Bin 0 -> 14626 bytes .../x509/__pycache__/name.cpython-311.pyc | Bin 0 -> 25529 bytes .../x509/__pycache__/ocsp.cpython-311.pyc | Bin 0 -> 14473 bytes .../x509/__pycache__/oid.cpython-311.pyc | Bin 0 -> 882 bytes .../__pycache__/verification.cpython-311.pyc | Bin 0 -> 843 bytes .../site-packages/cryptography/x509/base.py | 815 ++ .../x509/certificate_transparency.py | 35 + .../cryptography/x509/extensions.py | 2477 +++++ .../cryptography/x509/general_name.py | 281 + .../site-packages/cryptography/x509/name.py | 465 + .../site-packages/cryptography/x509/ocsp.py | 344 + .../site-packages/cryptography/x509/oid.py | 35 + .../cryptography/x509/verification.py | 28 + .../site-packages/distutils-precedence.pth | 1 + .../getmac-0.9.5.dist-info/INSTALLER | 1 + .../getmac-0.9.5.dist-info/LICENSE | 21 + .../getmac-0.9.5.dist-info/METADATA | 714 ++ .../getmac-0.9.5.dist-info/RECORD | 18 + .../getmac-0.9.5.dist-info/REQUESTED | 0 .../getmac-0.9.5.dist-info/WHEEL | 6 + .../getmac-0.9.5.dist-info/entry_points.txt | 2 + .../getmac-0.9.5.dist-info/top_level.txt | 1 + .../getmac-0.9.5.dist-info/zip-safe | 1 + .../site-packages/getmac/__init__.py | 3 + .../site-packages/getmac/__main__.py | 123 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 304 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 4812 bytes .../getmac/__pycache__/getmac.cpython-311.pyc | Bin 0 -> 73913 bytes .../__pycache__/shutilwhich.cpython-311.pyc | Bin 0 -> 3011 bytes .../python3.11/site-packages/getmac/getmac.py | 1900 ++++ .../site-packages/getmac/shutilwhich.py | 67 + .../idna-3.10.dist-info/INSTALLER | 1 + .../idna-3.10.dist-info/LICENSE.md | 31 + .../idna-3.10.dist-info/METADATA | 250 + .../site-packages/idna-3.10.dist-info/RECORD | 22 + .../site-packages/idna-3.10.dist-info/WHEEL | 4 + .../python3.11/site-packages/idna/__init__.py | 45 + .../idna/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1095 bytes .../idna/__pycache__/codec.cpython-311.pyc | Bin 0 -> 5777 bytes .../idna/__pycache__/compat.cpython-311.pyc | Bin 0 -> 1017 bytes .../idna/__pycache__/core.cpython-311.pyc | Bin 0 -> 19264 bytes .../idna/__pycache__/idnadata.cpython-311.pyc | Bin 0 -> 101536 bytes .../__pycache__/intranges.cpython-311.pyc | Bin 0 -> 2975 bytes .../__pycache__/package_data.cpython-311.pyc | Bin 0 -> 211 bytes .../__pycache__/uts46data.cpython-311.pyc | Bin 0 -> 163166 bytes .../python3.11/site-packages/idna/codec.py | 122 + .../python3.11/site-packages/idna/compat.py | 15 + .../lib/python3.11/site-packages/idna/core.py | 437 + .../python3.11/site-packages/idna/idnadata.py | 4243 ++++++++ .../site-packages/idna/intranges.py | 57 + .../site-packages/idna/package_data.py | 1 + .../python3.11/site-packages/idna/py.typed | 0 .../site-packages/idna/uts46data.py | 8681 +++++++++++++++++ .../python3.11/site-packages/nacl/__init__.py | 39 + .../nacl/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 701 bytes .../nacl/__pycache__/encoding.cpython-311.pyc | Bin 0 -> 5626 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 3499 bytes .../nacl/__pycache__/hash.cpython-311.pyc | Bin 0 -> 6527 bytes .../nacl/__pycache__/hashlib.cpython-311.pyc | Bin 0 -> 6266 bytes .../nacl/__pycache__/public.cpython-311.pyc | Bin 0 -> 18992 bytes .../nacl/__pycache__/secret.cpython-311.pyc | Bin 0 -> 13188 bytes .../nacl/__pycache__/signing.cpython-311.pyc | Bin 0 -> 11659 bytes .../nacl/__pycache__/utils.cpython-311.pyc | Bin 0 -> 3646 bytes .../site-packages/nacl/_sodium.abi3.so | Bin 0 -> 2740136 bytes .../site-packages/nacl/bindings/__init__.py | 451 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 12859 bytes .../__pycache__/crypto_aead.cpython-311.pyc | Bin 0 -> 18135 bytes .../__pycache__/crypto_box.cpython-311.pyc | Bin 0 -> 14262 bytes .../__pycache__/crypto_core.cpython-311.pyc | Bin 0 -> 15751 bytes .../crypto_generichash.cpython-311.pyc | Bin 0 -> 11931 bytes .../__pycache__/crypto_hash.cpython-311.pyc | Bin 0 -> 2537 bytes .../__pycache__/crypto_kx.cpython-311.pyc | Bin 0 -> 7527 bytes .../__pycache__/crypto_pwhash.cpython-311.pyc | Bin 0 -> 23469 bytes .../crypto_scalarmult.cpython-311.pyc | Bin 0 -> 9889 bytes .../crypto_secretbox.cpython-311.pyc | Bin 0 -> 3878 bytes .../crypto_secretstream.cpython-311.pyc | Bin 0 -> 13365 bytes .../crypto_shorthash.cpython-311.pyc | Bin 0 -> 3427 bytes .../__pycache__/crypto_sign.cpython-311.pyc | Bin 0 -> 13927 bytes .../__pycache__/randombytes.cpython-311.pyc | Bin 0 -> 1857 bytes .../__pycache__/sodium_core.cpython-311.pyc | Bin 0 -> 1098 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6731 bytes .../nacl/bindings/crypto_aead.py | 559 ++ .../site-packages/nacl/bindings/crypto_box.py | 324 + .../nacl/bindings/crypto_core.py | 412 + .../nacl/bindings/crypto_generichash.py | 281 + .../nacl/bindings/crypto_hash.py | 63 + .../site-packages/nacl/bindings/crypto_kx.py | 200 + .../nacl/bindings/crypto_pwhash.py | 600 ++ .../nacl/bindings/crypto_scalarmult.py | 240 + .../nacl/bindings/crypto_secretbox.py | 86 + .../nacl/bindings/crypto_secretstream.py | 357 + .../nacl/bindings/crypto_shorthash.py | 81 + .../nacl/bindings/crypto_sign.py | 327 + .../nacl/bindings/randombytes.py | 51 + .../nacl/bindings/sodium_core.py | 33 + .../site-packages/nacl/bindings/utils.py | 141 + .../python3.11/site-packages/nacl/encoding.py | 105 + .../site-packages/nacl/exceptions.py | 88 + .../lib/python3.11/site-packages/nacl/hash.py | 182 + .../python3.11/site-packages/nacl/hashlib.py | 143 + .../python3.11/site-packages/nacl/public.py | 423 + .../site-packages/nacl/pwhash/__init__.py | 75 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2660 bytes .../__pycache__/_argon2.cpython-311.pyc | Bin 0 -> 1741 bytes .../__pycache__/argon2i.cpython-311.pyc | Bin 0 -> 4703 bytes .../__pycache__/argon2id.cpython-311.pyc | Bin 0 -> 4726 bytes .../pwhash/__pycache__/scrypt.cpython-311.pyc | Bin 0 -> 7591 bytes .../site-packages/nacl/pwhash/_argon2.py | 49 + .../site-packages/nacl/pwhash/argon2i.py | 132 + .../site-packages/nacl/pwhash/argon2id.py | 135 + .../site-packages/nacl/pwhash/scrypt.py | 211 + .../python3.11/site-packages/nacl/py.typed | 0 .../python3.11/site-packages/nacl/secret.py | 305 + .../python3.11/site-packages/nacl/signing.py | 250 + .../python3.11/site-packages/nacl/utils.py | 88 + .../python3.11/site-packages/paho/__init__.py | 0 .../paho/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 188 bytes .../site-packages/paho/mqtt/__init__.py | 5 + .../mqtt/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 460 bytes .../mqtt/__pycache__/client.cpython-311.pyc | Bin 0 -> 183614 bytes .../mqtt/__pycache__/matcher.cpython-311.pyc | Bin 0 -> 4655 bytes .../__pycache__/packettypes.cpython-311.pyc | Bin 0 -> 1841 bytes .../__pycache__/properties.cpython-311.pyc | Bin 0 -> 24169 bytes .../mqtt/__pycache__/publish.cpython-311.pyc | Bin 0 -> 10573 bytes .../__pycache__/reasoncodes.cpython-311.pyc | Bin 0 -> 11348 bytes .../__pycache__/subscribe.cpython-311.pyc | Bin 0 -> 11834 bytes .../subscribeoptions.cpython-311.pyc | Bin 0 -> 6385 bytes .../site-packages/paho/mqtt/client.py | 3989 ++++++++ .../site-packages/paho/mqtt/matcher.py | 78 + .../site-packages/paho/mqtt/packettypes.py | 43 + .../site-packages/paho/mqtt/properties.py | 438 + .../site-packages/paho/mqtt/publish.py | 241 + .../site-packages/paho/mqtt/reasoncodes.py | 192 + .../site-packages/paho/mqtt/subscribe.py | 274 + .../paho/mqtt/subscribeoptions.py | 110 + .../paho_mqtt-1.6.1.egg-info/PKG-INFO | 1508 +++ .../paho_mqtt-1.6.1.egg-info/SOURCES.txt | 49 + .../dependency_links.txt | 1 + .../installed-files.txt | 26 + .../paho_mqtt-1.6.1.egg-info/not-zip-safe | 1 + .../paho_mqtt-1.6.1.egg-info/requires.txt | 3 + .../paho_mqtt-1.6.1.egg-info/top_level.txt | 1 + .../paramiko-3.5.1.dist-info/INSTALLER | 1 + .../paramiko-3.5.1.dist-info/LICENSE | 504 + .../paramiko-3.5.1.dist-info/METADATA | 110 + .../paramiko-3.5.1.dist-info/RECORD | 99 + .../paramiko-3.5.1.dist-info/REQUESTED | 0 .../paramiko-3.5.1.dist-info/WHEEL | 5 + .../paramiko-3.5.1.dist-info/top_level.txt | 1 + .../site-packages/paramiko/__init__.py | 165 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4742 bytes .../__pycache__/_version.cpython-311.pyc | Bin 0 -> 352 bytes .../__pycache__/_winapi.cpython-311.pyc | Bin 0 -> 16157 bytes .../__pycache__/agent.cpython-311.pyc | Bin 0 -> 24795 bytes .../__pycache__/auth_handler.cpython-311.pyc | Bin 0 -> 51111 bytes .../__pycache__/auth_strategy.cpython-311.pyc | Bin 0 -> 13938 bytes .../paramiko/__pycache__/ber.cpython-311.pyc | Bin 0 -> 6706 bytes .../__pycache__/buffered_pipe.cpython-311.pyc | Bin 0 -> 9676 bytes .../__pycache__/channel.cpython-311.pyc | Bin 0 -> 66618 bytes .../__pycache__/client.cpython-311.pyc | Bin 0 -> 35800 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 7792 bytes .../__pycache__/compress.cpython-311.pyc | Bin 0 -> 1733 bytes .../__pycache__/config.cpython-311.pyc | Bin 0 -> 26233 bytes .../__pycache__/dsskey.cpython-311.pyc | Bin 0 -> 12102 bytes .../__pycache__/ecdsakey.cpython-311.pyc | Bin 0 -> 16637 bytes .../__pycache__/ed25519key.cpython-311.pyc | Bin 0 -> 9261 bytes .../paramiko/__pycache__/file.cpython-311.pyc | Bin 0 -> 21468 bytes .../__pycache__/hostkeys.cpython-311.pyc | Bin 0 -> 19208 bytes .../kex_curve25519.cpython-311.pyc | Bin 0 -> 8376 bytes .../__pycache__/kex_ecdh_nist.cpython-311.pyc | Bin 0 -> 9188 bytes .../__pycache__/kex_gex.cpython-311.pyc | Bin 0 -> 14420 bytes .../__pycache__/kex_group1.cpython-311.pyc | Bin 0 -> 7988 bytes .../__pycache__/kex_group14.cpython-311.pyc | Bin 0 -> 1392 bytes .../__pycache__/kex_group16.cpython-311.pyc | Bin 0 -> 1387 bytes .../__pycache__/kex_gss.cpython-311.pyc | Bin 0 -> 32245 bytes .../__pycache__/message.cpython-311.pyc | Bin 0 -> 13486 bytes .../__pycache__/packet.cpython-311.pyc | Bin 0 -> 27566 bytes .../paramiko/__pycache__/pipe.cpython-311.pyc | Bin 0 -> 6780 bytes .../paramiko/__pycache__/pkey.cpython-311.pyc | Bin 0 -> 41086 bytes .../__pycache__/primes.cpython-311.pyc | Bin 0 -> 4905 bytes .../__pycache__/proxy.cpython-311.pyc | Bin 0 -> 5404 bytes .../__pycache__/rsakey.cpython-311.pyc | Bin 0 -> 10408 bytes .../__pycache__/server.cpython-311.pyc | Bin 0 -> 34304 bytes .../paramiko/__pycache__/sftp.cpython-311.pyc | Bin 0 -> 7965 bytes .../__pycache__/sftp_attr.cpython-311.pyc | Bin 0 -> 10453 bytes .../__pycache__/sftp_client.cpython-311.pyc | Bin 0 -> 46255 bytes .../__pycache__/sftp_file.cpython-311.pyc | Bin 0 -> 27569 bytes .../__pycache__/sftp_handle.cpython-311.pyc | Bin 0 -> 8578 bytes .../__pycache__/sftp_server.cpython-311.pyc | Bin 0 -> 26605 bytes .../__pycache__/sftp_si.cpython-311.pyc | Bin 0 -> 13853 bytes .../__pycache__/ssh_exception.cpython-311.pyc | Bin 0 -> 10852 bytes .../__pycache__/ssh_gss.cpython-311.pyc | Bin 0 -> 29810 bytes .../__pycache__/transport.cpython-311.pyc | Bin 0 -> 151600 bytes .../paramiko/__pycache__/util.cpython-311.pyc | Bin 0 -> 14980 bytes .../__pycache__/win_openssh.cpython-311.pyc | Bin 0 -> 2515 bytes .../__pycache__/win_pageant.cpython-311.pyc | Bin 0 -> 5416 bytes .../site-packages/paramiko/_version.py | 2 + .../site-packages/paramiko/_winapi.py | 413 + .../site-packages/paramiko/agent.py | 497 + .../site-packages/paramiko/auth_handler.py | 1092 +++ .../site-packages/paramiko/auth_strategy.py | 306 + .../python3.11/site-packages/paramiko/ber.py | 139 + .../site-packages/paramiko/buffered_pipe.py | 212 + .../site-packages/paramiko/channel.py | 1390 +++ .../site-packages/paramiko/client.py | 893 ++ .../site-packages/paramiko/common.py | 245 + .../site-packages/paramiko/compress.py | 40 + .../site-packages/paramiko/config.py | 696 ++ .../site-packages/paramiko/dsskey.py | 258 + .../site-packages/paramiko/ecdsakey.py | 339 + .../site-packages/paramiko/ed25519key.py | 212 + .../python3.11/site-packages/paramiko/file.py | 528 + .../site-packages/paramiko/hostkeys.py | 384 + .../site-packages/paramiko/kex_curve25519.py | 131 + .../site-packages/paramiko/kex_ecdh_nist.py | 151 + .../site-packages/paramiko/kex_gex.py | 288 + .../site-packages/paramiko/kex_group1.py | 155 + .../site-packages/paramiko/kex_group14.py | 40 + .../site-packages/paramiko/kex_group16.py | 35 + .../site-packages/paramiko/kex_gss.py | 686 ++ .../site-packages/paramiko/message.py | 318 + .../site-packages/paramiko/packet.py | 696 ++ .../python3.11/site-packages/paramiko/pipe.py | 148 + .../python3.11/site-packages/paramiko/pkey.py | 957 ++ .../site-packages/paramiko/primes.py | 148 + .../site-packages/paramiko/proxy.py | 134 + .../site-packages/paramiko/rsakey.py | 227 + .../site-packages/paramiko/server.py | 732 ++ .../python3.11/site-packages/paramiko/sftp.py | 224 + .../site-packages/paramiko/sftp_attr.py | 239 + .../site-packages/paramiko/sftp_client.py | 965 ++ .../site-packages/paramiko/sftp_file.py | 594 ++ .../site-packages/paramiko/sftp_handle.py | 196 + .../site-packages/paramiko/sftp_server.py | 537 + .../site-packages/paramiko/sftp_si.py | 316 + .../site-packages/paramiko/ssh_exception.py | 250 + .../site-packages/paramiko/ssh_gss.py | 778 ++ .../site-packages/paramiko/transport.py | 3462 +++++++ .../python3.11/site-packages/paramiko/util.py | 337 + .../site-packages/paramiko/win_openssh.py | 56 + .../site-packages/paramiko/win_pageant.py | 138 + .../ping3-4.0.8.dist-info/INSTALLER | 1 + .../ping3-4.0.8.dist-info/LICENSE | 21 + .../ping3-4.0.8.dist-info/METADATA | 341 + .../ping3-4.0.8.dist-info/RECORD | 19 + .../ping3-4.0.8.dist-info/REQUESTED | 0 .../site-packages/ping3-4.0.8.dist-info/WHEEL | 5 + .../ping3-4.0.8.dist-info/entry_points.txt | 2 + .../ping3-4.0.8.dist-info/top_level.txt | 1 + .../site-packages/ping3/__init__.py | 359 + .../site-packages/ping3/__main__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 23531 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 348 bytes .../__pycache__/command_line.cpython-311.pyc | Bin 0 -> 3831 bytes .../ping3/__pycache__/enums.cpython-311.pyc | Bin 0 -> 2271 bytes .../ping3/__pycache__/errors.cpython-311.pyc | Bin 0 -> 4041 bytes .../site-packages/ping3/command_line.py | 37 + .../python3.11/site-packages/ping3/enums.py | 43 + .../python3.11/site-packages/ping3/errors.py | 44 + .../pip-23.0.1.dist-info/INSTALLER | 1 + .../pip-23.0.1.dist-info/LICENSE.txt | 20 + .../pip-23.0.1.dist-info/METADATA | 88 + .../site-packages/pip-23.0.1.dist-info/RECORD | 996 ++ .../pip-23.0.1.dist-info/REQUESTED | 0 .../site-packages/pip-23.0.1.dist-info/WHEEL | 5 + .../pip-23.0.1.dist-info/entry_points.txt | 4 + .../pip-23.0.1.dist-info/top_level.txt | 1 + .../python3.11/site-packages/pip/__init__.py | 13 + .../python3.11/site-packages/pip/__main__.py | 31 + .../site-packages/pip/__pip-runner__.py | 50 + .../pip/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 776 bytes .../pip/__pycache__/__main__.cpython-311.pyc | Bin 0 -> 1085 bytes .../__pip-runner__.cpython-311.pyc | Bin 0 -> 2513 bytes .../site-packages/pip/_internal/__init__.py | 19 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 959 bytes .../__pycache__/build_env.cpython-311.pyc | Bin 0 -> 16079 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 14704 bytes .../__pycache__/configuration.cpython-311.pyc | Bin 0 -> 19235 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 38364 bytes .../__pycache__/main.cpython-311.pyc | Bin 0 -> 759 bytes .../__pycache__/pyproject.cpython-311.pyc | Bin 0 -> 5527 bytes .../self_outdated_check.cpython-311.pyc | Bin 0 -> 11329 bytes .../__pycache__/wheel_builder.cpython-311.pyc | Bin 0 -> 15999 bytes .../site-packages/pip/_internal/build_env.py | 311 + .../site-packages/pip/_internal/cache.py | 293 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 294 bytes .../autocompletion.cpython-311.pyc | Bin 0 -> 10084 bytes .../__pycache__/base_command.cpython-311.pyc | Bin 0 -> 11082 bytes .../__pycache__/cmdoptions.cpython-311.pyc | Bin 0 -> 32981 bytes .../command_context.cpython-311.pyc | Bin 0 -> 2116 bytes .../cli/__pycache__/main.cpython-311.pyc | Bin 0 -> 2371 bytes .../__pycache__/main_parser.cpython-311.pyc | Bin 0 -> 5530 bytes .../cli/__pycache__/parser.cpython-311.pyc | Bin 0 -> 17031 bytes .../__pycache__/progress_bars.cpython-311.pyc | Bin 0 -> 3178 bytes .../__pycache__/req_command.cpython-311.pyc | Bin 0 -> 20143 bytes .../cli/__pycache__/spinners.cpython-311.pyc | Bin 0 -> 8843 bytes .../__pycache__/status_codes.cpython-311.pyc | Bin 0 -> 382 bytes .../pip/_internal/cli/autocompletion.py | 171 + .../pip/_internal/cli/base_command.py | 216 + .../pip/_internal/cli/cmdoptions.py | 1055 ++ .../pip/_internal/cli/command_context.py | 27 + .../site-packages/pip/_internal/cli/main.py | 70 + .../pip/_internal/cli/main_parser.py | 134 + .../site-packages/pip/_internal/cli/parser.py | 294 + .../pip/_internal/cli/progress_bars.py | 68 + .../pip/_internal/cli/req_command.py | 502 + .../pip/_internal/cli/spinners.py | 159 + .../pip/_internal/cli/status_codes.py | 6 + .../pip/_internal/commands/__init__.py | 132 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4462 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 10561 bytes .../__pycache__/check.cpython-311.pyc | Bin 0 -> 2312 bytes .../__pycache__/completion.cpython-311.pyc | Bin 0 -> 5474 bytes .../__pycache__/configuration.cpython-311.pyc | Bin 0 -> 14903 bytes .../__pycache__/debug.cpython-311.pyc | Bin 0 -> 12011 bytes .../__pycache__/download.cpython-311.pyc | Bin 0 -> 7818 bytes .../__pycache__/freeze.cpython-311.pyc | Bin 0 -> 4163 bytes .../commands/__pycache__/hash.cpython-311.pyc | Bin 0 -> 3364 bytes .../commands/__pycache__/help.cpython-311.pyc | Bin 0 -> 1976 bytes .../__pycache__/index.cpython-311.pyc | Bin 0 -> 7799 bytes .../__pycache__/inspect.cpython-311.pyc | Bin 0 -> 4452 bytes .../__pycache__/install.cpython-311.pyc | Bin 0 -> 35381 bytes .../commands/__pycache__/list.cpython-311.pyc | Bin 0 -> 17513 bytes .../__pycache__/search.cpython-311.pyc | Bin 0 -> 8958 bytes .../commands/__pycache__/show.cpython-311.pyc | Bin 0 -> 11301 bytes .../__pycache__/uninstall.cpython-311.pyc | Bin 0 -> 5152 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 0 -> 9958 bytes .../pip/_internal/commands/cache.py | 223 + .../pip/_internal/commands/check.py | 53 + .../pip/_internal/commands/completion.py | 126 + .../pip/_internal/commands/configuration.py | 282 + .../pip/_internal/commands/debug.py | 199 + .../pip/_internal/commands/download.py | 149 + .../pip/_internal/commands/freeze.py | 97 + .../pip/_internal/commands/hash.py | 59 + .../pip/_internal/commands/help.py | 41 + .../pip/_internal/commands/index.py | 139 + .../pip/_internal/commands/inspect.py | 92 + .../pip/_internal/commands/install.py | 873 ++ .../pip/_internal/commands/list.py | 367 + .../pip/_internal/commands/search.py | 174 + .../pip/_internal/commands/show.py | 189 + .../pip/_internal/commands/uninstall.py | 113 + .../pip/_internal/commands/wheel.py | 203 + .../pip/_internal/configuration.py | 374 + .../pip/_internal/distributions/__init__.py | 21 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1044 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 2416 bytes .../__pycache__/installed.cpython-311.pyc | Bin 0 -> 1553 bytes .../__pycache__/sdist.cpython-311.pyc | Bin 0 -> 8955 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 0 -> 2147 bytes .../pip/_internal/distributions/base.py | 39 + .../pip/_internal/distributions/installed.py | 23 + .../pip/_internal/distributions/sdist.py | 150 + .../pip/_internal/distributions/wheel.py | 34 + .../site-packages/pip/_internal/exceptions.py | 747 ++ .../pip/_internal/index/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 248 bytes .../__pycache__/collector.cpython-311.pyc | Bin 0 -> 24554 bytes .../package_finder.cpython-311.pyc | Bin 0 -> 44226 bytes .../index/__pycache__/sources.cpython-311.pyc | Bin 0 -> 11030 bytes .../pip/_internal/index/collector.py | 505 + .../pip/_internal/index/package_finder.py | 1029 ++ .../pip/_internal/index/sources.py | 224 + .../pip/_internal/locations/__init__.py | 467 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 18186 bytes .../__pycache__/_distutils.cpython-311.pyc | Bin 0 -> 7595 bytes .../__pycache__/_sysconfig.cpython-311.pyc | Bin 0 -> 8890 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 4011 bytes .../pip/_internal/locations/_distutils.py | 173 + .../pip/_internal/locations/_sysconfig.py | 213 + .../pip/_internal/locations/base.py | 81 + .../site-packages/pip/_internal/main.py | 12 + .../pip/_internal/metadata/__init__.py | 127 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6419 bytes .../__pycache__/_json.cpython-311.pyc | Bin 0 -> 3573 bytes .../metadata/__pycache__/base.cpython-311.pyc | Bin 0 -> 38018 bytes .../__pycache__/pkg_resources.cpython-311.pyc | Bin 0 -> 16866 bytes .../pip/_internal/metadata/_json.py | 84 + .../pip/_internal/metadata/base.py | 688 ++ .../_internal/metadata/importlib/__init__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 365 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 3572 bytes .../__pycache__/_dists.cpython-311.pyc | Bin 0 -> 14588 bytes .../__pycache__/_envs.cpython-311.pyc | Bin 0 -> 12426 bytes .../_internal/metadata/importlib/_compat.py | 55 + .../_internal/metadata/importlib/_dists.py | 224 + .../pip/_internal/metadata/importlib/_envs.py | 188 + .../pip/_internal/metadata/pkg_resources.py | 270 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 282 bytes .../__pycache__/candidate.cpython-311.pyc | Bin 0 -> 2101 bytes .../__pycache__/direct_url.cpython-311.pyc | Bin 0 -> 12264 bytes .../format_control.cpython-311.pyc | Bin 0 -> 4665 bytes .../models/__pycache__/index.cpython-311.pyc | Bin 0 -> 1907 bytes .../installation_report.cpython-311.pyc | Bin 0 -> 2621 bytes .../models/__pycache__/link.cpython-311.pyc | Bin 0 -> 26453 bytes .../models/__pycache__/scheme.cpython-311.pyc | Bin 0 -> 1273 bytes .../__pycache__/search_scope.cpython-311.pyc | Bin 0 -> 5836 bytes .../selection_prefs.cpython-311.pyc | Bin 0 -> 2004 bytes .../__pycache__/target_python.cpython-311.pyc | Bin 0 -> 4766 bytes .../models/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 6429 bytes .../pip/_internal/models/candidate.py | 34 + .../pip/_internal/models/direct_url.py | 228 + .../pip/_internal/models/format_control.py | 80 + .../pip/_internal/models/index.py | 28 + .../_internal/models/installation_report.py | 53 + .../pip/_internal/models/link.py | 524 + .../pip/_internal/models/scheme.py | 31 + .../pip/_internal/models/search_scope.py | 133 + .../pip/_internal/models/selection_prefs.py | 51 + .../pip/_internal/models/target_python.py | 110 + .../pip/_internal/models/wheel.py | 92 + .../pip/_internal/network/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 270 bytes .../network/__pycache__/auth.cpython-311.pyc | Bin 0 -> 19074 bytes .../network/__pycache__/cache.cpython-311.pyc | Bin 0 -> 5193 bytes .../__pycache__/download.cpython-311.pyc | Bin 0 -> 9585 bytes .../__pycache__/lazy_wheel.cpython-311.pyc | Bin 0 -> 13031 bytes .../__pycache__/session.cpython-311.pyc | Bin 0 -> 21298 bytes .../network/__pycache__/utils.cpython-311.pyc | Bin 0 -> 2419 bytes .../__pycache__/xmlrpc.cpython-311.pyc | Bin 0 -> 3198 bytes .../pip/_internal/network/auth.py | 446 + .../pip/_internal/network/cache.py | 69 + .../pip/_internal/network/download.py | 186 + .../pip/_internal/network/lazy_wheel.py | 210 + .../pip/_internal/network/session.py | 518 + .../pip/_internal/network/utils.py | 96 + .../pip/_internal/network/xmlrpc.py | 60 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 208 bytes .../__pycache__/check.cpython-311.pyc | Bin 0 -> 6641 bytes .../__pycache__/freeze.cpython-311.pyc | Bin 0 -> 11604 bytes .../__pycache__/prepare.cpython-311.pyc | Bin 0 -> 26388 bytes .../_internal/operations/build/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 214 bytes .../__pycache__/build_tracker.cpython-311.pyc | Bin 0 -> 8137 bytes .../__pycache__/metadata.cpython-311.pyc | Bin 0 -> 2285 bytes .../metadata_editable.cpython-311.pyc | Bin 0 -> 2321 bytes .../metadata_legacy.cpython-311.pyc | Bin 0 -> 3721 bytes .../build/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 1951 bytes .../wheel_editable.cpython-311.pyc | Bin 0 -> 2395 bytes .../__pycache__/wheel_legacy.cpython-311.pyc | Bin 0 -> 4502 bytes .../operations/build/build_tracker.py | 124 + .../_internal/operations/build/metadata.py | 39 + .../operations/build/metadata_editable.py | 41 + .../operations/build/metadata_legacy.py | 74 + .../pip/_internal/operations/build/wheel.py | 37 + .../operations/build/wheel_editable.py | 46 + .../operations/build/wheel_legacy.py | 102 + .../pip/_internal/operations/check.py | 149 + .../pip/_internal/operations/freeze.py | 254 + .../_internal/operations/install/__init__.py | 2 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 282 bytes .../editable_legacy.cpython-311.pyc | Bin 0 -> 2278 bytes .../__pycache__/legacy.cpython-311.pyc | Bin 0 -> 6118 bytes .../install/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 40004 bytes .../operations/install/editable_legacy.py | 47 + .../_internal/operations/install/legacy.py | 120 + .../pip/_internal/operations/install/wheel.py | 738 ++ .../pip/_internal/operations/prepare.py | 667 ++ .../site-packages/pip/_internal/pyproject.py | 174 + .../pip/_internal/req/__init__.py | 94 + .../req/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4454 bytes .../__pycache__/constructors.cpython-311.pyc | Bin 0 -> 20713 bytes .../req/__pycache__/req_file.cpython-311.pyc | Bin 0 -> 22442 bytes .../__pycache__/req_install.cpython-311.pyc | Bin 0 -> 40354 bytes .../req/__pycache__/req_set.cpython-311.pyc | Bin 0 -> 6010 bytes .../__pycache__/req_uninstall.cpython-311.pyc | Bin 0 -> 37008 bytes .../pip/_internal/req/constructors.py | 501 + .../pip/_internal/req/req_file.py | 544 ++ .../pip/_internal/req/req_install.py | 946 ++ .../pip/_internal/req/req_set.py | 82 + .../pip/_internal/req/req_uninstall.py | 640 ++ .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 208 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 1379 bytes .../pip/_internal/resolution/base.py | 20 + .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 215 bytes .../__pycache__/resolver.cpython-311.pyc | Bin 0 -> 23801 bytes .../_internal/resolution/legacy/resolver.py | 600 ++ .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 219 bytes .../__pycache__/base.cpython-311.pyc | Bin 0 -> 9632 bytes .../__pycache__/candidates.cpython-311.pyc | Bin 0 -> 28842 bytes .../__pycache__/factory.cpython-311.pyc | Bin 0 -> 31986 bytes .../found_candidates.cpython-311.pyc | Bin 0 -> 6767 bytes .../__pycache__/provider.cpython-311.pyc | Bin 0 -> 11061 bytes .../__pycache__/reporter.cpython-311.pyc | Bin 0 -> 4664 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 11129 bytes .../__pycache__/resolver.cpython-311.pyc | Bin 0 -> 12316 bytes .../_internal/resolution/resolvelib/base.py | 141 + .../resolution/resolvelib/candidates.py | 556 ++ .../resolution/resolvelib/factory.py | 731 ++ .../resolution/resolvelib/found_candidates.py | 155 + .../resolution/resolvelib/provider.py | 248 + .../resolution/resolvelib/reporter.py | 68 + .../resolution/resolvelib/requirements.py | 166 + .../resolution/resolvelib/resolver.py | 296 + .../pip/_internal/self_outdated_check.py | 242 + .../pip/_internal/utils/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 203 bytes .../utils/__pycache__/_log.cpython-311.pyc | Bin 0 -> 2024 bytes .../utils/__pycache__/appdirs.cpython-311.pyc | Bin 0 -> 2562 bytes .../utils/__pycache__/compat.cpython-311.pyc | Bin 0 -> 2270 bytes .../compatibility_tags.cpython-311.pyc | Bin 0 -> 6762 bytes .../__pycache__/datetime.cpython-311.pyc | Bin 0 -> 720 bytes .../__pycache__/deprecation.cpython-311.pyc | Bin 0 -> 7093 bytes .../direct_url_helpers.cpython-311.pyc | Bin 0 -> 3726 bytes .../distutils_args.cpython-311.pyc | Bin 0 -> 1470 bytes .../__pycache__/egg_link.cpython-311.pyc | Bin 0 -> 3241 bytes .../__pycache__/encoding.cpython-311.pyc | Bin 0 -> 2326 bytes .../__pycache__/entrypoints.cpython-311.pyc | Bin 0 -> 4248 bytes .../__pycache__/filesystem.cpython-311.pyc | Bin 0 -> 8233 bytes .../__pycache__/filetypes.cpython-311.pyc | Bin 0 -> 1319 bytes .../utils/__pycache__/glibc.cpython-311.pyc | Bin 0 -> 2562 bytes .../utils/__pycache__/hashes.cpython-311.pyc | Bin 0 -> 8340 bytes .../inject_securetransport.cpython-311.pyc | Bin 0 -> 1337 bytes .../utils/__pycache__/logging.cpython-311.pyc | Bin 0 -> 15462 bytes .../utils/__pycache__/misc.cpython-311.pyc | Bin 0 -> 37704 bytes .../utils/__pycache__/models.cpython-311.pyc | Bin 0 -> 2943 bytes .../__pycache__/packaging.cpython-311.pyc | Bin 0 -> 2810 bytes .../setuptools_build.cpython-311.pyc | Bin 0 -> 6107 bytes .../__pycache__/subprocess.cpython-311.pyc | Bin 0 -> 9897 bytes .../__pycache__/temp_dir.cpython-311.pyc | Bin 0 -> 11424 bytes .../__pycache__/unpacking.cpython-311.pyc | Bin 0 -> 12899 bytes .../utils/__pycache__/urls.cpython-311.pyc | Bin 0 -> 2696 bytes .../__pycache__/virtualenv.cpython-311.pyc | Bin 0 -> 4943 bytes .../utils/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 7113 bytes .../site-packages/pip/_internal/utils/_log.py | 38 + .../pip/_internal/utils/appdirs.py | 52 + .../pip/_internal/utils/compat.py | 63 + .../pip/_internal/utils/compatibility_tags.py | 165 + .../pip/_internal/utils/datetime.py | 11 + .../pip/_internal/utils/deprecation.py | 188 + .../pip/_internal/utils/direct_url_helpers.py | 87 + .../pip/_internal/utils/distutils_args.py | 43 + .../pip/_internal/utils/egg_link.py | 72 + .../pip/_internal/utils/encoding.py | 36 + .../pip/_internal/utils/entrypoints.py | 84 + .../pip/_internal/utils/filesystem.py | 153 + .../pip/_internal/utils/filetypes.py | 27 + .../pip/_internal/utils/glibc.py | 88 + .../pip/_internal/utils/hashes.py | 144 + .../_internal/utils/inject_securetransport.py | 35 + .../pip/_internal/utils/logging.py | 348 + .../site-packages/pip/_internal/utils/misc.py | 763 ++ .../pip/_internal/utils/models.py | 39 + .../pip/_internal/utils/packaging.py | 57 + .../pip/_internal/utils/setuptools_build.py | 195 + .../pip/_internal/utils/subprocess.py | 260 + .../pip/_internal/utils/temp_dir.py | 246 + .../pip/_internal/utils/unpacking.py | 257 + .../site-packages/pip/_internal/utils/urls.py | 62 + .../pip/_internal/utils/virtualenv.py | 104 + .../pip/_internal/utils/wheel.py | 136 + .../pip/_internal/vcs/__init__.py | 15 + .../vcs/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 638 bytes .../vcs/__pycache__/bazaar.cpython-311.pyc | Bin 0 -> 5863 bytes .../vcs/__pycache__/git.cpython-311.pyc | Bin 0 -> 21527 bytes .../vcs/__pycache__/mercurial.cpython-311.pyc | Bin 0 -> 8709 bytes .../__pycache__/subversion.cpython-311.pyc | Bin 0 -> 14606 bytes .../versioncontrol.cpython-311.pyc | Bin 0 -> 31875 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 112 + .../site-packages/pip/_internal/vcs/git.py | 526 + .../pip/_internal/vcs/mercurial.py | 163 + .../pip/_internal/vcs/subversion.py | 324 + .../pip/_internal/vcs/versioncontrol.py | 705 ++ .../pip/_internal/wheel_builder.py | 382 + .../site-packages/pip/_vendor/__init__.py | 120 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 5616 bytes .../_vendor/__pycache__/six.cpython-311.pyc | Bin 0 -> 46418 bytes .../typing_extensions.cpython-311.pyc | Bin 0 -> 97448 bytes .../pip/_vendor/cachecontrol/__init__.py | 18 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 845 bytes .../__pycache__/_cmd.cpython-311.pyc | Bin 0 -> 2700 bytes .../__pycache__/adapter.cpython-311.pyc | Bin 0 -> 5507 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 3781 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 1138 bytes .../__pycache__/controller.cpython-311.pyc | Bin 0 -> 16453 bytes .../__pycache__/filewrapper.cpython-311.pyc | Bin 0 -> 4240 bytes .../__pycache__/heuristics.cpython-311.pyc | Bin 0 -> 6685 bytes .../__pycache__/serialize.cpython-311.pyc | Bin 0 -> 8400 bytes .../__pycache__/wrapper.cpython-311.pyc | Bin 0 -> 966 bytes .../pip/_vendor/cachecontrol/_cmd.py | 61 + .../pip/_vendor/cachecontrol/adapter.py | 137 + .../pip/_vendor/cachecontrol/cache.py | 65 + .../_vendor/cachecontrol/caches/__init__.py | 9 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 420 bytes .../__pycache__/file_cache.cpython-311.pyc | Bin 0 -> 8403 bytes .../__pycache__/redis_cache.cpython-311.pyc | Bin 0 -> 2500 bytes .../_vendor/cachecontrol/caches/file_cache.py | 188 + .../cachecontrol/caches/redis_cache.py | 39 + .../pip/_vendor/cachecontrol/compat.py | 32 + .../pip/_vendor/cachecontrol/controller.py | 439 + .../pip/_vendor/cachecontrol/filewrapper.py | 111 + .../pip/_vendor/cachecontrol/heuristics.py | 139 + .../pip/_vendor/cachecontrol/serialize.py | 190 + .../pip/_vendor/cachecontrol/wrapper.py | 33 + .../pip/_vendor/certifi/__init__.py | 4 + .../pip/_vendor/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 345 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 746 bytes .../certifi/__pycache__/core.cpython-311.pyc | Bin 0 -> 3988 bytes .../pip/_vendor/certifi/cacert.pem | 4527 +++++++++ .../site-packages/pip/_vendor/certifi/core.py | 119 + .../pip/_vendor/chardet/__init__.py | 115 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 5077 bytes .../__pycache__/big5freq.cpython-311.pyc | Bin 0 -> 27207 bytes .../__pycache__/big5prober.cpython-311.pyc | Bin 0 -> 1682 bytes .../chardistribution.cpython-311.pyc | Bin 0 -> 11274 bytes .../charsetgroupprober.cpython-311.pyc | Bin 0 -> 4304 bytes .../__pycache__/charsetprober.cpython-311.pyc | Bin 0 -> 5550 bytes .../codingstatemachine.cpython-311.pyc | Bin 0 -> 4001 bytes .../codingstatemachinedict.cpython-311.pyc | Bin 0 -> 957 bytes .../__pycache__/cp949prober.cpython-311.pyc | Bin 0 -> 1691 bytes .../chardet/__pycache__/enums.cpython-311.pyc | Bin 0 -> 3392 bytes .../__pycache__/escprober.cpython-311.pyc | Bin 0 -> 4908 bytes .../chardet/__pycache__/escsm.cpython-311.pyc | Bin 0 -> 12647 bytes .../__pycache__/eucjpprober.cpython-311.pyc | Bin 0 -> 4734 bytes .../__pycache__/euckrfreq.cpython-311.pyc | Bin 0 -> 12090 bytes .../__pycache__/euckrprober.cpython-311.pyc | Bin 0 -> 1683 bytes .../__pycache__/euctwfreq.cpython-311.pyc | Bin 0 -> 27212 bytes .../__pycache__/euctwprober.cpython-311.pyc | Bin 0 -> 1683 bytes .../__pycache__/gb2312freq.cpython-311.pyc | Bin 0 -> 19134 bytes .../__pycache__/gb2312prober.cpython-311.pyc | Bin 0 -> 1698 bytes .../__pycache__/hebrewprober.cpython-311.pyc | Bin 0 -> 5687 bytes .../__pycache__/jisfreq.cpython-311.pyc | Bin 0 -> 22163 bytes .../__pycache__/johabfreq.cpython-311.pyc | Bin 0 -> 84667 bytes .../__pycache__/johabprober.cpython-311.pyc | Bin 0 -> 1689 bytes .../__pycache__/jpcntx.cpython-311.pyc | Bin 0 -> 40171 bytes .../langbulgarianmodel.cpython-311.pyc | Bin 0 -> 85841 bytes .../langgreekmodel.cpython-311.pyc | Bin 0 -> 79263 bytes .../langhebrewmodel.cpython-311.pyc | Bin 0 -> 80025 bytes .../langhungarianmodel.cpython-311.pyc | Bin 0 -> 85795 bytes .../langrussianmodel.cpython-311.pyc | Bin 0 -> 108742 bytes .../__pycache__/langthaimodel.cpython-311.pyc | Bin 0 -> 80203 bytes .../langturkishmodel.cpython-311.pyc | Bin 0 -> 80042 bytes .../__pycache__/latin1prober.cpython-311.pyc | Bin 0 -> 7338 bytes .../macromanprober.cpython-311.pyc | Bin 0 -> 7505 bytes .../mbcharsetprober.cpython-311.pyc | Bin 0 -> 4126 bytes .../mbcsgroupprober.cpython-311.pyc | Bin 0 -> 1996 bytes .../__pycache__/mbcssm.cpython-311.pyc | Bin 0 -> 31736 bytes .../__pycache__/resultdict.cpython-311.pyc | Bin 0 -> 775 bytes .../sbcharsetprober.cpython-311.pyc | Bin 0 -> 6401 bytes .../sbcsgroupprober.cpython-311.pyc | Bin 0 -> 2946 bytes .../__pycache__/sjisprober.cpython-311.pyc | Bin 0 -> 4839 bytes .../universaldetector.cpython-311.pyc | Bin 0 -> 12467 bytes .../__pycache__/utf1632prober.cpython-311.pyc | Bin 0 -> 10587 bytes .../__pycache__/utf8prober.cpython-311.pyc | Bin 0 -> 3474 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 510 bytes .../pip/_vendor/chardet/big5freq.py | 386 + .../pip/_vendor/chardet/big5prober.py | 47 + .../pip/_vendor/chardet/chardistribution.py | 261 + .../pip/_vendor/chardet/charsetgroupprober.py | 106 + .../pip/_vendor/chardet/charsetprober.py | 147 + .../pip/_vendor/chardet/cli/__init__.py | 0 .../cli/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 207 bytes .../__pycache__/chardetect.cpython-311.pyc | Bin 0 -> 4346 bytes .../pip/_vendor/chardet/cli/chardetect.py | 112 + .../pip/_vendor/chardet/codingstatemachine.py | 90 + .../_vendor/chardet/codingstatemachinedict.py | 19 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/enums.py | 85 + .../pip/_vendor/chardet/escprober.py | 102 + .../pip/_vendor/chardet/escsm.py | 261 + .../pip/_vendor/chardet/eucjpprober.py | 102 + .../pip/_vendor/chardet/euckrfreq.py | 196 + .../pip/_vendor/chardet/euckrprober.py | 47 + .../pip/_vendor/chardet/euctwfreq.py | 388 + .../pip/_vendor/chardet/euctwprober.py | 47 + .../pip/_vendor/chardet/gb2312freq.py | 284 + .../pip/_vendor/chardet/gb2312prober.py | 47 + .../pip/_vendor/chardet/hebrewprober.py | 316 + .../pip/_vendor/chardet/jisfreq.py | 325 + .../pip/_vendor/chardet/johabfreq.py | 2382 +++++ .../pip/_vendor/chardet/johabprober.py | 47 + .../pip/_vendor/chardet/jpcntx.py | 238 + .../pip/_vendor/chardet/langbulgarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langgreekmodel.py | 4397 +++++++++ .../pip/_vendor/chardet/langhebrewmodel.py | 4380 +++++++++ .../pip/_vendor/chardet/langhungarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langrussianmodel.py | 5725 +++++++++++ .../pip/_vendor/chardet/langthaimodel.py | 4380 +++++++++ .../pip/_vendor/chardet/langturkishmodel.py | 4380 +++++++++ .../pip/_vendor/chardet/latin1prober.py | 147 + .../pip/_vendor/chardet/macromanprober.py | 162 + .../pip/_vendor/chardet/mbcharsetprober.py | 95 + .../pip/_vendor/chardet/mbcsgroupprober.py | 57 + .../pip/_vendor/chardet/mbcssm.py | 661 ++ .../pip/_vendor/chardet/metadata/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 212 bytes .../__pycache__/languages.cpython-311.pyc | Bin 0 -> 10812 bytes .../pip/_vendor/chardet/metadata/languages.py | 352 + .../pip/_vendor/chardet/resultdict.py | 16 + .../pip/_vendor/chardet/sbcharsetprober.py | 162 + .../pip/_vendor/chardet/sbcsgroupprober.py | 88 + .../pip/_vendor/chardet/sjisprober.py | 105 + .../pip/_vendor/chardet/universaldetector.py | 362 + .../pip/_vendor/chardet/utf1632prober.py | 225 + .../pip/_vendor/chardet/utf8prober.py | 82 + .../pip/_vendor/chardet/version.py | 9 + .../pip/_vendor/colorama/__init__.py | 7 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 579 bytes .../colorama/__pycache__/ansi.cpython-311.pyc | Bin 0 -> 4577 bytes .../__pycache__/ansitowin32.cpython-311.pyc | Bin 0 -> 16223 bytes .../__pycache__/initialise.cpython-311.pyc | Bin 0 -> 3940 bytes .../__pycache__/win32.cpython-311.pyc | Bin 0 -> 7928 bytes .../__pycache__/winterm.cpython-311.pyc | Bin 0 -> 9154 bytes .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 277 + .../pip/_vendor/colorama/initialise.py | 121 + .../pip/_vendor/colorama/tests/__init__.py | 1 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 210 bytes .../__pycache__/ansi_test.cpython-311.pyc | Bin 0 -> 5855 bytes .../ansitowin32_test.cpython-311.pyc | Bin 0 -> 21522 bytes .../initialise_test.cpython-311.pyc | Bin 0 -> 14149 bytes .../__pycache__/isatty_test.cpython-311.pyc | Bin 0 -> 6714 bytes .../tests/__pycache__/utils.cpython-311.pyc | Bin 0 -> 2889 bytes .../__pycache__/winterm_test.cpython-311.pyc | Bin 0 -> 7242 bytes .../pip/_vendor/colorama/tests/ansi_test.py | 76 + .../colorama/tests/ansitowin32_test.py | 294 + .../_vendor/colorama/tests/initialise_test.py | 189 + .../pip/_vendor/colorama/tests/isatty_test.py | 57 + .../pip/_vendor/colorama/tests/utils.py | 49 + .../_vendor/colorama/tests/winterm_test.py | 131 + .../pip/_vendor/colorama/win32.py | 180 + .../pip/_vendor/colorama/winterm.py | 195 + .../pip/_vendor/distlib/__init__.py | 23 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1448 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 52314 bytes .../__pycache__/database.cpython-311.pyc | Bin 0 -> 72102 bytes .../distlib/__pycache__/index.cpython-311.pyc | Bin 0 -> 26691 bytes .../__pycache__/locators.cpython-311.pyc | Bin 0 -> 65867 bytes .../__pycache__/manifest.cpython-311.pyc | Bin 0 -> 17034 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 8170 bytes .../__pycache__/metadata.cpython-311.pyc | Bin 0 -> 47118 bytes .../__pycache__/resources.cpython-311.pyc | Bin 0 -> 18997 bytes .../__pycache__/scripts.cpython-311.pyc | Bin 0 -> 21273 bytes .../distlib/__pycache__/util.cpython-311.pyc | Bin 0 -> 97452 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 34579 bytes .../distlib/__pycache__/wheel.cpython-311.pyc | Bin 0 -> 60383 bytes .../pip/_vendor/distlib/compat.py | 1116 +++ .../pip/_vendor/distlib/database.py | 1350 +++ .../pip/_vendor/distlib/index.py | 508 + .../pip/_vendor/distlib/locators.py | 1300 +++ .../pip/_vendor/distlib/manifest.py | 393 + .../pip/_vendor/distlib/markers.py | 152 + .../pip/_vendor/distlib/metadata.py | 1076 ++ .../pip/_vendor/distlib/resources.py | 358 + .../pip/_vendor/distlib/scripts.py | 437 + .../site-packages/pip/_vendor/distlib/util.py | 1932 ++++ .../pip/_vendor/distlib/version.py | 739 ++ .../pip/_vendor/distlib/wheel.py | 1082 ++ .../pip/_vendor/distro/__init__.py | 54 + .../pip/_vendor/distro/__main__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1201 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 335 bytes .../distro/__pycache__/distro.cpython-311.pyc | Bin 0 -> 57734 bytes .../pip/_vendor/distro/distro.py | 1399 +++ .../pip/_vendor/idna/__init__.py | 44 + .../idna/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1102 bytes .../idna/__pycache__/codec.cpython-311.pyc | Bin 0 -> 5393 bytes .../idna/__pycache__/compat.cpython-311.pyc | Bin 0 -> 1019 bytes .../idna/__pycache__/core.cpython-311.pyc | Bin 0 -> 19454 bytes .../idna/__pycache__/idnadata.cpython-311.pyc | Bin 0 -> 38978 bytes .../__pycache__/intranges.cpython-311.pyc | Bin 0 -> 2987 bytes .../__pycache__/package_data.cpython-311.pyc | Bin 0 -> 222 bytes .../__pycache__/uts46data.cpython-311.pyc | Bin 0 -> 163202 bytes .../site-packages/pip/_vendor/idna/codec.py | 112 + .../site-packages/pip/_vendor/idna/compat.py | 13 + .../site-packages/pip/_vendor/idna/core.py | 400 + .../pip/_vendor/idna/idnadata.py | 2151 ++++ .../pip/_vendor/idna/intranges.py | 54 + .../pip/_vendor/idna/package_data.py | 2 + .../pip/_vendor/idna/uts46data.py | 8600 ++++++++++++++++ .../pip/_vendor/msgpack/__init__.py | 57 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2081 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 2382 bytes .../msgpack/__pycache__/ext.cpython-311.pyc | Bin 0 -> 9168 bytes .../__pycache__/fallback.cpython-311.pyc | Bin 0 -> 47195 bytes .../pip/_vendor/msgpack/exceptions.py | 48 + .../site-packages/pip/_vendor/msgpack/ext.py | 193 + .../pip/_vendor/msgpack/fallback.py | 1010 ++ .../pip/_vendor/packaging/__about__.py | 26 + .../pip/_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 646 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 567 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 0 -> 13233 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 0 -> 8001 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 0 -> 3689 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 16529 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 7644 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 0 -> 34367 bytes .../__pycache__/tags.cpython-311.pyc | Bin 0 -> 21352 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6687 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 21879 bytes .../pip/_vendor/packaging/_manylinux.py | 301 + .../pip/_vendor/packaging/_musllinux.py | 136 + .../pip/_vendor/packaging/_structures.py | 61 + .../pip/_vendor/packaging/markers.py | 304 + .../pip/_vendor/packaging/requirements.py | 146 + .../pip/_vendor/packaging/specifiers.py | 802 ++ .../pip/_vendor/packaging/tags.py | 487 + .../pip/_vendor/packaging/utils.py | 136 + .../pip/_vendor/packaging/version.py | 504 + .../pip/_vendor/pkg_resources/__init__.py | 3296 +++++++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 158235 bytes .../__pycache__/py31compat.cpython-311.pyc | Bin 0 -> 988 bytes .../pip/_vendor/pkg_resources/py31compat.py | 23 + .../pip/_vendor/platformdirs/__init__.py | 342 + .../pip/_vendor/platformdirs/__main__.py | 46 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 12934 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 2131 bytes .../__pycache__/android.cpython-311.pyc | Bin 0 -> 6361 bytes .../__pycache__/api.cpython-311.pyc | Bin 0 -> 7188 bytes .../__pycache__/macos.cpython-311.pyc | Bin 0 -> 4598 bytes .../__pycache__/unix.cpython-311.pyc | Bin 0 -> 11030 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 317 bytes .../__pycache__/windows.cpython-311.pyc | Bin 0 -> 9966 bytes .../pip/_vendor/platformdirs/android.py | 120 + .../pip/_vendor/platformdirs/api.py | 156 + .../pip/_vendor/platformdirs/macos.py | 64 + .../pip/_vendor/platformdirs/unix.py | 181 + .../pip/_vendor/platformdirs/version.py | 4 + .../pip/_vendor/platformdirs/windows.py | 184 + .../pip/_vendor/pygments/__init__.py | 82 + .../pip/_vendor/pygments/__main__.py | 17 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3849 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 785 bytes .../__pycache__/cmdline.cpython-311.pyc | Bin 0 -> 30296 bytes .../__pycache__/console.cpython-311.pyc | Bin 0 -> 3048 bytes .../__pycache__/filter.cpython-311.pyc | Bin 0 -> 3509 bytes .../__pycache__/formatter.cpython-311.pyc | Bin 0 -> 3875 bytes .../__pycache__/lexer.cpython-311.pyc | Bin 0 -> 40403 bytes .../__pycache__/modeline.cpython-311.pyc | Bin 0 -> 1728 bytes .../__pycache__/plugin.cpython-311.pyc | Bin 0 -> 3741 bytes .../__pycache__/regexopt.cpython-311.pyc | Bin 0 -> 5035 bytes .../__pycache__/scanner.cpython-311.pyc | Bin 0 -> 4890 bytes .../__pycache__/sphinxext.cpython-311.pyc | Bin 0 -> 8321 bytes .../__pycache__/style.cpython-311.pyc | Bin 0 -> 7429 bytes .../__pycache__/token.cpython-311.pyc | Bin 0 -> 7469 bytes .../__pycache__/unistring.cpython-311.pyc | Bin 0 -> 33803 bytes .../pygments/__pycache__/util.cpython-311.pyc | Bin 0 -> 14596 bytes .../pip/_vendor/pygments/cmdline.py | 668 ++ .../pip/_vendor/pygments/console.py | 70 + .../pip/_vendor/pygments/filter.py | 71 + .../pip/_vendor/pygments/filters/__init__.py | 940 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 40109 bytes .../pip/_vendor/pygments/formatter.py | 94 + .../_vendor/pygments/formatters/__init__.py | 143 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6875 bytes .../__pycache__/_mapping.cpython-311.pyc | Bin 0 -> 4157 bytes .../__pycache__/bbcode.cpython-311.pyc | Bin 0 -> 4483 bytes .../__pycache__/groff.cpython-311.pyc | Bin 0 -> 7816 bytes .../__pycache__/html.cpython-311.pyc | Bin 0 -> 42601 bytes .../__pycache__/img.cpython-311.pyc | Bin 0 -> 28573 bytes .../__pycache__/irc.cpython-311.pyc | Bin 0 -> 7676 bytes .../__pycache__/latex.cpython-311.pyc | Bin 0 -> 21809 bytes .../__pycache__/other.cpython-311.pyc | Bin 0 -> 7637 bytes .../__pycache__/pangomarkup.cpython-311.pyc | Bin 0 -> 3181 bytes .../__pycache__/rtf.cpython-311.pyc | Bin 0 -> 6848 bytes .../__pycache__/svg.cpython-311.pyc | Bin 0 -> 9668 bytes .../__pycache__/terminal.cpython-311.pyc | Bin 0 -> 6047 bytes .../__pycache__/terminal256.cpython-311.pyc | Bin 0 -> 16413 bytes .../_vendor/pygments/formatters/_mapping.py | 23 + .../pip/_vendor/pygments/formatters/bbcode.py | 108 + .../pip/_vendor/pygments/formatters/groff.py | 170 + .../pip/_vendor/pygments/formatters/html.py | 989 ++ .../pip/_vendor/pygments/formatters/img.py | 645 ++ .../pip/_vendor/pygments/formatters/irc.py | 179 + .../pip/_vendor/pygments/formatters/latex.py | 521 + .../pip/_vendor/pygments/formatters/other.py | 161 + .../pygments/formatters/pangomarkup.py | 83 + .../pip/_vendor/pygments/formatters/rtf.py | 146 + .../pip/_vendor/pygments/formatters/svg.py | 188 + .../_vendor/pygments/formatters/terminal.py | 127 + .../pygments/formatters/terminal256.py | 338 + .../pip/_vendor/pygments/lexer.py | 882 ++ .../pip/_vendor/pygments/lexers/__init__.py | 335 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 15152 bytes .../__pycache__/_mapping.cpython-311.pyc | Bin 0 -> 62783 bytes .../lexers/__pycache__/python.cpython-311.pyc | Bin 0 -> 43984 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 541 + .../pip/_vendor/pygments/lexers/python.py | 1204 +++ .../pip/_vendor/pygments/modeline.py | 43 + .../pip/_vendor/pygments/plugin.py | 88 + .../pip/_vendor/pygments/regexopt.py | 91 + .../pip/_vendor/pygments/scanner.py | 104 + .../pip/_vendor/pygments/sphinxext.py | 155 + .../pip/_vendor/pygments/style.py | 197 + .../pip/_vendor/pygments/styles/__init__.py | 97 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4462 bytes .../pip/_vendor/pygments/token.py | 213 + .../pip/_vendor/pygments/unistring.py | 153 + .../pip/_vendor/pygments/util.py | 308 + .../pip/_vendor/pyparsing/__init__.py | 331 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8352 bytes .../__pycache__/actions.cpython-311.pyc | Bin 0 -> 8466 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 14788 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 277674 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 12930 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 0 -> 53631 bytes .../__pycache__/results.cpython-311.pyc | Bin 0 -> 36314 bytes .../__pycache__/testing.cpython-311.pyc | Bin 0 -> 19510 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 0 -> 15368 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 14267 bytes .../pip/_vendor/pyparsing/actions.py | 207 + .../pip/_vendor/pyparsing/common.py | 424 + .../pip/_vendor/pyparsing/core.py | 5814 +++++++++++ .../pip/_vendor/pyparsing/diagram/__init__.py | 642 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 28033 bytes .../pip/_vendor/pyparsing/exceptions.py | 267 + .../pip/_vendor/pyparsing/helpers.py | 1088 +++ .../pip/_vendor/pyparsing/results.py | 760 ++ .../pip/_vendor/pyparsing/testing.py | 331 + .../pip/_vendor/pyparsing/unicode.py | 352 + .../pip/_vendor/pyparsing/util.py | 235 + .../pip/_vendor/pyproject_hooks/__init__.py | 23 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 710 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 408 bytes .../__pycache__/_impl.cpython-311.pyc | Bin 0 -> 16674 bytes .../pip/_vendor/pyproject_hooks/_compat.py | 8 + .../pip/_vendor/pyproject_hooks/_impl.py | 330 + .../pyproject_hooks/_in_process/__init__.py | 18 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1170 bytes .../__pycache__/_in_process.cpython-311.pyc | Bin 0 -> 16492 bytes .../_in_process/_in_process.py | 353 + .../pip/_vendor/requests/__init__.py | 182 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6454 bytes .../__pycache__/__version__.cpython-311.pyc | Bin 0 -> 591 bytes .../_internal_utils.cpython-311.pyc | Bin 0 -> 2088 bytes .../__pycache__/adapters.cpython-311.pyc | Bin 0 -> 24891 bytes .../requests/__pycache__/api.cpython-311.pyc | Bin 0 -> 7436 bytes .../requests/__pycache__/auth.cpython-311.pyc | Bin 0 -> 14635 bytes .../__pycache__/certs.cpython-311.pyc | Bin 0 -> 987 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 1813 bytes .../__pycache__/cookies.cpython-311.pyc | Bin 0 -> 27115 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 8530 bytes .../requests/__pycache__/help.cpython-311.pyc | Bin 0 -> 4525 bytes .../__pycache__/hooks.cpython-311.pyc | Bin 0 -> 1255 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 38786 bytes .../__pycache__/packages.cpython-311.pyc | Bin 0 -> 835 bytes .../__pycache__/sessions.cpython-311.pyc | Bin 0 -> 29624 bytes .../__pycache__/status_codes.cpython-311.pyc | Bin 0 -> 6242 bytes .../__pycache__/structures.cpython-311.pyc | Bin 0 -> 6227 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 40141 bytes .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 48 + .../pip/_vendor/requests/adapters.py | 584 ++ .../site-packages/pip/_vendor/requests/api.py | 157 + .../pip/_vendor/requests/auth.py | 315 + .../pip/_vendor/requests/certs.py | 24 + .../pip/_vendor/requests/compat.py | 67 + .../pip/_vendor/requests/cookies.py | 561 ++ .../pip/_vendor/requests/exceptions.py | 141 + .../pip/_vendor/requests/help.py | 131 + .../pip/_vendor/requests/hooks.py | 33 + .../pip/_vendor/requests/models.py | 1034 ++ .../pip/_vendor/requests/packages.py | 16 + .../pip/_vendor/requests/sessions.py | 831 ++ .../pip/_vendor/requests/status_codes.py | 128 + .../pip/_vendor/requests/structures.py | 99 + .../pip/_vendor/requests/utils.py | 1086 +++ .../pip/_vendor/resolvelib/__init__.py | 26 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 758 bytes .../__pycache__/providers.cpython-311.pyc | Bin 0 -> 7077 bytes .../__pycache__/reporters.cpython-311.pyc | Bin 0 -> 2807 bytes .../__pycache__/resolvers.cpython-311.pyc | Bin 0 -> 25253 bytes .../__pycache__/structs.cpython-311.pyc | Bin 0 -> 11335 bytes .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 213 bytes .../collections_abc.cpython-311.pyc | Bin 0 -> 488 bytes .../resolvelib/compat/collections_abc.py | 6 + .../pip/_vendor/resolvelib/providers.py | 133 + .../pip/_vendor/resolvelib/reporters.py | 43 + .../pip/_vendor/resolvelib/resolvers.py | 482 + .../pip/_vendor/resolvelib/structs.py | 165 + .../pip/_vendor/rich/__init__.py | 177 + .../pip/_vendor/rich/__main__.py | 274 + .../rich/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 7501 bytes .../rich/__pycache__/__main__.cpython-311.pyc | Bin 0 -> 11579 bytes .../__pycache__/_cell_widths.cpython-311.pyc | Bin 0 -> 7840 bytes .../__pycache__/_emoji_codes.cpython-311.pyc | Bin 0 -> 208527 bytes .../_emoji_replace.cpython-311.pyc | Bin 0 -> 1939 bytes .../_export_format.cpython-311.pyc | Bin 0 -> 2344 bytes .../__pycache__/_extension.cpython-311.pyc | Bin 0 -> 640 bytes .../rich/__pycache__/_inspect.cpython-311.pyc | Bin 0 -> 14192 bytes .../__pycache__/_log_render.cpython-311.pyc | Bin 0 -> 4774 bytes .../rich/__pycache__/_loop.cpython-311.pyc | Bin 0 -> 2120 bytes .../__pycache__/_null_file.cpython-311.pyc | Bin 0 -> 4685 bytes .../__pycache__/_palettes.cpython-311.pyc | Bin 0 -> 5256 bytes .../rich/__pycache__/_pick.cpython-311.pyc | Bin 0 -> 801 bytes .../rich/__pycache__/_ratio.cpython-311.pyc | Bin 0 -> 7939 bytes .../__pycache__/_spinners.cpython-311.pyc | Bin 0 -> 13689 bytes .../rich/__pycache__/_stack.cpython-311.pyc | Bin 0 -> 1135 bytes .../rich/__pycache__/_timer.cpython-311.pyc | Bin 0 -> 988 bytes .../_win32_console.cpython-311.pyc | Bin 0 -> 30176 bytes .../rich/__pycache__/_windows.cpython-311.pyc | Bin 0 -> 2835 bytes .../_windows_renderer.cpython-311.pyc | Bin 0 -> 4026 bytes .../rich/__pycache__/_wrap.cpython-311.pyc | Bin 0 -> 2791 bytes .../rich/__pycache__/abc.cpython-311.pyc | Bin 0 -> 1932 bytes .../rich/__pycache__/align.cpython-311.pyc | Bin 0 -> 13481 bytes .../rich/__pycache__/ansi.cpython-311.pyc | Bin 0 -> 10457 bytes .../rich/__pycache__/bar.cpython-311.pyc | Bin 0 -> 4554 bytes .../rich/__pycache__/box.cpython-311.pyc | Bin 0 -> 12996 bytes .../rich/__pycache__/cells.cpython-311.pyc | Bin 0 -> 6446 bytes .../rich/__pycache__/color.cpython-311.pyc | Bin 0 -> 27577 bytes .../__pycache__/color_triplet.cpython-311.pyc | Bin 0 -> 1880 bytes .../rich/__pycache__/columns.cpython-311.pyc | Bin 0 -> 10651 bytes .../rich/__pycache__/console.cpython-311.pyc | Bin 0 -> 123167 bytes .../__pycache__/constrain.cpython-311.pyc | Bin 0 -> 2472 bytes .../__pycache__/containers.cpython-311.pyc | Bin 0 -> 10813 bytes .../rich/__pycache__/control.cpython-311.pyc | Bin 0 -> 11904 bytes .../default_styles.cpython-311.pyc | Bin 0 -> 12504 bytes .../rich/__pycache__/diagnose.cpython-311.pyc | Bin 0 -> 1827 bytes .../rich/__pycache__/emoji.cpython-311.pyc | Bin 0 -> 4805 bytes .../rich/__pycache__/errors.cpython-311.pyc | Bin 0 -> 2336 bytes .../__pycache__/file_proxy.cpython-311.pyc | Bin 0 -> 3784 bytes .../rich/__pycache__/filesize.cpython-311.pyc | Bin 0 -> 3308 bytes .../__pycache__/highlighter.cpython-311.pyc | Bin 0 -> 10995 bytes .../rich/__pycache__/json.cpython-311.pyc | Bin 0 -> 6688 bytes .../rich/__pycache__/jupyter.cpython-311.pyc | Bin 0 -> 6411 bytes .../rich/__pycache__/layout.cpython-311.pyc | Bin 0 -> 23318 bytes .../rich/__pycache__/live.cpython-311.pyc | Bin 0 -> 21139 bytes .../__pycache__/live_render.cpython-311.pyc | Bin 0 -> 5152 bytes .../rich/__pycache__/logging.cpython-311.pyc | Bin 0 -> 14523 bytes .../rich/__pycache__/markup.cpython-311.pyc | Bin 0 -> 10445 bytes .../rich/__pycache__/measure.cpython-311.pyc | Bin 0 -> 7278 bytes .../rich/__pycache__/padding.cpython-311.pyc | Bin 0 -> 7494 bytes .../rich/__pycache__/pager.cpython-311.pyc | Bin 0 -> 2252 bytes .../rich/__pycache__/palette.cpython-311.pyc | Bin 0 -> 5985 bytes .../rich/__pycache__/panel.cpython-311.pyc | Bin 0 -> 12741 bytes .../rich/__pycache__/pretty.cpython-311.pyc | Bin 0 -> 44834 bytes .../rich/__pycache__/progress.cpython-311.pyc | Bin 0 -> 82713 bytes .../__pycache__/progress_bar.cpython-311.pyc | Bin 0 -> 11019 bytes .../rich/__pycache__/prompt.cpython-311.pyc | Bin 0 -> 16385 bytes .../rich/__pycache__/protocol.cpython-311.pyc | Bin 0 -> 2103 bytes .../rich/__pycache__/region.cpython-311.pyc | Bin 0 -> 666 bytes .../rich/__pycache__/repr.cpython-311.pyc | Bin 0 -> 7665 bytes .../rich/__pycache__/rule.cpython-311.pyc | Bin 0 -> 7704 bytes .../rich/__pycache__/scope.cpython-311.pyc | Bin 0 -> 4358 bytes .../rich/__pycache__/screen.cpython-311.pyc | Bin 0 -> 2781 bytes .../rich/__pycache__/segment.cpython-311.pyc | Bin 0 -> 31548 bytes .../rich/__pycache__/spinner.cpython-311.pyc | Bin 0 -> 6897 bytes .../rich/__pycache__/status.cpython-311.pyc | Bin 0 -> 6765 bytes .../rich/__pycache__/style.cpython-311.pyc | Bin 0 -> 34338 bytes .../rich/__pycache__/styled.cpython-311.pyc | Bin 0 -> 2446 bytes .../rich/__pycache__/syntax.cpython-311.pyc | Bin 0 -> 42540 bytes .../rich/__pycache__/table.cpython-311.pyc | Bin 0 -> 48807 bytes .../terminal_theme.cpython-311.pyc | Bin 0 -> 3712 bytes .../rich/__pycache__/text.cpython-311.pyc | Bin 0 -> 65223 bytes .../rich/__pycache__/theme.cpython-311.pyc | Bin 0 -> 7150 bytes .../rich/__pycache__/themes.cpython-311.pyc | Bin 0 -> 362 bytes .../__pycache__/traceback.cpython-311.pyc | Bin 0 -> 31676 bytes .../rich/__pycache__/tree.cpython-311.pyc | Bin 0 -> 12533 bytes .../pip/_vendor/rich/_cell_widths.py | 451 + .../pip/_vendor/rich/_emoji_codes.py | 3610 +++++++ .../pip/_vendor/rich/_emoji_replace.py | 32 + .../pip/_vendor/rich/_export_format.py | 78 + .../pip/_vendor/rich/_extension.py | 10 + .../pip/_vendor/rich/_inspect.py | 270 + .../pip/_vendor/rich/_log_render.py | 94 + .../site-packages/pip/_vendor/rich/_loop.py | 43 + .../pip/_vendor/rich/_null_file.py | 83 + .../pip/_vendor/rich/_palettes.py | 309 + .../site-packages/pip/_vendor/rich/_pick.py | 17 + .../site-packages/pip/_vendor/rich/_ratio.py | 160 + .../pip/_vendor/rich/_spinners.py | 482 + .../site-packages/pip/_vendor/rich/_stack.py | 16 + .../site-packages/pip/_vendor/rich/_timer.py | 19 + .../pip/_vendor/rich/_win32_console.py | 662 ++ .../pip/_vendor/rich/_windows.py | 72 + .../pip/_vendor/rich/_windows_renderer.py | 56 + .../site-packages/pip/_vendor/rich/_wrap.py | 56 + .../site-packages/pip/_vendor/rich/abc.py | 33 + .../site-packages/pip/_vendor/rich/align.py | 311 + .../site-packages/pip/_vendor/rich/ansi.py | 237 + .../site-packages/pip/_vendor/rich/bar.py | 94 + .../site-packages/pip/_vendor/rich/box.py | 517 + .../site-packages/pip/_vendor/rich/cells.py | 154 + .../site-packages/pip/_vendor/rich/color.py | 618 ++ .../pip/_vendor/rich/color_triplet.py | 38 + .../site-packages/pip/_vendor/rich/columns.py | 187 + .../site-packages/pip/_vendor/rich/console.py | 2612 +++++ .../pip/_vendor/rich/constrain.py | 37 + .../pip/_vendor/rich/containers.py | 167 + .../site-packages/pip/_vendor/rich/control.py | 225 + .../pip/_vendor/rich/default_styles.py | 188 + .../pip/_vendor/rich/diagnose.py | 37 + .../site-packages/pip/_vendor/rich/emoji.py | 96 + .../site-packages/pip/_vendor/rich/errors.py | 34 + .../pip/_vendor/rich/file_proxy.py | 54 + .../pip/_vendor/rich/filesize.py | 89 + .../pip/_vendor/rich/highlighter.py | 232 + .../site-packages/pip/_vendor/rich/json.py | 140 + .../site-packages/pip/_vendor/rich/jupyter.py | 101 + .../site-packages/pip/_vendor/rich/layout.py | 443 + .../site-packages/pip/_vendor/rich/live.py | 373 + .../pip/_vendor/rich/live_render.py | 113 + .../site-packages/pip/_vendor/rich/logging.py | 289 + .../site-packages/pip/_vendor/rich/markup.py | 246 + .../site-packages/pip/_vendor/rich/measure.py | 151 + .../site-packages/pip/_vendor/rich/padding.py | 141 + .../site-packages/pip/_vendor/rich/pager.py | 34 + .../site-packages/pip/_vendor/rich/palette.py | 100 + .../site-packages/pip/_vendor/rich/panel.py | 308 + .../site-packages/pip/_vendor/rich/pretty.py | 1029 ++ .../pip/_vendor/rich/progress.py | 1707 ++++ .../pip/_vendor/rich/progress_bar.py | 224 + .../site-packages/pip/_vendor/rich/prompt.py | 376 + .../pip/_vendor/rich/protocol.py | 42 + .../site-packages/pip/_vendor/rich/region.py | 10 + .../site-packages/pip/_vendor/rich/repr.py | 149 + .../site-packages/pip/_vendor/rich/rule.py | 134 + .../site-packages/pip/_vendor/rich/scope.py | 86 + .../site-packages/pip/_vendor/rich/screen.py | 54 + .../site-packages/pip/_vendor/rich/segment.py | 739 ++ .../site-packages/pip/_vendor/rich/spinner.py | 136 + .../site-packages/pip/_vendor/rich/status.py | 132 + .../site-packages/pip/_vendor/rich/style.py | 773 ++ .../site-packages/pip/_vendor/rich/styled.py | 42 + .../site-packages/pip/_vendor/rich/syntax.py | 945 ++ .../site-packages/pip/_vendor/rich/table.py | 1002 ++ .../pip/_vendor/rich/terminal_theme.py | 153 + .../site-packages/pip/_vendor/rich/text.py | 1311 +++ .../site-packages/pip/_vendor/rich/theme.py | 112 + .../site-packages/pip/_vendor/rich/themes.py | 5 + .../pip/_vendor/rich/traceback.py | 677 ++ .../site-packages/pip/_vendor/rich/tree.py | 251 + .../site-packages/pip/_vendor/six.py | 998 ++ .../pip/_vendor/tenacity/__init__.py | 519 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 27800 bytes .../__pycache__/_asyncio.cpython-311.pyc | Bin 0 -> 4807 bytes .../__pycache__/_utils.cpython-311.pyc | Bin 0 -> 2072 bytes .../__pycache__/after.cpython-311.pyc | Bin 0 -> 1699 bytes .../__pycache__/before.cpython-311.pyc | Bin 0 -> 1533 bytes .../__pycache__/before_sleep.cpython-311.pyc | Bin 0 -> 2110 bytes .../tenacity/__pycache__/nap.cpython-311.pyc | Bin 0 -> 1572 bytes .../__pycache__/retry.cpython-311.pyc | Bin 0 -> 15046 bytes .../tenacity/__pycache__/stop.cpython-311.pyc | Bin 0 -> 5900 bytes .../__pycache__/tornadoweb.cpython-311.pyc | Bin 0 -> 2918 bytes .../tenacity/__pycache__/wait.cpython-311.pyc | Bin 0 -> 13372 bytes .../pip/_vendor/tenacity/_asyncio.py | 92 + .../pip/_vendor/tenacity/_utils.py | 68 + .../pip/_vendor/tenacity/after.py | 46 + .../pip/_vendor/tenacity/before.py | 41 + .../pip/_vendor/tenacity/before_sleep.py | 58 + .../site-packages/pip/_vendor/tenacity/nap.py | 43 + .../pip/_vendor/tenacity/retry.py | 240 + .../pip/_vendor/tenacity/stop.py | 96 + .../pip/_vendor/tenacity/tornadoweb.py | 59 + .../pip/_vendor/tenacity/wait.py | 232 + .../pip/_vendor/tomli/__init__.py | 11 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 417 bytes .../tomli/__pycache__/_parser.cpython-311.pyc | Bin 0 -> 30856 bytes .../tomli/__pycache__/_re.cpython-311.pyc | Bin 0 -> 4496 bytes .../tomli/__pycache__/_types.cpython-311.pyc | Bin 0 -> 409 bytes .../pip/_vendor/tomli/_parser.py | 691 ++ .../site-packages/pip/_vendor/tomli/_re.py | 107 + .../site-packages/pip/_vendor/tomli/_types.py | 10 + .../pip/_vendor/typing_extensions.py | 2209 +++++ .../pip/_vendor/urllib3/__init__.py | 102 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3715 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 18303 bytes .../__pycache__/_version.cpython-311.pyc | Bin 0 -> 225 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 21899 bytes .../connectionpool.cpython-311.pyc | Bin 0 -> 37642 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 16129 bytes .../__pycache__/fields.cpython-311.pyc | Bin 0 -> 11422 bytes .../__pycache__/filepost.cpython-311.pyc | Bin 0 -> 4503 bytes .../__pycache__/poolmanager.cpython-311.pyc | Bin 0 -> 21826 bytes .../__pycache__/request.cpython-311.pyc | Bin 0 -> 6666 bytes .../__pycache__/response.cpython-311.pyc | Bin 0 -> 36549 bytes .../pip/_vendor/urllib3/_collections.py | 337 + .../pip/_vendor/urllib3/_version.py | 2 + .../pip/_vendor/urllib3/connection.py | 567 ++ .../pip/_vendor/urllib3/connectionpool.py | 1110 +++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 211 bytes .../_appengine_environ.cpython-311.pyc | Bin 0 -> 1950 bytes .../__pycache__/appengine.cpython-311.pyc | Bin 0 -> 12157 bytes .../__pycache__/ntlmpool.cpython-311.pyc | Bin 0 -> 6234 bytes .../__pycache__/pyopenssl.cpython-311.pyc | Bin 0 -> 25743 bytes .../securetransport.cpython-311.pyc | Bin 0 -> 36850 bytes .../contrib/__pycache__/socks.cpython-311.pyc | Bin 0 -> 8095 bytes .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 228 bytes .../__pycache__/bindings.cpython-311.pyc | Bin 0 -> 16975 bytes .../__pycache__/low_level.cpython-311.pyc | Bin 0 -> 15612 bytes .../contrib/_securetransport/bindings.py | 519 + .../contrib/_securetransport/low_level.py | 397 + .../pip/_vendor/urllib3/contrib/appengine.py | 314 + .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 + .../pip/_vendor/urllib3/contrib/pyopenssl.py | 518 + .../urllib3/contrib/securetransport.py | 921 ++ .../pip/_vendor/urllib3/contrib/socks.py | 216 + .../pip/_vendor/urllib3/exceptions.py | 323 + .../pip/_vendor/urllib3/fields.py | 274 + .../pip/_vendor/urllib3/filepost.py | 98 + .../pip/_vendor/urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 212 bytes .../packages/__pycache__/six.cpython-311.pyc | Bin 0 -> 46454 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 222 bytes .../__pycache__/makefile.cpython-311.pyc | Bin 0 -> 1969 bytes .../urllib3/packages/backports/makefile.py | 51 + .../pip/_vendor/urllib3/packages/six.py | 1076 ++ .../pip/_vendor/urllib3/poolmanager.py | 537 + .../pip/_vendor/urllib3/request.py | 170 + .../pip/_vendor/urllib3/response.py | 879 ++ .../pip/_vendor/urllib3/util/__init__.py | 49 + .../util/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1414 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 5141 bytes .../util/__pycache__/proxy.cpython-311.pyc | Bin 0 -> 1723 bytes .../util/__pycache__/queue.cpython-311.pyc | Bin 0 -> 1506 bytes .../util/__pycache__/request.cpython-311.pyc | Bin 0 -> 4626 bytes .../util/__pycache__/response.cpython-311.pyc | Bin 0 -> 3495 bytes .../util/__pycache__/retry.cpython-311.pyc | Bin 0 -> 22763 bytes .../util/__pycache__/ssl_.cpython-311.pyc | Bin 0 -> 16826 bytes .../ssl_match_hostname.cpython-311.pyc | Bin 0 -> 5805 bytes .../__pycache__/ssltransport.cpython-311.pyc | Bin 0 -> 11634 bytes .../util/__pycache__/timeout.cpython-311.pyc | Bin 0 -> 11042 bytes .../util/__pycache__/url.cpython-311.pyc | Bin 0 -> 17566 bytes .../util/__pycache__/wait.cpython-311.pyc | Bin 0 -> 5008 bytes .../pip/_vendor/urllib3/util/connection.py | 149 + .../pip/_vendor/urllib3/util/proxy.py | 57 + .../pip/_vendor/urllib3/util/queue.py | 22 + .../pip/_vendor/urllib3/util/request.py | 137 + .../pip/_vendor/urllib3/util/response.py | 107 + .../pip/_vendor/urllib3/util/retry.py | 620 ++ .../pip/_vendor/urllib3/util/ssl_.py | 495 + .../urllib3/util/ssl_match_hostname.py | 159 + .../pip/_vendor/urllib3/util/ssltransport.py | 221 + .../pip/_vendor/urllib3/util/timeout.py | 268 + .../pip/_vendor/urllib3/util/url.py | 435 + .../pip/_vendor/urllib3/util/wait.py | 152 + .../site-packages/pip/_vendor/vendor.txt | 23 + .../pip/_vendor/webencodings/__init__.py | 342 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 12888 bytes .../__pycache__/labels.cpython-311.pyc | Bin 0 -> 7288 bytes .../__pycache__/mklabels.cpython-311.pyc | Bin 0 -> 3216 bytes .../__pycache__/tests.cpython-311.pyc | Bin 0 -> 11194 bytes .../x_user_defined.cpython-311.pyc | Bin 0 -> 3568 bytes .../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 + .../lib/python3.11/site-packages/pip/py.typed | 4 + .../site-packages/pkg_resources/__init__.py | 3282 +++++++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 156119 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 205 bytes .../typing_extensions.cpython-311.pyc | Bin 0 -> 97422 bytes .../_vendor/__pycache__/zipp.cpython-311.pyc | Bin 0 -> 15998 bytes .../_vendor/importlib_resources/__init__.py | 36 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 839 bytes .../__pycache__/_adapters.cpython-311.pyc | Bin 0 -> 10756 bytes .../__pycache__/_common.cpython-311.pyc | Bin 0 -> 4283 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 5568 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 1401 bytes .../__pycache__/_legacy.cpython-311.pyc | Bin 0 -> 6499 bytes .../__pycache__/abc.cpython-311.pyc | Bin 0 -> 7500 bytes .../__pycache__/readers.cpython-311.pyc | Bin 0 -> 8374 bytes .../__pycache__/simple.cpython-311.pyc | Bin 0 -> 6396 bytes .../_vendor/importlib_resources/_adapters.py | 170 + .../_vendor/importlib_resources/_common.py | 104 + .../_vendor/importlib_resources/_compat.py | 98 + .../_vendor/importlib_resources/_itertools.py | 35 + .../_vendor/importlib_resources/_legacy.py | 121 + .../_vendor/importlib_resources/abc.py | 137 + .../_vendor/importlib_resources/readers.py | 122 + .../_vendor/importlib_resources/simple.py | 116 + .../pkg_resources/_vendor/jaraco/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 212 bytes .../__pycache__/context.cpython-311.pyc | Bin 0 -> 10987 bytes .../__pycache__/functools.cpython-311.pyc | Bin 0 -> 20298 bytes .../pkg_resources/_vendor/jaraco/context.py | 253 + .../pkg_resources/_vendor/jaraco/functools.py | 525 + .../_vendor/jaraco/text/__init__.py | 599 ++ .../text/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 26615 bytes .../_vendor/more_itertools/__init__.py | 6 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 384 bytes .../__pycache__/more.cpython-311.pyc | Bin 0 -> 169506 bytes .../__pycache__/recipes.cpython-311.pyc | Bin 0 -> 33526 bytes .../_vendor/more_itertools/more.py | 4346 +++++++++ .../_vendor/more_itertools/recipes.py | 841 ++ .../_vendor/packaging/__about__.py | 26 + .../_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 656 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 577 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 0 -> 13243 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 0 -> 8011 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 0 -> 3699 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 16548 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 7663 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 0 -> 34377 bytes .../__pycache__/tags.cpython-311.pyc | Bin 0 -> 21362 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6697 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 21889 bytes .../_vendor/packaging/_manylinux.py | 301 + .../_vendor/packaging/_musllinux.py | 136 + .../_vendor/packaging/_structures.py | 61 + .../_vendor/packaging/markers.py | 304 + .../_vendor/packaging/requirements.py | 146 + .../_vendor/packaging/specifiers.py | 802 ++ .../pkg_resources/_vendor/packaging/tags.py | 487 + .../pkg_resources/_vendor/packaging/utils.py | 136 + .../_vendor/packaging/version.py | 504 + .../_vendor/platformdirs/__init__.py | 342 + .../_vendor/platformdirs/__main__.py | 46 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 12837 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 2129 bytes .../__pycache__/android.cpython-311.pyc | Bin 0 -> 6371 bytes .../__pycache__/api.cpython-311.pyc | Bin 0 -> 7198 bytes .../__pycache__/macos.cpython-311.pyc | Bin 0 -> 4608 bytes .../__pycache__/unix.cpython-311.pyc | Bin 0 -> 11040 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 327 bytes .../__pycache__/windows.cpython-311.pyc | Bin 0 -> 9976 bytes .../_vendor/platformdirs/android.py | 120 + .../pkg_resources/_vendor/platformdirs/api.py | 156 + .../_vendor/platformdirs/macos.py | 64 + .../_vendor/platformdirs/unix.py | 181 + .../_vendor/platformdirs/version.py | 4 + .../_vendor/platformdirs/windows.py | 184 + .../_vendor/pyparsing/__init__.py | 331 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8350 bytes .../__pycache__/actions.cpython-311.pyc | Bin 0 -> 8476 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 14798 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 277650 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 12940 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 0 -> 53641 bytes .../__pycache__/results.cpython-311.pyc | Bin 0 -> 36324 bytes .../__pycache__/testing.cpython-311.pyc | Bin 0 -> 19520 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 0 -> 15378 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 14277 bytes .../_vendor/pyparsing/actions.py | 207 + .../pkg_resources/_vendor/pyparsing/common.py | 424 + .../pkg_resources/_vendor/pyparsing/core.py | 5814 +++++++++++ .../_vendor/pyparsing/diagram/__init__.py | 642 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 28013 bytes .../_vendor/pyparsing/exceptions.py | 267 + .../_vendor/pyparsing/helpers.py | 1088 +++ .../_vendor/pyparsing/results.py | 760 ++ .../_vendor/pyparsing/testing.py | 331 + .../_vendor/pyparsing/unicode.py | 352 + .../pkg_resources/_vendor/pyparsing/util.py | 235 + .../_vendor/typing_extensions.py | 2209 +++++ .../pkg_resources/_vendor/zipp.py | 329 + .../pkg_resources/extern/__init__.py | 81 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4328 bytes .../pycparser-2.22.dist-info/INSTALLER | 1 + .../pycparser-2.22.dist-info/LICENSE | 27 + .../pycparser-2.22.dist-info/METADATA | 28 + .../pycparser-2.22.dist-info/RECORD | 41 + .../pycparser-2.22.dist-info/WHEEL | 5 + .../pycparser-2.22.dist-info/top_level.txt | 1 + .../site-packages/pycparser/__init__.py | 93 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 3332 bytes .../__pycache__/_ast_gen.cpython-311.pyc | Bin 0 -> 13457 bytes .../__pycache__/_build_tables.cpython-311.pyc | Bin 0 -> 890 bytes .../ast_transforms.cpython-311.pyc | Bin 0 -> 5547 bytes .../__pycache__/c_ast.cpython-311.pyc | Bin 0 -> 53267 bytes .../__pycache__/c_generator.cpython-311.pyc | Bin 0 -> 30969 bytes .../__pycache__/c_lexer.cpython-311.pyc | Bin 0 -> 18627 bytes .../__pycache__/c_parser.cpython-311.pyc | Bin 0 -> 94135 bytes .../__pycache__/lextab.cpython-311.pyc | Bin 0 -> 6852 bytes .../__pycache__/plyparser.cpython-311.pyc | Bin 0 -> 6502 bytes .../__pycache__/yacctab.cpython-311.pyc | Bin 0 -> 196273 bytes .../site-packages/pycparser/_ast_gen.py | 336 + .../site-packages/pycparser/_build_tables.py | 40 + .../site-packages/pycparser/_c_ast.cfg | 195 + .../site-packages/pycparser/ast_transforms.py | 164 + .../site-packages/pycparser/c_ast.py | 1125 +++ .../site-packages/pycparser/c_generator.py | 502 + .../site-packages/pycparser/c_lexer.py | 555 ++ .../site-packages/pycparser/c_parser.py | 1950 ++++ .../site-packages/pycparser/lextab.py | 10 + .../site-packages/pycparser/ply/__init__.py | 5 + .../ply/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 254 bytes .../ply/__pycache__/cpp.cpython-311.pyc | Bin 0 -> 34628 bytes .../ply/__pycache__/ctokens.cpython-311.pyc | Bin 0 -> 2461 bytes .../ply/__pycache__/lex.cpython-311.pyc | Bin 0 -> 44063 bytes .../ply/__pycache__/yacc.cpython-311.pyc | Bin 0 -> 110038 bytes .../ply/__pycache__/ygen.cpython-311.pyc | Bin 0 -> 3614 bytes .../site-packages/pycparser/ply/cpp.py | 905 ++ .../site-packages/pycparser/ply/ctokens.py | 133 + .../site-packages/pycparser/ply/lex.py | 1099 +++ .../site-packages/pycparser/ply/yacc.py | 3494 +++++++ .../site-packages/pycparser/ply/ygen.py | 74 + .../site-packages/pycparser/plyparser.py | 133 + .../site-packages/pycparser/yacctab.py | 369 + .../requests-2.32.3.dist-info/INSTALLER | 1 + .../requests-2.32.3.dist-info/LICENSE | 175 + .../requests-2.32.3.dist-info/METADATA | 119 + .../requests-2.32.3.dist-info/RECORD | 43 + .../requests-2.32.3.dist-info/REQUESTED | 0 .../requests-2.32.3.dist-info/WHEEL | 5 + .../requests-2.32.3.dist-info/top_level.txt | 1 + .../site-packages/requests/__init__.py | 184 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6376 bytes .../__pycache__/__version__.cpython-311.pyc | Bin 0 -> 579 bytes .../_internal_utils.cpython-311.pyc | Bin 0 -> 2143 bytes .../__pycache__/adapters.cpython-311.pyc | Bin 0 -> 30673 bytes .../requests/__pycache__/api.cpython-311.pyc | Bin 0 -> 7496 bytes .../requests/__pycache__/auth.cpython-311.pyc | Bin 0 -> 14623 bytes .../__pycache__/certs.cpython-311.pyc | Bin 0 -> 713 bytes .../__pycache__/compat.cpython-311.pyc | Bin 0 -> 2459 bytes .../__pycache__/cookies.cpython-311.pyc | Bin 0 -> 27133 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 9064 bytes .../requests/__pycache__/help.cpython-311.pyc | Bin 0 -> 4530 bytes .../__pycache__/hooks.cpython-311.pyc | Bin 0 -> 1243 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 38730 bytes .../__pycache__/packages.cpython-311.pyc | Bin 0 -> 1166 bytes .../__pycache__/sessions.cpython-311.pyc | Bin 0 -> 29811 bytes .../__pycache__/status_codes.cpython-311.pyc | Bin 0 -> 6302 bytes .../__pycache__/structures.cpython-311.pyc | Bin 0 -> 6215 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 40582 bytes .../site-packages/requests/__version__.py | 14 + .../site-packages/requests/_internal_utils.py | 50 + .../site-packages/requests/adapters.py | 719 ++ .../python3.11/site-packages/requests/api.py | 157 + .../python3.11/site-packages/requests/auth.py | 314 + .../site-packages/requests/certs.py | 17 + .../site-packages/requests/compat.py | 94 + .../site-packages/requests/cookies.py | 561 ++ .../site-packages/requests/exceptions.py | 151 + .../python3.11/site-packages/requests/help.py | 134 + .../site-packages/requests/hooks.py | 33 + .../site-packages/requests/models.py | 1037 ++ .../site-packages/requests/packages.py | 23 + .../site-packages/requests/sessions.py | 831 ++ .../site-packages/requests/status_codes.py | 128 + .../site-packages/requests/structures.py | 99 + .../site-packages/requests/utils.py | 1096 +++ .../python3.11/site-packages/rust/Cargo.toml | 35 + .../rust/cryptography-cffi/Cargo.toml | 17 + .../rust/cryptography-keepalive/Cargo.toml | 10 + .../rust/cryptography-key-parsing/Cargo.toml | 17 + .../rust/cryptography-openssl/Cargo.toml | 17 + .../cryptography-x509-verification/Cargo.toml | 16 + .../rust/cryptography-x509/Cargo.toml | 11 + .../setuptools-66.1.1.dist-info/INSTALLER | 1 + .../setuptools-66.1.1.dist-info/LICENSE | 19 + .../setuptools-66.1.1.dist-info/METADATA | 137 + .../setuptools-66.1.1.dist-info/RECORD | 484 + .../setuptools-66.1.1.dist-info/REQUESTED | 0 .../setuptools-66.1.1.dist-info/WHEEL | 5 + .../entry_points.txt | 57 + .../setuptools-66.1.1.dist-info/top_level.txt | 4 + .../site-packages/setuptools/__init__.py | 268 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 13933 bytes .../_deprecation_warning.cpython-311.pyc | Bin 0 -> 649 bytes .../__pycache__/_entry_points.cpython-311.pyc | Bin 0 -> 5206 bytes .../__pycache__/_imp.cpython-311.pyc | Bin 0 -> 3662 bytes .../__pycache__/_importlib.cpython-311.pyc | Bin 0 -> 1962 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 1161 bytes .../__pycache__/_path.cpython-311.pyc | Bin 0 -> 1482 bytes .../__pycache__/_reqs.cpython-311.pyc | Bin 0 -> 1143 bytes .../__pycache__/archive_util.cpython-311.pyc | Bin 0 -> 10171 bytes .../__pycache__/build_meta.cpython-311.pyc | Bin 0 -> 28154 bytes .../__pycache__/dep_util.cpython-311.pyc | Bin 0 -> 1297 bytes .../__pycache__/depends.cpython-311.pyc | Bin 0 -> 7982 bytes .../__pycache__/discovery.cpython-311.pyc | Bin 0 -> 31135 bytes .../__pycache__/dist.cpython-311.pyc | Bin 0 -> 63802 bytes .../__pycache__/errors.cpython-311.pyc | Bin 0 -> 2958 bytes .../__pycache__/extension.cpython-311.pyc | Bin 0 -> 6814 bytes .../__pycache__/glob.cpython-311.pyc | Bin 0 -> 6571 bytes .../__pycache__/installer.cpython-311.pyc | Bin 0 -> 5621 bytes .../__pycache__/launch.cpython-311.pyc | Bin 0 -> 1537 bytes .../__pycache__/logging.cpython-311.pyc | Bin 0 -> 2104 bytes .../__pycache__/monkey.cpython-311.pyc | Bin 0 -> 7014 bytes .../__pycache__/msvc.cpython-311.pyc | Bin 0 -> 64187 bytes .../__pycache__/namespaces.cpython-311.pyc | Bin 0 -> 5669 bytes .../__pycache__/package_index.cpython-311.pyc | Bin 0 -> 61942 bytes .../__pycache__/py34compat.cpython-311.pyc | Bin 0 -> 724 bytes .../__pycache__/sandbox.cpython-311.pyc | Bin 0 -> 27340 bytes .../__pycache__/unicode_utils.cpython-311.pyc | Bin 0 -> 1826 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 444 bytes .../__pycache__/wheel.cpython-311.pyc | Bin 0 -> 15500 bytes .../windows_support.cpython-311.pyc | Bin 0 -> 1441 bytes .../setuptools/_deprecation_warning.py | 7 + .../setuptools/_distutils/__init__.py | 14 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 568 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 8538 bytes .../__pycache__/_functools.cpython-311.pyc | Bin 0 -> 870 bytes .../__pycache__/_log.cpython-311.pyc | Bin 0 -> 287 bytes .../__pycache__/_macos_compat.cpython-311.pyc | Bin 0 -> 579 bytes .../__pycache__/_msvccompiler.cpython-311.pyc | Bin 0 -> 25081 bytes .../__pycache__/archive_util.cpython-311.pyc | Bin 0 -> 10629 bytes .../__pycache__/bcppcompiler.cpython-311.pyc | Bin 0 -> 13455 bytes .../__pycache__/ccompiler.cpython-311.pyc | Bin 0 -> 46324 bytes .../__pycache__/cmd.cpython-311.pyc | Bin 0 -> 18848 bytes .../__pycache__/config.cpython-311.pyc | Bin 0 -> 6049 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 9939 bytes .../cygwinccompiler.cpython-311.pyc | Bin 0 -> 13633 bytes .../__pycache__/debug.cpython-311.pyc | Bin 0 -> 331 bytes .../__pycache__/dep_util.cpython-311.pyc | Bin 0 -> 3993 bytes .../__pycache__/dir_util.cpython-311.pyc | Bin 0 -> 10374 bytes .../__pycache__/dist.cpython-311.pyc | Bin 0 -> 55497 bytes .../__pycache__/errors.cpython-311.pyc | Bin 0 -> 6804 bytes .../__pycache__/extension.cpython-311.pyc | Bin 0 -> 10185 bytes .../__pycache__/fancy_getopt.cpython-311.pyc | Bin 0 -> 17244 bytes .../__pycache__/file_util.cpython-311.pyc | Bin 0 -> 10678 bytes .../__pycache__/filelist.cpython-311.pyc | Bin 0 -> 17618 bytes .../__pycache__/log.cpython-311.pyc | Bin 0 -> 2702 bytes .../__pycache__/msvc9compiler.cpython-311.pyc | Bin 0 -> 33567 bytes .../__pycache__/msvccompiler.cpython-311.pyc | Bin 0 -> 26979 bytes .../__pycache__/py38compat.cpython-311.pyc | Bin 0 -> 631 bytes .../__pycache__/py39compat.cpython-311.pyc | Bin 0 -> 999 bytes .../__pycache__/spawn.cpython-311.pyc | Bin 0 -> 4443 bytes .../__pycache__/sysconfig.cpython-311.pyc | Bin 0 -> 22080 bytes .../__pycache__/text_file.cpython-311.pyc | Bin 0 -> 11280 bytes .../__pycache__/unixccompiler.cpython-311.pyc | Bin 0 -> 16503 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 20854 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 11356 bytes .../versionpredicate.cpython-311.pyc | Bin 0 -> 7633 bytes .../setuptools/_distutils/_collections.py | 194 + .../setuptools/_distutils/_functools.py | 20 + .../setuptools/_distutils/_log.py | 4 + .../setuptools/_distutils/_macos_compat.py | 12 + .../setuptools/_distutils/_msvccompiler.py | 572 ++ .../setuptools/_distutils/archive_util.py | 280 + .../setuptools/_distutils/bcppcompiler.py | 408 + .../setuptools/_distutils/ccompiler.py | 1220 +++ .../setuptools/_distutils/cmd.py | 435 + .../setuptools/_distutils/command/__init__.py | 25 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 551 bytes .../_framework_compat.cpython-311.pyc | Bin 0 -> 2792 bytes .../command/__pycache__/bdist.cpython-311.pyc | Bin 0 -> 6010 bytes .../__pycache__/bdist_dumb.cpython-311.pyc | Bin 0 -> 5730 bytes .../__pycache__/bdist_rpm.cpython-311.pyc | Bin 0 -> 23264 bytes .../command/__pycache__/build.cpython-311.pyc | Bin 0 -> 6065 bytes .../__pycache__/build_clib.cpython-311.pyc | Bin 0 -> 7773 bytes .../__pycache__/build_ext.cpython-311.pyc | Bin 0 -> 30283 bytes .../__pycache__/build_py.cpython-311.pyc | Bin 0 -> 17609 bytes .../__pycache__/build_scripts.cpython-311.pyc | Bin 0 -> 7863 bytes .../command/__pycache__/check.cpython-311.pyc | Bin 0 -> 7519 bytes .../command/__pycache__/clean.cpython-311.pyc | Bin 0 -> 3195 bytes .../__pycache__/config.cpython-311.pyc | Bin 0 -> 16232 bytes .../__pycache__/install.cpython-311.pyc | Bin 0 -> 29384 bytes .../__pycache__/install_data.cpython-311.pyc | Bin 0 -> 3772 bytes .../install_egg_info.cpython-311.pyc | Bin 0 -> 5227 bytes .../install_headers.cpython-311.pyc | Bin 0 -> 2360 bytes .../__pycache__/install_lib.cpython-311.pyc | Bin 0 -> 8681 bytes .../install_scripts.cpython-311.pyc | Bin 0 -> 3167 bytes .../__pycache__/py37compat.cpython-311.pyc | Bin 0 -> 1548 bytes .../__pycache__/register.cpython-311.pyc | Bin 0 -> 15566 bytes .../command/__pycache__/sdist.cpython-311.pyc | Bin 0 -> 23778 bytes .../__pycache__/upload.cpython-311.pyc | Bin 0 -> 10432 bytes .../_distutils/command/_framework_compat.py | 55 + .../setuptools/_distutils/command/bdist.py | 157 + .../_distutils/command/bdist_dumb.py | 144 + .../_distutils/command/bdist_rpm.py | 615 ++ .../setuptools/_distutils/command/build.py | 153 + .../_distutils/command/build_clib.py | 208 + .../_distutils/command/build_ext.py | 789 ++ .../setuptools/_distutils/command/build_py.py | 407 + .../_distutils/command/build_scripts.py | 173 + .../setuptools/_distutils/command/check.py | 151 + .../setuptools/_distutils/command/clean.py | 76 + .../setuptools/_distutils/command/config.py | 377 + .../setuptools/_distutils/command/install.py | 814 ++ .../_distutils/command/install_data.py | 84 + .../_distutils/command/install_egg_info.py | 92 + .../_distutils/command/install_headers.py | 45 + .../_distutils/command/install_lib.py | 238 + .../_distutils/command/install_scripts.py | 61 + .../_distutils/command/py37compat.py | 31 + .../setuptools/_distutils/command/register.py | 321 + .../setuptools/_distutils/command/sdist.py | 531 + .../setuptools/_distutils/command/upload.py | 207 + .../setuptools/_distutils/config.py | 139 + .../setuptools/_distutils/core.py | 291 + .../setuptools/_distutils/cygwinccompiler.py | 358 + .../setuptools/_distutils/debug.py | 5 + .../setuptools/_distutils/dep_util.py | 96 + .../setuptools/_distutils/dir_util.py | 243 + .../setuptools/_distutils/dist.py | 1287 +++ .../setuptools/_distutils/errors.py | 127 + .../setuptools/_distutils/extension.py | 248 + .../setuptools/_distutils/fancy_getopt.py | 470 + .../setuptools/_distutils/file_util.py | 249 + .../setuptools/_distutils/filelist.py | 371 + .../setuptools/_distutils/log.py | 57 + .../setuptools/_distutils/msvc9compiler.py | 832 ++ .../setuptools/_distutils/msvccompiler.py | 695 ++ .../setuptools/_distutils/py38compat.py | 8 + .../setuptools/_distutils/py39compat.py | 22 + .../setuptools/_distutils/spawn.py | 109 + .../setuptools/_distutils/sysconfig.py | 552 ++ .../setuptools/_distutils/text_file.py | 287 + .../setuptools/_distutils/unixccompiler.py | 401 + .../setuptools/_distutils/util.py | 513 + .../setuptools/_distutils/version.py | 358 + .../setuptools/_distutils/versionpredicate.py | 175 + .../site-packages/setuptools/_entry_points.py | 94 + .../site-packages/setuptools/_imp.py | 82 + .../site-packages/setuptools/_importlib.py | 47 + .../site-packages/setuptools/_itertools.py | 23 + .../site-packages/setuptools/_path.py | 29 + .../site-packages/setuptools/_reqs.py | 19 + .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 202 bytes .../__pycache__/ordered_set.cpython-311.pyc | Bin 0 -> 21788 bytes .../typing_extensions.cpython-311.pyc | Bin 0 -> 107619 bytes .../_vendor/__pycache__/zipp.cpython-311.pyc | Bin 0 -> 15995 bytes .../_vendor/importlib_metadata/__init__.py | 1047 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 58241 bytes .../__pycache__/_adapters.cpython-311.pyc | Bin 0 -> 3854 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 2201 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 2723 bytes .../__pycache__/_functools.cpython-311.pyc | Bin 0 -> 3641 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 2604 bytes .../__pycache__/_meta.cpython-311.pyc | Bin 0 -> 3008 bytes .../__pycache__/_text.cpython-311.pyc | Bin 0 -> 4399 bytes .../_vendor/importlib_metadata/_adapters.py | 68 + .../importlib_metadata/_collections.py | 30 + .../_vendor/importlib_metadata/_compat.py | 71 + .../_vendor/importlib_metadata/_functools.py | 104 + .../_vendor/importlib_metadata/_itertools.py | 73 + .../_vendor/importlib_metadata/_meta.py | 48 + .../_vendor/importlib_metadata/_text.py | 99 + .../_vendor/importlib_resources/__init__.py | 36 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 836 bytes .../__pycache__/_adapters.cpython-311.pyc | Bin 0 -> 10753 bytes .../__pycache__/_common.cpython-311.pyc | Bin 0 -> 4280 bytes .../__pycache__/_compat.cpython-311.pyc | Bin 0 -> 5565 bytes .../__pycache__/_itertools.cpython-311.pyc | Bin 0 -> 1398 bytes .../__pycache__/_legacy.cpython-311.pyc | Bin 0 -> 6496 bytes .../__pycache__/abc.cpython-311.pyc | Bin 0 -> 7497 bytes .../__pycache__/readers.cpython-311.pyc | Bin 0 -> 8371 bytes .../__pycache__/simple.cpython-311.pyc | Bin 0 -> 6393 bytes .../_vendor/importlib_resources/_adapters.py | 170 + .../_vendor/importlib_resources/_common.py | 104 + .../_vendor/importlib_resources/_compat.py | 98 + .../_vendor/importlib_resources/_itertools.py | 35 + .../_vendor/importlib_resources/_legacy.py | 121 + .../_vendor/importlib_resources/abc.py | 137 + .../_vendor/importlib_resources/readers.py | 122 + .../_vendor/importlib_resources/simple.py | 116 + .../setuptools/_vendor/jaraco/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 209 bytes .../__pycache__/context.cpython-311.pyc | Bin 0 -> 10984 bytes .../__pycache__/functools.cpython-311.pyc | Bin 0 -> 20289 bytes .../setuptools/_vendor/jaraco/context.py | 253 + .../setuptools/_vendor/jaraco/functools.py | 525 + .../_vendor/jaraco/text/__init__.py | 599 ++ .../text/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 26603 bytes .../_vendor/more_itertools/__init__.py | 4 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 302 bytes .../__pycache__/more.cpython-311.pyc | Bin 0 -> 149189 bytes .../__pycache__/recipes.cpython-311.pyc | Bin 0 -> 23771 bytes .../setuptools/_vendor/more_itertools/more.py | 3824 ++++++++ .../_vendor/more_itertools/recipes.py | 620 ++ .../setuptools/_vendor/ordered_set.py | 488 + .../setuptools/_vendor/packaging/__about__.py | 26 + .../setuptools/_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-311.pyc | Bin 0 -> 653 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 574 bytes .../__pycache__/_manylinux.cpython-311.pyc | Bin 0 -> 13240 bytes .../__pycache__/_musllinux.cpython-311.pyc | Bin 0 -> 8008 bytes .../__pycache__/_structures.cpython-311.pyc | Bin 0 -> 3696 bytes .../__pycache__/markers.cpython-311.pyc | Bin 0 -> 16542 bytes .../__pycache__/requirements.cpython-311.pyc | Bin 0 -> 7657 bytes .../__pycache__/specifiers.cpython-311.pyc | Bin 0 -> 34374 bytes .../__pycache__/tags.cpython-311.pyc | Bin 0 -> 21359 bytes .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 6694 bytes .../__pycache__/version.cpython-311.pyc | Bin 0 -> 21886 bytes .../_vendor/packaging/_manylinux.py | 301 + .../_vendor/packaging/_musllinux.py | 136 + .../_vendor/packaging/_structures.py | 61 + .../setuptools/_vendor/packaging/markers.py | 304 + .../_vendor/packaging/requirements.py | 146 + .../_vendor/packaging/specifiers.py | 802 ++ .../setuptools/_vendor/packaging/tags.py | 487 + .../setuptools/_vendor/packaging/utils.py | 136 + .../setuptools/_vendor/packaging/version.py | 504 + .../setuptools/_vendor/pyparsing/__init__.py | 331 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 8347 bytes .../__pycache__/actions.cpython-311.pyc | Bin 0 -> 8473 bytes .../__pycache__/common.cpython-311.pyc | Bin 0 -> 14795 bytes .../__pycache__/core.cpython-311.pyc | Bin 0 -> 277647 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 12937 bytes .../__pycache__/helpers.cpython-311.pyc | Bin 0 -> 53638 bytes .../__pycache__/results.cpython-311.pyc | Bin 0 -> 36321 bytes .../__pycache__/testing.cpython-311.pyc | Bin 0 -> 19517 bytes .../__pycache__/unicode.cpython-311.pyc | Bin 0 -> 15375 bytes .../__pycache__/util.cpython-311.pyc | Bin 0 -> 14274 bytes .../setuptools/_vendor/pyparsing/actions.py | 207 + .../setuptools/_vendor/pyparsing/common.py | 424 + .../setuptools/_vendor/pyparsing/core.py | 5814 +++++++++++ .../_vendor/pyparsing/diagram/__init__.py | 642 ++ .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 28010 bytes .../_vendor/pyparsing/exceptions.py | 267 + .../setuptools/_vendor/pyparsing/helpers.py | 1088 +++ .../setuptools/_vendor/pyparsing/results.py | 760 ++ .../setuptools/_vendor/pyparsing/testing.py | 331 + .../setuptools/_vendor/pyparsing/unicode.py | 352 + .../setuptools/_vendor/pyparsing/util.py | 235 + .../setuptools/_vendor/tomli/__init__.py | 11 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 424 bytes .../tomli/__pycache__/_parser.cpython-311.pyc | Bin 0 -> 30863 bytes .../tomli/__pycache__/_re.cpython-311.pyc | Bin 0 -> 4503 bytes .../tomli/__pycache__/_types.cpython-311.pyc | Bin 0 -> 416 bytes .../setuptools/_vendor/tomli/_parser.py | 691 ++ .../setuptools/_vendor/tomli/_re.py | 107 + .../setuptools/_vendor/tomli/_types.py | 10 + .../setuptools/_vendor/typing_extensions.py | 2296 +++++ .../site-packages/setuptools/_vendor/zipp.py | 329 + .../site-packages/setuptools/archive_util.py | 213 + .../site-packages/setuptools/build_meta.py | 512 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli-arm64.exe | Bin 0 -> 137216 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 12 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 643 bytes .../command/__pycache__/alias.cpython-311.pyc | Bin 0 -> 3910 bytes .../__pycache__/bdist_egg.cpython-311.pyc | Bin 0 -> 25592 bytes .../__pycache__/bdist_rpm.cpython-311.pyc | Bin 0 -> 2198 bytes .../command/__pycache__/build.cpython-311.pyc | Bin 0 -> 6998 bytes .../__pycache__/build_clib.cpython-311.pyc | Bin 0 -> 4173 bytes .../__pycache__/build_ext.cpython-311.pyc | Bin 0 -> 22018 bytes .../__pycache__/build_py.cpython-311.pyc | Bin 0 -> 23184 bytes .../__pycache__/develop.cpython-311.pyc | Bin 0 -> 10926 bytes .../__pycache__/dist_info.cpython-311.pyc | Bin 0 -> 7988 bytes .../__pycache__/easy_install.cpython-311.pyc | Bin 0 -> 121508 bytes .../editable_wheel.cpython-311.pyc | Bin 0 -> 51421 bytes .../__pycache__/egg_info.cpython-311.pyc | Bin 0 -> 40846 bytes .../__pycache__/install.cpython-311.pyc | Bin 0 -> 6823 bytes .../install_egg_info.cpython-311.pyc | Bin 0 -> 5349 bytes .../__pycache__/install_lib.cpython-311.pyc | Bin 0 -> 8420 bytes .../install_scripts.cpython-311.pyc | Bin 0 -> 4287 bytes .../__pycache__/py36compat.cpython-311.pyc | Bin 0 -> 8044 bytes .../__pycache__/register.cpython-311.pyc | Bin 0 -> 1134 bytes .../__pycache__/rotate.cpython-311.pyc | Bin 0 -> 4194 bytes .../__pycache__/saveopts.cpython-311.pyc | Bin 0 -> 1374 bytes .../command/__pycache__/sdist.cpython-311.pyc | Bin 0 -> 13446 bytes .../__pycache__/setopt.cpython-311.pyc | Bin 0 -> 7686 bytes .../command/__pycache__/test.cpython-311.pyc | Bin 0 -> 14627 bytes .../__pycache__/upload.cpython-311.pyc | Bin 0 -> 1098 bytes .../__pycache__/upload_docs.cpython-311.pyc | Bin 0 -> 11949 bytes .../site-packages/setuptools/command/alias.py | 78 + .../setuptools/command/bdist_egg.py | 457 + .../setuptools/command/bdist_rpm.py | 40 + .../site-packages/setuptools/command/build.py | 146 + .../setuptools/command/build_clib.py | 101 + .../setuptools/command/build_ext.py | 383 + .../setuptools/command/build_py.py | 368 + .../setuptools/command/develop.py | 193 + .../setuptools/command/dist_info.py | 142 + .../setuptools/command/easy_install.py | 2366 +++++ .../setuptools/command/editable_wheel.py | 844 ++ .../setuptools/command/egg_info.py | 775 ++ .../setuptools/command/install.py | 139 + .../setuptools/command/install_egg_info.py | 83 + .../setuptools/command/install_lib.py | 148 + .../setuptools/command/install_scripts.py | 70 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 134 + .../setuptools/command/register.py | 18 + .../setuptools/command/rotate.py | 64 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 210 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 251 + .../setuptools/command/upload.py | 17 + .../setuptools/command/upload_docs.py | 212 + .../setuptools/config/__init__.py | 35 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2038 bytes .../_apply_pyprojecttoml.cpython-311.pyc | Bin 0 -> 22847 bytes .../config/__pycache__/expand.cpython-311.pyc | Bin 0 -> 28252 bytes .../__pycache__/pyprojecttoml.cpython-311.pyc | Bin 0 -> 27883 bytes .../__pycache__/setupcfg.cpython-311.pyc | Bin 0 -> 33292 bytes .../setuptools/config/_apply_pyprojecttoml.py | 384 + .../config/_validate_pyproject/__init__.py | 34 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2326 bytes .../error_reporting.cpython-311.pyc | Bin 0 -> 20217 bytes .../extra_validations.cpython-311.pyc | Bin 0 -> 1875 bytes .../fastjsonschema_exceptions.cpython-311.pyc | Bin 0 -> 3250 bytes ...fastjsonschema_validations.cpython-311.pyc | Bin 0 -> 192648 bytes .../__pycache__/formats.cpython-311.pyc | Bin 0 -> 14365 bytes .../_validate_pyproject/error_reporting.py | 318 + .../_validate_pyproject/extra_validations.py | 36 + .../fastjsonschema_exceptions.py | 51 + .../fastjsonschema_validations.py | 1035 ++ .../config/_validate_pyproject/formats.py | 259 + .../site-packages/setuptools/config/expand.py | 462 + .../setuptools/config/pyprojecttoml.py | 498 + .../setuptools/config/setupcfg.py | 769 ++ .../site-packages/setuptools/dep_util.py | 25 + .../site-packages/setuptools/depends.py | 176 + .../site-packages/setuptools/discovery.py | 601 ++ .../site-packages/setuptools/dist.py | 1218 +++ .../site-packages/setuptools/errors.py | 58 + .../site-packages/setuptools/extension.py | 148 + .../setuptools/extern/__init__.py | 76 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 4402 bytes .../site-packages/setuptools/glob.py | 167 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui-arm64.exe | Bin 0 -> 137728 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/installer.py | 104 + .../site-packages/setuptools/launch.py | 36 + .../site-packages/setuptools/logging.py | 37 + .../site-packages/setuptools/monkey.py | 165 + .../site-packages/setuptools/msvc.py | 1703 ++++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1177 +++ .../site-packages/setuptools/py34compat.py | 13 + .../site-packages/setuptools/sandbox.py | 530 + .../setuptools/script (dev).tmpl | 6 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/unicode_utils.py | 42 + .../site-packages/setuptools/version.py | 6 + .../site-packages/setuptools/wheel.py | 222 + .../setuptools/windows_support.py | 29 + .../urllib3-2.3.0.dist-info/INSTALLER | 1 + .../urllib3-2.3.0.dist-info/METADATA | 154 + .../urllib3-2.3.0.dist-info/RECORD | 79 + .../urllib3-2.3.0.dist-info/WHEEL | 4 + .../licenses/LICENSE.txt | 21 + .../site-packages/urllib3/__init__.py | 211 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 7674 bytes .../_base_connection.cpython-311.pyc | Bin 0 -> 7108 bytes .../__pycache__/_collections.cpython-311.pyc | Bin 0 -> 25970 bytes .../_request_methods.cpython-311.pyc | Bin 0 -> 10721 bytes .../__pycache__/_version.cpython-311.pyc | Bin 0 -> 649 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 38055 bytes .../connectionpool.cpython-311.pyc | Bin 0 -> 41273 bytes .../__pycache__/exceptions.cpython-311.pyc | Bin 0 -> 19643 bytes .../__pycache__/fields.cpython-311.pyc | Bin 0 -> 12718 bytes .../__pycache__/filepost.cpython-311.pyc | Bin 0 -> 3877 bytes .../__pycache__/poolmanager.cpython-311.pyc | Bin 0 -> 25529 bytes .../__pycache__/response.cpython-311.pyc | Bin 0 -> 54904 bytes .../site-packages/urllib3/_base_connection.py | 165 + .../site-packages/urllib3/_collections.py | 479 + .../site-packages/urllib3/_request_methods.py | 278 + .../site-packages/urllib3/_version.py | 16 + .../site-packages/urllib3/connection.py | 1044 ++ .../site-packages/urllib3/connectionpool.py | 1178 +++ .../site-packages/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 199 bytes .../__pycache__/pyopenssl.cpython-311.pyc | Bin 0 -> 28833 bytes .../contrib/__pycache__/socks.cpython-311.pyc | Bin 0 -> 8736 bytes .../urllib3/contrib/emscripten/__init__.py | 16 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1001 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 10618 bytes .../__pycache__/fetch.cpython-311.pyc | Bin 0 -> 30770 bytes .../__pycache__/request.cpython-311.pyc | Bin 0 -> 1657 bytes .../__pycache__/response.cpython-311.pyc | Bin 0 -> 13471 bytes .../urllib3/contrib/emscripten/connection.py | 255 + .../emscripten/emscripten_fetch_worker.js | 110 + .../urllib3/contrib/emscripten/fetch.py | 708 ++ .../urllib3/contrib/emscripten/request.py | 22 + .../urllib3/contrib/emscripten/response.py | 285 + .../urllib3/contrib/pyopenssl.py | 554 ++ .../site-packages/urllib3/contrib/socks.py | 228 + .../site-packages/urllib3/exceptions.py | 327 + .../site-packages/urllib3/fields.py | 341 + .../site-packages/urllib3/filepost.py | 89 + .../site-packages/urllib3/http2/__init__.py | 53 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2024 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 19045 bytes .../http2/__pycache__/probe.cpython-311.pyc | Bin 0 -> 4344 bytes .../site-packages/urllib3/http2/connection.py | 356 + .../site-packages/urllib3/http2/probe.py | 87 + .../site-packages/urllib3/poolmanager.py | 637 ++ .../python3.11/site-packages/urllib3/py.typed | 2 + .../site-packages/urllib3/response.py | 1278 +++ .../site-packages/urllib3/util/__init__.py | 42 + .../util/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1232 bytes .../__pycache__/connection.cpython-311.pyc | Bin 0 -> 5055 bytes .../util/__pycache__/proxy.cpython-311.pyc | Bin 0 -> 1290 bytes .../util/__pycache__/request.cpython-311.pyc | Bin 0 -> 9038 bytes .../util/__pycache__/response.cpython-311.pyc | Bin 0 -> 3364 bytes .../util/__pycache__/retry.cpython-311.pyc | Bin 0 -> 21170 bytes .../util/__pycache__/ssl_.cpython-311.pyc | Bin 0 -> 17493 bytes .../ssl_match_hostname.cpython-311.pyc | Bin 0 -> 6259 bytes .../__pycache__/ssltransport.cpython-311.pyc | Bin 0 -> 14323 bytes .../util/__pycache__/timeout.cpython-311.pyc | Bin 0 -> 12077 bytes .../util/__pycache__/url.cpython-311.pyc | Bin 0 -> 17776 bytes .../util/__pycache__/util.cpython-311.pyc | Bin 0 -> 2180 bytes .../util/__pycache__/wait.cpython-311.pyc | Bin 0 -> 3751 bytes .../site-packages/urllib3/util/connection.py | 137 + .../site-packages/urllib3/util/proxy.py | 43 + .../site-packages/urllib3/util/request.py | 258 + .../site-packages/urllib3/util/response.py | 101 + .../site-packages/urllib3/util/retry.py | 533 + .../site-packages/urllib3/util/ssl_.py | 504 + .../urllib3/util/ssl_match_hostname.py | 159 + .../urllib3/util/ssltransport.py | 271 + .../site-packages/urllib3/util/timeout.py | 275 + .../site-packages/urllib3/util/url.py | 469 + .../site-packages/urllib3/util/util.py | 42 + .../site-packages/urllib3/util/wait.py | 124 + .../wakeonlan-3.1.0.dist-info/INSTALLER | 1 + .../wakeonlan-3.1.0.dist-info/LICENSE.rst | 23 + .../wakeonlan-3.1.0.dist-info/METADATA | 143 + .../wakeonlan-3.1.0.dist-info/RECORD | 11 + .../wakeonlan-3.1.0.dist-info/REQUESTED | 0 .../wakeonlan-3.1.0.dist-info/WHEEL | 4 + .../entry_points.txt | 3 + .../site-packages/wakeonlan/__init__.py | 137 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 6019 bytes .../site-packages/wakeonlan/py.typed | 0 .../python3.11/site-packages/yaml/__init__.py | 390 + .../yaml/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 17235 bytes .../yaml/__pycache__/composer.cpython-311.pyc | Bin 0 -> 7074 bytes .../__pycache__/constructor.cpython-311.pyc | Bin 0 -> 38665 bytes .../yaml/__pycache__/cyaml.cpython-311.pyc | Bin 0 -> 5409 bytes .../yaml/__pycache__/dumper.cpython-311.pyc | Bin 0 -> 2876 bytes .../yaml/__pycache__/emitter.cpython-311.pyc | Bin 0 -> 53402 bytes .../yaml/__pycache__/error.cpython-311.pyc | Bin 0 -> 4268 bytes .../yaml/__pycache__/events.cpython-311.pyc | Bin 0 -> 5867 bytes .../yaml/__pycache__/loader.cpython-311.pyc | Bin 0 -> 4263 bytes .../yaml/__pycache__/nodes.cpython-311.pyc | Bin 0 -> 2539 bytes .../yaml/__pycache__/parser.cpython-311.pyc | Bin 0 -> 25772 bytes .../yaml/__pycache__/reader.cpython-311.pyc | Bin 0 -> 8942 bytes .../__pycache__/representer.cpython-311.pyc | Bin 0 -> 18372 bytes .../yaml/__pycache__/resolver.cpython-311.pyc | Bin 0 -> 9912 bytes .../yaml/__pycache__/scanner.cpython-311.pyc | Bin 0 -> 57126 bytes .../__pycache__/serializer.cpython-311.pyc | Bin 0 -> 6725 bytes .../yaml/__pycache__/tokens.cpython-311.pyc | Bin 0 -> 7262 bytes .../_yaml.cpython-311-x86_64-linux-gnu.so | Bin 0 -> 2466120 bytes .../python3.11/site-packages/yaml/composer.py | 139 + .../site-packages/yaml/constructor.py | 748 ++ .../python3.11/site-packages/yaml/cyaml.py | 101 + .../python3.11/site-packages/yaml/dumper.py | 62 + .../python3.11/site-packages/yaml/emitter.py | 1137 +++ .../python3.11/site-packages/yaml/error.py | 75 + .../python3.11/site-packages/yaml/events.py | 86 + .../python3.11/site-packages/yaml/loader.py | 63 + .../python3.11/site-packages/yaml/nodes.py | 49 + .../python3.11/site-packages/yaml/parser.py | 589 ++ .../python3.11/site-packages/yaml/reader.py | 185 + .../site-packages/yaml/representer.py | 389 + .../python3.11/site-packages/yaml/resolver.py | 227 + .../python3.11/site-packages/yaml/scanner.py | 1435 +++ .../site-packages/yaml/serializer.py | 111 + .../python3.11/site-packages/yaml/tokens.py | 104 + venv/lib64 | 1 + venv/pyvenv.cfg | 5 + 2263 files changed, 401112 insertions(+), 20 deletions(-) create mode 100644 omv_backup.log create mode 100644 venv/bin/Activate.ps1 create mode 100644 venv/bin/activate create mode 100644 venv/bin/activate.csh create mode 100644 venv/bin/activate.fish create mode 100755 venv/bin/autorandr create mode 100755 venv/bin/getmac create mode 100755 venv/bin/normalizer create mode 100755 venv/bin/ping3 create mode 100755 venv/bin/pip create mode 100755 venv/bin/pip3 create mode 100755 venv/bin/pip3.11 create mode 120000 venv/bin/python create mode 120000 venv/bin/python3 create mode 120000 venv/bin/python3.11 create mode 100755 venv/bin/wakeonlan create mode 100644 venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/REQUESTED create mode 100644 venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/__pycache__/autorandr.cpython-311.pyc create mode 100755 venv/lib/python3.11/site-packages/_cffi_backend.cpython-311-x86_64-linux-gnu.so create mode 100644 venv/lib/python3.11/site-packages/_distutils_hack/__init__.py create mode 100644 venv/lib/python3.11/site-packages/_distutils_hack/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/_distutils_hack/__pycache__/override.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/_distutils_hack/override.py create mode 100644 venv/lib/python3.11/site-packages/_yaml/__init__.py create mode 100644 venv/lib/python3.11/site-packages/_yaml/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/REQUESTED create mode 100644 venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/entry_points.txt create mode 100644 venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/autorandr.py create mode 100644 venv/lib/python3.11/site-packages/bcrypt-4.3.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/bcrypt-4.3.0.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/bcrypt-4.3.0.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/bcrypt-4.3.0.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/bcrypt-4.3.0.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/bcrypt-4.3.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/bcrypt/__init__.py create mode 100644 venv/lib/python3.11/site-packages/bcrypt/__init__.pyi create mode 100644 venv/lib/python3.11/site-packages/bcrypt/__pycache__/__init__.cpython-311.pyc create mode 100755 venv/lib/python3.11/site-packages/bcrypt/_bcrypt.abi3.so create mode 100644 venv/lib/python3.11/site-packages/bcrypt/py.typed create mode 100644 venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/certifi/__init__.py create mode 100644 venv/lib/python3.11/site-packages/certifi/__main__.py create mode 100644 venv/lib/python3.11/site-packages/certifi/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/certifi/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/certifi/__pycache__/core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/certifi/cacert.pem create mode 100644 venv/lib/python3.11/site-packages/certifi/core.py create mode 100644 venv/lib/python3.11/site-packages/certifi/py.typed create mode 100644 venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/entry_points.txt create mode 100644 venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/cffi/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/_imp_emulation.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/api.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/backend_ctypes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/cffi_opcode.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/commontypes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/cparser.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/error.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/ffiplatform.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/lock.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/model.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/pkgconfig.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/recompiler.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/setuptools_ext.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/vengine_cpy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/vengine_gen.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/__pycache__/verifier.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cffi/_cffi_errors.h create mode 100644 venv/lib/python3.11/site-packages/cffi/_cffi_include.h create mode 100644 venv/lib/python3.11/site-packages/cffi/_embedding.h create mode 100644 venv/lib/python3.11/site-packages/cffi/_imp_emulation.py create mode 100644 venv/lib/python3.11/site-packages/cffi/_shimmed_dist_utils.py create mode 100644 venv/lib/python3.11/site-packages/cffi/api.py create mode 100644 venv/lib/python3.11/site-packages/cffi/backend_ctypes.py create mode 100644 venv/lib/python3.11/site-packages/cffi/cffi_opcode.py create mode 100644 venv/lib/python3.11/site-packages/cffi/commontypes.py create mode 100644 venv/lib/python3.11/site-packages/cffi/cparser.py create mode 100644 venv/lib/python3.11/site-packages/cffi/error.py create mode 100644 venv/lib/python3.11/site-packages/cffi/ffiplatform.py create mode 100644 venv/lib/python3.11/site-packages/cffi/lock.py create mode 100644 venv/lib/python3.11/site-packages/cffi/model.py create mode 100644 venv/lib/python3.11/site-packages/cffi/parse_c_type.h create mode 100644 venv/lib/python3.11/site-packages/cffi/pkgconfig.py create mode 100644 venv/lib/python3.11/site-packages/cffi/recompiler.py create mode 100644 venv/lib/python3.11/site-packages/cffi/setuptools_ext.py create mode 100644 venv/lib/python3.11/site-packages/cffi/vengine_cpy.py create mode 100644 venv/lib/python3.11/site-packages/cffi/vengine_gen.py create mode 100644 venv/lib/python3.11/site-packages/cffi/verifier.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/entry_points.txt create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__init__.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__main__.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/api.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/cd.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/constant.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/legacy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/md.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/models.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/api.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/cd.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/cli/__init__.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/cli/__main__.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/constant.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/legacy.py create mode 100755 venv/lib/python3.11/site-packages/charset_normalizer/md.cpython-311-x86_64-linux-gnu.so create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/md.py create mode 100755 venv/lib/python3.11/site-packages/charset_normalizer/md__mypyc.cpython-311-x86_64-linux-gnu.so create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/models.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/py.typed create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/utils.py create mode 100644 venv/lib/python3.11/site-packages/charset_normalizer/version.py create mode 100644 venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE create mode 100644 venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE.APACHE create mode 100644 venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE.BSD create mode 100644 venv/lib/python3.11/site-packages/cryptography/__about__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/__pycache__/__about__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/__pycache__/fernet.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/fernet.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/__pycache__/_oid.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/_oid.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/backends/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/backends/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/backend.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/__pycache__/__init__.cpython-311.pyc create mode 100755 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust.abi3.so create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/binding.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/ciphers/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/algorithms.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/cmac.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/hashes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/hmac.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/padding.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_asymmetric.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_serialization.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/types.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/aead.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/base.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/modes.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/cmac.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/constant_time.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/hashes.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/hmac.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/argon2.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/keywrap.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/padding.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/poly1305.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/base.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/ssh.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/totp.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/py.typed create mode 100644 venv/lib/python3.11/site-packages/cryptography/utils.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__init__.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/base.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/certificate_transparency.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/extensions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/general_name.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/name.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/ocsp.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/oid.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/verification.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/base.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/certificate_transparency.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/extensions.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/general_name.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/name.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/ocsp.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/oid.py create mode 100644 venv/lib/python3.11/site-packages/cryptography/x509/verification.py create mode 100644 venv/lib/python3.11/site-packages/distutils-precedence.pth create mode 100644 venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/INSTALLER create mode 100755 venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/LICENSE create mode 100755 venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/REQUESTED create mode 100755 venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/WHEEL create mode 100755 venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/entry_points.txt create mode 100755 venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/top_level.txt create mode 100755 venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/zip-safe create mode 100755 venv/lib/python3.11/site-packages/getmac/__init__.py create mode 100755 venv/lib/python3.11/site-packages/getmac/__main__.py create mode 100644 venv/lib/python3.11/site-packages/getmac/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/getmac/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/getmac/__pycache__/getmac.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/getmac/__pycache__/shutilwhich.cpython-311.pyc create mode 100755 venv/lib/python3.11/site-packages/getmac/getmac.py create mode 100755 venv/lib/python3.11/site-packages/getmac/shutilwhich.py create mode 100644 venv/lib/python3.11/site-packages/idna-3.10.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/idna-3.10.dist-info/LICENSE.md create mode 100644 venv/lib/python3.11/site-packages/idna-3.10.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/idna-3.10.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/idna-3.10.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/idna/__init__.py create mode 100644 venv/lib/python3.11/site-packages/idna/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/idna/__pycache__/codec.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/idna/__pycache__/compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/idna/__pycache__/core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/idna/__pycache__/idnadata.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/idna/__pycache__/intranges.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/idna/__pycache__/package_data.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/idna/__pycache__/uts46data.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/idna/codec.py create mode 100644 venv/lib/python3.11/site-packages/idna/compat.py create mode 100644 venv/lib/python3.11/site-packages/idna/core.py create mode 100644 venv/lib/python3.11/site-packages/idna/idnadata.py create mode 100644 venv/lib/python3.11/site-packages/idna/intranges.py create mode 100644 venv/lib/python3.11/site-packages/idna/package_data.py create mode 100644 venv/lib/python3.11/site-packages/idna/py.typed create mode 100644 venv/lib/python3.11/site-packages/idna/uts46data.py create mode 100644 venv/lib/python3.11/site-packages/nacl/__init__.py create mode 100644 venv/lib/python3.11/site-packages/nacl/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/__pycache__/encoding.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/__pycache__/hash.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/__pycache__/hashlib.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/__pycache__/public.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/__pycache__/secret.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/__pycache__/signing.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/__pycache__/utils.cpython-311.pyc create mode 100755 venv/lib/python3.11/site-packages/nacl/_sodium.abi3.so create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__init__.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_aead.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_box.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_generichash.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_hash.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_kx.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_pwhash.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_scalarmult.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_secretbox.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_secretstream.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_shorthash.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_sign.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/randombytes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/sodium_core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_aead.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_box.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_core.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_generichash.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_hash.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_kx.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_pwhash.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_scalarmult.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_secretbox.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_secretstream.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_shorthash.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/crypto_sign.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/randombytes.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/sodium_core.py create mode 100644 venv/lib/python3.11/site-packages/nacl/bindings/utils.py create mode 100644 venv/lib/python3.11/site-packages/nacl/encoding.py create mode 100644 venv/lib/python3.11/site-packages/nacl/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/nacl/hash.py create mode 100644 venv/lib/python3.11/site-packages/nacl/hashlib.py create mode 100644 venv/lib/python3.11/site-packages/nacl/public.py create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/__init__.py create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/_argon2.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/argon2i.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/argon2id.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/scrypt.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/_argon2.py create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/argon2i.py create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/argon2id.py create mode 100644 venv/lib/python3.11/site-packages/nacl/pwhash/scrypt.py create mode 100644 venv/lib/python3.11/site-packages/nacl/py.typed create mode 100644 venv/lib/python3.11/site-packages/nacl/secret.py create mode 100644 venv/lib/python3.11/site-packages/nacl/signing.py create mode 100644 venv/lib/python3.11/site-packages/nacl/utils.py create mode 100644 venv/lib/python3.11/site-packages/paho/__init__.py create mode 100644 venv/lib/python3.11/site-packages/paho/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__init__.py create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/client.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/matcher.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/packettypes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/properties.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/publish.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/reasoncodes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/subscribe.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/subscribeoptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/client.py create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/matcher.py create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/packettypes.py create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/properties.py create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/publish.py create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/reasoncodes.py create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/subscribe.py create mode 100644 venv/lib/python3.11/site-packages/paho/mqtt/subscribeoptions.py create mode 100644 venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/PKG-INFO create mode 100644 venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/SOURCES.txt create mode 100644 venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/dependency_links.txt create mode 100644 venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/installed-files.txt create mode 100644 venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/not-zip-safe create mode 100644 venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/requires.txt create mode 100644 venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/REQUESTED create mode 100644 venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/paramiko/__init__.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/_version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/_winapi.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/agent.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/auth_handler.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/auth_strategy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/ber.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/buffered_pipe.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/channel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/client.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/common.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/compress.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/config.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/dsskey.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/ecdsakey.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/ed25519key.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/file.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/hostkeys.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_curve25519.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_ecdh_nist.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_gex.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_group1.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_group14.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_group16.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_gss.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/message.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/packet.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/pipe.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/pkey.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/primes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/proxy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/rsakey.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/server.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_attr.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_client.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_file.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_handle.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_server.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_si.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/ssh_exception.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/ssh_gss.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/transport.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/win_openssh.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/__pycache__/win_pageant.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/paramiko/_version.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/_winapi.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/agent.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/auth_handler.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/auth_strategy.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/ber.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/buffered_pipe.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/channel.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/client.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/common.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/compress.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/config.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/dsskey.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/ecdsakey.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/ed25519key.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/file.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/hostkeys.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/kex_curve25519.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/kex_ecdh_nist.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/kex_gex.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/kex_group1.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/kex_group14.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/kex_group16.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/kex_gss.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/message.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/packet.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/pipe.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/pkey.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/primes.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/proxy.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/rsakey.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/server.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/sftp.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/sftp_attr.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/sftp_client.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/sftp_file.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/sftp_handle.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/sftp_server.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/sftp_si.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/ssh_exception.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/ssh_gss.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/transport.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/util.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/win_openssh.py create mode 100644 venv/lib/python3.11/site-packages/paramiko/win_pageant.py create mode 100644 venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/REQUESTED create mode 100644 venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/entry_points.txt create mode 100644 venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/ping3/__init__.py create mode 100644 venv/lib/python3.11/site-packages/ping3/__main__.py create mode 100644 venv/lib/python3.11/site-packages/ping3/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/ping3/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/ping3/__pycache__/command_line.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/ping3/__pycache__/enums.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/ping3/__pycache__/errors.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/ping3/command_line.py create mode 100644 venv/lib/python3.11/site-packages/ping3/enums.py create mode 100644 venv/lib/python3.11/site-packages/ping3/errors.py create mode 100644 venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/LICENSE.txt create mode 100644 venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/REQUESTED create mode 100644 venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/entry_points.txt create mode 100644 venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/pip/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/__main__.py create mode 100644 venv/lib/python3.11/site-packages/pip/__pip-runner__.py create mode 100644 venv/lib/python3.11/site-packages/pip/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/__pycache__/__pip-runner__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__pycache__/build_env.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__pycache__/cache.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__pycache__/main.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__pycache__/pyproject.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/build_env.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cache.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/base_command.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/command_context.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/main.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/main_parser.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/parser.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/progress_bars.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/req_command.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/spinners.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/cli/status_codes.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/cache.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/check.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/completion.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/debug.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/download.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/hash.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/help.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/index.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/install.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/list.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/search.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/cache.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/check.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/completion.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/configuration.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/debug.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/download.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/freeze.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/hash.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/help.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/index.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/inspect.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/install.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/list.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/search.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/show.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/uninstall.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/commands/wheel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/configuration.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/base.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/installed.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/index/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/index/collector.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/index/package_finder.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/index/sources.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/locations/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/locations/_sysconfig.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/locations/base.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/main.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/base.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/_json.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/base.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_compat.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/link.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/candidate.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/direct_url.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/format_control.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/index.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/installation_report.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/link.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/scheme.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/search_scope.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/selection_prefs.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/target_python.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/models/wheel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/auth.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/cache.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/download.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/lazy_wheel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/session.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/utils.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/network/xmlrpc.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/check.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_editable.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_legacy.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_editable.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_legacy.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/check.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/freeze.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/install/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/legacy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/install/editable_legacy.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/install/legacy.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/operations/prepare.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/pyproject.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/constructors.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/req_file.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/req_install.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/req_set.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/base.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/base.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/resolver.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/provider.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/reporter.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/distutils_args.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/logging.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/misc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/models.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/_log.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/appdirs.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/compat.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/compatibility_tags.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/datetime.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/deprecation.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/direct_url_helpers.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/distutils_args.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/egg_link.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/encoding.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/entrypoints.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/filesystem.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/filetypes.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/glibc.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/hashes.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/inject_securetransport.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/logging.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/misc.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/models.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/packaging.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/unpacking.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/urls.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/virtualenv.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/utils/wheel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/git.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/subversion.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/vcs/versioncontrol.py create mode 100644 venv/lib/python3.11/site-packages/pip/_internal/wheel_builder.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/six.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/compat.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/certifi/core.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5freq.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5prober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/chardistribution.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetgroupprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/chardetect.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachine.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachinedict.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/cp949prober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/enums.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/escprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/escsm.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/eucjpprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrfreq.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwfreq.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312freq.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312prober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/hebrewprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/jisfreq.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabfreq.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/jpcntx.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/langbulgarianmodel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/langgreekmodel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhebrewmodel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhungarianmodel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/langrussianmodel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/langthaimodel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/langturkishmodel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/latin1prober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/macromanprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcharsetprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcsgroupprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcssm.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/languages.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/resultdict.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcharsetprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcsgroupprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/sjisprober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/universaldetector.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf1632prober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf8prober.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/chardet/version.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansi_test.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/initialise_test.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/isatty_test.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/utils.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/winterm_test.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/win32.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/compat.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/database.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/index.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/locators.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/markers.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/resources.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/util.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/version.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distro/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distro/__main__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/distro/distro.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/codec.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/compat.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/core.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/package_data.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/msgpack/ext.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/_manylinux.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/_musllinux.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/markers.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/tags.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/utils.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/packaging/version.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/py31compat.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__main__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/android.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/api.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/macos.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/unix.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/version.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/windows.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__main__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/cmdline.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/console.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/filter.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/filters/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatter.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/_mapping.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/bbcode.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/groff.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/html.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/img.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/irc.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/latex.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/other.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/rtf.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/svg.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/terminal.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/terminal256.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexer.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/_mapping.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/python.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/modeline.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/plugin.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/regexopt.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/scanner.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/sphinxext.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/style.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/styles/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/token.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/unistring.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pygments/util.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/actions.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/common.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/core.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/diagram/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/helpers.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/results.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/testing.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/unicode.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/util.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_compat.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_impl.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/api.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/help.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/models.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/__version__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/adapters.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/api.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/auth.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/certs.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/compat.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/cookies.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/help.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/hooks.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/models.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/packages.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/sessions.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/structures.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/requests/utils.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/providers.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/reporters.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/resolvers.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/structs.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__main__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/align.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/box.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/control.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/json.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/region.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/status.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/style.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/table.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/text.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_cell_widths.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_emoji_codes.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_emoji_replace.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_export_format.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_extension.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_inspect.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_log_render.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_loop.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_null_file.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_palettes.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_pick.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_ratio.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_spinners.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_stack.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_timer.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_win32_console.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_windows.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_windows_renderer.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/_wrap.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/abc.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/align.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/ansi.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/bar.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/box.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/cells.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/color.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/color_triplet.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/columns.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/console.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/constrain.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/containers.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/control.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/default_styles.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/diagnose.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/emoji.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/errors.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/file_proxy.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/filesize.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/highlighter.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/json.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/jupyter.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/layout.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/live.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/live_render.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/logging.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/markup.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/measure.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/padding.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/pager.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/palette.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/panel.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/pretty.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/progress.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/progress_bar.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/prompt.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/protocol.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/region.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/repr.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/rule.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/scope.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/screen.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/segment.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/spinner.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/status.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/style.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/styled.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/syntax.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/table.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/terminal_theme.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/text.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/theme.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/themes.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/traceback.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/rich/tree.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/six.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/_asyncio.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/_utils.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/after.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/before.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/before_sleep.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/nap.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/retry.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/stop.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/tornadoweb.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tenacity/wait.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tomli/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tomli/_parser.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tomli/_re.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/tomli/_types.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/typing_extensions.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/_version.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/request.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/response.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/proxy.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/ssltransport.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/vendor.txt create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 venv/lib/python3.11/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 venv/lib/python3.11/site-packages/pip/py.typed create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/typing_extensions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/__pycache__/zipp.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_adapters.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_common.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_itertools.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/_legacy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/abc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/readers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__pycache__/simple.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_adapters.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_common.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_compat.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_itertools.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_legacy.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/abc.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/readers.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/simple.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/context.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__pycache__/functools.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/context.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/functools.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/text/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/more.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/more.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/recipes.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/tags.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/_manylinux.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/_musllinux.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/tags.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__main__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/android.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/api.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/android.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/api.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/macos.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/unix.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/version.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/platformdirs/windows.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/common.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/results.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__pycache__/util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/actions.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/common.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/core.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/diagram/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/helpers.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/results.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/testing.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/unicode.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/util.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/typing_extensions.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/_vendor/zipp.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/extern/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser-2.22.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/pycparser-2.22.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/pycparser-2.22.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/pycparser-2.22.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/pycparser-2.22.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/pycparser-2.22.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/pycparser/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/_ast_gen.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/_build_tables.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/ast_transforms.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/c_ast.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/c_generator.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/c_lexer.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/c_parser.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/lextab.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/plyparser.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/__pycache__/yacctab.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/_ast_gen.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/_build_tables.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/_c_ast.cfg create mode 100644 venv/lib/python3.11/site-packages/pycparser/ast_transforms.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/c_ast.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/c_generator.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/c_lexer.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/c_parser.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/lextab.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/__init__.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/__pycache__/cpp.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/__pycache__/ctokens.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/__pycache__/lex.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/__pycache__/yacc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/__pycache__/ygen.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/cpp.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/ctokens.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/lex.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/yacc.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/ply/ygen.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/plyparser.py create mode 100644 venv/lib/python3.11/site-packages/pycparser/yacctab.py create mode 100644 venv/lib/python3.11/site-packages/requests-2.32.3.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/requests-2.32.3.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/requests-2.32.3.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/requests-2.32.3.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/requests-2.32.3.dist-info/REQUESTED create mode 100644 venv/lib/python3.11/site-packages/requests-2.32.3.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/requests-2.32.3.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/requests/__init__.py create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/__version__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/_internal_utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/adapters.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/api.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/auth.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/certs.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/cookies.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/help.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/hooks.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/models.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/packages.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/sessions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/status_codes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/structures.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/requests/__version__.py create mode 100644 venv/lib/python3.11/site-packages/requests/_internal_utils.py create mode 100644 venv/lib/python3.11/site-packages/requests/adapters.py create mode 100644 venv/lib/python3.11/site-packages/requests/api.py create mode 100644 venv/lib/python3.11/site-packages/requests/auth.py create mode 100644 venv/lib/python3.11/site-packages/requests/certs.py create mode 100644 venv/lib/python3.11/site-packages/requests/compat.py create mode 100644 venv/lib/python3.11/site-packages/requests/cookies.py create mode 100644 venv/lib/python3.11/site-packages/requests/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/requests/help.py create mode 100644 venv/lib/python3.11/site-packages/requests/hooks.py create mode 100644 venv/lib/python3.11/site-packages/requests/models.py create mode 100644 venv/lib/python3.11/site-packages/requests/packages.py create mode 100644 venv/lib/python3.11/site-packages/requests/sessions.py create mode 100644 venv/lib/python3.11/site-packages/requests/status_codes.py create mode 100644 venv/lib/python3.11/site-packages/requests/structures.py create mode 100644 venv/lib/python3.11/site-packages/requests/utils.py create mode 100644 venv/lib/python3.11/site-packages/rust/Cargo.toml create mode 100644 venv/lib/python3.11/site-packages/rust/cryptography-cffi/Cargo.toml create mode 100644 venv/lib/python3.11/site-packages/rust/cryptography-keepalive/Cargo.toml create mode 100644 venv/lib/python3.11/site-packages/rust/cryptography-key-parsing/Cargo.toml create mode 100644 venv/lib/python3.11/site-packages/rust/cryptography-openssl/Cargo.toml create mode 100644 venv/lib/python3.11/site-packages/rust/cryptography-x509-verification/Cargo.toml create mode 100644 venv/lib/python3.11/site-packages/rust/cryptography-x509/Cargo.toml create mode 100644 venv/lib/python3.11/site-packages/setuptools-66.1.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/setuptools-66.1.1.dist-info/LICENSE create mode 100644 venv/lib/python3.11/site-packages/setuptools-66.1.1.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/setuptools-66.1.1.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/setuptools-66.1.1.dist-info/REQUESTED create mode 100644 venv/lib/python3.11/site-packages/setuptools-66.1.1.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/setuptools-66.1.1.dist-info/entry_points.txt create mode 100644 venv/lib/python3.11/site-packages/setuptools-66.1.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.11/site-packages/setuptools/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/_entry_points.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/_imp.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/_importlib.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/_itertools.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/_path.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/_reqs.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/archive_util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/build_meta.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/dep_util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/depends.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/discovery.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/dist.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/errors.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/extension.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/glob.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/installer.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/launch.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/logging.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/monkey.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/msvc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/namespaces.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/package_index.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/py34compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/sandbox.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/unicode_utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/__pycache__/windows_support.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_deprecation_warning.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/_collections.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/_functools.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/_log.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/_macos_compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/_msvccompiler.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/archive_util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/bcppcompiler.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/ccompiler.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/cmd.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/config.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/cygwinccompiler.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/debug.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/dep_util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/dir_util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/dist.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/errors.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/extension.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/fancy_getopt.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/file_util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/filelist.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/log.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/msvc9compiler.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/msvccompiler.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/py38compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/py39compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/spawn.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/sysconfig.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/text_file.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/unixccompiler.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/__pycache__/versionpredicate.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/_collections.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/_functools.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/_log.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/_macos_compat.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/_msvccompiler.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/archive_util.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/bcppcompiler.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/ccompiler.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/cmd.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/_framework_compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/bdist.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/bdist_dumb.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/bdist_rpm.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build_clib.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build_ext.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build_py.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/build_scripts.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/check.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/clean.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/config.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_data.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_egg_info.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_headers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_lib.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/install_scripts.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/py37compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/register.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/sdist.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/__pycache__/upload.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/_framework_compat.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/bdist.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/bdist_dumb.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/bdist_rpm.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/build.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/build_clib.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/build_ext.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/build_py.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/build_scripts.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/check.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/clean.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/config.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/install.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_data.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_egg_info.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_headers.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_lib.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_scripts.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/py37compat.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/register.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/sdist.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/command/upload.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/config.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/core.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/cygwinccompiler.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/debug.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/dep_util.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/dir_util.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/dist.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/errors.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/extension.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/fancy_getopt.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/file_util.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/filelist.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/log.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/msvc9compiler.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/msvccompiler.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/py38compat.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/py39compat.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/spawn.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/sysconfig.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/text_file.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/unixccompiler.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/util.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/version.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_distutils/versionpredicate.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_entry_points.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_imp.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_importlib.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_itertools.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_path.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_reqs.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/__pycache__/ordered_set.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/__pycache__/typing_extensions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/__pycache__/zipp.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_adapters.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_collections.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_functools.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_itertools.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_meta.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__pycache__/_text.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_collections.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_compat.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_functools.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_meta.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_text.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_adapters.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_common.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_itertools.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/_legacy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/abc.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/readers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__pycache__/simple.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_adapters.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_common.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_compat.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_itertools.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_legacy.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/abc.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/readers.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/simple.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/__pycache__/context.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/__pycache__/functools.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/context.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/functools.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/text/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/text/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/__pycache__/more.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/__pycache__/recipes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/more.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/recipes.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/ordered_set.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/tags.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/_manylinux.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/_musllinux.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/tags.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/common.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/core.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/results.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__pycache__/util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/actions.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/common.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/core.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/diagram/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/helpers.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/results.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/testing.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/unicode.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/util.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/__pycache__/_parser.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/__pycache__/_re.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/__pycache__/_types.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/_parser.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/_re.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/_types.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/typing_extensions.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/_vendor/zipp.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/archive_util.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/build_meta.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/cli-32.exe create mode 100644 venv/lib/python3.11/site-packages/setuptools/cli-64.exe create mode 100644 venv/lib/python3.11/site-packages/setuptools/cli-arm64.exe create mode 100644 venv/lib/python3.11/site-packages/setuptools/cli.exe create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/alias.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/build.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/build_clib.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/build_ext.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/build_py.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/develop.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/dist_info.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/easy_install.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/editable_wheel.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/egg_info.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/install.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/install_lib.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/install_scripts.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/py36compat.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/register.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/rotate.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/saveopts.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/sdist.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/setopt.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/test.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/upload.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/__pycache__/upload_docs.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/alias.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/bdist_egg.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/bdist_rpm.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/build.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/build_clib.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/build_ext.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/build_py.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/develop.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/dist_info.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/easy_install.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/editable_wheel.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/egg_info.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/install.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/install_egg_info.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/install_lib.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/install_scripts.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/launcher manifest.xml create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/py36compat.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/register.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/rotate.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/saveopts.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/sdist.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/setopt.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/test.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/upload.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/command/upload_docs.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/__pycache__/_apply_pyprojecttoml.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/__pycache__/expand.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/__pycache__/pyprojecttoml.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/__pycache__/setupcfg.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/error_reporting.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/extra_validations.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/fastjsonschema_exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/fastjsonschema_validations.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__pycache__/formats.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/error_reporting.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/extra_validations.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/formats.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/expand.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/pyprojecttoml.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/config/setupcfg.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/dep_util.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/depends.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/discovery.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/dist.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/errors.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/extension.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/extern/__init__.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/extern/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/setuptools/glob.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/gui-32.exe create mode 100644 venv/lib/python3.11/site-packages/setuptools/gui-64.exe create mode 100644 venv/lib/python3.11/site-packages/setuptools/gui-arm64.exe create mode 100644 venv/lib/python3.11/site-packages/setuptools/gui.exe create mode 100644 venv/lib/python3.11/site-packages/setuptools/installer.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/launch.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/logging.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/monkey.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/msvc.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/namespaces.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/package_index.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/py34compat.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/sandbox.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/script (dev).tmpl create mode 100644 venv/lib/python3.11/site-packages/setuptools/script.tmpl create mode 100644 venv/lib/python3.11/site-packages/setuptools/unicode_utils.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/version.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/wheel.py create mode 100644 venv/lib/python3.11/site-packages/setuptools/windows_support.py create mode 100644 venv/lib/python3.11/site-packages/urllib3-2.3.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/urllib3-2.3.0.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/urllib3-2.3.0.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/urllib3-2.3.0.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/urllib3-2.3.0.dist-info/licenses/LICENSE.txt create mode 100644 venv/lib/python3.11/site-packages/urllib3/__init__.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/_base_connection.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/_collections.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/_request_methods.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/_version.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/connection.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/connectionpool.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/exceptions.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/fields.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/filepost.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/poolmanager.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/__pycache__/response.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/_base_connection.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/_collections.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/_request_methods.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/_version.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/connection.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/connectionpool.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/__init__.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/__pycache__/socks.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/__init__.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/__pycache__/connection.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/__pycache__/fetch.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/__pycache__/request.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/__pycache__/response.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/connection.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/fetch.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/request.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/response.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/pyopenssl.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/contrib/socks.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/exceptions.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/fields.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/filepost.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/http2/__init__.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/http2/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/http2/__pycache__/connection.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/http2/__pycache__/probe.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/http2/connection.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/http2/probe.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/poolmanager.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/py.typed create mode 100644 venv/lib/python3.11/site-packages/urllib3/response.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__init__.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/connection.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/proxy.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/request.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/response.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/retry.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/ssl_.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/ssltransport.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/timeout.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/url.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/util.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/__pycache__/wait.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/connection.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/proxy.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/request.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/response.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/retry.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/ssl_.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/ssl_match_hostname.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/ssltransport.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/timeout.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/url.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/util.py create mode 100644 venv/lib/python3.11/site-packages/urllib3/util/wait.py create mode 100644 venv/lib/python3.11/site-packages/wakeonlan-3.1.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.11/site-packages/wakeonlan-3.1.0.dist-info/LICENSE.rst create mode 100644 venv/lib/python3.11/site-packages/wakeonlan-3.1.0.dist-info/METADATA create mode 100644 venv/lib/python3.11/site-packages/wakeonlan-3.1.0.dist-info/RECORD create mode 100644 venv/lib/python3.11/site-packages/wakeonlan-3.1.0.dist-info/REQUESTED create mode 100644 venv/lib/python3.11/site-packages/wakeonlan-3.1.0.dist-info/WHEEL create mode 100644 venv/lib/python3.11/site-packages/wakeonlan-3.1.0.dist-info/entry_points.txt create mode 100755 venv/lib/python3.11/site-packages/wakeonlan/__init__.py create mode 100644 venv/lib/python3.11/site-packages/wakeonlan/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/wakeonlan/py.typed create mode 100644 venv/lib/python3.11/site-packages/yaml/__init__.py create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/__init__.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/composer.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/constructor.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/cyaml.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/dumper.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/emitter.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/error.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/events.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/loader.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/nodes.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/parser.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/reader.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/representer.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/resolver.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/scanner.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/serializer.cpython-311.pyc create mode 100644 venv/lib/python3.11/site-packages/yaml/__pycache__/tokens.cpython-311.pyc create mode 100755 venv/lib/python3.11/site-packages/yaml/_yaml.cpython-311-x86_64-linux-gnu.so create mode 100644 venv/lib/python3.11/site-packages/yaml/composer.py create mode 100644 venv/lib/python3.11/site-packages/yaml/constructor.py create mode 100644 venv/lib/python3.11/site-packages/yaml/cyaml.py create mode 100644 venv/lib/python3.11/site-packages/yaml/dumper.py create mode 100644 venv/lib/python3.11/site-packages/yaml/emitter.py create mode 100644 venv/lib/python3.11/site-packages/yaml/error.py create mode 100644 venv/lib/python3.11/site-packages/yaml/events.py create mode 100644 venv/lib/python3.11/site-packages/yaml/loader.py create mode 100644 venv/lib/python3.11/site-packages/yaml/nodes.py create mode 100644 venv/lib/python3.11/site-packages/yaml/parser.py create mode 100644 venv/lib/python3.11/site-packages/yaml/reader.py create mode 100644 venv/lib/python3.11/site-packages/yaml/representer.py create mode 100644 venv/lib/python3.11/site-packages/yaml/resolver.py create mode 100644 venv/lib/python3.11/site-packages/yaml/scanner.py create mode 100644 venv/lib/python3.11/site-packages/yaml/serializer.py create mode 100644 venv/lib/python3.11/site-packages/yaml/tokens.py create mode 120000 venv/lib64 create mode 100644 venv/pyvenv.cfg diff --git a/omv_backup.log b/omv_backup.log new file mode 100644 index 0000000..5712b8d --- /dev/null +++ b/omv_backup.log @@ -0,0 +1,146 @@ +04/06/2025 01:28:15 AM : INFO : script started +04/06/2025 01:28:15 AM : INFO : Test connection +04/06/2025 01:28:15 AM : INFO : False +04/06/2025 01:28:34 AM : INFO : script started +04/06/2025 01:28:34 AM : INFO : Test connection +04/06/2025 01:28:34 AM : INFO : False +04/06/2025 01:28:34 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'rpi5.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:28:34 AM : INFO : Sync rpi5.home.lan +04/06/2025 01:28:34 AM : INFO : Connected (version 2.0, client OpenSSH_9.2p1) +04/06/2025 01:29:00 AM : INFO : script started +04/06/2025 01:29:00 AM : INFO : Test connection +04/06/2025 01:29:00 AM : INFO : False +04/06/2025 01:29:00 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'rpi5.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:29:00 AM : INFO : Sync rpi5.home.lan +04/06/2025 01:29:00 AM : INFO : Connected (version 2.0, client OpenSSH_9.2p1) +04/06/2025 01:29:44 AM : INFO : script started +04/06/2025 01:29:44 AM : INFO : Test connection +04/06/2025 01:29:44 AM : INFO : False +04/06/2025 01:29:44 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'rpi5.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:29:44 AM : INFO : Sync rpi5.home.lan +04/06/2025 01:29:44 AM : INFO : Connected (version 2.0, client OpenSSH_9.2p1) +04/06/2025 01:29:44 AM : INFO : Authentication (publickey) successful! +04/06/2025 01:29:44 AM : INFO : total 148 + +04/06/2025 01:29:44 AM : INFO : drwx------ 14 root root 4096 Apr 3 22:07 . + +04/06/2025 01:29:44 AM : INFO : drwxr-xr-x 24 root root 4096 Dec 16 21:29 .. + +04/06/2025 01:29:44 AM : INFO : drwxr-xr-x 3 root root 4096 Aug 18 2024 .ansible + +04/06/2025 01:29:44 AM : INFO : -rw------- 1 root root 16245 Apr 1 09:42 .bash_history + +04/06/2025 01:29:44 AM : INFO : -rw-r--r-- 1 root root 571 Apr 10 2021 .bashrc + +04/06/2025 01:29:44 AM : INFO : drwx------ 4 root root 4096 Dec 9 22:06 .cache + +04/06/2025 01:29:44 AM : INFO : drwxr-xr-x 2 root root 4096 Mar 11 19:04 cert + +04/06/2025 01:29:44 AM : INFO : drwx------ 5 root root 4096 Dec 16 20:05 .config + +04/06/2025 01:29:44 AM : INFO : -rw-r--r-- 1 root root 996 Nov 9 16:17 crontab?raw=true + +04/06/2025 01:29:44 AM : INFO : drwxr-xr-x 3 root root 4096 Sep 4 2024 .dotnet + +04/06/2025 01:29:44 AM : INFO : -rw-r--r-- 1 root root 21596 Aug 17 2024 get-docker.sh + +04/06/2025 01:29:44 AM : INFO : drwx------ 3 root root 4096 Dec 19 11:26 .gnupg + +04/06/2025 01:29:44 AM : INFO : -rw-r--r-- 1 root root 178 Apr 25 2023 index.html + +04/06/2025 01:29:44 AM : INFO : -rw------- 1 root root 20 Apr 3 22:07 .lesshst + +04/06/2025 01:29:44 AM : INFO : drwxr-xr-x 3 root root 4096 Nov 14 18:20 .local + +04/06/2025 01:29:44 AM : INFO : -rw-r--r-- 1 root root 12653 Dec 16 21:27 omv.py + +04/06/2025 01:29:44 AM : INFO : -rw-r--r-- 1 root root 161 Jul 9 2019 .profile + +04/06/2025 01:29:44 AM : INFO : drwxr-xr-x 6 root root 4096 Dec 9 22:55 python + +04/06/2025 01:29:44 AM : INFO : -rw------- 1 root root 300 Dec 16 22:45 .python_history + +04/06/2025 01:29:44 AM : INFO : drwx------ 2 root root 4096 Mar 11 18:23 .ssh + +04/06/2025 01:29:44 AM : INFO : -rw-r--r-- 1 root root 0 Dec 16 20:54 .sudo_as_admin_successful + +04/06/2025 01:29:44 AM : INFO : drwxr-xr-x 5 root root 4096 Dec 9 22:06 venv + +04/06/2025 01:29:44 AM : INFO : drwx------ 3 root root 4096 Jul 4 2024 .vnc + +04/06/2025 01:29:44 AM : INFO : drwxr-xr-x 5 root root 4096 Nov 14 09:53 .vscode-server + +04/06/2025 01:29:44 AM : INFO : -rw-r--r-- 1 root root 268 Nov 12 20:10 .wget-hsts + +04/06/2025 01:29:44 AM : INFO : -rw-r--r-- 1 root root 6008 Jun 3 2024 zabbix-release_7.0-1+debian11_all.deb + +04/06/2025 01:29:44 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'nas.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:29:44 AM : INFO : Sync nas.home.lan +04/06/2025 01:29:44 AM : INFO : Connected (version 2.0, client OpenSSH_9.9) +04/06/2025 01:29:44 AM : INFO : Authentication (publickey) successful! +04/06/2025 01:30:37 AM : INFO : script started +04/06/2025 01:30:37 AM : INFO : Test connection +04/06/2025 01:30:37 AM : INFO : False +04/06/2025 01:30:37 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'rpi5.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:30:37 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'nas.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:30:37 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'rack.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:30:37 AM : INFO : Sync rack.home.lan +04/06/2025 01:30:37 AM : INFO : Connected (version 2.0, client OpenSSH_9.2p1) +04/06/2025 01:30:37 AM : INFO : Authentication (publickey) failed. +04/06/2025 01:30:37 AM : ERROR : Unknown exception: q must be exactly 160, 224, or 256 bits long +04/06/2025 01:30:37 AM : ERROR : Traceback (most recent call last): +04/06/2025 01:30:37 AM : ERROR : File "/home/jd/projects/omv_backup/venv/lib/python3.11/site-packages/paramiko/transport.py", line 2262, in run +04/06/2025 01:30:37 AM : ERROR : handler(m) +04/06/2025 01:30:37 AM : ERROR : File "/home/jd/projects/omv_backup/venv/lib/python3.11/site-packages/paramiko/auth_handler.py", line 404, in _parse_service_accept +04/06/2025 01:30:37 AM : ERROR : sig = self.private_key.sign_ssh_data(blob, algorithm) +04/06/2025 01:30:37 AM : ERROR : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +04/06/2025 01:30:37 AM : ERROR : File "/home/jd/projects/omv_backup/venv/lib/python3.11/site-packages/paramiko/dsskey.py", line 120, in sign_ssh_data +04/06/2025 01:30:37 AM : ERROR : ).private_key(backend=default_backend()) +04/06/2025 01:30:37 AM : ERROR : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +04/06/2025 01:30:37 AM : ERROR : ValueError: q must be exactly 160, 224, or 256 bits long +04/06/2025 01:30:37 AM : ERROR : +04/06/2025 01:31:44 AM : INFO : script started +04/06/2025 01:31:44 AM : INFO : Test connection +04/06/2025 01:31:44 AM : INFO : False +04/06/2025 01:31:44 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'rpi5.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:31:44 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'nas.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:31:44 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'rack.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:31:44 AM : INFO : Sync rack.home.lan +04/06/2025 01:31:44 AM : INFO : Connected (version 2.0, client OpenSSH_9.2p1) +04/06/2025 01:31:44 AM : INFO : Authentication (publickey) failed. +04/06/2025 01:31:44 AM : ERROR : Unknown exception: q must be exactly 160, 224, or 256 bits long +04/06/2025 01:31:44 AM : ERROR : Traceback (most recent call last): +04/06/2025 01:31:44 AM : ERROR : File "/home/jd/projects/omv_backup/venv/lib/python3.11/site-packages/paramiko/transport.py", line 2262, in run +04/06/2025 01:31:44 AM : ERROR : handler(m) +04/06/2025 01:31:44 AM : ERROR : File "/home/jd/projects/omv_backup/venv/lib/python3.11/site-packages/paramiko/auth_handler.py", line 404, in _parse_service_accept +04/06/2025 01:31:44 AM : ERROR : sig = self.private_key.sign_ssh_data(blob, algorithm) +04/06/2025 01:31:44 AM : ERROR : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +04/06/2025 01:31:44 AM : ERROR : File "/home/jd/projects/omv_backup/venv/lib/python3.11/site-packages/paramiko/dsskey.py", line 120, in sign_ssh_data +04/06/2025 01:31:44 AM : ERROR : ).private_key(backend=default_backend()) +04/06/2025 01:31:44 AM : ERROR : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +04/06/2025 01:31:44 AM : ERROR : ValueError: q must be exactly 160, 224, or 256 bits long +04/06/2025 01:31:44 AM : ERROR : +04/06/2025 01:32:42 AM : INFO : script started +04/06/2025 01:32:42 AM : INFO : Test connection +04/06/2025 01:32:42 AM : INFO : False +04/06/2025 01:32:52 AM : INFO : script started +04/06/2025 01:32:52 AM : INFO : Test connection +04/06/2025 01:32:52 AM : INFO : False +04/06/2025 01:32:52 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'rpi5.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:32:52 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'nas.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:32:52 AM : INFO : {'mode': 'manual', 'status': 'restore', 'bak_name': 's', 'host': 'rack.home.lan', 'cur_job': 'aaa', 'start_time': 1, 'end_time': 1, 'progress': 0, 'finished': 1, 'used_space': 1} +04/06/2025 01:32:52 AM : INFO : Sync rack.home.lan +04/06/2025 01:32:52 AM : INFO : Connected (version 2.0, client OpenSSH_9.2p1) +04/06/2025 01:32:52 AM : INFO : Authentication (publickey) failed. +04/06/2025 01:32:52 AM : ERROR : Unknown exception: q must be exactly 160, 224, or 256 bits long +04/06/2025 01:32:52 AM : ERROR : Traceback (most recent call last): +04/06/2025 01:32:52 AM : ERROR : File "/home/jd/projects/omv_backup/venv/lib/python3.11/site-packages/paramiko/transport.py", line 2262, in run +04/06/2025 01:32:52 AM : ERROR : handler(m) +04/06/2025 01:32:52 AM : ERROR : File "/home/jd/projects/omv_backup/venv/lib/python3.11/site-packages/paramiko/auth_handler.py", line 404, in _parse_service_accept +04/06/2025 01:32:52 AM : ERROR : sig = self.private_key.sign_ssh_data(blob, algorithm) +04/06/2025 01:32:52 AM : ERROR : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +04/06/2025 01:32:52 AM : ERROR : File "/home/jd/projects/omv_backup/venv/lib/python3.11/site-packages/paramiko/dsskey.py", line 120, in sign_ssh_data +04/06/2025 01:32:52 AM : ERROR : ).private_key(backend=default_backend()) +04/06/2025 01:32:52 AM : ERROR : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +04/06/2025 01:32:52 AM : ERROR : ValueError: q must be exactly 160, 224, or 256 bits long +04/06/2025 01:32:52 AM : ERROR : diff --git a/omv_backup_v4.py b/omv_backup_v4.py index 7f8e1c2..38b33c1 100644 --- a/omv_backup_v4.py +++ b/omv_backup_v4.py @@ -533,13 +533,26 @@ if _BACKUP: step = round(100 / c,1) progress = 0 - cmd = f"rsync -avz --delete {BACKUP_DIR} --link-dest {FULL_BACKUP_LATEST}/ --exclude=\"jellyfin/cache/transcodes\" --exclude=\"gitlab/logs/prometheus\" --exclude=\"home-assistant.log\" --exclude=\"gitlab/logs/*\" --exclude=\"esphome/config/.esphome\" --exclude=\".cache\" --exclude=\".git\" --exclude=\"var_lib_motioneye\" {NEW_BACKUP_DIR}" - with Popen(cmd, stdout=PIPE, bufsize=1, universal_newlines=True) as p: - for line in p.stdout: - print(line, end='') # process line here - - if p.returncode != 0: - raise CalledProcessError(p.returncode, p.args) + #cmd = f"rsync -avz --delete {BACKUP_DIR} --link-dest {FULL_BACKUP_LATEST}/ --exclude=\"jellyfin/cache/transcodes\" --exclude=\"gitlab/logs/prometheus\" --exclude=\"home-assistant.log\" --exclude=\"gitlab/logs/*\" --exclude=\"esphome/config/.esphome\" --exclude=\".cache\" --exclude=\".git\" --exclude=\"var_lib_motioneye\" {NEW_BACKUP_DIR}" + #cmd = [ 'rsync', '-avz','--info=progress2', BACKUP_DIR , NEW_BACKUP_DIR] + + cmd = ['rsync', '-avz', '--delete', BACKUP_DIR, '--link-dest', FULL_BACKUP_LATEST, '--exclude="jellyfin/cache/transcodes"', '--exclude="gitlab/logs/prometheus"', '--exclude="home-assistant.log"', '--exclude="gitlab/logs/*"', '--exclude="esphome/config/.esphome"', '--exclude=".cache"', '--exclude=".git"', '--exclude="var_lib_motioneye"', NEW_BACKUP_DIR] + #print(cmd) + process = subprocess.Popen(cmd, + stdout=subprocess.PIPE) + while process.poll() is None: + line = process.stdout.readline().decode("utf-8").split("/") + print(line[0]) + if line[0] in apps: + logging.info(f"Working on app {line[0]}") + apps.remove(line[0]) + #print(len(apps)) + topic = "sectorq/amd/backups" + msg = {"mode":_MODE, "status":"started","bak_name":"complete","host":host,"cur_job":b,"sub":line[0],"start_time":STARTTIME,"end_time":"in progress","progress":round(progress),"finished":",".join(finished)} + send_mqtt_message(msg) + progress = progress + step + # input(apps) + # for a in apps: # logging.info(f"App {a}") @@ -621,6 +634,7 @@ if _BACKUP: cmnd = "/myapps/venv/bin/python3 /myapps/omv_backup.py -r all" topic = "sectorq/amd/backups" for s in servers: + #if s != "rack.home.lan": if s == "m-server.home.lan": continue elif s == "nas.home.lan": @@ -638,11 +652,13 @@ if _BACKUP: # Connect to router using username/password authentication. logger.info(f"Sync {s}") print(f"Sync {s}") + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + pkey = paramiko.RSAKey.from_private_key_file("/home/jd/.ssh/id_rsa") ssh.connect(s, username=user, - look_for_keys=True, + look_for_keys=False, allow_agent=False, - key_filename="/root/.ssh/id_rsa") + pkey=pkey) print(cmnd) ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmnd) for line in iter(ssh_stdout.readline, ""): @@ -683,18 +699,20 @@ if _BACKUP: # pass if _SSH_TEST: user = "root" - cmnd = "/myapps/venv/bin/python3 /myapps/omv_backup.py -r all" + cmnd = "ls -la" topic = "sectorq/amd/backups" for s in servers: - if s == "m-server.home.lan": - continue - elif s == "nas.home.lan": - user = "admin" - cmnd = "/share/Data/__GITLAB/omv_backup/venv/bin/python3 /share/Data/__GITLAB/omv_backup/omv_backup.py -r all" + # if s == "m-server.home.lan": + # continue + # elif s == "nas.home.lan": + # user = "admin" + # cmnd = "/share/Data/__GITLAB/omv_backup/venv/bin/python3 /share/Data/__GITLAB/omv_backup/omv_backup.py -r all" msg = {"mode":_MODE, "status":"restore","bak_name":"s","host":s,"cur_job":"aaa","start_time":1,"end_time":1,"progress":0,"finished":1,"used_space":1} logging.info(msg) send_mqtt_message(msg) + if s != "rack.home.lan": + continue if is_port_open(s,22): ssh = paramiko.SSHClient() ssh.load_system_host_keys() @@ -703,11 +721,13 @@ if _SSH_TEST: # Connect to router using username/password authentication. logger.info(f"Sync {s}") print(f"Sync {s}") + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + pkey = paramiko.RSAKey.from_private_key_file("/home/jd/.ssh/id_rsa") ssh.connect(s, username=user, - look_for_keys=True, + look_for_keys=False, allow_agent=False, - key_filename="/root/.ssh/id_rsa") + pkey=pkey) print(cmnd) ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmnd) for line in iter(ssh_stdout.readline, ""): @@ -715,4 +735,4 @@ if _SSH_TEST: print(line, end="") for line in iter(ssh_stderr.readline, ""): logger.info(line) - ssh.close() \ No newline at end of file + ssh.close() diff --git a/requirements.txt b/requirements.txt index 75974ff..451e0d9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,8 @@ ping3 requests getmac -paho-mqtt +paho-mqtt<2.0.0 autorandr wakeonlan -pyyaml \ No newline at end of file +pyyaml +paramiko diff --git a/venv/bin/Activate.ps1 b/venv/bin/Activate.ps1 new file mode 100644 index 0000000..b49d77b --- /dev/null +++ b/venv/bin/Activate.ps1 @@ -0,0 +1,247 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" diff --git a/venv/bin/activate b/venv/bin/activate new file mode 100644 index 0000000..e10779a --- /dev/null +++ b/venv/bin/activate @@ -0,0 +1,69 @@ +# 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 2> /dev/null + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV=/home/jd/projects/omv_backup/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:-}" + PS1='(venv) '"${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT='(venv) ' + export VIRTUAL_ENV_PROMPT +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 2> /dev/null +fi diff --git a/venv/bin/activate.csh b/venv/bin/activate.csh new file mode 100644 index 0000000..948e281 --- /dev/null +++ b/venv/bin/activate.csh @@ -0,0 +1,26 @@ +# 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; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV /home/jd/projects/omv_backup/venv + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/"bin":$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + set prompt = '(venv) '"$prompt" + setenv VIRTUAL_ENV_PROMPT '(venv) ' +endif + +alias pydoc python -m pydoc + +rehash diff --git a/venv/bin/activate.fish b/venv/bin/activate.fish new file mode 100644 index 0000000..8e557c7 --- /dev/null +++ b/venv/bin/activate.fish @@ -0,0 +1,69 @@ +# This file must be used with "source /bin/activate.fish" *from fish* +# (https://fishshell.com/); you cannot run it directly. + +function deactivate -d "Exit virtual environment 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" + set -e _OLD_FISH_PROMPT_OVERRIDE + # prevents error when using nested fish instances (Issue #93858) + if functions -q _old_fish_prompt + functions -e fish_prompt + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + end + + set -e VIRTUAL_ENV + set -e VIRTUAL_ENV_PROMPT + if test "$argv[1]" != "nondestructive" + # Self-destruct! + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV /home/jd/projects/omv_backup/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 + + # Output the venv prompt; color taken from the blue of the Python logo. + printf "%s%s%s" (set_color 4B8BBE) '(venv) ' (set_color normal) + + # Restore the return status of the previous command. + echo "exit $old_status" | . + # Output the original/"old" prompt. + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" + set -gx VIRTUAL_ENV_PROMPT '(venv) ' +end diff --git a/venv/bin/autorandr b/venv/bin/autorandr new file mode 100755 index 0000000..935780d --- /dev/null +++ b/venv/bin/autorandr @@ -0,0 +1,8 @@ +#!/home/jd/projects/omv_backup/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from autorandr import exception_handled_main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(exception_handled_main()) diff --git a/venv/bin/getmac b/venv/bin/getmac new file mode 100755 index 0000000..8a5deae --- /dev/null +++ b/venv/bin/getmac @@ -0,0 +1,8 @@ +#!/home/jd/projects/omv_backup/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from getmac.__main__ 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/normalizer b/venv/bin/normalizer new file mode 100755 index 0000000..199bb74 --- /dev/null +++ b/venv/bin/normalizer @@ -0,0 +1,8 @@ +#!/home/jd/projects/omv_backup/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from charset_normalizer import cli +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cli.cli_detect()) diff --git a/venv/bin/ping3 b/venv/bin/ping3 new file mode 100755 index 0000000..3d99d01 --- /dev/null +++ b/venv/bin/ping3 @@ -0,0 +1,8 @@ +#!/home/jd/projects/omv_backup/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from ping3.command_line 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 new file mode 100755 index 0000000..383f740 --- /dev/null +++ b/venv/bin/pip @@ -0,0 +1,8 @@ +#!/home/jd/projects/omv_backup/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main 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/pip3 b/venv/bin/pip3 new file mode 100755 index 0000000..383f740 --- /dev/null +++ b/venv/bin/pip3 @@ -0,0 +1,8 @@ +#!/home/jd/projects/omv_backup/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main 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/pip3.11 b/venv/bin/pip3.11 new file mode 100755 index 0000000..383f740 --- /dev/null +++ b/venv/bin/pip3.11 @@ -0,0 +1,8 @@ +#!/home/jd/projects/omv_backup/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main 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 new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/venv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/venv/bin/python3 b/venv/bin/python3 new file mode 120000 index 0000000..ae65fda --- /dev/null +++ b/venv/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/venv/bin/python3.11 b/venv/bin/python3.11 new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/venv/bin/python3.11 @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/venv/bin/wakeonlan b/venv/bin/wakeonlan new file mode 100755 index 0000000..533474f --- /dev/null +++ b/venv/bin/wakeonlan @@ -0,0 +1,8 @@ +#!/home/jd/projects/omv_backup/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from wakeonlan import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/LICENSE b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/LICENSE new file mode 100644 index 0000000..91e18a6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/LICENSE @@ -0,0 +1,174 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/METADATA b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/METADATA new file mode 100644 index 0000000..fb216d4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/METADATA @@ -0,0 +1,245 @@ +Metadata-Version: 2.1 +Name: PyNaCl +Version: 1.5.0 +Summary: Python binding to the Networking and Cryptography (NaCl) library +Home-page: https://github.com/pyca/pynacl/ +Author: The PyNaCl developers +Author-email: cryptography-dev@python.org +License: Apache License 2.0 +Platform: UNKNOWN +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Requires-Python: >=3.6 +Requires-Dist: cffi (>=1.4.1) +Provides-Extra: docs +Requires-Dist: sphinx (>=1.6.5) ; extra == 'docs' +Requires-Dist: sphinx-rtd-theme ; extra == 'docs' +Provides-Extra: tests +Requires-Dist: pytest (!=3.3.0,>=3.2.1) ; extra == 'tests' +Requires-Dist: hypothesis (>=3.27.0) ; extra == 'tests' + +=============================================== +PyNaCl: Python binding to the libsodium library +=============================================== + +.. image:: https://img.shields.io/pypi/v/pynacl.svg + :target: https://pypi.org/project/PyNaCl/ + :alt: Latest Version + +.. image:: https://codecov.io/github/pyca/pynacl/coverage.svg?branch=main + :target: https://codecov.io/github/pyca/pynacl?branch=main + +.. image:: https://img.shields.io/pypi/pyversions/pynacl.svg + :target: https://pypi.org/project/PyNaCl/ + :alt: Compatible Python Versions + +PyNaCl is a Python binding to `libsodium`_, which is a fork of the +`Networking and Cryptography library`_. These libraries have a stated goal of +improving usability, security and speed. It supports Python 3.6+ as well as +PyPy 3. + +.. _libsodium: https://github.com/jedisct1/libsodium +.. _Networking and Cryptography library: https://nacl.cr.yp.to/ + +Features +-------- + +* Digital signatures +* Secret-key encryption +* Public-key encryption +* Hashing and message authentication +* Password based key derivation and password hashing + +`Changelog`_ +------------ + +.. _Changelog: https://pynacl.readthedocs.io/en/stable/changelog/ + +Installation +============ + +Binary wheel install +-------------------- + +PyNaCl ships as a binary wheel on macOS, Windows and Linux ``manylinux1`` [#many]_ , +so all dependencies are included. Make sure you have an up-to-date pip +and run: + +.. code-block:: console + + $ pip install pynacl + +Faster wheel build +------------------ + +You can define the environment variable ``LIBSODIUM_MAKE_ARGS`` to pass arguments to ``make`` +and enable `parallelization`_: + +.. code-block:: console + + $ LIBSODIUM_MAKE_ARGS=-j4 pip install pynacl + +Linux source build +------------------ + +PyNaCl relies on `libsodium`_, a portable C library. A copy is bundled +with PyNaCl so to install you can run: + +.. code-block:: console + + $ pip install pynacl + +If you'd prefer to use the version of ``libsodium`` provided by your +distribution, you can disable the bundled copy during install by running: + +.. code-block:: console + + $ SODIUM_INSTALL=system pip install pynacl + +.. warning:: Usage of the legacy ``easy_install`` command provided by setuptools + is generally discouraged, and is completely unsupported in PyNaCl's case. + +.. _parallelization: https://www.gnu.org/software/make/manual/html_node/Parallel.html + +.. _libsodium: https://github.com/jedisct1/libsodium + +.. [#many] `manylinux1 wheels `_ + are built on a baseline linux environment based on Centos 5.11 + and should work on most x86 and x86_64 glibc based linux environments. + +Changelog +========= + +1.5.0 (2022-01-07) +------------------ + +* **BACKWARDS INCOMPATIBLE:** Removed support for Python 2.7 and Python 3.5. +* **BACKWARDS INCOMPATIBLE:** We no longer distribute ``manylinux1`` + wheels. +* Added ``manylinux2014``, ``manylinux_2_24``, ``musllinux``, and macOS + ``universal2`` wheels (the latter supports macOS ``arm64``). +* Update ``libsodium`` to 1.0.18-stable (July 25, 2021 release). +* Add inline type hints. + +1.4.0 (2020-05-25) +------------------ + +* Update ``libsodium`` to 1.0.18. +* **BACKWARDS INCOMPATIBLE:** We no longer distribute 32-bit ``manylinux1`` + wheels. Continuing to produce them was a maintenance burden. +* Added support for Python 3.8, and removed support for Python 3.4. +* Add low level bindings for extracting the seed and the public key + from crypto_sign_ed25519 secret key +* Add low level bindings for deterministic random generation. +* Add ``wheel`` and ``setuptools`` setup_requirements in ``setup.py`` (#485) +* Fix checks on very slow builders (#481, #495) +* Add low-level bindings to ed25519 arithmetic functions +* Update low-level blake2b state implementation +* Fix wrong short-input behavior of SealedBox.decrypt() (#517) +* Raise CryptPrefixError exception instead of InvalidkeyError when trying + to check a password against a verifier stored in a unknown format (#519) +* Add support for minimal builds of libsodium. Trying to call functions + not available in a minimal build will raise an UnavailableError + exception. To compile a minimal build of the bundled libsodium, set + the SODIUM_INSTALL_MINIMAL environment variable to any non-empty + string (e.g. ``SODIUM_INSTALL_MINIMAL=1``) for setup. + +1.3.0 2018-09-26 +---------------- + +* Added support for Python 3.7. +* Update ``libsodium`` to 1.0.16. +* Run and test all code examples in PyNaCl docs through sphinx's + doctest builder. +* Add low-level bindings for chacha20-poly1305 AEAD constructions. +* Add low-level bindings for the chacha20-poly1305 secretstream constructions. +* Add low-level bindings for ed25519ph pre-hashed signing construction. +* Add low-level bindings for constant-time increment and addition + on fixed-precision big integers represented as little-endian + byte sequences. +* Add low-level bindings for the ISO/IEC 7816-4 compatible padding API. +* Add low-level bindings for libsodium's crypto_kx... key exchange + construction. +* Set hypothesis deadline to None in tests/test_pwhash.py to avoid + incorrect test failures on slower processor architectures. GitHub + issue #370 + +1.2.1 - 2017-12-04 +------------------ + +* Update hypothesis minimum allowed version. +* Infrastructure: add proper configuration for readthedocs builder + runtime environment. + +1.2.0 - 2017-11-01 +------------------ + +* Update ``libsodium`` to 1.0.15. +* Infrastructure: add jenkins support for automatic build of + ``manylinux1`` binary wheels +* Added support for ``SealedBox`` construction. +* Added support for ``argon2i`` and ``argon2id`` password hashing constructs + and restructured high-level password hashing implementation to expose + the same interface for all hashers. +* Added support for 128 bit ``siphashx24`` variant of ``siphash24``. +* Added support for ``from_seed`` APIs for X25519 keypair generation. +* Dropped support for Python 3.3. + +1.1.2 - 2017-03-31 +------------------ + +* reorder link time library search path when using bundled + libsodium + +1.1.1 - 2017-03-15 +------------------ + +* Fixed a circular import bug in ``nacl.utils``. + +1.1.0 - 2017-03-14 +------------------ + +* Dropped support for Python 2.6. +* Added ``shared_key()`` method on ``Box``. +* You can now pass ``None`` to ``nonce`` when encrypting with ``Box`` or + ``SecretBox`` and it will automatically generate a random nonce. +* Added support for ``siphash24``. +* Added support for ``blake2b``. +* Added support for ``scrypt``. +* Update ``libsodium`` to 1.0.11. +* Default to the bundled ``libsodium`` when compiling. +* All raised exceptions are defined mixing-in + ``nacl.exceptions.CryptoError`` + +1.0.1 - 2016-01-24 +------------------ + +* Fix an issue with absolute paths that prevented the creation of wheels. + +1.0 - 2016-01-23 +---------------- + +* PyNaCl has been ported to use the new APIs available in cffi 1.0+. + Due to this change we no longer support PyPy releases older than 2.6. +* Python 3.2 support has been dropped. +* Functions to convert between Ed25519 and Curve25519 keys have been added. + +0.3.0 - 2015-03-04 +------------------ + +* The low-level API (`nacl.c.*`) has been changed to match the + upstream NaCl C/C++ conventions (as well as those of other NaCl bindings). + The order of arguments and return values has changed significantly. To + avoid silent failures, `nacl.c` has been removed, and replaced with + `nacl.bindings` (with the new argument ordering). If you have code which + calls these functions (e.g. `nacl.c.crypto_box_keypair()`), you must review + the new docstrings and update your code/imports to match the new + conventions. + + diff --git a/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/RECORD b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/RECORD new file mode 100644 index 0000000..81d62ef --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/RECORD @@ -0,0 +1,68 @@ +PyNaCl-1.5.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyNaCl-1.5.0.dist-info/LICENSE,sha256=0xdK1j5yHUydzLitQyCEiZLTFDabxGMZcgtYAskVP-k,9694 +PyNaCl-1.5.0.dist-info/METADATA,sha256=OJaXCiHgNRywLY9cj3X2euddUPZ4dnyyqAQMU01X4j0,8634 +PyNaCl-1.5.0.dist-info/RECORD,, +PyNaCl-1.5.0.dist-info/WHEEL,sha256=TIQeZFe3DwXBO5UGlCH1aKpf5Cx6FJLbIUqd-Sq2juI,185 +PyNaCl-1.5.0.dist-info/top_level.txt,sha256=wfdEOI_G2RIzmzsMyhpqP17HUh6Jcqi99to9aHLEslo,13 +nacl/__init__.py,sha256=0IUunzBT8_Jn0DUdHacBExOYeAEMggo8slkfjo7O0XM,1116 +nacl/__pycache__/__init__.cpython-311.pyc,, +nacl/__pycache__/encoding.cpython-311.pyc,, +nacl/__pycache__/exceptions.cpython-311.pyc,, +nacl/__pycache__/hash.cpython-311.pyc,, +nacl/__pycache__/hashlib.cpython-311.pyc,, +nacl/__pycache__/public.cpython-311.pyc,, +nacl/__pycache__/secret.cpython-311.pyc,, +nacl/__pycache__/signing.cpython-311.pyc,, +nacl/__pycache__/utils.cpython-311.pyc,, +nacl/_sodium.abi3.so,sha256=uJ6RwSnbb9wO4esR0bVUqrfFHtBOGm34IQIdmaE1fGY,2740136 +nacl/bindings/__init__.py,sha256=BDlStrds2EuUS4swOL4pnf92PWVS_CHRCptX3KhEX-s,16997 +nacl/bindings/__pycache__/__init__.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_aead.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_box.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_core.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_generichash.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_hash.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_kx.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_pwhash.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_scalarmult.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_secretbox.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_secretstream.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_shorthash.cpython-311.pyc,, +nacl/bindings/__pycache__/crypto_sign.cpython-311.pyc,, +nacl/bindings/__pycache__/randombytes.cpython-311.pyc,, +nacl/bindings/__pycache__/sodium_core.cpython-311.pyc,, +nacl/bindings/__pycache__/utils.cpython-311.pyc,, +nacl/bindings/crypto_aead.py,sha256=BIw1k_JCfr5ylZk0RF5rCFIM1fhfLkEa-aiWkrfffNE,15597 +nacl/bindings/crypto_box.py,sha256=Ox0NG2t4MsGhBAa7Kgah4o0gc99ULMsqkdX56ofOouY,10139 +nacl/bindings/crypto_core.py,sha256=6u9G3y7H-QrawO785UkFFFtwDoCkeHE63GOUl9p5-eA,13736 +nacl/bindings/crypto_generichash.py,sha256=9mX0DGIIzicr-uXrqFM1nU4tirasbixDwbcdfV7W1fc,8852 +nacl/bindings/crypto_hash.py,sha256=Rg1rsEwE3azhsQT-dNVPA4NB9VogJAKn1EfxYt0pPe0,2175 +nacl/bindings/crypto_kx.py,sha256=oZNVlNgROpHOa1XQ_uZe0tqIkdfuApeJlRnwR23_74k,6723 +nacl/bindings/crypto_pwhash.py,sha256=laVDo4xFUuGyEjtZAU510AklBF6ablBy7Z3HN1WDYjY,18848 +nacl/bindings/crypto_scalarmult.py,sha256=_DX-mst2uCnzjo6fP5HRTnhv1BC95B9gmJc3L_or16g,8244 +nacl/bindings/crypto_secretbox.py,sha256=KgZ1VvkCJDlQ85jtfe9c02VofPvuEgZEhWni-aX3MsM,2914 +nacl/bindings/crypto_secretstream.py,sha256=G0FgZS01qA5RzWzm5Bdms8Yy_lvgdZDoUYYBActPmvQ,11165 +nacl/bindings/crypto_shorthash.py,sha256=PQU7djHTLDGdVs-w_TsivjFHHp5EK5k2Yh6p-6z0T60,2603 +nacl/bindings/crypto_sign.py,sha256=53j2im9E4F79qT_2U8IfCAc3lzg0VMwEjvAPEUccVDg,10342 +nacl/bindings/randombytes.py,sha256=uBK3W4WcjgnjZdWanrX0fjYZpr9KHbBgNMl9rui-Ojc,1563 +nacl/bindings/sodium_core.py,sha256=9Y9CX--sq-TaPaQRPRpx8SWDSS9PJOja_Cqb-yqyJNQ,1039 +nacl/bindings/utils.py,sha256=KDwQnadXeNMbqEA1SmpNyCVo5k8MiUQa07QM66VzfXM,4298 +nacl/encoding.py,sha256=qTAPc2MXSkdh4cqDVY0ra6kHyViHMCmEo_re7cgGk5w,2915 +nacl/exceptions.py,sha256=GZH32aJtZgqCO4uz0LRsev8z0WyvAYuV3YVqT9AAQq4,2451 +nacl/hash.py,sha256=EYBOe6UVc9SUQINEmyuRSa1QGRSvdwdrBzTL1tdFLU8,6392 +nacl/hashlib.py,sha256=L5Fv75St8AMPvb-GhA4YqX5p1mC_Sb4HhC1NxNQMpJA,4400 +nacl/public.py,sha256=RVGCWQRjIJOmW-8sNrVLtsDjMMGx30i6UyfViGCnQNA,14792 +nacl/pwhash/__init__.py,sha256=XSDXd7wQHNLEHl0mkHfVb5lFQsp6ygHkhen718h0BSM,2675 +nacl/pwhash/__pycache__/__init__.cpython-311.pyc,, +nacl/pwhash/__pycache__/_argon2.cpython-311.pyc,, +nacl/pwhash/__pycache__/argon2i.cpython-311.pyc,, +nacl/pwhash/__pycache__/argon2id.cpython-311.pyc,, +nacl/pwhash/__pycache__/scrypt.cpython-311.pyc,, +nacl/pwhash/_argon2.py,sha256=jL1ChR9biwYh3RSuc-LJ2-W4DlVLHpir-XHGX8cpeJQ,1779 +nacl/pwhash/argon2i.py,sha256=IIvIuO9siKUu5-Wpz0SGiltLQv7Du_mi9BUE8INRK_4,4405 +nacl/pwhash/argon2id.py,sha256=H22i8O4j9Ws4L3JsXl9TRcJzDcyaVumhQRPzINAgJWM,4433 +nacl/pwhash/scrypt.py,sha256=fMr3Qht1a1EY8aebNNntfLRjinIPXtKYKKrrBhY5LDc,6986 +nacl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +nacl/secret.py,sha256=kauBNuP-0rb3TjU2EMBMu5Vnmzjnscp1bRqMspy5LzU,12108 +nacl/signing.py,sha256=kbTEUyHLUMaNLv1nCjxzGxCs82Qs5w8gxE_CnEwPuIU,8337 +nacl/utils.py,sha256=gmlTD1x9ZNwzHd8LpALH1CHud-Htv8ejRb3y7TyS9f0,2341 diff --git a/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/WHEEL b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/WHEEL new file mode 100644 index 0000000..b93bb21 --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/WHEEL @@ -0,0 +1,7 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: false +Tag: cp36-abi3-manylinux_2_17_x86_64 +Tag: cp36-abi3-manylinux2014_x86_64 +Tag: cp36-abi3-manylinux_2_24_x86_64 + diff --git a/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/top_level.txt new file mode 100644 index 0000000..f52507f --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyNaCl-1.5.0.dist-info/top_level.txt @@ -0,0 +1,2 @@ +_sodium +nacl diff --git a/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/LICENSE b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/LICENSE new file mode 100644 index 0000000..2f1b8e1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2017-2021 Ingy döt Net +Copyright (c) 2006-2016 Kirill Simonov + +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.11/site-packages/PyYAML-6.0.2.dist-info/METADATA b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/METADATA new file mode 100644 index 0000000..db029b7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/METADATA @@ -0,0 +1,46 @@ +Metadata-Version: 2.1 +Name: PyYAML +Version: 6.0.2 +Summary: YAML parser and emitter for Python +Home-page: https://pyyaml.org/ +Download-URL: https://pypi.org/project/PyYAML/ +Author: Kirill Simonov +Author-email: xi@resolvent.net +License: MIT +Project-URL: Bug Tracker, https://github.com/yaml/pyyaml/issues +Project-URL: CI, https://github.com/yaml/pyyaml/actions +Project-URL: Documentation, https://pyyaml.org/wiki/PyYAMLDocumentation +Project-URL: Mailing lists, http://lists.sourceforge.net/lists/listinfo/yaml-core +Project-URL: Source Code, https://github.com/yaml/pyyaml +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 :: Cython +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup +Requires-Python: >=3.8 +License-File: LICENSE + +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 persistence. diff --git a/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/RECORD b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/RECORD new file mode 100644 index 0000000..4f120b9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/RECORD @@ -0,0 +1,44 @@ +PyYAML-6.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyYAML-6.0.2.dist-info/LICENSE,sha256=jTko-dxEkP1jVwfLiOsmvXZBAqcoKVQwfT5RZ6V36KQ,1101 +PyYAML-6.0.2.dist-info/METADATA,sha256=9-odFB5seu4pGPcEv7E8iyxNF51_uKnaNGjLAhz2lto,2060 +PyYAML-6.0.2.dist-info/RECORD,, +PyYAML-6.0.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +PyYAML-6.0.2.dist-info/WHEEL,sha256=YWWHkv6sHhBDPNqgSfLklIm4KZnZJH4x2lIHOwCoU7Q,152 +PyYAML-6.0.2.dist-info/top_level.txt,sha256=rpj0IVMTisAjh_1vG3Ccf9v5jpCQwAz6cD1IVU5ZdhQ,11 +_yaml/__init__.py,sha256=04Ae_5osxahpJHa3XBZUAf4wi6XX32gR8D6X6p64GEA,1402 +_yaml/__pycache__/__init__.cpython-311.pyc,, +yaml/__init__.py,sha256=N35S01HMesFTe0aRRMWkPj0Pa8IEbHpE9FK7cr5Bdtw,12311 +yaml/__pycache__/__init__.cpython-311.pyc,, +yaml/__pycache__/composer.cpython-311.pyc,, +yaml/__pycache__/constructor.cpython-311.pyc,, +yaml/__pycache__/cyaml.cpython-311.pyc,, +yaml/__pycache__/dumper.cpython-311.pyc,, +yaml/__pycache__/emitter.cpython-311.pyc,, +yaml/__pycache__/error.cpython-311.pyc,, +yaml/__pycache__/events.cpython-311.pyc,, +yaml/__pycache__/loader.cpython-311.pyc,, +yaml/__pycache__/nodes.cpython-311.pyc,, +yaml/__pycache__/parser.cpython-311.pyc,, +yaml/__pycache__/reader.cpython-311.pyc,, +yaml/__pycache__/representer.cpython-311.pyc,, +yaml/__pycache__/resolver.cpython-311.pyc,, +yaml/__pycache__/scanner.cpython-311.pyc,, +yaml/__pycache__/serializer.cpython-311.pyc,, +yaml/__pycache__/tokens.cpython-311.pyc,, +yaml/_yaml.cpython-311-x86_64-linux-gnu.so,sha256=sZBsAqPs6VM8YzOkHpNL0qKIfR0zNM9gttjzjoVPaiI,2466120 +yaml/composer.py,sha256=_Ko30Wr6eDWUeUpauUGT3Lcg9QPBnOPVlTnIMRGJ9FM,4883 +yaml/constructor.py,sha256=kNgkfaeLUkwQYY_Q6Ff1Tz2XVw_pG1xVE9Ak7z-viLA,28639 +yaml/cyaml.py,sha256=6ZrAG9fAYvdVe2FK_w0hmXoG7ZYsoYUwapG8CiC72H0,3851 +yaml/dumper.py,sha256=PLctZlYwZLp7XmeUdwRuv4nYOZ2UBnDIUy8-lKfLF-o,2837 +yaml/emitter.py,sha256=jghtaU7eFwg31bG0B7RZea_29Adi9CKmXq_QjgQpCkQ,43006 +yaml/error.py,sha256=Ah9z-toHJUbE9j-M8YpxgSRM5CgLCcwVzJgLLRF2Fxo,2533 +yaml/events.py,sha256=50_TksgQiE4up-lKo_V-nBy-tAIxkIPQxY5qDhKCeHw,2445 +yaml/loader.py,sha256=UVa-zIqmkFSCIYq_PgSGm4NSJttHY2Rf_zQ4_b1fHN0,2061 +yaml/nodes.py,sha256=gPKNj8pKCdh2d4gr3gIYINnPOaOxGhJAUiYhGRnPE84,1440 +yaml/parser.py,sha256=ilWp5vvgoHFGzvOZDItFoGjD6D42nhlZrZyjAwa0oJo,25495 +yaml/reader.py,sha256=0dmzirOiDG4Xo41RnuQS7K9rkY3xjHiVasfDMNTqCNw,6794 +yaml/representer.py,sha256=IuWP-cAW9sHKEnS0gCqSa894k1Bg4cgTxaDwIcbRQ-Y,14190 +yaml/resolver.py,sha256=9L-VYfm4mWHxUD1Vg4X7rjDRK_7VZd6b92wzq7Y2IKY,9004 +yaml/scanner.py,sha256=YEM3iLZSaQwXcQRg2l2R4MdT0zGP2F9eHkKGKnHyWQY,51279 +yaml/serializer.py,sha256=ChuFgmhU01hj4xgI8GaKv6vfM2Bujwa9i7d2FAHj7cA,4165 +yaml/tokens.py,sha256=lTQIzSVw8Mg9wv459-TjiOQe6wVziqaRlqX2_89rp54,2573 diff --git a/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/REQUESTED b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/WHEEL b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/WHEEL new file mode 100644 index 0000000..a9a8652 --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.44.0) +Root-Is-Purelib: false +Tag: cp311-cp311-manylinux_2_17_x86_64 +Tag: cp311-cp311-manylinux2014_x86_64 + diff --git a/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/top_level.txt new file mode 100644 index 0000000..e6475e9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/PyYAML-6.0.2.dist-info/top_level.txt @@ -0,0 +1,2 @@ +_yaml +yaml diff --git a/venv/lib/python3.11/site-packages/__pycache__/autorandr.cpython-311.pyc b/venv/lib/python3.11/site-packages/__pycache__/autorandr.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e98ac35985fa655653c32302d1aae88deb8fa54 GIT binary patch literal 98710 zcmce<3sf9enkJZU5;B40{S+i19?45WZy^bcgpeg6BunUFgoF|zfs`OYk%=VIiL9!1 zpF$q0joqp?u9Ca5ysj!-r5@9>?lW|C^_HsI)uY|hvm3#QTC#IjXLQbP?Tlyk?8@z) zbG(|_sr~*Nk(m(*$Z~b>2EomUdvDzL{qKMO*ZpyNdYTT`@XtRV;cN7||CL^1msxrE zB4p6%-qmqBPCup_*Z1l5^lTV2^cmQ%vCqhUO?@WzYwk0%UrV2b{igJ#uwQGRmHnpn zrLy0&zBKl0>$9<6d!L>CruU_@-;BNt_M6$4$$lMu4*VL&vc|LfvRN5SV>#oweYxz} zJeD_}-I#Hw($F!sb*uAvq>9WR%ysIS;3m$taCm`mv^N!58u`!@M(RXR`E zW*u+T>t5CQOgDA6jIZi$>PK{(^#grhIet^|>*UhH6|t1nzdypuPvahal?L4r9cOz( z$JsqqKQbZ=|MJzhnM;2|*H_JAWFSVSrzR;zEemrXENjizbzC;Sc5yjy>$zOG4O|}F zMlK(26ITGYnJa|5g)4%)m22UO-_ZB9a3y%##+Aa|&TWFbgWJZHBV;G%#M>^e0`6|E z67C*^R3T(9w;6A(Ts7Q%Tn*g)TrJ!KTpipt&IPv}>DMFfOI!oqI=Du-2e~G=hqz|A zo#>UrvAPfIxh;s>^s3yfkQqDU6kb4Yya}zgxPVcZ2Me+Fk zZhqQD#Z4QX;Jv{KU%)*U>^u{24_#vwT3h5qys>Ge{9Zm@gG7FmsP%@24|tJn@Zj^3 zjK%uO1fOLma&O{2_|ESMo_$`@iTKY?-0Ah9*;#_l2^s__{xe6cVDY@pJTI?U?5~}Z zEt+;{Vr+u7EKq@NOT+J1-xHXcbOt8YmLsi+r$l(q_=GkY#b=#dn+Dy1p;2{1v1fkDr|OE~37$>Q zDL;DI$!5J9Pz-roXlX%t{C?`FG&H+XL~VK#K5B6oIOt`@b zzej&7btQ>Kpk1AbhYcf?lFrz6W=imfZRV)zl@S!rxg8*nnkVdC)WJzTqXJqbJD{%#mZ0ljf_nUy0I!uOkDFfJI{DL ztP0%35bGA!5@}8XZD?prPd}yKi%JepjEzm)q$a-Mwq$3q6Xd*HDi8y1JR6_=Kw}~!0$3dO@7bVa5P1U>!;+M&S%HBj82Su zwp``5peL?kP4#b?7{4(a%1 zLm}gDC}jLu+qs>(OTGOl){J4s7&3&ZfNL)8UWMNlGQLo}vOr2AsgU7ED8WzTrI;~j zLXAnGC`-tAjeX8zf6D34=;qD_QdQ|CeW3|U%Ig}nl00yGUFN7U=$&Mp6HWE{eVE(4 zcPMJaUMp%G^Y~mQ)?+;Nbks0D9ksA!%I~K{2wui}Z;S?-s`u#q8;In86V4soSQ*W9eAM89Ma28ZAT;VPI!K#<16r!JYGjU z+8Wb4Ro0&g2jexjaAD^=-9l!CV6AwuY}t5=XUjJsopp2eCFM---$vvw5;-4!=Y)`1 zDOf9?lQYdlb%iI*tn#cBO4T7 z1Sbhg8W@PC4GdsMHAPj4+6M-%WATzh_)SQNCxFQ}kkd@gR&utJvy&XwTLhBWl;Cse ziJWQt`)A!=KV_-Y|$0!CsH)M??Q-#`?aK#Wd^L{v*=5-gh0YhasR z3)?u8LI*k$(sO27B;*SaQ4QacVAxI_;IlET%0KpGbYXwGTp#B!4d5;sUCVv z@hV-5&TqPDkm-Fy{nO)*>gP)730Bs5I#1O#wX+4jzrj@>>OR+bM(yG13T~q1dT5J# zXwti7a4Ha(@L`$ew$yL&2Y}jsMh(u>tO8|nHBqk5nYz^Vd-A5$X`BvwFiy4OD-?;Qs48Gjg|e~f?s zui*d;+tTOu2)TQgcZs%xlIJ!^KSKN~gqWqx7DKI1RrXc=``qS+lWn#ti?L%_p<;rDb6nc`{bbkxFZ zg*b?G0j4x~W5@`MFg~S12L1vTYu!Ms1UmKLzZy?fJ4iXbYT%nfrmK`AyZ8+C+l(e` ziNa_CvkQ5~5e)cSWBym;)97ki%nxyGv1i|fR19`bH)fwPhs@#hn7{g0TiUA`v9K9S z$a0m|9Cm3+VEM{?^Qvf?VZBY1o4v(L1~R-+o|Mc#(V|WzL;PILiam#ESgg5#_QliF z0-k^~5&5f93B+3&ITAL?F3ynXHEr4oNCUG&-O{vMU^@n54^LgiK!Phbnlet5-4RbT zjrY)=Yyd=*Xf_DEBVM0-Y`_y6l~JRA+8?#z9eDllL^LHZI6#z`Xeu5+4)pjY2vqny zQ7b%#d8}zs%kaPuXoOMQ&;)}Vw46m#35KvWFPZ{U0g)}Ec4coG|BUt=QR{FlVZ($! zYMOKhMx!b2L6AQ2V8RythATxz5RX!Yj+1i?PShOWK^^7KvS*g2pQ_B@lme;Pni?!w zJNx3hl>ZuE_$`=QSi%d+uuHK=iZ|mYGhzemailgxYWB=_O7^P9xdr#S-|o5B6K;`m zt7i{KvJ37t0koypL<%?EPoFmfBg`pOyq>@-bGCEtXk=66{mas(ZPKPTy!OoYJT;}@ z3rE>}2K`}Uv|8A>QrIXKHcNExoHs{GEAIEqo9?AXDr!C~l`8h)8BxE)f{rgsopMmM z>vm*W$fOq#>?Qga(?6}`1+Ug}+{htm#82NbOClh})^z+e&*MELZY(6G6 zA6u~<6KuyKn=0fop;Shl{kR@}emmOZm-Vd&t98Gsb{yPoTz@5>XDhjSQ#PWX0mw?M z=ls@?e*HZQt@Md_cqXvNEiAO|=4M*+-3H|f z#3wP^$;H#wejip%(^$E6I?l{lwAhRGD^}V#=;ZS@ENx2icbqXC2eXO%P{Je}2g{7L zCun!p(d2YibJc!V(6rB4?T>;#)e3^vGksdnh~Ho&t(WNWAX0%h;3rxSs7P)n07A3# z)R+fEK1QW?ddGoq++bv^*y80JoCZ&X;0Jko1J0>QKT#dWThm4Zfk}VsmMtUTH%$#T zgV?!ca@0FE=A9h$@IEe(ARBD)`u$U&?jq_!*mIxs_01m0+`iMRI ztrKsaSZH4Cd~j6gy&&}t3cIf^TOQ_qS|;u}Dc~NxDl}XZi?50HG08qA*vIg>WCJR0 zNbQM#Un|-xC3~e{uT)Zezlt`yJH_H%Qt__U;erVIU$FOo zgfD-JfBEXmfp69t-(2{D<)0Kc555oqNb=2xFGK>8d<&R>Kp_(lC}IKv#Y{k;#8XNl z0!gtq!MAvgZy8dC06|jRawbmTWa0!BTp8+H36TO_UlkK6*vwS`^i@Xf7Z|VUBxAP+ zOHO+x!FXn*eUQm7oCdM^w89#BrVnWrH3Ivz1by+(;k>IG!NPLs^bAPCVZ5)sHlpET z>C$UOEH;RVodLjqe9=?qpsl$!HSO~9wqfoJ>TM1dyf)L?@2{_GKehk0nYN4lXPlSn z`_DAEf`)#7Fr~l0e`NpGwr9rv^9@n`07%CcnZ+P)4vqe)!KfLObPxZLA!=ye8r4s# z;oq~g{lqZ=FrRD-7N}deIT7%$Q3L-)ICpdeu__YI6Gzrlvo3A(ze#hvS@WIjd-)6I zh2Ua~nAId@HT^07;KtJM^3cPUf3^EpyMMX&)4k%B6VjFwVp@-s282YD5(5VA|A3XS zuKiYmJ#$&9xx8?+^`E(T8P#|7`x_J_@N525IlF1~#3q=y7L19itVxW;6-%wIy*2ju zPx4#k?DP%~L(Bw>94utSal^)2Vcij%B>tvhOlhKp{&6L#B5szlPc#4@5pF?@EIjJ zr+)~-4?b0nG+E-WloJ)=rk4whwkiCTTjT>iDN>4gy=aN5oTuZ0I?lTBSYe36$$L34 z>QFSywu(e^P|E!cl;f>7g#gsxl0BwX9xptgtDL7Mz^*|TB~`Muzi#U-s-e4SxTC4- zQbRvYli#PYtDF~(b|$5MYCk_gWT-Yw4X~ym>Jb|A3{r(d%uF;P zrL;~3sF8Tj@ECTIZ5R59UD@w^HFP2LstYf-y#5!i3-uC9MxDtEfBk}Ep~~6Z44fKV zPm-(vrb@h7c{CC;7PAeK8eqpN7uxM&zq3C8;9Ym|a=(lE#|2M}R(V*CkN5j;_4{Kl zuJ(04opk$rK+OBum{wktAKmE;43`0O3 z^w{$=XCp)YTo#D{C7bu&(llM7XdpKQJUlAMfT{e}Ht40r%*}_$fjH%JGhCCOoQNjB z!<|Pv<*JbkOdCc^J55qwf1p1=;}5_U9QqgPDGWtQ?K$JZeIHw#7wB_p1kF&xR@v(t z8k^!E9pYo74x416$7$+P*IvP9rfuCI4?DW8CQYcGLw5-s%8*oeoV9AY7idI+Sh!PVT*-e0c}51Z@14tiJR zJPHm5^*vE6>XbBGDuG&U-p)}PLJS{Jh7y%=K!YGO)A-%6DG~wb;9CS1nY^a9?VUF$ z8yU$^=c7eCnj64m8M>xKAPFWmY5SWo#$FDhF_X|RG!@zs{Tgp9SF?)>JKD<1e1rYG zNPp6Rl6w?Qr$`?AIu`Z)`?81Q9LTb9LzajqYYDbyksjY4D zwXL0qytd(fzcveIwKQ&JfAQa_aqF$E5SvMjgRN+avWiA6GFB6`wKQ*SRsJE)3~~~~ zBp?{h@SmueLGWNjQ`4c7Jw1mH^&akQI(W9XiKcqf*`AJb9Y?!64t5`I(riJAsKK_N z{dj;b1W`!wBwydt&`ZCk2P0(zsS!2pR7)(tSH|}(*f5%Up6T~L(}Nn=2C<8mkVDj_ zk~`!*nE-?(S9OjmG`eL zTwB~BHS81Ey?o{u7k+l(At!ZR5D&a69e7oc@60~I+Q+tfn%0T4#?B!{;@~IRhObb+ zf%mHa0~N!B+Da2{*2xsCl>IxxZ}azrPE7imd-qA zTWk{?t+*cz3f5C=+kgmLY=ry|NcLN7jNDbV!wnsuqJBT4^XkA8R}mSsqy;rsolD|- zU!#W5@x>bvDUc79hF#iGrq>9#JtxN`?)?ko$jU@nCg=E^Qp!bK=Nrz1I#^=CXuC3! z@k2^6;$kd_{c7vcnM9tN(a-9jabkJH`uly4v6m8jL>Krjqc82JIia!d`UyyM;B#;bYOP-hpL1Rnvc5=3X`0WX-nN-AO{Gt=i zyBIE@dTnB2Y5EyZvcm9PdvQt4zl1>&GW?NYu8bt`f|gq(+&PJ9LvjQlp-^c*GV(l9 zit61_{h*&lBvwc!z5?nJRZ^xd?a}}er4g|121W;zs`^25nt*D6zpXj(ofFgHi!Dg> zj!wuwC*MCXh4tZ<)k%?8Ee;dL4JLD9@iHWt{k!5)P2wuV8v-TAP zV;Ygbm#BW`Y59IHcOh$`W2s}gS32;Du!HV-{d|l31eaCaWsRmNrHp3WVx-fU_$U+L ziCU&6IUpR->|{zd$;f3Ua>U^wx) zmg7atJS`#2dV1|>qK1k}=m!P~ru^@f zT8IQ(Ou=0W1apIU8G~E2wNZMU!7XfkoyrV}`D;KDtt$VR8OW0i62Aavy(!kB8D;X` z&J&-i>%o>9_3X;-6WIM;=R(KA_2rI-z0%=Vh5dBTx6HfcC%CLD`G1B&XzE7m*FPz^ z<-bjp{X=q?M5G$9@(iYY{R-Ei!u&l-l0*z$MmB@_KOqmA-u(CBXeP8Hxfz3-p4-Y* z)S|>H0KCF9&bg?U8x?N2^TY1d&AV1M?-Dofkv8vvmzdorW%tdde2s~gKbx_3F2%9y z%NX^^*!74(izfkJjL(fQHR_s6JHNE}2xPnevr4v`M)aC18QjfoRT&-NNgCHoW{DX8A`%nQIr3NLBfn+y9$>BYC|etP&)!wiFA<0p~MK83({y& zc#`zU6mdwO%IzESJhL`6$wb0uDKb9Q)TIF>gxN7rGKdF-U)hL3tODN&@fz9^q2lo& zo#>WiAyzH7F{B?hfXCPbyw1Rn;VXU|4sf{wdY&L>lAP;s)Eq-T0FPj^1`5b)fU=uZ z0opigaT|e!9rzGfjB8N2PoMeIZ4Y)W)ht&5le_t|n}0F=^J%f+sMK)uQHxN2A|8>= z_s?jK_XN$*1M>uWgL}@qd7^~3I?u|ys~BNw+IgkgUrSUmFsY!`$W+ascm$oUNyKla z9Ul?Of`(g7!Ch-ok!$i5X*@GEH9`6&P2OEw{MadaI6jO5%AoWuJVnzIlroDl5BKv$Pn#NL<;oF9U^Ol&l2ghZVD`M~f5)O8^-2b?=b=k!0 zg>(1#Y}fpuNM_z@rgJ6J87>kt8>GyJr@GAaCdj|dr$tz&{^q0gtL~}Jl-~5%ktgK$2(O$M^Uwe0 zvRk@5Dmc8N!z($wc!)R(pEz>gwY_6o=n9{E@1*ExlpKwMqcM`1O~Qc{&{1HaheU@{ zaySKt^Ghfh&Dz#3Qv_%j%J*OJki1M0P$dyN^_Ko0y;SXvFI7gq1W;mKFdQ;4GK%qg z`uEoYy~>ThN(QHMdmzdd-^Qbg@oODXHdFA>3xH9DxGhg*MM0U(Xaca{76elj?tQhN zzm4p8HyjAYzeLX;lk*`t48fsE$f#d2Z6w;g@Sl+L=Wt>erLvQWQOFW}Kas;1ZitQ=$x$P)8{_S*={Khr3dGC` zNu?=-lEtt1;QJI_S{fVlFo5GTN?QC2>>3Q55xyo2LbdO1HDyUH(yWfhnG!km54 ztQ|gDydkzH_W=irJwvl21?xBl7>P<@PhwT=Nv?UONq&$(v5E;NufsCj#FB6W#08?b zeD+_6{zt3qXL$Hs)Hn&TWc@9O3DPRc9IvAm1If(Kk_QcxsBzpq88r_>#W}!}LJ*K= z+UxVbpg{e!hVBuyQb7h#s3h`f%=;vb89%;cW5$s?H%+31`H`Hw`E3jtPV9Y?eIDoJ ze`jieyFa$L6N+%FWxH3(b}t*nvi(xoelh2Olyl&2=WNI9_1WuBath?fNTy?c=R(Wd zd+*K&)>0WRnUHzxqFOV!M4OE@nhB(b5FY?cPl4jIizKNMdaNPc`d$4a#7)Sjk)Z7Q zP$D@V)2uKA&mCoWlPowh6d*H72oMUO~FFr4g%r)mpV;trD%(lC@f}Rx=;hiq$1r8zgIk5WAnV z`rJYPkvS&x9deW}_2iw`^Udm&M;*q%0%;&&Me0T*h2XN_E^nyy7h^^$jw61pMPLXfGRFEc>^3w>(vy7Bxr`*A3@%gcGi<^p?*i%HU~}hChj3ZS_U>hbWhY8R+B95_64r{a zTrGoxbZ6EVALsJ4?W<9Xqp#u`J&Be=E9PsznlaA3ifs}Uhkd2A5meeZk1GhPwz7#7 zl2wwye9?@vxb{k6PgGz38NpybIXVKwzx$o;GaY6EgTSBBCiF8B-Q@oYPSgSo_yBBo z=%cBF(*X~Y@%W5nmOp!$oIY}B8}k{%18BFvb}jIrA@ter;P8I{=L>>mY0#mY+_8Ok z(6aT`Ypu6tTsENOY{s+M8+8yjZ$QP(i<&7@e>8;v!l>sK$n8_(Jk|&x`V29cKfOj0gZ9q=Rro08FC!v2cI7QNf zYq9=cBk^FB2J2rRe0d1K1mS>NmtV{P3<y}>!s}a*+WkdZQFdu{I%mYH^fnVo5 zJoC%KPYWL%`em7Lrgx>ISLo`LRy|OxddeIO*`(g3onWgNdgG+f2`j&H+Pd_v+pZj^q!=Xo2kA@!AemW*N z&pg#x(ho3a-X6&*59`AfVWX6@dC|6#vt7v99;s|zy#C>q`Qwp-$}qQ5P%jkJM=F{Y z-HU^ZgHlDyf+bQ>yIRq*Qqi(hD^|2h6|KuHQpExI*EIfk{DbkOBVx^dsb>Fz?aPR3 zhfqAZ(6G=TTyP7X;gt)+!iC}Gx?gPh*_KBxv9(uf?GaOZlU&l%34{5 z$nmukJx2qR{=XoGgjQ`f8Dmzj!OFTgaRwGQ+{p${V&quHE+PvsKC*B{qG+76&gTKQ z1#dS;A*e`P88;!f%1&89ul+DZqQr<>Il)Kcuown=6SSjGA{8pUo@fp><^xImk)TsE zHrI)9hX!Uo>VHS~+w!XLk@sfq&#rZK zx)&mmAkCk~bK?xMl>^?!fxGTSPKgDRaAPcHR1$Wrzuak28UX*=1U8GWV;}2K?jrSj zNTtddGAQ8Rs*Q0#H&;ic0ByeQv}|ljVHFZUlCfafc$b=DA0HPm-QwYg$EGHx{0tT5 zTTz-GpuB|bDtg2~VExfdg+CNy4zb--4Ev?+Q#4)S-zmrtwMmQv$o~yqf-cP{cpf74 z1{&Z09ee{sh`28?Jotxa7IPnzuDV)RT&<#OzvS94Rv(b64?NVbRCfr~9Z;zY?^rm1 zdDji)nb|Io4W#P5tJUo*)$L++hg97`LhCN(i1rGQGfse7JQbLx$Tswtn5oM$CG@jnor4p9~UTZImAcJ;~quuH! zXwqsVD#3>bKmh3YX&ija7<~Dp`l?2ZI4B-GFl*y|Q!gvOh7A7ZKzgEFFPMu_lfETn zWT@6UxrFp;+AS!)Y*kO>CqE_AsI|xjkTI2P2cb!Pwlf10r0D}SI@RxV9l zhT)CtYgiwF($4r9^N5b9`J63*((%*er-o7qm1<3|5bnb+?f2UL1x#t1NeQKF(B5`! z3-h%={8XrMEC*;Cro2dfw5fq6-X5~}vow8_zTOywtcn%2$Vjw;-w2*Vs&4?knF(M1 zCC;(F>XbHKI3rQ=#FMt|!-PPtxwLV#^+9?yC1pE8+@|}%}a#xcI`W2=2J}HW%w7U;uUD$k#`|{iV`s>@A%j42rEv6aV0nO zAoXd=H3`azl1gbJrtGUqsTg0a31@k$>X`hMHh12peMc#asgCg7l*k!2bg7*-DIsNv z5UyNV>nzCE%9XM9slwOlIL>&Sig+CA9d(>aC61Y^ip4>U!bDDf8jlr;cSu8N!cou7 zN}H)-$-b=3s+H2$sM0u&G*s^(=cd7@Ru!W%l*ZL*{YDHyz-1QGrHYxZ#8mmkVs1D` z(zN3lHLp=hS+7d@4%e{Z98<;n|7eccLN=~Z*+%XQ*-*xMrHrb%g0-qDF?G2nw3ue@ zan1NHKT#+2)RyxP z+-`8I>k{pmTnel^g)`~kQ>Uxa%Fw`BWo+0NM; z{EnLZN1C3D3wDxefjSeIuKd29VtFkr3Mv;6MJ8D)cw*o2WbKCEi;JhoN} zPlNZ2Ou@c0OhA$zD;bV#?u8)kF|<^$>nqbl$&)_^md|1D7JzwNSa@uOVE{%)=?P9g zKecMABxoB>(&utc`Pk>ExqBF#>~->ieMl1hqbfrpkv@en0$FUaxw#h1*XGZNGz7au zB>NvV5tTN0;Q3`3nwT2nNU#x-%E;L_O&XG9la$#e_D56W8iz7<^$Ie0rf-rNux2Jr z&Nea8R3^+%Sw>Ct7)@gyatubQw=oY{q@1U*3B6boRXu8Ex@=L490tj7S#gn{rrPK) zMD?%ozrtfMQD zKzbi44Ad?a&a-SRUkMs&oB0P+CyOir#J|R>(W((tp#20BRCogqilD*)t)PM$&*e0> zzPRUF^a=v|P2MqS;kXtKLX@Em@WMFqmw&bTcmF2zKOgwFC=#xx?Yx8^5a@^SLtLC& z=xAcA^S^`#WFJU&m2q*_N;zy-1Dj?>=es2{;bjiQdZG^h2kl_nkS0VODm?Q2==u+< zemJyP{pWd0{9he@Sn(Gx|NP}Yn|bIKTV9r0UKVSPN;OBt%41UHvG^x!s~I(s9v3Wm zK~7WC@U*#N4SyLAO2gM{8$Q9b`+X%u(4-9zef@~q=O^T>FADPeG}7NwBN5dLja1kz z-^(5EXW!2cTNaIruY7#|C+9zU^}(xR(Qc_|cRUJf6#mEf&Xvb=R3s8sA=0gz9~$Mo z^pdNPD^8y6J$1Hs;Pl}mhcBFB_9~)wW?34F4I>0}X>o%#2gbr=G?o33U?Yqb0R%zH zm5&x{Q#x_7^YEEidV`d?howMV;7P_3`n4A);r#AThNp8gttHNWeHG5WS_AF>KafM*`&|%E$=bB) zs9AB;h>kkRQ8#OT;>eyg6Hm8bt_^hR)YtTp+^Z_k&JoI+~U*YuC`>jc-RFf}dY2gUrLlphov!6zg{4O4yd7a=G>W>aB* zCZ}MwbG9>*4pXOdm#7!WFYn#m@9bXK8P30dV6~)qrKDLb*(#N6T`k$QQnE`d*&~(g z5p(uRIeY2b-{Cr?}K*%{U+xgU?bL7pRCtIw$Q}>fSsw4A<@Alm7 zc@i&zHN9USsjOYJ!944H%7W$X%=yenR{nfQ%0fR`D70zY(tfGwC4t=!s~@FH2hRz( zE6>M1c#>1NPd;nwRH27GNGmOVGA7k^*nm{(+Q!gPk6PD+?tE?M;5x? zJ~@B#3F6-Rq+Dn@{ICNK{Z2hP|LJYv2#X6h7MI%X!rbfBygMSBU5j-eo3`ldT>l=Jg{5^hkmCXp80uDXg~Gn3>=~26=ZIH zJ0n&qYTaFt63BB&B@IGx<9rIn&O$M`Cl~}-t&!Z4urYjgu~n+xC6r@??VdjpDJWgI zaF1FbuQgIw9zL{~w|MJ8xlpxNEZn=05~;5J@%azVFP;~xcS_YeRjnWoH*5NkK2ovy z$AuphE>~DSBAu1PU_|0FIIRYxP`+~;qbgUQbj``1;S#~4d>=&sPnec1h9PAgb~HSeqg&4Duo;I;c#B;WV#NO!4?ub* zl^Kv_jp10R=9f$2%VUdpnfTXyU&y?{7Z5ShB6Tc&DK>{{0V1qDYp-MhB3?hYM=hEZ zN)j-FECH(*PlO*8&mSCWL&&7fk!@E8I0HzxF#MX>;D!uf)MUakr^YuCK4bAMaw*u_ z8^Y9PYc4JEF?mZplcF|Oo3P$V7OJ#4YPZTDty)7VC|O6ypeFIZSShqK!!JZSz}Avkz$IlCx0V;mL=D+CzlX8M*oOL4sth0jOGwFL&UU4%j#o@LYx;V=-{)J3St#a}^!kW3>)SC-1Q6Dmf0AcgTN z3uGthf{@sfEH%jtcCNQkNktm|TBHLUeA9XPepvDT;Qe8tdgl_q+#;48kjf6k!(`;U z3c0f~vHf;1^^|OPz3#8Wo%vIPVZfmdX?u#VfSbfIr`2NI%;Y z&{rroZRwen1eiYsv1EWG`qDMBr807TijpJ@JDM>(6%0-f#ADm#ceyTX6!?kOk-)NL z4BNplY*qUwYt1Be&zIDt3vie?U``$|wA_l-+}f4gT7d7|CMg#yojJ7&>lL}c)iQIi z^rd&{Ayxfu@SPy6qwB?jda0nE)`0?A12!#mhO_P;SuJf|DQ#Z#i>2G8((Nn&^3ac) zTb4F|uK3CL;&^z+qW;6(;oT2&u>hGCUb#=p6HxM;S<@3+_WT~nRvNY{T5vff z3rE5)OQlUxPBWo?z=g{$=rKwj-uhQFznb~w>z}@k7je^hY18@H9@-M@5-PVX9b8U% zXqEOH6-$muCC6sFBUp`Y3z<#0BL(F@G=(qx_|gZLelYOifau&QId?AkR(Bm+*>&vE zesR|Y3AgiAsi1G(g!*OW!!~qQHEzOi^Xnq7ToB~D&n*mImHMs;@;x39re>t^+XB0> z`q#f?!0KPnVZiDSms+F4@FWYUqm)$%n~wIJ`IiOzCR!=G!kvq?V&*m}bDLn@#>T#8 z!V`RF>tYukwBodUuA1nfX4-3Es1N4p6Kr3_R6ZE%5v0hd75rU#`X(HeYC3-h@4-Ut zehnli<+PzZn$=E30Rz3N_QQQb=Am!<=Xc!OCuWudKZPvMQs*Zp1?wTXN(4t@SG-E2 z@JXstf%-@e-l49PIz;BWkYq#{qj~L>EY=dMw1HJRYGV@(&;Z0)z5<`C;aoIZWyS!< zd{Ct1eQTl}ln6!C9D9%wp zyE42}%yvoHF2Uwn+f3L5D?N_}(>4<%C*M>z2j0K=Vq<~RD-0`beAPK9+OdQ9)LlCM zsye^*MO-v2O%r`Zmo`0rmzs&2P@PvZ)f3jh)p=^u(Z0P1OIbaXV#DW!+e~hQ7jH8* z+|gz#(VPF@+Dw(Fww1JRFVtqLaS>}Xtsx9xgJpp{xu?lh*I3hgXpx`Bfj|sLX37An zJl3S93R9=7#pM&JspF_~kCh!FOo2m891X`q;bbZ-{v@WRhHl?c3oWQy7-&^QK^4g>6j6Hy1~wi?_tCX{l>kn;-XySFCzTs(MK*=#UCJRtt`=6dV@|PDlkOgjdcrGov-*H;Q&5*#l@vT_&9_tS)|O57C7^WoK{&7ZiEVrAyc zO)nh2e~c(F)|$2OoO+(%$QKSc1kZ7D51SERabyfTxh0sR9;C22PlxC<;&Z-*hE5qA z&Dm0v5zCB3l_|3@e%D^f>*Pc^rciuE#T1G^%SD~YL^vxnrG@bLb8L$7P6PnCXvUWe zag{ZrD&VVLWcez1tf>^8p|u4``i~$KD`{rVYGw`EGdv|`Hc6R4PIZoh2DE*{!@N&R zSGJvyJ=hQ$5w1=CgHAW5KWO-SsO{hffvE=#Yukn}Y1TIXJ6zgB!A!{uwvWFCo85Su zAf5Qdk9%J4>rMJzPEno5^HNOOe(QBeu|bU*s0j>LY1hjxbsg51 zMAMQ!)HQsO_`^vSjI>K82u*(nB@L))XxgoH!*;WVpzH{uimFvYDv}WI02yP0Fp_@+ z$;gK9?Q2KQ++k9X(v+g^D@u{BF15N8$RT5$9B!!7SI6Hd9c9!W`HFJ1Ill7rC@$#-N0PkzP1&v@;!oQ5+YrZGANwR;c_+#EYGlT)lK<8o}Gq1{FyNdXR z&vR2tD++dLlZk(=oLmc85K0Aj1FWau(B2KxNj=G=w&@7r+n8Lz)Vc#q9~~wQuh4s~ zLLDKo5txkHI3c66?n-b6qqdL;%bF4c7n12Lv6SLP4w?{hC0P8NZ&T%!WDq4{J5qT~ zd5>QI89A6H5DaH@5MriMi!xG8OjE9s!p+n{e*SYjYjx$Kb|@{-sSpDcBUq$aWYt02 z*s25v+g-+JTe~#rQ?KA)gsiu^-vl#qd9&1dOknq;!&3JpLB5MFi}nG@J|Nf!*fw#Y z`hMeztwylb#J|L84kZuq_sH|NV~_AB6kQbU{gS<3u=i_JHp6F^sy}HGs@riZUkgQ7 zM7vwEy9K)&55#Hn+#46tt8g!xmwG?x7wS52$D%t0b>~-}?U}zC8-dMywvpDpcs+Ms6q=< z_h$qsCg(IN9K`wVNM%iUb9nQk&cE#zUcDrBUl!_y7j0l2j6K{T?Rr_Pds)EE4Z|BZ zC@7Vq#6QXN68{7)C@69FNnR0DpG$?jCfvz6ESevrFL6@cK7rko(g8}SjnV;MH0B_Y zd;PFSkXO67^TC1TT&baLC9h4$YfDb>1&b_&@D?iK0jEx%JazbV@6m*CKo;Rx`Q+TE z*zZ$p6A2gaM4gni(f-_&Ns;U899GV4m&~c*Yx!7 z$oU&MIF)J4?f1)KZG1UpTTjj%iono4+HA<@3|5if0eWqsCqhqU8)a;xL(YGPfB!6- zP$|sznO^~pQ)Ug?Cm(%e1&f?OBr#sS`t)K7QTxu0eg-^Tnrb;}NJyrWKM2j$HET5xoy?CXT`Zkbhb*)RD~15*CLos&-rS_M4`p7Z>|3)LbXPd>F!IP?LHTA#9>9qQk;hgRWTo>` z;KYN-BbNoGnKwPv!HEZvM`4P&kxq3~oa`bq>6fY8T?RAo@wj76F++DH?qusMSx*h4 zdh;QC#eOLDtT!&kJbUT&siD{mS}~k>D0%E*#nPKQSsQgGT7h|4Oy+uYRm`#5%&>0| zcZ%ajO`_GSp5lN>+6bszOTIae8Y$V42PqBBA^gWLGoFn2|H6mStks8BavEy%M~`ozEb~cQP~+?szwPXK|3SU30jKC`nn>tx#NF5_#;t5Dw zN^qOXb_bSYcI-LWXNm|c(=lTvk8so+>;;ncp`R~7>AHfcx0nE(v*|{#N_hn68-d}Z z*dgg;44K$p%m^}LyFD|*%4PFbDCwq*;FRz{fakx9#Q0a?z^o3PcFDJs2V(<~Syn!W z9BL1iZ8W0;A9;a)c@C2dE;Jc4lw#BAPoN92Xqt^M%YmHZgkpSz2WTj!WPJPf!t`Rb zn6gz$*}8OCNZE_~aZ$uNG}zDcUX;?Uagk&H|*6z)^l76ltAZk1}9k zM#?|Gnty2}pX}C%`B$X;E3-!)S2xB)CcfPx9|85{<4nwceJTk^Db6~va8?x7vs4nG zf)IqgSh5kQW=CEBQrCgKw(eJks)KdLU)Ad2YA6v_)QC->zeQ7#<{C|vG3>b^ml>Zd zL`%>Pn_)WB+NeHi5^t)#ld{{msh(iZiyuTWpui7lPi;P={iXd*reyGX-%;#jR3$_L z%0;9bV&8AGU88a-EU>C1u=YtLb ztrtpD3lc(Rb!lO7lob9`sa4eevK|_pGOM;Ahe>XvlV%fBmP^C*v<0Wm;)plG`6o$G z+dU?WgcFr?c*=+E2aL`_n|?ZGnVtzmlKd~uEGGJEO!k@yBw~LtJb^PVoNn-BeNBw8 zNhz%rK$peMWkxws26~~Z5A)ir1i>?>*9xq&w6M_vCDuFUgb@~|IS*;_MjWj{lH{<9 z3vqCbT)VuNV`ApbpRo!4e<7>j(M}H?8>c$Y!g-U)IuGLHyBpw2vu&bsNXHdc;o4Y@ zZ-VX2Y_pAF*Vl}*T+J+8W-r$wb)JEgG|ZEz?dUiijweGA3so5j$Q4-Mj$gJRtwsqWCj9-;2ERBiFRw-*A z;91sz&y9wx1B7L^F}OwyZF73Ufzgv$6C#?^NpjS7POzP0=lOo~P}ZSb-CyUX9jY+? zwNnpw2#w7yG%H}70`iUld}wio1VJ@fifMiRP!bLR+a>-?wR%gk3CM41fPqT3hn*Fs z1yJjocTCPv4O|k0I3oUO0Su17R$&3j_BlAqHP$?QmZtPjWPFgSO$Rkl$=oEB#`v5t zlbR33r9Hni+Li!e&kKn#Lr8U`_xd=LwmfQeTd3ORvnn!YedSlqw7!}a?VfF_H~~^68M#LM;+9UIW>&*mLCwF)<~r3|YNLUUC#U zpLI2{0A`8#7FV{C=e6b@>cC^vlVlq?#M} zD=1WO4-3KBN;rN7Cyd~fj8-gUu6Bsw$Oo;3lw;0_Zbv>?23^hduFdQicv46pISjq#yJ&S{$n_DVs}i&- zpa3R|#n`2^Q^LaOCP5V1tjUB3MlJbYD99q)rjW(84pW3#IIh%anrt$J9W!5qG+{>s z%1QxkU17?cb&X$EhtPYYHra!nAj4>nQM=+pdQ5&M(JHU9aAm2ioOK$Jzk)0Yv-JP> zc(|kck7>HRf_pCuo3@F$+ojy?tGRnta`%Y2tx|659UQevqV?vzk29PCMD8>8NEv$s z>mH!q_^3-L*}7D@G%n`CW_agn?y;5JV`6T%l-qsh1Y$rCs!pi7Bn*s+#p6=(xL_)H zoRTKk%EXj%DWyDIv650Hq*Sq_4?Mz}ep1XhDP=%Z=j7vzqPydB<9CicwinzzF?Zt5 z;m4pLwtQzuC~gw-o2C5bCB2xwO-kQJ1c+wl%<3cguEh!|zi~Bx+e-d6F@J}YzhmhY zDS!8@?Qwa-YI)mAdD}8ihF3|@{bIjx>9XJ+6fX@57YC&yLt;B8wR2**M=JM-*3wxE z?CX?Q&!)`V@D{PrlAPKMOFFZM=Nm+O*_V(5v*#0~q2>Lm#9$)doVVKE#9`HBv>o)E zGRx;QBL9ILJeAN>i3M`hscCCYXxYAlA&&_~KuWp~?iAH!!G+O*@7{ zf(XzF9@wR4SVl2kV^@NMxZzF&`zY;VHe>wSDHxJcFl~?mO};f(vIS#US60PQ)nNUv zldNm_^>c5i`G9ofF0*K@vMB-~TusZp$WooWq$R&=Q=BnF0Nn!4aEcm@Q1c{{YyBc+ z;LIaQND~l`Z`nJs*xAi6ZzV9 zHqg4+5ahOmRQ0XMb35~ zJmipp+GSop_n(=)Z+oz?d&14J?X(|N^z&c8%oQUj6Br<)@a@_xoQl@Tb$#7SUTgOvNfCFkFh zL)cT)L?Uo7HX9g_^Gu7{m5v?&VPceVl_)DeUyZ!LC}Jkj8P0?Qd`JRcem0ZrnP0BT zZz=Utx#FhYZ{uTY4$daA=2t)66}ubJ1;-Z$-CFOFc#BWEHbBk4mL#^Y$Agi zI`Zz=J7eMfO9jhyV*Vj1{}6Bzpit-E?SH2~+_;poTp;FkNO>KzX^%6r=5D@q`_0=6 z*Tl?vDHALPeQMsHSAJ6aFPr~G^TT3sTeq|gdQk9;*mHmD$W?|g>)XHTeONCZI3XQ4 zv3lVA%7OFBS!Aw0(bXp*M&6{DHz~n&T$dczp{tpd1L_JnurB`o=7rb9;s&X>VYPVY zO7Tvyc(+u%d%148SjO;379WaoaAf+*!TDF_56<0M*dq(%Em|Oz_jpg|>YlSJd(H~y zfcbI4@aXFB_{#9O;0uVuQ_}F1xaWqn=f=E6rp~<}G0BgJJ4Fw8h_dE&@_H~pRT1x|ESNscOk-M=j<4_kh0`@r^t^betZ+bop; z5j3R2#5tVVzly|oqBUv30mYA66(Dd8A`%mbf_bf^L}nL#*Z5w1oGc~*e#k&98c+5; z{~MZ!!-$!fh>q-gX$$*hePr-h%{!O_%m1ow4~V%tq}&~|sgG^xbGr#)UvP=G&5{ix zT%Wq*@uu?o7Z;1fP1~hS+h<>%@4edtWIHF;`N%VVQ8N?x|Kb8lBim<$LKx(!Vq%pr z&})DM6|HYoTPKOl?F&EHZ;p* zNo*&XMD@q4`!vEx4iyTf;lU8$_*4v8Sip=^HKJ+f=#*tf?PmhvP#gncpU$j9v>uwI zCh7n%A;IQ=bzp^~5j6*JSm>Cazy~8j$dvwF_<$$p7c@!#0)d#M89J+NzE(&n!VQh< zg}^&dNhkB|i&=uTp3XHp@#cwzDr~VOdl`2ADQUAizY%;RIN$Nj+jnk1&L|X$`h|gE zv1nM#7?CnY1nUSynBHoCvwdMF6u|bxXR$d8cHn2PQ{aI&4=m(?TTm$4DkU2P5cEpm zUmH56E^Qn@MSU^+O2@pL2$ENF#z7fU%#LpKAUi5r`4z*IJv3A@hq6 z?zOWOsr&$?HLqWukVU59`N1nhsZ~VL7-w?MsV1U_Opttp;cU1`@nOHu93cLyawXUS z4@}y{jBJ&uO9M-fnw&#sNDP-Fj>b39PV_a~fN)uM`B=yS*ndn;g?*<>FA-$5vWQfQ`{Gtl*=t{yDAQ&*4@uZ}Jj?*C#BXU8_$}3uEUM+4~0UfV+ zi&VTt%-bsEZGEcCN~cKV&chT3(tu3{DQD}_@s*r*A*cOe%OlI9*QA$8&`CIS5el8Z zb>uB)vA>RG`n&P)n$&(;z@2~QH+`3+K2C6WM2AOmc<}I~gh+!Wjq}zgIYkRFEK;-B zEadFL{iJT!(v9V7((YqY-SPRJa0^cFiEPvmA z^kD?7y?z9*pT@lzsZPf@FgS1xOnj9YD{4R)&-SiP4Men{$PWR888bVQtpyeon$>`1HWf!j8bEx* zQITOnx7J+R+B~162D=I0Lk>e~;+}?}mXhEuYD=8(*8(l|*BgC-wxUIwUD~g;Zy>^L zV9FO9HDj_`0I4g?;go_mwDtiEoaGJOgA{Gb$*lrq6B0f*!{(2njPrjsQbz@tDjSYFcVrYs zCbW=pe;jzKNJ=q63(a6ZF^#@dC@p2L3uUh__X?NCgz@XrWnQ{`8y*XR#a$oo`^mnK z4m>y@l<$F0(!F+TNyD9y)kt(zA*-dyM~5WZ2_!NbZOUYh9g}oD3y`j%7!hSLSg}z> z;+CqIfo191T4(>Pn>pb&E_B zs+7E+S@(~*#|JrgTd;h?GRhHH35f)Y5}tZRIDJMs)%$4bjx5~!kv?jK5qH=>_!GpC zyPZUWamJi)S|%i=;gun!vhL#`#rqfzzIl^^XxWWsk-5MjoN^cM^#rAfR4HWol7jxq z0{t>mE;YUvV55tXldi-TG*)yaz$#n zf`CYIIm{)&ww3v*S?8$7n&@CGvAp-Ik_Pd^%d3YktQ@`|9`2J4_aRU$dtEAf9W$TiWxASbAD2J^h>B!HA=5As{onD8}bT z{aO7Uh|$A^M19d-JQnT6SsM0DtM<(+_RV4MQmIhgCfeI2d%Iw7|Gy(_Aph`&(A@rT z;NgH!dseJHE7hLGcoqxKNeD%2+e#tBy>@wylXhw_M6@C_G{_-*f(erlwj~uxmm&B+ z9vbxwU2}TLz>0#a(Y9+4r+r_8$d$ZXg#f#IKrO(97~p=hVMid8B)NP*AZ7VAe!AIt z6bGVvL2*IIBqZPgi(`RpTAL=-Dw6~-CXy4(^f#Zi?9eDZh>BDXE{u8IcP!5o9vwLoNh6a?J z09YB}#*thVHROqA#;{eT`uz7W&eI6a6r)YSg0|}%r3>AQwZis8VrHk5*(umM1yko* zC=>6DMSMs{NULdAzzvY@+Dp4U#15T)ki*URQ>K7SWlZZi)9?L z(gHw-xZlOG90}N(SRxex3&7UDMoe%H2*mQWXcM_Nlm+b%;Sp>eqVcJ$c*;2_fOI$o z%zeY7THh3yoQG(bt%(%#c|6n%=fkRnqobLZpfN_E|Yiw-1Bn6#;r zZM2e{LcH=G&LyjdG5s?|Kn3Hmj+(U4b*(&zOR{{wuKLv!g{a`*fe zqLP@8K0Ch9C1q4e87<2e!P+ib+a+r| z9&nQ|Yb@^C@d6M^D7Eej0^V9MzmcUKika9LYd4p))xj8P1g%RuE(o}?i{GT)aDv{o zK|G9~q!l0Ir-`GDlriXxjUU<8R~^v2n3W=zY*}q>mk|J97Ib4>Mk7rH3aHD_V@j9B zM7~%CJXNxqx@rWG*6ArRqh89WSLV9Gd=OnjF3tABg?!L-BpacCsR#9s?OF3R3r&j_ zkYuFd9m_ifdxvQ6knA0Jp!0y@AG5yd(pXH4cUBb5iOymTDmw}K!1@${WYHsku6jjR zP1__U0yKTr&xM+6%|(csb}u}m6)ZwK%2#-!?~}0w^9K2=Ku|1AVq$2ABfmLh^jE5> z1~^AJP8~>mw^kWNn+_zDRgqO~y?!Z@%s%`RmLe-r4A7vGNV+@e@E_V6Di@J%wY{Oo zS(fyd?CY~t=~}=6ylIg2vq<$rk3Y326vU0z=9i+Dz(#&al#q?`Q9aYAeqPmUq)<(_U9I;nBX8f}!PtA^x&UD3}xrCWYiFF?ovDPeorI5p)Hju0VQe zo+aw5UjE#WGZiZ1ECyioBYkIdb{uZe3zha6!nd~zL6#|Fqgv~cB9%R>_+AH zqEDk|(BX()M9=7pBVc?P@@oTxfntX|`r;<~qU>Ju zY0O#Zvl|C>6{Gchl9;lmEdG-+&7MuVPioZgKaET2bi{w^&~z5-J}pzjSFDC;$YgVM z2Tn+@PBDa|RY=F$K^WZ-^CsDJJFOyqv((7}jg@xd8kmf<5Tm6RfUuab&!OX8*l$vQ z2x_O8#F3h?>!D->dW?*e6f}jH9qcXcyGTJRHBbqC|FK4+O{4ax_h$N<1ieGlJ9s^y ziBsn$0o<${v)1Mq)*+>G&bo3vgtA5n%T;LPdUa5h#nk=n=xQiS zJ~@3^NQn07b|B;9xpLsV$%t&DN)=V4b?TL03BOCf(G4xG3>2fBJRh|e=K&zIM}1%Y zdupbY88Vj)_+8S34ILw<@R>8lK9tgW;6|}xs5iR*`XmPF+MO@<6xf}gDT-=CO}Zsv_*OwR#BLNU2Mf&Q-hLNgKGjX zFisA5EF4lw3(KI+$=&S3hP6wg&)!1efzA^TzJE}+r}Mc(Ck`ASZ9gZbDQ+IkU9$2( zvIrGPWJ&%STfRah^vWpA1Z$t4nwT79=y9aC45_6~% z3NEOjK8YKGNJD=fG-`#@o(E#WGcyqh40)C_9?k3-WU@a7_ zh4b;esY)Sv)}tXsX@TtL|XpcKEIPs+dMx64-S?;&1rK<(iRH2j~t0O zLrJK9VZv&V#FA#z_}>snay?yrT3l@ceA@ZBrBm3IYJK z_vF~-${~PwmacdVPN0@~H2!tht!sp%w2HxrjDCa;k9K`%tysJPWg5cVOec(e%Ja%S zulPSvWab`UYQ*6?<0A* z%CDXJ=&oVIMa!h#zz(3Y%fiX^CY9f!mdW|iCP~a^&EZUXkgVK`&7{jGKu`Mm zstHcB@-5}nQ^gQlLg@3~j`VxhLK2=T9*gqZ%B!b}Aw~I)@`|NIH%S;6p#x%1G0P0# ze#oD%*{99KdE@SM%9SrhXwk)vSeS+lLd7hbnD(YM#EB%y3wJ70seGZaYUW1djQdY` zB9YIp(;37PRLpW3_iMWRx8zO3b9a{SI}Be51m`ou<#fMIU9vq8QANC3;Xs9+Tqxn9gYZ z#M$s#Fdp)I4*rsY{XKbYL>a_ zw&Px-K(CWWMyrErXHY%J?WUL1m$^@Ii#tyqTO%;u1ErrLl#If zazV?Fbqzx-p8tNl|G96Td+*#rkx2PQYW(JJuzS4U&5_0@%`KAv#7n(n6UD_lz9$INUzT9}6KXFQEJS{e!7Rt|vmZ@9X!c_}c?1R`1Eza(vJGx4z{OQZ~)^3n{g8>)&3e7c5O*@yt=+ zulJss+Z!;ZdavKT#T!fDuxhw-%XfvO<2UW#&Ex{bRr8m9nc(umcvGazLRr3lVWCqj zX;~?0TP|r^N)<|Q)hXD!M0?lmgILyd5|;dR!IX>dm;h5tXZv7)%9n628K`n_Bz+A% z(?S07n0OfoWiO)nT~W6Kpk9^ML40BObDgaGeHz^?8T>pO+)POok?C(n2NUH9AW z`J%U8y!WDzQ!D1wey?a@=ubz!JF=Ae;lxK1LPM9>&?V$_dG)K7RBxwmi=<#Mr(I2f zsT$uYA*EDIDV9YTOCK=2WnIY@wrj#=~A(5qcM#KPiUmW6_u2%Vc1Q^rg^#t9qmQinz7B%n)lAMWbrI57I*JsRf zx}tJDET>;OjmmUhWvf>1uG6$fb^bNBnzUe*2JN;DQUg#sPvZI|1N4DpXEIiLC=*Z0 z`;=yus-iG~P?_-1;{PP{Ky31#uI zwW!l9zt3iT^PQIf*^?cvQHINf_5EomQHD{rK>PkdOdUj8&H6@$oheRh%<3%Flj^jF z(wOZ`1u?+1zFH=LiOkA(natc6_8qmJ)b&v#oHk_{a`XkwGk)QZJX-bz8ErgTD$cZZ zzMy@^FZ@pkzwV9+ImS#GT@|t%|F6#!`oDM*x$7R?WJxs5leEYP9V52znJ0$CqWm&z z6Sm1s;m~N+Hc#AxbY+b=bs-R~or->*;mq`>N8gN|P1efJ>!Rl)k>=~MDZdbtD)cVp z9jM9ZJO*he;YotRjt&Yti8E=Fo1?LNV*0%&Eu@BX{He+*4JtuKr`ee$?=$1-*jSb6 zddBiok0*Pi?_??a=D3VWk^uKG(uv5^U3u>iwTF9RcdWJMk=DFB@5oY}D| z<`C_VcQt-#?BO&xAfKCu{g?eqdIaXENOi|RjNwa0kBOCC`s9{qx|}-2*VC0{?X)OG zxiFgl)=b7z)or>b!;|4;W1_rvmGLXDp0Q^C1$)Mwmpuj!ZG7hG`|+-Sxqj?4!*Rm?#I>5VXGurT}4D$qrj9-%&!QsBbDmtrhRM zO}iQ*nm>V1>&`A%RA{#h`{xtmgSem_GB-sYt);j>fp>@@4@nzndU8A%S9b$e#p@ut z{1GB?TY-%ZoO5T$nmn`VP6TO=bkE(o>gwmG2BBAKmx)o)rcl}#zeNErk@q$77*q6Z zI-|*oE2eM^sON9#(nFU&ffr1GCLw@`CHp5cbo)P20L&38ZaZBPQCVWPF44X3)8!Ay zE2m4+`mD(0KEqEiO({wqlICGq3#Kz~GT3I2 z1C3m#N>-TrB(Qe0S6~!MWPz_yE=b&~Uf->aJQ8-ih zV^=}S4yZH+hJP;nt4u866E@#$4iVT|<()gAhNYu6TiY;gPdU63%&WfpU*;L3EH7z_R z7VQv=_6w#S(bU5;_sEn%EN@{opFQ^z2W0g$`LZ_ z%9DX=sIQCmcHT@bU@7uH4^?RB%s;YM&ku?A&7yrbI0@!l$w1osTjsY2MU7$+EcQ0? z=Egw9aX_f2fL9I=%23`eUw0rQmoI>xlvvOz7Ig6$`QFn% zt>w=;`OP82uYBeZ++&S4t01sx>k44aH?=Naf0*$77lloS#Z8BO2Lkz3^XC@Zg=(-& zT0gB4J1+2jgJQ?fa{dsXKNP6jxj44ySsWAV4m_OU&kysXW5W3{{`@$ccz8mnoA3h- zaW$WCk+O)jAMyfrhi?z~O^)ZoKw_I$+Lxr|EsI=xF4dx&_C6 z(Xn61=@D~!1al7*;*D9p;&~l!tP_lNqOoqFeVK`VG7IF}7I*(>-w*bE+WYggpXKn+ zoe?_Eik)YL9p}Uy=Y*1Tg7v&;J~x78x7f6ghr2K)IL1ZCxR5g;=1d6YiH#Ep z1g)f$N6j64-hSW2{H6JU`2jJnfzNAr7&mwLSBcOvj(oa*S(nf2^55S*Zx)KTip5)D z>$7;rl6twgoiA>Gq|aE<=Pm2=Kylj!RAYUOsITGmHTVF~hEa@L-yfK-6-ryg(w4=e z%cZS+Y3n1S9WBnVl`kL@lZLGUQ}&9fVA%xCMgN6`cA^WKwuq)JylD%{#9H8Q6;kRU z&H@YA&%aaT8+ohtUhRCnkWwwCfCEW2CHX{v4AtGK^uftyR6Ev%J@S&*zh|Y8yRw1lh#_6){RmjrBxkD z>qa?Jrj;mW;dIoI*at*vUSYg`nqi}wDUf227Kb6^j!8l)0O$Y!1Nuh^o8xA59SP$w z6CA;MU_p%~qibRcVq_$c5QHvqgqvSb&Im_-H!7HAc)kW5dY>o}H&{~Kz9aWyL9 zgElEXhKokwjOx+oVfKke+r6!F7edl^43Xy>trY>ASt&^sUKNOpD7tw1!R%g zSh$4}epfGl{EWEkthj4{Zy*;*2CWwAc{91__bd%Cs5jTNR>WF|LScRD22KdV(~sY^ z$C~z9%qW}$iVh$Hw6q+#&=Ky*hSw(D}_?` zkE#?5XfpOThK+PqP0~=e(eMFOb*dI1(1k0d{n+3b1XkA_A6Q49n7VvrGNhy?)dlU^ z!ovn?FjOmXQmwG9*%v6-82Ozn>^ktBKEQ8>ySzNT}XXPrv}1`&17(4h=910%|EWRR%P z4Oi~bV)842Vt&E~gkhZ=xd(WQGD*a>s^xb|0jr!4PKEq87B(4-i3~%pg3}ZwOva>v+7vsSNi+z8 zWuwT0Ojgp&2FWQf?KTQwVIh9U8$WJFi%UU{zX01V5%2*KVVBUyq%T^P1V~N`cnBjH z8>VrBUNAasVEd(c;t-EnE=?KRzQ>a%quE0pC}RcNFbVbZ$4^l|uf*hx#y)m%ZfE+- zs+r`CYsr%w+ctoSqjhFP6ZUNNfI7>Jz8jOSXq{zJiF-_*M8=-ms9spjc@h<(Ejo`e z8o#o{7}Fu~&f8yE)8F>Sjc22#vn1j>#+HBM%tk+Z%CRM86j3lc!Q{&Ux~=^|u95`K z5MgC~7J_N$eLx4E`Re*b`cB1^WTb}iY`-(_|GjnmRsB*fY&1!mn$Y2~$j4V@JuAW~ z#$jbR65&&Xwa7cxm=rGjDib4g8pN+obmx+)@Lo55GGOrj(Ei)U=5uRkM*iybK z&3BG?2$P`DUAz|%bs)rIRX2|RAySHV03Bd*3ifhBi~|=5tEe~#<4A&GirqLh9>yyn z`Fh$hc+>>I7zXwyU=Qr;B2r><3;>R4omUcE3Z`X|qv*DaLS5=1hq`gHe0^}~XnX+G}$r2DfY*y#aB^`vGAX(F_N9WQy`NM*?B|c1`q@>!{S1F$g1-hVAlGuci*I-N z`{7BBZ9gPXA|`yw_-0Jd6q^rH=fkiEkagcld*Wg@T2BA8it9TE&`H z!QKi%#f(f}&Rqh@Nh<^2$e;FBvQHbxad;0%l|ZaUE*YQZXdSI+u=t2H$`s=y)LfI; zmW?zk;^d7MjWHRGQ5^+63OB(vyvy|=egzflAJFLfkQ`S5VndtDIxab(rel6+VboXU zfBs%=2#U~?2q*45HkC)MEr^@F3u_Mey$}^Sztm@BpFR7QxK1uxk;U6CU`2cXB z_~YlqW9NlK7sNvsgdG=Vr5S^0jnt61{{l}@n~^g3m+KhZf2EYMl2Ks<|A)5zL6iy? zhX|w={6mzFJMD#;s=BJM$A0Uo>KTi^A{BDr6W4AA^-eHo=}e;1{42c2Sm{8^aylhe zIu(+{ZGVf-z7CIoo7phq3~I>KwIqE`Lgw7Z6lR<}#zQ9>Z$+9UZ2p+;k|J`@Kmz7{ zfG}`L3})&JP-_m|WWx7B6J5Ic2w@J|%E{6dls)k|TtnAvcxWn8~xnm{vL0;(vWM73<9R$Gmt#PsmFE%WX{KiGI6G}pnxjxN=E1MDdn#R=Hb=L~`3 zif{J3*Yk~o_YV?W7c9!c6HE?>SRYu;$bN0=?iA#zVHD;$(Ok@o!o($Yr~`K54yO>p z1Nq)PK*(hH=EeT$`_&7!g)1NB@da&ytzERW^UMWIX)7lCvdIo9XH%(YD&?75wSybI z8E)a`Qp%Eb$@r9`w;6NCMPcb9jUe+EqNvK?YsyLZ=WQN?`8Lc)V;erG?q zqDw;2C9&udEOv*dQ%tIa>oqBqOo}Cw-a~;frstl(j<%)rA0F@?^p}dZ3eg4@xM15B z*xn|)Qv!A=502^fU2AXtI$!{a{XB0V7qFy&31`e$F%~Wx3;jDJ&L~wwQ6RejxbpVG zIcVZN$}S9@KdNt89Odix!@Y6EHzTB1i|N&Tdi7^Vz%aNZ92pRg49poHr58Z;(6EDf zP}-}inLFr1u@{J@3drL7(&k>Ad(pphAzdumDi-aWdlAA2#DoufU}!o@{e$ye_s14f z`TU)dqM_Fm$SCr6h#6%tc)oSV;&VSVMGJale{&SrOg-=PsfhFpXT+^%gel?z`Rl^YX>sSYEO%E0OAFlE zS|(wFGStT7a;oLDWkVis$Yb>sZ`cZkv0>|6*J?(N@8CRyPU<0dvSM#twj=9pqPC&o&Ha6jd*20WE z@)$$1v;z%o#6fb0dOPlhk63$@Q2nMiLx)^jBC5{-9vBAdwTE(x4uacLgo-7nui4nY zLMuk%D|3a=mQ}K5Xwqc|(|wTVO5=%JtNQ@*JMpNA8%J>|dC42c1+=<#<2s~_VFMO` zBE@TRmjO5~dAbukaexJf_AsEp*J?Fn-kDQ`)+^%!AD(PZ7~ETrz~(I2P9R)FVg3pE zZE~8x-zKM-WFlcgkRe0P;UpWmm%&Fo!aqa< z;Mj_cSTK?#BCV$+O~9Qf+zL%F9;BS0u78{{-KEvk5rm25vR$KM3lm$QQ5Pu(&W`SN zi&iIAL z|EcG@o)2$*bc?U-64LjI>3aq1KGC`l6TcR$Qh3B#Pw}PlfY&tIq1@%$>+iaEShSO< z8QiKRjZZ(sA3X^};ezFqXgS4OPCWq#xo-=fR0v0}?Di+z>k;j>u;T*9Ug>!_B%~h~ zEGI#z%2Wdh9Hz^3B>9Hi7>s99%_`8RSE^(YuO;G+=Bw<9ry1{;$*RT^xr431u7$Qy*tAqg=5 z4V8Q)GtEpIc8MH8_2@ePtb}T9VNBtf5dPuERGj}zRQRp3; zGs0R2?B&2>#wJ+St`U+8#N+~h_k#Kx2bYuU`Q-XQW|6=BUb6qD-|cscnGJK@f!y-> zlzSKE_s^f6-!JBFSu7HAch2>|!p5P1DPzTyw`_vco$q;=5taUi7l!%5wg~jxuXHN2 zb)(NgYAqw@&EeOF{YD|Z3Wh&nQwx}bTAx$;^Y{3B_~bf4UoYzGdFEC%x|jFO9sOF* z%RRH~PwL>Zm4S)~ZETJ4J7~U=)+W&d!$*|y|1>Op>T29kbRqc{!cnP|>k14DJJ=AQ z1zuW&Ie`wCplqN(Sc}_$y{}z=u2z0W85=d_I|}U*WoT%YM$!u~9~%DH;g_W_d=IRj z80%6q`VHPD(%PCM*7Tz5>;`XB9j!SOVbRK^V*?xpCH~)6YHeRj~IYQhpc0edV^B_?f-f5I%LfxR%&%}>6K`*vE9G>aLmdzx|H6wvcV!|3Z zNzwO{l;yQ{VtYyLOrA-)l{Br6=-2Aj*P4t)%)kU4O^&>0uV0hUT?D@mYf)t`A*K=O zYZxD*rJbyZo!}nWp|~5VgSDj%5rK`;xBl1>gU7=C`^oz7H^IJ^r!m4i^2EHOENk?F zAI+GZ7LOUF9tY6}%RiuXCdX9=}*UyTX<}097x<) z=Y(+XnM5%|KVzu)z%V0=X@F519GIGvQ0^n!wXkN~(8Q>d?6Z-$;^onaOT_yg2N94Zgqaj|V7m!I@~~5qT4iwo`YdbJ^1d#^=_-$eRk`*By78qBaa(nE8$AR&7oH6g2BllU&ezYR}%j z-G>i#b?@!lclcoEZwz=W0k8%Q>j&G@eXRF4`r5(Cf!Z6+%bX5FhlGcBoh|v@jxGu9 z4+6dRo*p<4FNd_(fO*bYQ6g%TJcFfdTrv;m}hm~cEnaF7gwq7wuYrNXCs1V&4p5$J-fA8|jY z4`nrOOH`SsdY zYlXxdF)?R$cR-gxLfq|OR#dKJ*DYt)3E2%|HugYjL%Uk?Z||Sm?M+*4-nLls;mAiL zxJVAETMc}3_`Tt8T)hv%X@h8K5KN7{sqt3{s?_w?O751-_I#e1eNVTNS-G59Io~Q| zwuqT6q@NfD$K|ss1>+{s$e>u=YG!+uEVX=KeUSZ~yg$z4w|4)$;b&V`dd@HRoaZkL z3q2!Z&xlZQRjjzmkKGXLH%0qRa9l!)h&q^TQ)?Ro`rH+L@v^?ye@@Uhi24Rz-w@Db zt!Ny}8V6s{AZQvzO(U;qB!k2wZ;rn{&X+VVCQ9~*SJJze)4LxQ3F(K#beM}#YY$K< zz@JNuMEw4-`zIOpQRU)Qp=7^UvR}~mi25F$xkpy8ebTf|Uyw(1pLE|<-dF(_HFaD% z56#SGF|8SNV;DNV=}Uj#dOzcXh6h^&B+%R_nxRjnO{#{yft2Ufu-g01$i0dAp+(r3 zX%+HX#k|&~g5|v3f^E0A%iHy2HN$~KBBb13&936%E)GfVvny9gb@0l#cx9Z2s|Ik; zH8J}dZ@UHs!6zX5;C)gRwB)>Le%*}Cq@_xn1pYh3}8tpI8`L zD&kAKgwigtwCiEPaw#kv_xQSeD7t)N86u?IUoC6``+`b|xzDb-_{k~Z+I8{Tbslc> zv`~0MEWE+nZ=k@a==-OqOw9xBlNj|EzsE12{|Lt@+U9awt8 zJf2xebBo!ms^v7eC{X44+wa>787bxB?^W}#Y9?+@HD`w5IlwLfx(NpMoEk;^7-ggb zGSm5TyxR3cZA`y|{Gg0LFoK*)M=Wq9+b9)4I{<@m_>kpNMsEv0#g;t569cTi;ro%z zT=Z>_A7VDY0R7zkEZ>J*b`1PF$Q$dYe_fJ7EcpZ9|1CvnMYaR6Ax9z`8IlI~Xs)ts z!TjHUhq~1(q}Tz3sod7Azj0T#wx`}qb2A2P9Ss{mrNjW}0G!K$t)e4Z2gT6OVGv3s zku9FVAK9oz!=bKYAZpH`RY}02fb*&G7`ZBJ$W0-ZSpmSNOlY~e9uwr9P3udiI%77V zays!0Hmm?6O=Kh_7q+i@Y~JG_BioCuq8>3fd-P6oWVfZ_YMd4rhy-qe97@QU;ykf{h)qvCkxrr=Z>&!p|9rKtuJ8*#16T z^Kl?S02D2zwSs`8_Gd@mjGlR7>JMcVcc%yhNg42FG_@qkBkcg{uOy+*3P;LcxDcfLh1k6;0E#8tP9pVO4F%a~%?$uDhE>PdFsW=_0kjHQ zhh&N_Qf^38h@8L@M0FwQaZ@5fSoF-G{WOCDq7tcb^bUiSj@k|dz0%K(QM}_wE#w2o zsh`l6o@xi!vxAbVxU^-KJ!1QGSR))qTXZ-nsY`-O&G~ zFf5O*VdyW=r=-wQ|Lu3e_BLd*p=$uL3?mLn?UltCd8LMJ=oLB+w1i?h4tFtiz7eNf zY!X^Pl>ftwox{|5bf{ZPodu0GB7cFwKeEVE4zx^mSR+l#pnFbZkd?m`S!OEkMncHb zg!6>(aIRd?C@VOF`LlRp@!WqWmK&M(e+|{@vS}%kj74oe55re0let`k3nX zRA?zV>wn?42Jgjf{N7}NEME~$3HU*ZMO93#N0x#lexPi@l9hl8-640{F=;%N4g8pP z+(~Tg3eQw9ULj4O5~Kbi62s8SAdmbZ&V#yZ(~NK{QROr=Sp^N4QZK{a$2C{b1Skx4 zN|up>2?&gNi`$E|vrw2Za2-Cyw8nzauXf-Hqix|0{BpHKZPN~5a^Sc>q%<(@KFE4u z8g)=h=c8O91=Nwnk88uu3T;q(Z5m@JGoDJsy}r=w7c>l986JgMVx;CA<--!0{rWBq zj|2BBECmp&qk)&K@ZZ$-kow@^9tPYzt^Vu_P@ng{)_u1dqRl{qR=?VMyY+FR zCaGZ6V!dm6=h(fz`4bP$FLwU$fRNiQ=5`B~{i0<*&)k#M)B+Icl4RcJ^p@|KU~z~R z2OoAYP?tn#PoTghneQC%rQNgpr|x?ePJDDuFm;Hg4&KzUYD)f+C;Pl7?jmfV2rw>F zA%)#9NkQ_ZT`dgqqkx@<1u%|#!?KS*9IUM_Ft z%UdaX`gcB;$YaDm!7pP!rxBaex;o;w?cXE5sI)9_C zITSRXY(IUV{m`DiQ1AK;K>3)Mox5UB$Yi$TWdF@kTAYQK&}A>w&6HuiaCP|FHChG* zQ=p~NUm+2!e=-Yb+*!J$4kc+E&{QnZ!x?4#DqW7j zBWpE%=!%l5nO*b}?Yg+Xf)})&7#|*hZowWbe4T@gOwau<^gu&vV@c|cDKHGs%>;}B z=xH!>GwlrO>0+AtxV~rbrt~Ti(-{#TIQ^_UreKYTj?Y%hu0C4N1XC_ybvJbl9W6u< zcX20KXGc_hSf~UIVFLM0m{*nzHusSbV=$g_ah$>?h3{ibfSsE!C~@(w!E4+$7E|bh zTrVZ(Id}|A@}iPX9#U1v+OX$yq<`|4)WKgvb0JIQzbaN`+27LM(}H^aIf#zaZ@&2Y zi~h;^_WRR9My;4p3+bT%vsV6Clc7aF-N{oqp5vy2sx=e^bcVCT47#GfAOuy?VvQ!FJIT!!P2t>12ch2oZT#vHtbLQ3D0)N$lM#$YP=5AieZCTE35ps8kxjR;J zJC<`hmNrYH7ihVL8s^ObO)wtD)g9Fi)TM%$7q`bTsNP(pq;nR z+XEzk-r(Q-&6f9C<_Es9>;5iWLfjI1Z{^iqvtJ`vN}fEzNPL(#!WP1&e~%0r?S3wQ5fH z$e7`Kks$PqHNZ)$+{R;cy$pR6#P`T(<+CY?a8QOw%7Xm;J(Isz$gB`ED@ZE=<(NbB z1Bx*0J+frJrl;wE%8?M_3J7^84Y+Tnt)giwZvs*q%)~RKHmKE9il$25RQYR!ENNaT z-o9MCU82vU4#}n-JdCff?2sQ=H#P6~&gUcU|01>k_+LwLjgdhW{6FWj&Q~e^Hs(vqk$C z&1(1xk~*zcX(#fF3-Cybk<>Rq>>=Cdv3O_*Asrywsqa`pW@0l#_-^<&Ry31Iq?62c z9Htm%9~)YDUqfidwS*=l873y3FNT2%#ntc`r3<5$q*P^*FiJ5#{ zx#5}+a(!+IGqxyxxrDD|IXh%M``nR!s2)3F z;Fd$O?lsttOC+htT*nAoV}rn)BVrK*)F(nj3(y`UA{&JK8D$NNTDJ*H^GPfoTojXJ zrSwmb$U_x|ph;pWgX9BZMbNZ+Vti=$GD{4{vDyDL0!k~0L7WARAW~tq%c5p;H;mK` zPKJ!{K;-r<3Oa-Nn@o#zNPk<9GGG;XR(HLvU5-E9c z;n$?*F7Ly%J7&%OQ7#y4MXwaUQnJQ~CxS=^6Ixg75}k3E(LmmdL3s;{vX4)J$`F1T zztIi^dc%OyWV=(dKATP<4;Ld}s_YJRQMo&X&0)3jy;qBz3Ac-2KTqS-(Jz-Qhgeb$CfMidS(r`oeYevv z8DSkj+8kx6{K7`LT5AH+X=JhQbeh=jHpN$x{#%rxGnsw)lG7}=6fzQ_MiJKL`cLHS zBv-v0Vks(ls4PuqVu;<9EvH8~EdWl!oTm&MTcYD;McKsIJCo=U&J9wEI(|+L3NsR= z%*a?T8>L#A5)9264h+nwyyLb z=lV~aFpL{MxMPZMq;JrZWh|;_ZOh|P=KCMl7Gv#3s$n|z)nc%IwV5MbRF;TguCZ`^lo0_b7Y%c|Q&&dTVpxxt8D ztt`#h(uuvEF`@1%qj`v)DeDe%K@)*yI%{Mpc)Is801cPy-xQ5Gdgd`HQ;Yq0=AF&3 zI`_{Kv$K|!C)SnD+Gs9tRks64a@NsP@HH>do#=CC{mZJ!Q_(cXmLOIhnTp=rpnQMr zD&{5iB$0?iN33PC8MDXCZC9*Q8ow$=C3kAAUA6Uh5^Gl;SaCeVOya@%UtUtmzBFT* zBxLGvE-lKi5b$cE@_w*c34Vy2$VNHpr`CpyOgo4 z_Z`>{Z3A5Bv$kJZ?v-_g_AB23)rXVpiO~Rp%Tn5Beo=!qnNY%tI`CXf2N|0_CLiNRclsbu|2s*8Ou}m zRICZ-?rq$U{ZfVW~k=}bC+B=c1gRJ)+WKR?6I{I`b4ZzELC!d$a z9z#S8!@a}8W1QT^J$thf^!4z!B&Y@W%ObjiMie0XHA*78+CO#U)Gnb0^+_qRmf zj-GikV*A0JX6K;|T6ww?g7I=m5aqiY%@dwjdy0qe#m!_nkIZC0ZSDaq{rkv28IB7b z&o=5Hmx^_^Crf$F)lA+D$E;G#6=5}e^ku#CSnSF}nP1SNxc^_&Ac zkm=Yh*zs$_`sKEw)x=npjkKCfr+OyWle2!!Igcw-gTC46vH5pK^ASCZt!1a$jfYC9XpyZx>PmMcj0$Gms0N6r3HMA~P5Z=!Yy=`@#rrzU9be>_q38DQ> zg2(RCcrs?vJh?O3d+abyu~DwiuE}*mh;B&&=4or{@!VI}BbOqtM^DBd z#?WX{vQ@DmJUM{QJ&*h!!f17VgZ>gjbAS|J43!%5Q>Lrfd4Y{Cj!@gMPtM3{?y37Z z6Lx>Y*~j9d6?b2>o^W-M#xYNtE7N(Ag|LNcMIWjaO{i9Ag?TahCTa(x92fMYd9-M^ z<)O6N<>ler=1D^-^n0`(8Rd_S;%nwWWf+RxdFd-xKn;^G%1Z<`T+@`R$(g)o91qfz z{eLEZ{HlTWY-BqKHCL;s z{mY7denR+rPs?3dJ70&|*ygWD8}X)8T%jT@SJo?U)QO@;tu2MgSHh{L6~fx*Sm{zt z!C21ZZCS`X?5Wz6EfHhI4Ejp`MsuNJ&y=UEE#(#MnPwb{y;;6<*yD)(UU>9Sl*5QJ zE|kDmrh83@eX(DPNz2u>X&FDTW>1$FvuhibY6!|I@got+net1~JzLBUFl(c@VrwB9 zLwMI0>S@+UWnkz^g)OMPM53T>os+v+4V8mnf~2$o!PT1(U3CK|c&LAB zbaJO#>*~KgxYG@wakATl>(PmR=gy!OqM`$X+$?of67Aq};JK4rkoc<(G4po@H4KUB zKO#&}7c!Jf2*i`%!~=?+_Jr<4C<+W*sUC#lxI1z9@;DH|t4DF(5!Jb8Z2qu>K#K#S zg*AyMAa_t*&5*jFl}|?Ord<6bS1^urAxfwR)Nl{z1984x?5xg8Wz?@CL9a2F_+@~@I6?F2dm36pYFtYpX|s0MBmot2YUL0%<1cSf}NP z>o!$aM;jap{0y~V+>Ex!h!JYmDHL@{lN77VQk;a%h|8@O$SoE`jY-g6jT@#^SK|yK zQa{2^Fqr_VNqAfmQIYC;mWf13wk6VI>$-pJlC!_{f2NwImCKV^)lv=L3;5yZ#NLzq zsUflVve0pPR%T6Hk$Su*rG7t7DD`Ap>wJD#hy$Bi6&7!J7CvG(OeEOgfhxdt71?3% z#QlEU9S5~q#aF0|8u9-NDx)4K77&2zd6U%QqYJL*RBx)Wok}9ePuK=P^}*f;6%V(j z;h&@`DvT)%k{MzRzh(zva^JYdwTe_QWr*Uh@rQ1(e}vre6A$Yj9{pKU=u*1LeAXGz z1PbtRm|o!UW>9@KsJ_l!!xzKgnxPu`eLP*$`yz>8pYB8u)Cr&Ak=!?I{uF=v(oyNl zpPe4YiLie}#K$|C8=v4^FYx2!d}?34bOvAQrAaUVkCs2kF<4Kx9%B*{d2%OLSIb9S zMd?TCxC4m^jW%|v?3J5+XIyAGm9xfN@xJfMJ7N)GbV*=qTrL)zwn%T&AL- z+6swBNd^rz9G3oy>V#-tR4z9qw^)F3Y4ErE8}6sg7r&S5&qeMFe1*Qkds?4%p*<3C ztrSzFaS=l>(zr4ygMQpudnhSvp+=WQb0p_LXl{sl<@zlyBc{cLn;FXzF<3&)Y}XBb z*Nun$OX@$@{aE+0;S&QcV;su}r=@Svw29Jm(ey-B8k-e`k?`ex#Bveh_HnsMZg+&!?S+pd+oyUUugNF}wA3uDo*Igf-O`bBlTnkn1re1ss zO21Puy#o|uMTTNa2Q7i4o-M7j{>9ote1ftq6n5~19rNw}djHY;KnkHNxs%$$sZiBO zY5%9J^sQeRb7*FVA}LgQsX+on$~9SYoTDOiTaHK*KNQ6Xc*s%at}UZ_n8eyi(l*9} z(TQn{t`1nhzyf1p9O~d~tS@~sGf$=+pr878YT_VVUi~1 zZ%MY507iXnk_pc$ttqitdZWRnnHm^P%}+w3P4-zn`|SLHuhC!TYsG1dV=WBw+!>7H z@IQG4B{;w)Rj3SK9&{VZLmjr_pQ5a|caY|1D4zqd^QH&E%V7qr>AUBx*t9^|48kB=?d*1Jj+~&8Ci0+^Euo7 zM}6(S{(F0H8snsVok6^blVQ#m->Bp1fh<{_6IH?Kwxj2w0D9YQwN_KZwV&C+{|R?kv*CsXxC%^Cy&Ej zcN|*m%E4aRT|>Ox$;PP56Eyr|smgZ3Efrl%?+m>uXxuwEiC;_e*6h;ABFB;~$K z_n7La76}@@5!82{>O0ZfzPFQW!-&UlpM%D}zR*UuuTN5^V_K=C+(rs!v})rnlXr!@ zPVx-o{e)s5S+}V0yaYn`hjfoHH90qVB>T?Qled|?z4Vk}v0bF6uaHMwO@f>IBRV4* z2luDs-6!ufd4Ek0XvxiegD(GsJks}&EX9-LcrZa4?Sk6j@oQ6)q_9rPepg_^Z4}SO zCINiG{Qf9EdI*&ou`YvdJ^XQx=nE)O?M-goI9S^egIN#5U*M?0a4Qc0yx zgBoyg|C%CV2z46T#s)2+O707FC>K*12&PKlkqRt4hONgoloD~|F`^2ZXsOU5 zB$)3ux~~P&-vk#-4o4rt!TS@Wlqmz#WJH@ork4y$Os;Eqe~^0}sScW`F^4}Lw1ft( z@C}z_eknz2i>^Lc>FxviMgM3pjg6ZjG`~LJX7mHMuRoZ0iOeHGEpiaHkdPjzMO%km zeKFCpG7TEpr=_ToHwmGWp;-paAw<7uys&`~)|(ikVttD|+FNmVkWIGugc8tK9c^uG zlAe%;7UbMd@ah{Luaa_Fr7SwqP|a=kED{$>L4%TD{gg`vRt{$8l*%$$+X0 zd0*(V(i4BFf_FO+Xy?v3=aXMGsZ3VUm`fJMp;#35pzsXk3-ji`+PwX{&yoGH?|1#M z>%$8lU06*`zuN+R3q$@FDtNyn51JQ-eCUA~On3Beq}|Pvs~$m7H{y^~W`~?9Fq@z! z>210_a%W_A?<1XYZhH2`*%y7~{>yxJHQcH`<+kyT5$1$+R_|qAmkUQ)*rV^96_U#Z zeTAs6;Pn-&dgC3vcWqFpFqZL!+u-mLpWODT>k~JxKPKppiTYzWVecu@3Z*=Kigz!s z%YlQ*C@5^7;Z0?5A8-%cixpz+9-RNY@Mjf2-2|ier_U_!Kf~`ovuY}lC`}8+_!UaK zMfj%uqG>}`Y`9C9HC;zoQCCR|HI=#^3h0c0{SeLTzwg@FZ-b5 z!G3K^$-6#{`y`R?IVZNA7m_cC$rnBwydn-x@cL_l{+g)2h7)CJ zGL^H8EGWJ{jLDNS8jlU@R4lrO1V$ z7K(UZKm6+9cMi^13HB|beTz&f)4pOVS~eBEe_+8b6t{}St%7NnXxhb_cCDH+d^*29 zqH_P_$*R$YZm8WA^;VMsaM`lhE+n^#$*sJ;m369kguw~2tWELSye|lvB2iPsYl>TM(djTiC#Fy&QEpSA?7^B7F0(XdZ^< zVwfOAWTA>}D;2wzp-EcNE>?il;Sn-CBJOK!k96t2GG12zx2m^!pL?hG-Wfq(F6zs9 zeYvu6>QcNXd7T}O68zlzz4sBaPSn@&`ns5q8L+UTD})P3H3XZ9j<*@7;cv_ZFu zFh0ZR7N6Db!inH$6LD!Iw`wiMCrX{_z|a^!eq9`zhJCKm8|p7q>eQQLr3*eK8(qOt zHUFHXrcU*CC z)9NUyXVs!^NiS~g7II-9WB=TtRT#v$H9x&@L#%CED&>#D^4B1LbdWa<38o>@G=!5? zQ>HI(K08oUIS*5DO@YF?fIa`+eQ)pktYq`TkWjKyED4z>d#uwmW1@rig-VlT{v~<1 z40%srQ_fOIB~0BZrM<}7z>!S5K zZ@M1pdUywCpVK_Eeev?r6|wcOkbGFs9})FOc>R%>))<=U0(m8V=e;r1W1^tX351%n zptDmwwur_&iQ4d4eLGHs!VVGi2O~LUJ>C$9Zc;tESv|hM>hT3uk1wd9R?cGbU-{

4#ynyPqHRrDUl!A+uR6K~oS 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/_cffi_backend.cpython-311-x86_64-linux-gnu.so b/venv/lib/python3.11/site-packages/_cffi_backend.cpython-311-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..f418a23e1bb4993e3617b8c1b2e5302bf566773b GIT binary patch literal 1068624 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%0DJERqox%RADy)gg<&_(By|v$R;9ctsb3` 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

9r9Q;3U7)UtF$5S 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%0D4|u9tn@wFt|M*ZMSuVL)fR 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%0A**+P)j892XMoXMD>s*Q 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�)p~g>UpSkGoC>*dl3*-1>PNM<^eO;1u`X~JCk@Qe%pqB zGVA}gP*cy>Q8HZVAn+$wh=kp?u)BnPXk-PO@!v7Cf1ZWhiH8H4FrgO@7jlk+%~3+{ z*MlS6)f(5T5M!aWSM5trunP8!=wzo!Se=uh);492o2Z(v^tkr`$BMJi7 zQ2#*?>iHH`2S}hnun=pXMM(%vZYzLCne!PSae13l7A2kvZ&UWSq<_%@kgAB~Vb5d% z7BxG$X11A>eRgxr>@h^$V*Q6rT4sK1E<&1(wgYo_u2r-NywzA8;4h5T1pc?NI=}~% z#RU)aU!&+!ZHhQQSu)`*45h zXA@s@pVkt5*2Y_)+GOopx2?>717pC;&OjE$?NJWc|xS25P= zLA@vn0$(;D2z5vl1RgdZ2z6o<1ioWH5bDEG5Lit(Ka15Zy|-DdT4@z(a@%;T9$rg5 z_*W4~m@rGPEJ(Gv=`iKfER9_Q-_Vc}!_@ z6eg}-J4`LTMMq!fe53J`gd|H^%mJ&)`J#=HU8GLFqNCIs*q9$SI=P7kjv1>B99LF| z66#eZSU5?_Rj7LVVf4DQYV2m3S^a!Ck4}>f1b^i7NK)HQ10zt;jb)7JH=5EPV`^wV zXLxG$G2|JCn18I=z@|KP*+W_TnEB!}mbLWoA`@$)*@~=~NI<^kk6v@VN9D8bh_RAo z8raxegzAo>JWNBT)&qUh>R|=cAHzy$16MQF6!7uN3M&EXnNbk9ld-0O`xt8qxc`7T zsKZUL4ZLeW5bEzHI0dXP3~7V_q1IEb++zVZ7!WMgW(T!S{IYM}q$~m`Y^4oH8aJzO z-Tg=5wa)kGQB3+DAWEYcuVD-6k}c7y9ii6Vt)m16jH!o81k93--ae5NLkN)khmQTiMh zbx%7#t9e~?qZ?HGr8xL(ExSzFhgLvfv#`!N-A1ch+QiKOpB;@}z5?O}CbtxLw6SJ@ zxbDB`l&+V?=u%YLFE0hQh>;j%V(@*Og)w+qIZU## z58dN&gUumZ_unvJCM_CKN-y3TNxb8;P z(ZB1I;t;Rr5%BxezvrEyn6j1Lu^Ku|K4q2okq@OT z|B=)_^#wom2S4=*zd9=(<2Uf}UYV5Cv7A>@pTfc&lOrr3lOqcrSePejQ#fsW`S zx?4vv41BybKsS%Oo5$TH?(3r>kYMGF06Tzx8pUX^77GT7?a6f=JD(QTdKj-mS;K5nzyI~{tuJclUK|Z z_0sukxZ@Yu@*?LxldPGgJ`;judN}DzJtLP9Lc7!;$qfg_tY8f2+Fxj;Mw+vmNq&c4UzuK}gMr;~PIn z=wtc|TG+4X*q`0hOL5BC51*#?U!Y_EEqf3IAum|u*-Yc-CpNp;4d$4`{>LqkY-LZF z(B8v^oa5m1D4`GP!4d9ijq6m1QBG}XM>Hlm$XIT#T(100(STuOy*I$9@(`75k9`P6lnoPCrj|PBh)=D-~j{xZbK; z?1*aMQEE!wPcTm%G9(C*B92c)DbgdZ!u*W6LJV0A#+f6=@)~fNTycxV2;;~t_QP87 z&sgP~z*wSgo_se?zOX357W;LzeO>ecj6SB%)WV*lV}Ev2FU2Wmi(OsqKUK&677IZT zvc=}vOylQEHoJu_7W;3uJPKPZLQfwq@wRLiszruQxZ#7PYWQ(01zQv}}1(WG&y-6M1 zX|2)*-nymjoWMJj6?RUj+EykAoKRK}ggP|}0?!x_g!*h0Oal(|)f&jn7UT3rs&jzp zPJdD%=8EgBy2XyD1|FrRn|N&zLL3kkw$EIbtlY0hh@Y zw^)oYj@)8T)TG~O$v1(qMBP03Zk~K$QG_k_Q)>Hy=mQviOrNNQeY1}J*-gC^r<^VJ z58Ct->ZiZOLJ)*(v3WMr_&LvJx3I-x|6t3bu*D+unBhXsaqw}Yg!a>eBiz**Z&e}2 z;ugz6#&UZ#COOVn-eNh*IC_hv?s2BO=}gNOOa0?gDso% zl`fcMwO*v&ue26v1OIBQ4)7n!3Ogp$X-~JU6|-@yHT=Q5RPkQ3Ieq`rf)-Z@yy9@^bL0U})JwK4AkL-msc&JW zu7#C)F3i}NBQ?Af_DMI+LB{f`$mI&g#xi3gHr-QoI?vHjmMrjQV|DX93oF9U%kH3YK;%55My!A* zHMNJ1edf_h;HS6<*d9p;kA90IP+WQ5hH4a#o`+W)j@};eM7=7d!?_eb^)0N_wXjmp zg&C7?Y}Dda95RhIj&qQ)yZ~G#SKJ;k!Z>1kJV~eX6dh%C0= zx=mm-H~k8oL?*1*8DV>59wyabe|v<$n{1DHgoW)9W3RO63fm(>j~y=L90%7LB{ZW4 zN4Tps-mXH7#qE)UjOFfVOmdvDyghQ1an$xmiR0{b)7dL-kN>S{v1ke_qwZ26*&a_A zzCEVW1(UX(1e~f(_CXzGr2tRe)^^%Q^b!1L^6027GdM95cXK9fYti;@i--AEO(~Mx6aqDyGqCYz6F6d z*|+it3;Pzvo@~(-_AP|IW&NHB$qV^<@P<)BYpI(N?rM#lREV*-Z*h>Z+#QWcjx(0` zEsipd+P5fioV{*3d&ParITj-eUe*SX$qH*fT?}v z7gs(|Fql_BbO_lT`@gNycH)?D2z}9dJ`-||gI^gXG_Gz&xT`g`Q6a|S*@c6Q za#rOCJH958?Ss%a)^-$P=*dy4UL=ZT7r}F0< zykJsJMwk3bPevHVO7&Q}3WG|tN2ve)sJ&+*BhNXf?3Gbk%XaoAkW9s%m#qHP+zu)~ zLa3?`@Gh-z`e^DXdk*j>V|9SvS5}xeXBxPQe_s|Q6G@@{J2nELkFls{hYA6bY0zMy`-sN;k?TE6jcgC6vi zF^+ZB{}XidpS_t?Of;T%z4E?Wk-J;*Z!5fq6ceu3r8125iI->qjD>fNkIh9WOh-TK z@ZvyiKebHB#WIkROM3w+R46LFL`?#h#-S>KOG}(czWr(Wq*7EX$Wk-v6}VK*Dps6W z$*})YM3`B!BW_uPY0$z-BNkQ~uCUTrg_Q;>tTaktF^vOb2vR5E)jA2sSf4e4G4gI6 zc{h)|OXSP7v~vCeQhPZ; ztA9feepkoP45^&U*W&IJwu{9E39W%2;$jSYi9hdPS zO~L!=vATQhrfEE0F16_C7pe}rGHa=7aU!P^J-PZ?l-id|Rh4?9j&eoP`L$lH{Yd(>szgxKx$q3as_X0saknWv<8fk6jy8>N0&G@vp6zM z@AESC^`+<&c$KlTujuxgbL&wrS^e|Rv{FsqC$#rX<}`nw_rIcwPZ~|SV#i@!;Xj;@ zJaI`^05LJ7D{j#YR$3-aVAL$mMYT><+&ng{!#CkKk)(r5U$_h&#>VwCzN6Y{} zW~?@F%h#C{@L9?V=Ac@yH$mXDj}NRM2=#8|%IEulKNt{%dd7)n5x9%8f<>tBN5N{5 z9x0}%Z?+1yfNwWe8+eMbxgfufRP z5l9(>Ak@4QC~6nDiL!zq)UqfDJY_%->Y^wJyna9sib<3hfy`iV4Rxr^XBYVP%EY&N zP;ufP!Rld}nMnE09pK+=PL~27G}aW51>}RC>OnEx@@*49rdvD!UuP4#6vz|?b5P8p zm;*9}K@f^kiXf0W20^G;tfi%u(Z5fs)!Yv?;UDYBof7oVtRU?dYG?1GqrbCxw_q{mnaG5Hm zDR9}tnW(@m?+@k8fR)d*1`GYFRsQLxT}YX8SLHNDGIEw+g^`J{(lmsX<{+#z0b!-l z3o8v>Se1|?4EJ-ods6eWY&A52G4gI6c{h)|OXRy*hcl zHSDV_d@Jdpx`Ya4s5ufE8zmG=Hi*~~*b6J$B4OJC}k_w8& zP5uvg?*U&`mG*7#B!CeVf{LIbM#_iQpGWoYW_Q@Ul3N2 z_E3dCzfrv!L%4rcMT1h2(`gS|_~QeG)!h`T(s#NfeWy#(cRKCIvB?6e z8QsgN5o)PHhefCVXU_CoaW6s1_tw<^+lNUwvYDLWIWT!^>e=!#y3kBZO*Z^d-7#$B zD46uTgtdl~)M=d>RMD~KLp^DBCpx_sC3WcoEh^z)Xs}5$t&fimP0=)#8g|l5Ydy5W z9_&u%y6Nc!GNeAXG`jFVr1RP?;Sa*}L8bXguQ_Ul((Cg|Q#^l6>DQ=Z`RW^`*NyjExSb>4p%$#Q!2HyZ}c%WJiVRaYG(%?THzB?%hbjW zPw#MedWXZ)J52xN*S2z|m(x{h{}O6N&z-O$wNf0llF;(#=$U<9p4$6Y%1q0P8=0xh zis&Jm(DD{k*}-{v_O5Gqm@wY<(U_x~B{k->SCQ;i`qUM}Z`N#hCvVPY zOVWEx`~x8P5|34pXYt+a&lAzsrTxGxHP_G6{0H{JPql|X4k$%+d=zq^vdl}Vv|Jde z2Bi|YRhzczM+|>|E9M{MNw*81)i&6gX~ANDyDuwPN|S0fX8&>`BTY2Ms8wY22a(!D zMt=|~J5Yo_G|FX?n?@5&JDu5qE^6Om3lINtA2CwfIwE~r)55oo{Qe+(^50Wgz3|CD z>{Z~F6_)&yzt!{1&eAa+7mYRjag=5h|C7`7V99q+ds3UqiA&uBej*HywwAX=suC@y zqjEprkaT}!I9SVtk*Y+?4 z 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/_distutils_hack/override.py b/venv/lib/python3.11/site-packages/_distutils_hack/override.py new file mode 100644 index 0000000..2cc433a --- /dev/null +++ b/venv/lib/python3.11/site-packages/_distutils_hack/override.py @@ -0,0 +1 @@ +__import__('_distutils_hack').do_override() diff --git a/venv/lib/python3.11/site-packages/_yaml/__init__.py b/venv/lib/python3.11/site-packages/_yaml/__init__.py new file mode 100644 index 0000000..7baa8c4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/_yaml/__init__.py @@ -0,0 +1,33 @@ +# This is a stub package designed to roughly emulate the _yaml +# extension module, which previously existed as a standalone module +# and has been moved into the `yaml` package namespace. +# It does not perfectly mimic its old counterpart, but should get +# close enough for anyone who's relying on it even when they shouldn't. +import yaml + +# in some circumstances, the yaml module we imoprted may be from a different version, so we need +# to tread carefully when poking at it here (it may not have the attributes we expect) +if not getattr(yaml, '__with_libyaml__', False): + from sys import version_info + + exc = ModuleNotFoundError if version_info >= (3, 6) else ImportError + raise exc("No module named '_yaml'") +else: + from yaml._yaml import * + import warnings + warnings.warn( + 'The _yaml extension module is now located at yaml._yaml' + ' and its location is subject to change. To use the' + ' LibYAML-based parser and emitter, import from `yaml`:' + ' `from yaml import CLoader as Loader, CDumper as Dumper`.', + DeprecationWarning + ) + del warnings + # Don't `del yaml` here because yaml is actually an existing + # namespace member of _yaml. + +__name__ = '_yaml' +# If the module is top-level (i.e. not a part of any specific package) +# then the attribute should be set to ''. +# https://docs.python.org/3.8/library/types.html +__package__ = '' diff --git a/venv/lib/python3.11/site-packages/_yaml/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/_yaml/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb865a99e545017bb445d77d44fbcdca56ef3944 GIT binary patch literal 938 zcmY*XPiqrF6ras*lFh%?SZa|fO!1IL+API`ARQE01RK}-*mO=g;Go84JvCrQ&& z5D)zZf*+tNf_U`che)M|xTk`r-cstRC*SNE#5Zr=%$xUq@4b059}0ym0^0q4(L78d z^h+rd0zIP3_prP}6j7~>swjb&#t=^%9gxP-=56zw}JjZJWp`mu+^)==T1}%anyoybs zNr>t-Az_XX-)`*NO;A3eOUQ|?URW*eGHZ`ozTm21fyLb}se@m~x4O*hTJW}(-jL^<{x-*FRjX;beF@-WkFyvThCI0~lh8t=C literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/METADATA b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/METADATA new file mode 100644 index 0000000..6ca949d --- /dev/null +++ b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/METADATA @@ -0,0 +1,422 @@ +Metadata-Version: 2.1 +Name: autorandr +Version: 1.15.post1 +Summary: Automatically select a display configuration based on connected devices +Home-page: https://github.com/phillipberndt/autorandr +Author: Phillip Berndt +Author-email: phillip.berndt@googlemail.com +License: GPLv3 +Keywords: xrandr +Platform: UNKNOWN +Classifier: Environment :: Console +Classifier: Intended Audience :: End Users/Desktop +Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) +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.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Description-Content-Type: text/markdown + +# autorandr + +Automatically select a display configuration based on connected devices + +## Branch information + +This is a compatible Python rewrite of +[wertarbyte/autorandr](https://github.com/wertarbyte/autorandr). Contributions +for bash-completion, fd.o/XDG autostart, Nitrogen, pm-utils, and systemd can be +found under [contrib](contrib/). + +The original [wertarbyte/autorandr](https://github.com/wertarbyte/autorandr) +tree is unmaintained, with lots of open pull requests and issues. I forked it +and merged what I thought were the most important changes. If you are searching +for that version, see the [`legacy` branch](https://github.com/phillipberndt/autorandr/tree/legacy). +Note that the Python version is better suited for non-standard configurations, +like if you use `--transform` or `--reflect`. If you use `auto-disper`, you +have to use the bash version, as there is no disper support in the Python +version (yet). Both versions use a compatible configuration file format, so +you can, to some extent, switch between them. I will maintain the `legacy` +branch until @wertarbyte finds the time to maintain his branch again. + +If you are interested in why there are two versions around, see +[#7](https://github.com/phillipberndt/autorandr/issues/7), +[#8](https://github.com/phillipberndt/autorandr/issues/8) and +especially +[#12](https://github.com/phillipberndt/autorandr/issues/12) +if you are unhappy with this version and would like to contribute to the bash +version. + +## License information and authors + +autorandr is available under the terms of the GNU General Public License +(version 3). + +Contributors to this version of autorandr are: + +* Adrián López +* andersonjacob +* Alexander Lochmann +* Alexander Wirt +* Brice Waegeneire +* Chris Dunder +* Christoph Gysin +* Christophe-Marie Duquesne +* Daniel Hahler +* Maciej Sitarz +* Mathias Svensson +* Matthew R Johnson +* Nazar Mokrynskyi +* Phillip Berndt +* Rasmus Wriedt Larsen +* Sam Coulter +* Simon Wydooghe +* Stefan Tomanek +* stormc +* tachylatus +* Timo Bingmann +* Timo Kaufmann +* Tomasz Bogdal +* Victor Häggqvist +* Jan-Oliver Kaiser +* Alexandre Viau + +## Installation/removal + +You can use the `autorandr.py` script as a stand-alone binary. If you'd like to +install it as a system-wide application, there is a Makefile included that also +places some configuration files in appropriate directories such that autorandr +is invoked automatically when a monitor is connected or removed, the system +wakes up from suspend, or a user logs into an X11 session. Run `make install` +as root to install it. + +If you prefer to have a system wide install managed by your package manager, +you can + +* Use the [official Arch package](https://archlinux.org/packages/extra/any/autorandr/). +* Use the [official Debian package](https://packages.debian.org/sid/x11/autorandr) on sid +* Use the [FreeBSD Ports Collection](https://www.freshports.org/x11/autorandr/) on FreeBSD. +* Use the [official Gentoo package](https://packages.gentoo.org/packages/x11-misc/autorandr). +* Use the + [nix package](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/misc/autorandr.nix) + on NixOS. +* Use the + [guix package](https://git.savannah.gnu.org/cgit/guix.git/log/gnu/packages/xdisorg.scm?qt=grep&q=autorandr) + on Guix. +* Use the [SlackBuild](https://slackbuilds.org/repository/14.2/desktop/autorandr/) on Slackware. +* Use the automated nightlies generated by the + [openSUSE build service](https://build.opensuse.org/package/show/home:phillipberndt/autorandr) + for various distributions (RPM and DEB based). +* Use the [X binary package system](https://wiki.voidlinux.eu/XBPS)' on Void Linux +* Build a .deb-file from the source tree using `make deb`. +* Build a .rpm-file from the source tree using `make rpm`. + +We appreciate packaging scripts for other distributions, please file a pull +request if you write one. + +If you prefer `pip` over your package manager, you can install autorandr with: + + sudo pip install "git+http://github.com/phillipberndt/autorandr#egg=autorandr" + +or simply + + sudo pip install autorandr + +if you prefer to use a stable version. + +## How to use + +Save your current display configuration and setup with: + + autorandr --save mobile + +Connect an additional display, configure your setup and save it: + + autorandr --save docked + +Now autorandr can detect which hardware setup is active: + + $ autorandr + mobile + docked (detected) + +To automatically reload your setup: + + $ autorandr --change + +To manually load a profile: + + $ autorandr --load + +or simply: + + $ autorandr + +autorandr tries to avoid reloading an identical configuration. To force the +(re)configuration: + + $ autorandr --load --force + +To prevent a profile from being loaded, place a script call _block_ in its +directory. The script is evaluated before the screen setup is inspected, and +in case of it returning a value of 0 the profile is skipped. This can be used +to query the status of a docking station you are about to leave. + +If no suitable profile can be identified, the current configuration is kept. +To change this behaviour and switch to a fallback configuration, specify +`--default `. The system-wide installation of autorandr by default +calls autorandr with a parameter `--default default`. There are three special, +virtual configurations called `horizontal`, `vertical` and `common`. They +automatically generate a configuration that incorporates all screens +connected to the computer. You can symlink `default` to one of these +names in your configuration directory to have autorandr use any of them +as the default configuration without you having to change the system-wide +configuration. + +You can store default values for any option in an INI-file located at +`~/.config/autorandr/settings.ini`. In a `config` section, you may place any +default values in the form `option-name=option-argument`. + +A common and effective use of this is to specify default `skip-options`, for +instance skipping the `gamma` setting if using +[`redshift`](https://github.com/jonls/redshift) as a daemon. To implement +the equivalent of `--skip-options gamma`, your `settings.ini` file should look +like this: + +``` +[config] +skip-options=gamma +``` + +## Advanced usage + +### Hook scripts + +Three more scripts can be placed in the configuration directory +(as defined by the [XDG spec](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html), +usually `~/.config/autorandr` or `~/.autorandr` if you have an old installation +for user configuration and `/etc/xdg/autorandr` for system wide configuration): + +- `postswitch` is executed *after* a mode switch has taken place. This can be + used to notify window managers or other applications about the switch. +- `preswitch` is executed *before* a mode switch takes place. +- `postsave` is executed after a profile was stored or altered. +- `predetect` is executed before autorandr attempts to run xrandr. + +These scripts must be executable and can be placed directly in the configuration +directory, where they will always be executed, or in the profile subdirectories, +where they will only be executed on changes regarding that specific profile. + +Instead (or in addition) to these scripts, you can also place as many executable +files as you like in subdirectories called `script_name.d` (e.g. `postswitch.d`). +The order of execution of scripts in these directories is by file name, you can +force a certain ordering by naming them `10-wallpaper`, `20-restart-wm`, etc. + +If a script with the same name occurs multiple times, user configuration +takes precedence over system configuration (as specified by the +[XDG spec](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)) +and profile configuration over general configuration. + +As a concrete example, suppose you have the files + +- `/etc/xdg/autorandr/postswitch` +- `~/.config/autorandr/postswitch` +- `~/.config/autorandr/postswitch.d/notify-herbstluftwm` +- `~/.config/autorandr/docked/postswitch` + +and switch from `mobile` to `docked`. Then +`~/.config/autorandr/docked/postswitch` is executed, since the profile specific +configuration takes precedence, and +`~/.config/autorandr/postswitch.d/notify-herbstluftwm` is executed, since +it has a unique name. + +If you switch back from `docked` to `mobile`, `~/.config/autorandr/postswitch` +is executed instead of the `docked` specific `postswitch`. + +If you experience issues with xrandr being executed too early after connecting +a new monitor, then you can use a `predetect` script to delay the execution. +Write e.g. `sleep 1` into that file to make autorandr wait a second before +running `xrandr`. + +#### Variables + +Some of autorandr's state is exposed as environment variables +prefixed with `AUTORANDR_`, such as: +- `AUTORANDR_CURRENT_PROFILE` +- `AUTORANDR_CURRENT_PROFILES` +- `AUTORANDR_PROFILE_FOLDER` +- `AUTORANDR_MONITORS` + +with the intention that they can be used within the hook scripts. + +For instance, you might display which profile has just been activated by +including the following in a `postswitch` script: +```sh +notify-send -i display "Display profile" "$AUTORANDR_CURRENT_PROFILE" +``` + +The one kink is that during `preswitch`, `AUTORANDR_CURRENT_PROFILE` is +reporting the *upcoming* profile rather than the *current* one. + +### Wildcard EDID matching + +The EDID strings in the `~/.config/autorandr/*/setup` files may contain an +asterisk to enable wildcard matching: Such EDIDs are matched against connected +monitors using the usual file name globbing rules. This can be used to create +profiles matching multiple (or any) monitors. + +### udev triggers with NVidia cards + +In order for `udev` to detect `drm` events from the native NVidia driver, the +kernel parameter `nvidia-drm.modeset` must be set to 1. For example, add a file +`/etc/modprobe.d/nvidia-drm-modeset.conf`: + +``` +options nvidia_drm modeset=1 +``` + +### Wayland + +Before running autorandr will check the environment for the `WAYLAND_DISPLAY` +variable to check if the program is running in a Wayland session. This is to +avoid issues between usage of xrandr in Wayland environments. + +If you need to run autorandr in a Wayland environment, one workaround is to +unset the `WAYLAND_DISPLAY` variable before running the program, such as: + +``` +WAYLAND_DISPLAY= autorandr +``` + +## Changelog + +**autorandr 1.15** +* *2023-11-27* Several regex literal bug fixes +* *2023-12-27* Fix #375: Listen to correct events in launcher +* *2024-03-03* Fix #367: Skip profiles without outputs + + +**autorandr 1.14** +* *2023-06-22* Direct --match-edid renaming of output messages to stderr +* *2023-06-22* Add Wayland awareness +* *2023-06-22* Various minor auxiliary tooling bug fixes, see git-log + +**autorandr 1.13.3** +* *2023-01-24* Revert udev rule to rely on "change" event (see #324) + +**autorandr 1.13.2** +* *2023-01-23* Fix autostart in KDE (see #320) +* *2023-01-23* Match add/remove rather than change in udev rule (see #321) +* *2023-01-23* Fix wildcard use in EDIDs (see #322) +* *2023-01-23* Do a final xrandr call to set the frame buffer size (see #319) + +**autorandr 1.13.1** +* *2023-01-16* Fix bug with Version comparison + +**autorandr 1.13** +* *2023-01-15* Add reversed horizontal/vertical profiles +* *2023-01-15* Fix distutils deprecation warning +* *2023-01-15* Print error when user script fails +* *2022-12-01* Support `--skip-options set` to skip setting properties + +**autorandr 1.12.1** +* *2021-12-22* Fix `--match-edid` (see #273) + +**autorandr 1.12** +* *2021-12-16* Switch default interpreter to Python 3 +* *2021-12-16* Add `--list` to list all profiles +* *2021-12-16* Add `--cycle` to cycle all detected profiles +* *2021-12-16* Store display properties (see #204) + +**autorandr 1.11** +* *2020-05-23* Handle empty sys.executable +* *2020-06-08* Fix Python 2 compatibility +* *2020-10-06* Set group membership of users in batch mode + +**autorandr 1.10.1** +* *2020-05-04* Revert making the launcher the default (fixes #195) + +**autorandr 1.10** +* *2020-04-23* Fix hook script execution order to match description from readme +* *2020-04-11* Handle negative gamma values (fixes #188) +* *2020-04-11* Sort approximate matches in detected profiles by quality of match +* *2020-01-31* Handle non-ASCII environment variables (fixes #180) +* *2019-12-31* Fix output positioning if the top-left output is not the first +* *2019-12-31* Accept negative gamma values (and interpret them as 0) +* *2019-12-31* Prefer the X11 launcher over systemd/udev configuration + +**autorandr 1.9** + +* *2019-11-10* Count closed lids as disconnected outputs +* *2019-10-05* Do not overwrite existing configurations without `--force` +* *2019-08-16* Accept modes that don't match the WWWxHHH pattern +* *2019-03-22* Improve bash autocompletion +* *2019-03-21* Store CRTC values in configurations +* *2019-03-24* Fix handling of recently disconnected outputs (See #128 and #143) + +**autorandr 1.8.1** + +* *2019-03-18* Removed mandb call from Makefile + +**autorandr 1.8** + +* *2019-02-17* Add an X11 daemon that runs autorandr when a display connects (by @rliou92, #127) +* *2019-02-17* Replace width=0 check with disconnected to detect disconnected monitors (by @joseph-jones, #139) +* *2019-02-17* Fix handling of empty padding (by @jschwab, #138) +* *2019-02-17* Add a man page (by @somers-all-the-time, #133) + +**autorandr 1.7** + +* *2018-09-25* Fix FB size computation with rotated screens (by @Janno, #117) + +**autorandr 1.6** + +* *2018-04-19* Bugfix: Do not load default profile unless --change is set +* *2018-04-30* Added a `AUTORANDR_MONITORS` variable to hooks (by @bricewge, #106) +* *2018-06-29* Fix detection of current configuration if extra monitors are active +* *2018-07-11* Bugfix in the latest change: Correctly handle "off" minitors when comparing +* *2018-07-19* Do not kill spawned user processes from systemd unit +* *2018-07-20* Correctly handle "off" monitors when comparing -- fixup for another bug. + +**autorandr 1.5** + +* *2018-01-03* Add --version +* *2018-01-04* Fixed vertical/horizontal/clone-largest virtual profiles +* *2018-03-07* Output all non-error messages to stdout instead of stderr +* *2018-03-25* Add --detected and --current to filter the profile list output +* *2018-03-25* Allow wildcard matching in EDIDs + +**autorandr 1.4** + +* *2017-12-22* Fixed broken virtual profile support +* *2017-12-14* Added support for a settings file +* *2017-12-14* Added a virtual profile `off`, which disables all screens + +**autorandr 1.3** + +* *2017-11-13* Add a short form for `--load` +* *2017-11-21* Fix environment stealing in `--batch` mode (See #87) + +**autorandr 1.2** + +* *2017-07-16* Skip `--panning` unless it is required (See #72) +* *2017-10-13* Add `clone-largest` virtual profile + +**autorandr 1.1** + +* *2017-06-07* Call systemctl with `--no-block` from udev rule (See #61) +* *2017-01-20* New script hook, `predetect` +* *2017-01-18* Accept comments (lines starting with `#`) in config/setup files + +**autorandr 1.0** + +* *2016-12-07* Tag the current code as version 1.0.0; see github issue #54 +* *2016-10-03* Install a desktop file to `/etc/xdg/autostart` by default + + diff --git a/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/RECORD b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/RECORD new file mode 100644 index 0000000..0f14404 --- /dev/null +++ b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/RECORD @@ -0,0 +1,10 @@ +../../../bin/autorandr,sha256=b7-Kfx617lTXecYwDuiiUgSizM-HhcqaIKkFNj2U7_Y,273 +__pycache__/autorandr.cpython-311.pyc,, +autorandr-1.15.post1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +autorandr-1.15.post1.dist-info/METADATA,sha256=WU3tSPIh4uxAwXtLlUMhAhf-D1CkTaRHmoqWpOoIrtA,16035 +autorandr-1.15.post1.dist-info/RECORD,, +autorandr-1.15.post1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +autorandr-1.15.post1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +autorandr-1.15.post1.dist-info/entry_points.txt,sha256=nIbh59SOctw_HjgX7a8iEKc-TawiF-tiwbIs7Wh9H5w,64 +autorandr-1.15.post1.dist-info/top_level.txt,sha256=EZfqdN1OiuXc20FuQhKSxk4gieAvzWOXie8MgR29Aek,10 +autorandr.py,sha256=rRxKO3qME5aTlZ0zdkLsL9kP-pUFV1y_CZZ6-ukoJJo,75378 diff --git a/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/REQUESTED b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/WHEEL b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/WHEEL new file mode 100644 index 0000000..becc9a6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/entry_points.txt b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/entry_points.txt new file mode 100644 index 0000000..dfc4f9b --- /dev/null +++ b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +autorandr = autorandr:exception_handled_main + diff --git a/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/top_level.txt new file mode 100644 index 0000000..8f8a4dd --- /dev/null +++ b/venv/lib/python3.11/site-packages/autorandr-1.15.post1.dist-info/top_level.txt @@ -0,0 +1 @@ +autorandr diff --git a/venv/lib/python3.11/site-packages/autorandr.py b/venv/lib/python3.11/site-packages/autorandr.py new file mode 100644 index 0000000..11297a5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/autorandr.py @@ -0,0 +1,1704 @@ +#!/usr/bin/env python3 +# encoding: utf-8 +# +# autorandr.py +# Copyright (c) 2015, Phillip Berndt +# +# Autorandr rewrite in Python +# +# This script aims to be fully compatible with the original autorandr. +# +# 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 . +# + +from __future__ import print_function + +import binascii +import copy +import getopt +import hashlib +import math +import os +import posix +import pwd +import re +import shlex +import subprocess +import sys +import shutil +import time +import glob + +from collections import OrderedDict +from functools import reduce +from itertools import chain + + +if sys.version_info.major == 2: + import ConfigParser as configparser +else: + import configparser + +__version__ = "1.15" + +try: + input = raw_input +except NameError: + pass + +virtual_profiles = [ + # (name, description, callback) + ("off", "Disable all outputs", None), + ("common", "Clone all connected outputs at the largest common resolution", None), + ("clone-largest", "Clone all connected outputs with the largest resolution (scaled down if necessary)", None), + ("horizontal", "Stack all connected outputs horizontally at their largest resolution", None), + ("vertical", "Stack all connected outputs vertically at their largest resolution", None), + ("horizontal-reverse", "Stack all connected outputs horizontally at their largest resolution in reverse order", None), + ("vertical-reverse", "Stack all connected outputs vertically at their largest resolution in reverse order", None), +] + +properties = [ + "Colorspace", + "max bpc", + "aspect ratio", + "Broadcast RGB", + "audio", + "non-desktop", + "TearFree", + "underscan vborder", + "underscan hborder", + "underscan", + "scaling mode", +] + +help_text = """ +Usage: autorandr [options] + +-h, --help get this small help +-c, --change automatically load the first detected profile +-d, --default make profile the default profile +-l, --load load profile +-s, --save save your current setup to profile +-r, --remove remove profile +--batch run autorandr for all users with active X11 sessions +--current only list current (active) configuration(s) +--config dump your current xrandr setup +--cycle automatically load the next detected profile +--debug enable verbose output +--detected only list detected (available) configuration(s) +--dry-run don't change anything, only print the xrandr commands +--fingerprint fingerprint your current hardware setup +--ignore-lid treat outputs as connected even if their lids are closed +--match-edid match displays based on edid instead of name +--force force (re)loading of a profile / overwrite exiting files +--list list configurations +--skip-options 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

N+*pAkH~Qyxkg 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

EQQy)ND2 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≫z$xc#7UDdGsuxk;fG$3vZEN>NY6t11?;iTks>*n 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 k`=tHmAhd0!}GD4cr#14=3.6 +License-File: LICENSE +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: home-page +Dynamic: license +Dynamic: project-url +Dynamic: requires-python +Dynamic: summary + +Certifi: Python SSL Certificates +================================ + +Certifi provides Mozilla's 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/python3.7/site-packages/certifi/cacert.pem' + +Or from the command line:: + + $ python -m certifi + /usr/local/lib/python3.7/site-packages/certifi/cacert.pem + +Enjoy! + +.. _`Requests`: https://requests.readthedocs.io/en/master/ + +Addition/Removal of Certificates +-------------------------------- + +Certifi does not support any addition/removal or other modification of the +CA trust store content. This project is intended to provide a reliable and +highly portable root of trust to python deployments. Look to upstream projects +for methods to use alternate trust. diff --git a/venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/RECORD b/venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/RECORD new file mode 100644 index 0000000..c6a380e --- /dev/null +++ b/venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/RECORD @@ -0,0 +1,14 @@ +certifi-2025.1.31.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +certifi-2025.1.31.dist-info/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989 +certifi-2025.1.31.dist-info/METADATA,sha256=t5kcT5aGu0dQ6_psUNZYTqnC0uCRnponewm3uYjeHbg,2451 +certifi-2025.1.31.dist-info/RECORD,, +certifi-2025.1.31.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91 +certifi-2025.1.31.dist-info/top_level.txt,sha256=KMu4vUCfsjLrkPbSNdgdekS-pVJzBAJFO__nI8NF6-U,8 +certifi/__init__.py,sha256=neIaAf7BM36ygmQCmy-ZsSyjnvjWghFeu13wwEAnjj0,94 +certifi/__main__.py,sha256=xBBoj905TUWBLRGANOcf7oi6e-3dMP4cEoG9OyMs11g,243 +certifi/__pycache__/__init__.cpython-311.pyc,, +certifi/__pycache__/__main__.cpython-311.pyc,, +certifi/__pycache__/core.cpython-311.pyc,, +certifi/cacert.pem,sha256=xVsh-Qf3-G1IrdCTVS-1ZRdJ_1-GBQjMu0I9bB-9gMc,297255 +certifi/core.py,sha256=qRDDFyXVJwTB_EmoGppaXU_R9qCZvhl-EzxPMuV3nTA,4426 +certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/WHEEL b/venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/WHEEL new file mode 100644 index 0000000..505164b --- /dev/null +++ b/venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (75.8.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/top_level.txt new file mode 100644 index 0000000..963eac5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/certifi-2025.1.31.dist-info/top_level.txt @@ -0,0 +1 @@ +certifi diff --git a/venv/lib/python3.11/site-packages/certifi/__init__.py b/venv/lib/python3.11/site-packages/certifi/__init__.py new file mode 100644 index 0000000..177082e --- /dev/null +++ b/venv/lib/python3.11/site-packages/certifi/__init__.py @@ -0,0 +1,4 @@ +from .core import contents, where + +__all__ = ["contents", "where"] +__version__ = "2025.01.31" diff --git a/venv/lib/python3.11/site-packages/certifi/__main__.py b/venv/lib/python3.11/site-packages/certifi/__main__.py new file mode 100644 index 0000000..8945b5d --- /dev/null +++ b/venv/lib/python3.11/site-packages/certifi/__main__.py @@ -0,0 +1,12 @@ +import argparse + +from certifi import contents, where + +parser = argparse.ArgumentParser() +parser.add_argument("-c", "--contents", action="store_true") +args = parser.parse_args() + +if args.contents: + print(contents()) +else: + print(where()) diff --git a/venv/lib/python3.11/site-packages/certifi/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/certifi/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71172ea584c1d6cc027be32223d7b5c6338a7728 GIT binary patch literal 333 zcmZury-ve05VrF}OQN!|uprnv5GSqJ5RbqBTLw;P>?STr9NBKFGW8MIc!Y{~;2}Cz znUI*+K;1gwNFXur-RZmU{&cq<3_N5oef`SrO?>Z?Usyk4cW%TpqKM)Gl{m(w6fWK@!3Q>jL#yqlqSCC=s&yARlT6yCE*(RU-Y6Vh24NJ8qnn}II;r^E zZhHVpQ2?|)K*OZsq5^n9JF|-RwOyYtpc)AqAh1dZ}|! zje{s6ifeXJn|_ipMN%d;pK=1gE3N^8db#gkm4eO-b}fB#qWfQkhCXeK@fMwJ{_{8g U_-V26PFKC{(aFm1Odgu0Z*UA+p#T5? literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/certifi/__pycache__/__main__.cpython-311.pyc b/venv/lib/python3.11/site-packages/certifi/__pycache__/__main__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3bed9ed717c0d097bf4609af17481a95a6c1ff3 GIT binary patch literal 722 zcmah`&1(}u6o0edyBHNiAoNr!rA;v%iq|LzdJUqtT$b(bG})N_V0IH}>0t{!q|k#m zz3C|``X~5DBxRvtP61Ees=f8(%(h#q2)>y&@BQZe-kUcwA1f6Lxa@rU**)j>y8xxA zSI+q_?z{yLJT!ogu+jhpQb!8pj*LJ80)3@SnsDb!3814A^@DZ|Z#bUpDW3XOo5-Bc z^->UUzFwl6_OH4IG5S&&r#0S#$yNH3H9@>K*GoaX|Cgd$!Ib~cZ0J8kV!I(R!;Qj} zglWRm*F8eXp44>rtY-6i+e*@i5<8_s(m+ge+|-Z4hQ$nrc4LPogy}A!slVe>aaSsy zi`{-gyTgE&eJ&W3X$6zATaM@1Jh6x|tJoDdVM?*8G4;drGl&m^ix;>T1qAm!9Mh;z z+%&;aFtWED_th}QBNC4Az~9F4ZrY2&hnrhlIPp``jCtJYk_2D%g>5@<{Lr>H$q1o2+{ucufcw*b&4sxh%-7KGT#? literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/certifi/__pycache__/core.cpython-311.pyc b/venv/lib/python3.11/site-packages/certifi/__pycache__/core.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5837fd3b06c15955cdffdd7ff6da5ca13c7c414 GIT binary patch literal 3763 zcmb_eO>Emn79NVEM9GqATe7U!Sxa!6I!bK|`DxO?i!@ocXp(yEz;=N~hZR(kw&_Ts zIvmGI>lQi`*dPc{chN)(msx;o~#7buku=8(WClcW>=#xK|iQ^ z=821wzl~D>IEB*Pc{we=z^SW^Q?SX&*<(+-$7y@hz0ihoefe-Y%n>cD^{zykJI37{ zX?~D&Kl}}--7Z?xPy9qZqV{V2YM&NWaYO_vo+P05e=4Ts#z~@Wdl_i%B{}$^7Em_%UVJ&m@J#iWtnai5;;SucZ|h^l0{Av zMJ=B&XhLUZLNN+VD=>2+@C=VJV|(k2l-8l3gG%9{?p*-5PZ(gcltIBS78O*kl7}$o z3C?p0h@Q-oBsY`v*j<^aOH*&nEo7z^-m|4lM!Ti6Oy)7!!;$+lsbwRtrB>8bks2$S z!pxMBznOVItK3*ErfzD5o2i`seyVtzEgOZ?6DLomOr2@tMfjgx(#%vtS}Db#8i>r6 z9rpFJXB2jeqTymS696UhRFJoY*p?96jBK*3N0+d4`4!`}bwd z%%YytY!T5^fZ8f8VeJFSEv!<3wZuUPb8NjnPvsthAfL2^S#BHG;tXEk9_9YZ3asgO zFoof^8>Q@R_S)Nr@bRQY=-@?|-19fhR9n(bpgDS^KAevm zq<)+wt}Sa+qv(|VP|d#ql*ms#Bp9o7#ea&Dp^<+bd*rWm=PJ@%!*wW{iW1P|ZOkpC@z(hCb#fsa zs`8X2PgSI;x^-~2_-+C6)Q4S$IdKh~e_Fqx?Tf2yar|}L3n4&PnC)xCcJzJISfvnG zhJmr|g&<&1Q)$;T>ddjEP3X9f({4v@D_Hk@#ksBOHS)2rE*$Q7?zxJmk?vep$w9Jv ziJT;+u;#hNUngrEN3IhN9w!ZYX6T<_e@WgJjG|U>v~3IMk4cff3V-Mr0-lnN1K5I^ zWmyw-mB8WzySn^Q30bJ--vPi-f~33epT|BQ{bICyxe^+$hQ_VXc#UxW_zkK0*Q@fFC6864u@|$*@AXUi3hu+579EFl-~;?Qicr7TQ1lhJlhGv7P5>ka zY+oj$8VVegH*cHuV1;qY4&KzL3C^0)3yX#w*7HS!GPsLPG~LoXNas!xcfw#j?m5y) z;36nh`Z9tOKTbo>7TN8hX4+n8AWPBXNDKVcx!NwkAKQ1We!H`!xn=}#pKxFLbNwcK zf&K+1qgqTaXcx?!<7ys}6KVt@NVu+20G}NaDmhP0;J8=8c3mJ5!DsQ|jkPU)xWW(b z3a2WEy}NzU(mUW)rRkb5ARgT~T_ezR!YNLi=Qb2r1KM9fFY)>v^6}E;S|2%**oh9;{5}z)2*6Hntj0sT+c#Jfk?1AiXw8Q` iiS$P50|O)ws&yd^r?f$o7spYm&~!rJw;#?i_MZV%WA{t| literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/certifi/cacert.pem b/venv/lib/python3.11/site-packages/certifi/cacert.pem new file mode 100644 index 0000000..860f259 --- /dev/null +++ b/venv/lib/python3.11/site-packages/certifi/cacert.pem @@ -0,0 +1,4897 @@ + +# 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=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=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=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 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: 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: 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=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=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=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=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: 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=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=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=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----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 +MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 +ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD +VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq +scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO +xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H +LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX +uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD +yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ +JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q +rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN +BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L +hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB +QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ +HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu +Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg +QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB +BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA +A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb +laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 +awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo +JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw +LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT +VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk +LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb +UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ +QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ +naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls +QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----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=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: 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=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=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 - 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=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=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=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=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=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----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Label: "GlobalSign Root CA - R6" +# Serial: 1417766617973444989252670301619537 +# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae +# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 +# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GC CA" +# Serial: 44084345621038548146064804565436152554 +# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 +# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 +# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +# Issuer: CN=UCA Global G2 Root O=UniTrust +# Subject: CN=UCA Global G2 Root O=UniTrust +# Label: "UCA Global G2 Root" +# Serial: 124779693093741543919145257850076631279 +# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 +# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a +# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Extended Validation Root O=UniTrust +# Subject: CN=UCA Extended Validation Root O=UniTrust +# Label: "UCA Extended Validation Root" +# Serial: 106100277556486529736699587978573607008 +# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 +# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a +# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- + +# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Label: "Certigna Root CA" +# Serial: 269714418870597844693661054334862075617 +# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 +# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 +# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign Root CA - G1" +# Serial: 235931866688319308814040 +# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac +# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c +# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign ECC Root CA - G3" +# Serial: 287880440101571086945156 +# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 +# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 +# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Label: "emSign Root CA - C1" +# Serial: 825510296613316004955058 +# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 +# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 +# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Label: "emSign ECC Root CA - C3" +# Serial: 582948710642506000014504 +# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 +# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 +# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Label: "Hongkong Post Root CA 3" +# Serial: 46170865288971385588281144162979347873371282084 +# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 +# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 +# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 +-----BEGIN CERTIFICATE----- +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 +mpv0 +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft ECC Root Certificate Authority 2017" +# Serial: 136839042543790627607696632466672567020 +# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 +# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 +# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD +VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw +MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy +b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR +ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb +hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 +FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV +L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB +iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft RSA Root Certificate Authority 2017" +# Serial: 40975477897264996090493496164228220339 +# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 +# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 +# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl +MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N +aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ +Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 +ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 +HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm +gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ +jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc +aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG +YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 +W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K +UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH ++FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q +W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC +LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC +gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 +tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh +SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 +TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 +pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR +xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp +GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 +dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN +AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB +RA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Label: "e-Szigno Root CA 2017" +# Serial: 411379200276854331539784714 +# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 +# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 +# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV +BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk +LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv +b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ +BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg +THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v +IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv +xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H +Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB +eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo +jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ ++efcMQ== +-----END CERTIFICATE----- + +# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Label: "certSIGN Root CA G2" +# Serial: 313609486401300475190 +# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 +# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 +# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV +BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g +Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ +BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ +R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF +dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw +vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ +uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp +n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs +cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW +xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P +rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF +DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx +DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy +LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C +eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ +d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq +kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl +qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 +OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c +NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk +ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO +pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj +03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk +PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE +1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX +QRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global Certification Authority" +# Serial: 1846098327275375458322922162 +# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e +# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 +# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 +-----BEGIN CERTIFICATE----- +MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw +CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x +ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 +c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx +OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI +SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn +swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu +7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 +1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW +80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP +JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l +RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw +hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 +coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc +BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n +twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud +DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W +0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe +uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q +lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB +aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE +sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT +MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe +qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh +VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 +h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 +EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK +yeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P256 Certification Authority" +# Serial: 4151900041497450638097112925 +# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 +# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf +# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN +FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w +DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw +CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh +DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P384 Certification Authority" +# Serial: 2704997926503831671788816187 +# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 +# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 +# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB +BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ +j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF +1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G +A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 +AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC +MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu +Sw== +-----END CERTIFICATE----- + +# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Label: "NAVER Global Root Certification Authority" +# Serial: 9013692873798656336226253319739695165984492813 +# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b +# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 +# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM +BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG +T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx +CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD +b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA +iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH +38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE +HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz +kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP +szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq +vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf +nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG +YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo +0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a +CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K +AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I +36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN +qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj +cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm ++LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL +hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe +lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 +p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 +piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR +LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX +5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO +dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul +9XXeifdy +-----END CERTIFICATE----- + +# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +# Serial: 131542671362353147877283741781055151509 +# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb +# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a +# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw +CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw +FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S +Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 +MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL +DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS +QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH +sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK +Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu +SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC +MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy +v+c= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Label: "GlobalSign Root R46" +# Serial: 1552617688466950547958867513931858518042577 +# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef +# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 +# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA +MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD +VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy +MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt +c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ +OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG +vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud +316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo +0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE +y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF +zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE ++cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN +I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs +x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa +ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC +4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 +7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti +2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk +pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF +FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt +rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk +ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 +u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP +4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 +N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 +vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Label: "GlobalSign Root E46" +# Serial: 1552617690338932563915843282459653771421763 +# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f +# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 +# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx +CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD +ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw +MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex +HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq +R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd +yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ +7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 ++RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +# Issuer: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH +# Subject: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH +# Label: "GLOBALTRUST 2020" +# Serial: 109160994242082918454945253 +# MD5 Fingerprint: 8a:c7:6f:cb:6d:e3:cc:a2:f1:7c:83:fa:0e:78:d7:e8 +# SHA1 Fingerprint: d0:67:c1:13:51:01:0c:aa:d0:c7:6a:65:37:31:16:26:4f:53:71:a2 +# SHA256 Fingerprint: 9a:29:6a:51:82:d1:d4:51:a2:e3:7f:43:9b:74:da:af:a2:67:52:33:29:f9:0f:9a:0d:20:07:c3:34:e2:3c:9a +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG +A1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw +FwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx +MDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u +aXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq +hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b +RatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z +YybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3 +QWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw +yJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+ +BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ +SaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH +r96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0 +4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me +dKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw +q7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2 +nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu +H9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC +XtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd +6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf ++I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi +kvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7 +wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB +TI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C +MUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn +4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I +aFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy +qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- + +# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Label: "ANF Secure Server Root CA" +# Serial: 996390341000653745 +# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 +# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 +# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum EC-384 CA" +# Serial: 160250656287871593594747141429395092468 +# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 +# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed +# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw +CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw +JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT +EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 +WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX +BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE +KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm +Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 +EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J +UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn +nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Root CA" +# Serial: 40870380103424195783807378461123655149 +# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 +# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 +# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Label: "TunTrust Root CA" +# Serial: 108534058042236574382096126452369648152337120275 +# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 +# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb +# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL +BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg +Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv +b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG +EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u +IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ +n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd +2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF +VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ +GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF +li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU +r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 +eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb +MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg +jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB +7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW +5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE +ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 +90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z +xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu +QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 +FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH +22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP +xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn +dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 +Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b +nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ +CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH +u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj +d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS RSA Root CA 2021" +# Serial: 76817823531813593706434026085292783742 +# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 +# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d +# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg +Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL +MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv +b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l +mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE +4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv +a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M +pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw +Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b +LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY +AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB +AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq +E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr +W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ +CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU +X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 +f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja +H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP +JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P +zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt +jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 +/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT +BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 +aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW +xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU +63ZTGI0RmLo= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS ECC Root CA 2021" +# Serial: 137515985548005187474074462014555733966 +# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 +# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 +# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw +CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh +cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v +dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG +A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg +Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 +KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y +STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD +AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw +SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN +nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----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: 1977337328857672817 +# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 +# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe +# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 +MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +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+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc +tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd +IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC +AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw +ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m +iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF +Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ +hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P +Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE +EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV +1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t +CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR +5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw +f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 +ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK +GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus ECC Root CA" +# Serial: 630369271402956006249506845124680065938238527194 +# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 +# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 +# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw +RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY +BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz +MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u +LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 +v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd +e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw +V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA +AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG +GJTO +-----END CERTIFICATE----- + +# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus Root CA" +# Serial: 387574501246983434957692974888460947164905180485 +# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc +# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 +# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL +BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x +FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx +MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s +THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc +IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU +AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ +GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 +8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH +flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt +J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim +0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN +pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ +UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW +OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB +AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet +8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j +bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM +Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv +TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS +S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr +I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 +b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB +UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P +Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven +sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X2 O=Internet Security Research Group +# Subject: CN=ISRG Root X2 O=Internet Security Research Group +# Label: "ISRG Root X2" +# Serial: 87493402998870891108772069816698636114 +# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 +# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af +# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw +CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg +R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 +MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT +ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW ++1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 +ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI +zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW +tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 +/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Label: "HiPKI Root CA - G1" +# Serial: 60966262342023497858655262305426234976 +# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 +# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 +# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa +Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 +YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw +qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv +Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 +lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz +Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ +KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK +FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj +HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr +y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ +/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM +a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 +fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG +SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc +SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza +ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc +XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg +iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho +L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF +Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr +kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ +vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU +YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----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: 159662223612894884239637590694 +# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc +# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 +# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD +VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw +MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g +UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT +BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx +uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV +HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ ++wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 +bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 159662320309726417404178440727 +# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 +# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a +# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo +27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w +Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw +TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl +qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH +szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 +Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk +MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 +wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p +aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN +VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb +C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy +h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 +7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J +ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef +MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ +Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT +6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ +0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm +2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb +bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R2 O=Google Trust Services LLC +# Subject: CN=GTS Root R2 O=Google Trust Services LLC +# Label: "GTS Root R2" +# Serial: 159662449406622349769042896298 +# MD5 Fingerprint: 1e:39:c0:53:e6:1e:29:82:0b:ca:52:55:36:5d:57:dc +# SHA1 Fingerprint: 9a:44:49:76:32:db:de:fa:d0:bc:fb:5a:7b:17:bd:9e:56:09:24:94 +# SHA256 Fingerprint: 8d:25:cd:97:22:9d:bf:70:35:6b:da:4e:b3:cc:73:40:31:e2:4c:f0:0f:af:cf:d3:2d:c7:6e:b5:84:1c:7e:a8 +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt +nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY +6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu +MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k +RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg +f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV ++3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo +dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW +Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa +G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq +gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H +vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC +B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u +NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg +yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev +HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 +xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR +TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg +JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV +7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl +6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R3 O=Google Trust Services LLC +# Subject: CN=GTS Root R3 O=Google Trust Services LLC +# Label: "GTS Root R3" +# Serial: 159662495401136852707857743206 +# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 +# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 +# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G +jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 +4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 +VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm +ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R4 O=Google Trust Services LLC +# Subject: CN=GTS Root R4 O=Google Trust Services LLC +# Label: "GTS Root R4" +# Serial: 159662532700760215368942768210 +# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 +# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 +# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi +QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR +HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D +9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 +p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD +-----END CERTIFICATE----- + +# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj +# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj +# Label: "Telia Root CA v2" +# Serial: 7288924052977061235122729490515358 +# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 +# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd +# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx +CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE +AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 +NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ +MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq +AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 +vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 +lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD +n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT +7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o +6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC +TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 +WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R +DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI +pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj +YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy +rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ +8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi +0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM +A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS +SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K +TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF +6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er +3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt +Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT +VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW +ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA +rBPuUBQemMc= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST BR Root CA 1 2020" +# Serial: 165870826978392376648679885835942448534 +# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed +# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 +# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 +NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS +zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 +QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ +VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW +wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV +dWNbFJWcHwHP2NVypw87 +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST EV Root CA 1 2020" +# Serial: 126288379621884218666039612629459926992 +# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e +# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 +# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 +NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC +/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD +wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 +OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA +y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb +gfM0agPnIjhQW+0ZT0MW +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS ECC P384 Root G5" +# Serial: 13129116028163249804115411775095713523 +# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed +# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee +# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 +-----BEGIN CERTIFICATE----- +MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp +Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 +MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ +bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS +7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp +0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS +B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 +BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ +LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 +DXZDjC5Ty3zfDBeWUA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS RSA4096 Root G5" +# Serial: 11930366277458970227240571539258396554 +# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 +# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 +# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN +MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT +HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN +NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs +IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ +ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 +2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp +wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM +pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD +nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po +sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx +Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd +Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX +KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe +XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL +tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv +TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw +GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H +PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF +O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ +REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik +AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv +/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ +p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw +MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF +qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK +ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root R1 O=Certainly +# Subject: CN=Certainly Root R1 O=Certainly +# Label: "Certainly Root R1" +# Serial: 188833316161142517227353805653483829216 +# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 +# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af +# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw +PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy +dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 +YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 +1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT +vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed +aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 +1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 +r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 +cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ +wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ +6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA +2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH +Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR +eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u +d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr +PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d +8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi +1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd +rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di +taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 +lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj +yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn +Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy +yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n +wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 +OV+KmalBWQewLK8= +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root E1 O=Certainly +# Subject: CN=Certainly Root E1 O=Certainly +# Label: "Certainly Root E1" +# Serial: 8168531406727139161245376702891150584 +# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 +# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b +# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 +-----BEGIN CERTIFICATE----- +MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw +CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu +bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ +BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s +eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK ++IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 +QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 +hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm +ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG +BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR +-----END CERTIFICATE----- + +# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Label: "Security Communication ECC RootCA1" +# Serial: 15446673492073852651 +# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 +# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 +# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 +-----BEGIN CERTIFICATE----- +MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT +AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD +VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx +NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT +HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 +IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl +dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK +ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu +9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O +be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA1" +# Serial: 113562791157148395269083148143378328608 +# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 +# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a +# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU +MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI +T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz +MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF +SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh +bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z +xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ +spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 +58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR +at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll +5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq +nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK +V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ +pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO +z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn +jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ +WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF +7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 +YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli +awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u ++2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 +X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN +SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo +P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI ++pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz +znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 +eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 +YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy +r/6zcCwupvI= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA2" +# Serial: 58605626836079930195615843123109055211 +# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c +# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 +# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 +-----BEGIN CERTIFICATE----- +MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw +CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ +VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy +MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ +TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS +b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B +IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ ++kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK +sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA +94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B +43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root E46" +# Serial: 88989738453351742415770396670917916916 +# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 +# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a +# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 +-----BEGIN CERTIFICATE----- +MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw +CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T +ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN +MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG +A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT +ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC +WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ +6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B +Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa +qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q +4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root R46" +# Serial: 156256931880233212765902055439220583700 +# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 +# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 +# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 +-----BEGIN CERTIFICATE----- +MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD +Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw +HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY +MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp +YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa +ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz +SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf +iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X +ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 +IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS +VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE +SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu ++Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt +8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L +HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt +zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P +AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c +mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ +YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 +gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA +Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB +JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX +DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui +TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 +dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 +LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp +0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY +QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS RSA Root CA 2022" +# Serial: 148535279242832292258835760425842727825 +# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da +# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca +# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed +-----BEGIN CERTIFICATE----- +MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO +MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD +DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX +DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw +b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP +L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY +t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins +S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 +PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO +L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 +R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w +dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS ++YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS +d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG +AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f +gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z +NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt +hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM +QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf +R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ +DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW +P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy +lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq +bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w +AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q +r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji +Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU +98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS ECC Root CA 2022" +# Serial: 26605119622390491762507526719404364228 +# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 +# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 +# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 +-----BEGIN CERTIFICATE----- +MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT +U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 +MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh +dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm +acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN +SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME +GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW +uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp +15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN +b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA ECC TLS 2021" +# Serial: 81873346711060652204712539181482831616 +# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 +# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd +# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 +-----BEGIN CERTIFICATE----- +MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w +LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w +CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 +MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF +Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X +tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 +AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 +KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD +aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu +CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo +9H1/IISpQuQo +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA RSA TLS 2021" +# Serial: 111436099570196163832749341232207667876 +# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 +# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 +# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f +-----BEGIN CERTIFICATE----- +MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM +MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx +MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 +MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD +QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z +4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv +Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ +kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs +GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln +nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh +3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD +0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy +geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 +ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB +c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI +pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS +4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs +o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ +qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw +xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM +rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 +AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR +0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY +o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 +dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE +oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. +# Label: "TrustAsia Global Root CA G3" +# Serial: 576386314500428537169965010905813481816650257167 +# MD5 Fingerprint: 30:42:1b:b7:bb:81:75:35:e4:16:4f:53:d2:94:de:04 +# SHA1 Fingerprint: 63:cf:b6:c1:27:2b:56:e4:88:8e:1c:23:9a:b6:2e:81:47:24:c3:c7 +# SHA256 Fingerprint: e0:d3:22:6a:eb:11:63:c2:e4:8f:f9:be:3b:50:b4:c6:43:1b:e7:bb:1e:ac:c5:c3:6b:5d:5e:c5:09:03:9a:08 +-----BEGIN CERTIFICATE----- +MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM +BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp +ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe +Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw +IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU +cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS +T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK +AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 +nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep +qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA +yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs +hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX +zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv +kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT +f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA +uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB +o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih +MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E +BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 +wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 +XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 +JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j +ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV +VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx +xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on +AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d +7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj +gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV ++Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo +FGWsJwt0ivKH +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. +# Label: "TrustAsia Global Root CA G4" +# Serial: 451799571007117016466790293371524403291602933463 +# MD5 Fingerprint: 54:dd:b2:d7:5f:d8:3e:ed:7c:e0:0b:2e:cc:ed:eb:eb +# SHA1 Fingerprint: 57:73:a5:61:5d:80:b2:e6:ac:38:82:fc:68:07:31:ac:9f:b5:92:5a +# SHA256 Fingerprint: be:4b:56:cb:50:56:c0:13:6a:52:6d:f4:44:50:8d:aa:36:a0:b5:4f:42:e4:ac:38:f7:2a:f4:70:e4:79:65:4c +-----BEGIN CERTIFICATE----- +MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw +WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs +IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y +MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD +VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz +dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx +s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw +LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij +YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD +pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE +AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR +UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj +/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== +-----END CERTIFICATE----- + +# Issuer: CN=CommScope Public Trust ECC Root-01 O=CommScope +# Subject: CN=CommScope Public Trust ECC Root-01 O=CommScope +# Label: "CommScope Public Trust ECC Root-01" +# Serial: 385011430473757362783587124273108818652468453534 +# MD5 Fingerprint: 3a:40:a7:fc:03:8c:9c:38:79:2f:3a:a2:6c:b6:0a:16 +# SHA1 Fingerprint: 07:86:c0:d8:dd:8e:c0:80:98:06:98:d0:58:7a:ef:de:a6:cc:a2:5d +# SHA256 Fingerprint: 11:43:7c:da:7b:b4:5e:41:36:5f:45:b3:9a:38:98:6b:0d:e0:0d:ef:34:8e:0c:7b:b0:87:36:33:80:0b:c3:8b +-----BEGIN CERTIFICATE----- +MIICHTCCAaOgAwIBAgIUQ3CCd89NXTTxyq4yLzf39H91oJ4wCgYIKoZIzj0EAwMw +TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t +bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMTAeFw0yMTA0MjgxNzM1NDNa +Fw00NjA0MjgxNzM1NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv +cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDEw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAARLNumuV16ocNfQj3Rid8NeeqrltqLxeP0C +flfdkXmcbLlSiFS8LwS+uM32ENEp7LXQoMPwiXAZu1FlxUOcw5tjnSCDPgYLpkJE +hRGnSjot6dZoL0hOUysHP029uax3OVejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSOB2LAUN3GGQYARnQE9/OufXVNMDAKBggq +hkjOPQQDAwNoADBlAjEAnDPfQeMjqEI2Jpc1XHvr20v4qotzVRVcrHgpD7oh2MSg +2NED3W3ROT3Ek2DS43KyAjB8xX6I01D1HiXo+k515liWpDVfG2XqYZpwI7UNo5uS +Um9poIyNStDuiw7LR47QjRE= +-----END CERTIFICATE----- + +# Issuer: CN=CommScope Public Trust ECC Root-02 O=CommScope +# Subject: CN=CommScope Public Trust ECC Root-02 O=CommScope +# Label: "CommScope Public Trust ECC Root-02" +# Serial: 234015080301808452132356021271193974922492992893 +# MD5 Fingerprint: 59:b0:44:d5:65:4d:b8:5c:55:19:92:02:b6:d1:94:b2 +# SHA1 Fingerprint: 3c:3f:ef:57:0f:fe:65:93:86:9e:a0:fe:b0:f6:ed:8e:d1:13:c7:e5 +# SHA256 Fingerprint: 2f:fb:7f:81:3b:bb:b3:c8:9a:b4:e8:16:2d:0f:16:d7:15:09:a8:30:cc:9d:73:c2:62:e5:14:08:75:d1:ad:4a +-----BEGIN CERTIFICATE----- +MIICHDCCAaOgAwIBAgIUKP2ZYEFHpgE6yhR7H+/5aAiDXX0wCgYIKoZIzj0EAwMw +TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t +bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMjAeFw0yMTA0MjgxNzQ0NTRa +Fw00NjA0MjgxNzQ0NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv +cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDIw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAR4MIHoYx7l63FRD/cHB8o5mXxO1Q/MMDAL +j2aTPs+9xYa9+bG3tD60B8jzljHz7aRP+KNOjSkVWLjVb3/ubCK1sK9IRQq9qEmU +v4RDsNuESgMjGWdqb8FuvAY5N9GIIvejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTmGHX/72DehKT1RsfeSlXjMjZ59TAKBggq +hkjOPQQDAwNnADBkAjAmc0l6tqvmSfR9Uj/UQQSugEODZXW5hYA4O9Zv5JOGq4/n +ich/m35rChJVYaoR4HkCMHfoMXGsPHED1oQmHhS48zs73u1Z/GtMMH9ZzkXpc2AV +mkzw5l4lIhVtwodZ0LKOag== +-----END CERTIFICATE----- + +# Issuer: CN=CommScope Public Trust RSA Root-01 O=CommScope +# Subject: CN=CommScope Public Trust RSA Root-01 O=CommScope +# Label: "CommScope Public Trust RSA Root-01" +# Serial: 354030733275608256394402989253558293562031411421 +# MD5 Fingerprint: 0e:b4:15:bc:87:63:5d:5d:02:73:d4:26:38:68:73:d8 +# SHA1 Fingerprint: 6d:0a:5f:f7:b4:23:06:b4:85:b3:b7:97:64:fc:ac:75:f5:33:f2:93 +# SHA256 Fingerprint: 02:bd:f9:6e:2a:45:dd:9b:f1:8f:c7:e1:db:df:21:a0:37:9b:a3:c9:c2:61:03:44:cf:d8:d6:06:fe:c1:ed:81 +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIUPgNJgXUWdDGOTKvVxZAplsU5EN0wDQYJKoZIhvcNAQEL +BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi +Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMTAeFw0yMTA0MjgxNjQ1 +NTRaFw00NjA0MjgxNjQ1NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t +U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt +MDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwSGWjDR1C45FtnYSk +YZYSwu3D2iM0GXb26v1VWvZVAVMP8syMl0+5UMuzAURWlv2bKOx7dAvnQmtVzslh +suitQDy6uUEKBU8bJoWPQ7VAtYXR1HHcg0Hz9kXHgKKEUJdGzqAMxGBWBB0HW0al +DrJLpA6lfO741GIDuZNqihS4cPgugkY4Iw50x2tBt9Apo52AsH53k2NC+zSDO3Oj +WiE260f6GBfZumbCk6SP/F2krfxQapWsvCQz0b2If4b19bJzKo98rwjyGpg/qYFl +P8GMicWWMJoKz/TUyDTtnS+8jTiGU+6Xn6myY5QXjQ/cZip8UlF1y5mO6D1cv547 +KI2DAg+pn3LiLCuz3GaXAEDQpFSOm117RTYm1nJD68/A6g3czhLmfTifBSeolz7p +UcZsBSjBAg/pGG3svZwG1KdJ9FQFa2ww8esD1eo9anbCyxooSU1/ZOD6K9pzg4H/ +kQO9lLvkuI6cMmPNn7togbGEW682v3fuHX/3SZtS7NJ3Wn2RnU3COS3kuoL4b/JO +Hg9O5j9ZpSPcPYeoKFgo0fEbNttPxP/hjFtyjMcmAyejOQoBqsCyMWCDIqFPEgkB +Ea801M/XrmLTBQe0MXXgDW1XT2mH+VepuhX2yFJtocucH+X8eKg1mp9BFM6ltM6U +CBwJrVbl2rZJmkrqYxhTnCwuwwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUN12mmnQywsL5x6YVEFm45P3luG0wDQYJ +KoZIhvcNAQELBQADggIBAK+nz97/4L1CjU3lIpbfaOp9TSp90K09FlxD533Ahuh6 +NWPxzIHIxgvoLlI1pKZJkGNRrDSsBTtXAOnTYtPZKdVUvhwQkZyybf5Z/Xn36lbQ +nmhUQo8mUuJM3y+Xpi/SB5io82BdS5pYV4jvguX6r2yBS5KPQJqTRlnLX3gWsWc+ +QgvfKNmwrZggvkN80V4aCRckjXtdlemrwWCrWxhkgPut4AZ9HcpZuPN4KWfGVh2v +trV0KnahP/t1MJ+UXjulYPPLXAziDslg+MkfFoom3ecnf+slpoq9uC02EJqxWE2a +aE9gVOX2RhOOiKy8IUISrcZKiX2bwdgt6ZYD9KJ0DLwAHb/WNyVntHKLr4W96ioD +j8z7PEQkguIBpQtZtjSNMgsSDesnwv1B10A8ckYpwIzqug/xBpMu95yo9GA+o/E4 +Xo4TwbM6l4c/ksp4qRyv0LAbJh6+cOx69TOY6lz/KwsETkPdY34Op054A5U+1C0w +lREQKC6/oAI+/15Z0wUOlV9TRe9rh9VIzRamloPh37MG88EU26fsHItdkJANclHn +YfkUyq+Dj7+vsQpZXdxc1+SWrVtgHdqul7I52Qb1dgAT+GhMIbA1xNxVssnBQVoc +icCMb3SgazNNtQEo/a2tiRc7ppqEvOuM6sRxJKi6KfkIsidWNTJf6jn7MZrVGczw +-----END CERTIFICATE----- + +# Issuer: CN=CommScope Public Trust RSA Root-02 O=CommScope +# Subject: CN=CommScope Public Trust RSA Root-02 O=CommScope +# Label: "CommScope Public Trust RSA Root-02" +# Serial: 480062499834624527752716769107743131258796508494 +# MD5 Fingerprint: e1:29:f9:62:7b:76:e2:96:6d:f3:d4:d7:0f:ae:1f:aa +# SHA1 Fingerprint: ea:b0:e2:52:1b:89:93:4c:11:68:f2:d8:9a:ac:22:4c:a3:8a:57:ae +# SHA256 Fingerprint: ff:e9:43:d7:93:42:4b:4f:7c:44:0c:1c:3d:64:8d:53:63:f3:4b:82:dc:87:aa:7a:9f:11:8f:c5:de:e1:01:f1 +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIUVBa/O345lXGN0aoApYYNK496BU4wDQYJKoZIhvcNAQEL +BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi +Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMjAeFw0yMTA0MjgxNzE2 +NDNaFw00NjA0MjgxNzE2NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t +U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt +MDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDh+g77aAASyE3VrCLE +NQE7xVTlWXZjpX/rwcRqmL0yjReA61260WI9JSMZNRTpf4mnG2I81lDnNJUDMrG0 +kyI9p+Kx7eZ7Ti6Hmw0zdQreqjXnfuU2mKKuJZ6VszKWpCtYHu8//mI0SFHRtI1C +rWDaSWqVcN3SAOLMV2MCe5bdSZdbkk6V0/nLKR8YSvgBKtJjCW4k6YnS5cciTNxz +hkcAqg2Ijq6FfUrpuzNPDlJwnZXjfG2WWy09X6GDRl224yW4fKcZgBzqZUPckXk2 +LHR88mcGyYnJ27/aaL8j7dxrrSiDeS/sOKUNNwFnJ5rpM9kzXzehxfCrPfp4sOcs +n/Y+n2Dg70jpkEUeBVF4GiwSLFworA2iI540jwXmojPOEXcT1A6kHkIfhs1w/tku +FT0du7jyU1fbzMZ0KZwYszZ1OC4PVKH4kh+Jlk+71O6d6Ts2QrUKOyrUZHk2EOH5 +kQMreyBUzQ0ZGshBMjTRsJnhkB4BQDa1t/qp5Xd1pCKBXbCL5CcSD1SIxtuFdOa3 +wNemKfrb3vOTlycEVS8KbzfFPROvCgCpLIscgSjX74Yxqa7ybrjKaixUR9gqiC6v +wQcQeKwRoi9C8DfF8rhW3Q5iLc4tVn5V8qdE9isy9COoR+jUKgF4z2rDN6ieZdIs +5fq6M8EGRPbmz6UNp2YINIos8wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUR9DnsSL/nSz12Vdgs7GxcJXvYXowDQYJ +KoZIhvcNAQELBQADggIBAIZpsU0v6Z9PIpNojuQhmaPORVMbc0RTAIFhzTHjCLqB +KCh6krm2qMhDnscTJk3C2OVVnJJdUNjCK9v+5qiXz1I6JMNlZFxHMaNlNRPDk7n3 ++VGXu6TwYofF1gbTl4MgqX67tiHCpQ2EAOHyJxCDut0DgdXdaMNmEMjRdrSzbyme +APnCKfWxkxlSaRosTKCL4BWaMS/TiJVZbuXEs1DIFAhKm4sTg7GkcrI7djNB3Nyq +pgdvHSQSn8h2vS/ZjvQs7rfSOBAkNlEv41xdgSGn2rtO/+YHqP65DSdsu3BaVXoT +6fEqSWnHX4dXTEN5bTpl6TBcQe7rd6VzEojov32u5cSoHw2OHG1QAk8mGEPej1WF +sQs3BWDJVTkSBKEqz3EWnzZRSb9wO55nnPt7eck5HHisd5FUmrh1CoFSl+NmYWvt +PjgelmFV4ZFUjO2MJB+ByRCac5krFk5yAD9UG/iNuovnFNa2RU9g7Jauwy8CTl2d +lklyALKrdVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670 +v64fG9PiO/yzcnMcmyiQiRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17O +rg3bhzjlP1v9mxnhMUF6cKojawHhRUzNlM47ni3niAIi9G7oyOzWPPO5std3eqx7 +-----END CERTIFICATE----- + +# Issuer: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH +# Subject: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH +# Label: "Telekom Security TLS ECC Root 2020" +# Serial: 72082518505882327255703894282316633856 +# MD5 Fingerprint: c1:ab:fe:6a:10:2c:03:8d:bc:1c:22:32:c0:85:a7:fd +# SHA1 Fingerprint: c0:f8:96:c5:a9:3b:01:06:21:07:da:18:42:48:bc:e9:9d:88:d5:ec +# SHA256 Fingerprint: 57:8a:f4:de:d0:85:3f:4e:59:98:db:4a:ea:f9:cb:ea:8d:94:5f:60:b6:20:a3:8d:1a:3c:13:b2:bc:7b:a8:e1 +-----BEGIN CERTIFICATE----- +MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw +CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH +bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw +MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx +JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE +AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O +tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP +f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA +MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di +z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn +27iQ7t0l +-----END CERTIFICATE----- + +# Issuer: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH +# Subject: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH +# Label: "Telekom Security TLS RSA Root 2023" +# Serial: 44676229530606711399881795178081572759 +# MD5 Fingerprint: bf:5b:eb:54:40:cd:48:71:c4:20:8d:7d:de:0a:42:f2 +# SHA1 Fingerprint: 54:d3:ac:b3:bd:57:56:f6:85:9d:ce:e5:c3:21:e2:d4:ad:83:d0:93 +# SHA256 Fingerprint: ef:c6:5c:ad:bb:59:ad:b6:ef:e8:4d:a2:23:11:b3:56:24:b7:1b:3b:1e:a0:da:8b:66:55:17:4e:c8:97:86:46 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj +MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 +eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy +MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC +REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG +A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 +cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV +cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA +U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 +Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug +BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy +8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J +co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg +8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 +rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 +mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg ++y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX +gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 +p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ +pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm +9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw +M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd +GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ +CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t +xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ +w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK +L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj +X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q +ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm +dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= +-----END CERTIFICATE----- + +# Issuer: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA +# Subject: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA +# Label: "FIRMAPROFESIONAL CA ROOT-A WEB" +# Serial: 65916896770016886708751106294915943533 +# MD5 Fingerprint: 82:b2:ad:45:00:82:b0:66:63:f8:5f:c3:67:4e:ce:a3 +# SHA1 Fingerprint: a8:31:11:74:a6:14:15:0d:ca:77:dd:0e:e4:0c:5d:58:fc:a0:72:a5 +# SHA256 Fingerprint: be:f2:56:da:f2:6e:9c:69:bd:ec:16:02:35:97:98:f3:ca:f7:18:21:a0:3e:01:82:57:c5:3c:65:61:7f:3d:4a +-----BEGIN CERTIFICATE----- +MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQsw +CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE +YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB +IFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2WhcNNDcwMzMxMDkwMTM2WjBuMQsw +CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE +YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB +IFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zf +e9MEkVz6iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6C +cyvHZpsKjECcfIr28jlgst7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FDY1w8ndYn81LsF7Kpryz3dvgwHQYDVR0O +BBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO +PQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgLcFBTApFw +hVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dG +XSaQpYXFuXqUPoeovQA= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA CYBER Root CA" +# Serial: 85076849864375384482682434040119489222 +# MD5 Fingerprint: 0b:33:a0:97:52:95:d4:a9:fd:bb:db:6e:a3:55:5b:51 +# SHA1 Fingerprint: f6:b1:1c:1a:83:38:e9:7b:db:b3:a8:c8:33:24:e0:2d:9c:7f:26:66 +# SHA256 Fingerprint: 3f:63:bb:28:14:be:17:4e:c8:b6:43:9c:f0:8d:6d:56:f0:b7:c4:05:88:3a:56:48:a3:34:42:4d:6b:3e:c5:58 +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ +MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 +IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 +WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO +LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P +40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF +avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ +34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i +JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu +j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf +Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP +2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA +S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA +oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC +kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW +5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd +BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB +AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t +tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn +68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn +TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t +RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx +f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI +Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz +8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 +NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX +xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 +t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA12" +# Serial: 587887345431707215246142177076162061960426065942 +# MD5 Fingerprint: c6:89:ca:64:42:9b:62:08:49:0b:1e:7f:e9:07:3d:e8 +# SHA1 Fingerprint: 7a:22:1e:3d:de:1b:06:ac:9e:c8:47:70:16:8e:3c:e5:f7:6b:06:f4 +# SHA256 Fingerprint: 3f:03:4b:b5:70:4d:44:b2:d0:85:45:a0:20:57:de:93:eb:f3:90:5f:ce:72:1a:cb:c7:30:c0:6d:da:ee:90:4e +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw +NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF +KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt +p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd +J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur +FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J +hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K +h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF +AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld +mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ +mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA +8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV +55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ +yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA14" +# Serial: 575790784512929437950770173562378038616896959179 +# MD5 Fingerprint: 71:0d:72:fa:92:19:65:5e:89:04:ac:16:33:f0:bc:d5 +# SHA1 Fingerprint: dd:50:c0:f7:79:b3:64:2e:74:a2:b8:9d:9f:d3:40:dd:bb:f0:f2:4f +# SHA256 Fingerprint: 4b:00:9c:10:34:49:4f:9a:b5:6b:ba:3b:a1:d6:27:31:fc:4d:20:d8:95:5a:dc:ec:10:a9:25:60:72:61:e3:38 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw +NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ +FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg +vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy +6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo +/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J +kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ +0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib +y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac +18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs +0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB +SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL +ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk +86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E +rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib +ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT +zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS +DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 +2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo +FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy +K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 +dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl +Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB +365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c +JRNItX+S +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA15" +# Serial: 126083514594751269499665114766174399806381178503 +# MD5 Fingerprint: 13:30:fc:c4:62:a6:a9:de:b5:c1:68:af:b5:d2:31:47 +# SHA1 Fingerprint: cb:ba:83:c8:c1:5a:5d:f1:f9:73:6f:ca:d7:ef:28:13:06:4a:07:7d +# SHA256 Fingerprint: e7:78:f0:f0:95:fe:84:37:29:cd:1a:00:82:17:9e:53:14:a9:c2:91:44:28:05:e1:fb:1d:8f:b6:b8:88:6c:3a +-----BEGIN CERTIFICATE----- +MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw +UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM +dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy +NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl +cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 +IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 +wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR +ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT +9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp +4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 +bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH +# Subject: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH +# Label: "D-TRUST BR Root CA 2 2023" +# Serial: 153168538924886464690566649552453098598 +# MD5 Fingerprint: e1:09:ed:d3:60:d4:56:1b:47:1f:b7:0c:5f:1b:5f:85 +# SHA1 Fingerprint: 2d:b0:70:ee:71:94:af:69:68:17:db:79:ce:58:9f:a0:6b:96:f7:87 +# SHA256 Fingerprint: 05:52:e6:f8:3f:df:65:e8:fa:96:70:e6:66:df:28:a4:e2:13:40:b5:10:cb:e5:25:66:f9:7c:4f:b9:4b:2b:d1 +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQczswBEhb2U14LnNLyaHcZjANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEJSIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA4NTYzMVoXDTM4MDUw +OTA4NTYzMFowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAK7/CVmRgApKaOYkP7in5Mg6CjoWzckjYaCTcfKr +i3OPoGdlYNJUa2NRb0kz4HIHE304zQaSBylSa053bATTlfrdTIzZXcFhfUvnKLNE +gXtRr90zsWh81k5M/itoucpmacTsXld/9w3HnDY25QdgrMBM6ghs7wZ8T1soegj8 +k12b9py0i4a6Ibn08OhZWiihNIQaJZG2tY/vsvmA+vk9PBFy2OMvhnbFeSzBqZCT +Rphny4NqoFAjpzv2gTng7fC5v2Xx2Mt6++9zA84A9H3X4F07ZrjcjrqDy4d2A/wl +2ecjbwb9Z/Pg/4S8R7+1FhhGaRTMBffb00msa8yr5LULQyReS2tNZ9/WtT5PeB+U +cSTq3nD88ZP+npNa5JRal1QMNXtfbO4AHyTsA7oC9Xb0n9Sa7YUsOCIvx9gvdhFP +/Wxc6PWOJ4d/GUohR5AdeY0cW/jPSoXk7bNbjb7EZChdQcRurDhaTyN0dKkSw/bS +uREVMweR2Ds3OmMwBtHFIjYoYiMQ4EbMl6zWK11kJNXuHA7e+whadSr2Y23OC0K+ +0bpwHJwh5Q8xaRfX/Aq03u2AnMuStIv13lmiWAmlY0cL4UEyNEHZmrHZqLAbWt4N +DfTisl01gLmB1IRpkQLLddCNxbU9CZEJjxShFHR5PtbJFR2kWVki3PaKRT08EtY+ +XTIvAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUZ5Dw1t61 +GNVGKX5cq/ieCLxklRAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfYnJfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQA097N3U9swFrktpSHxQCF16+tI +FoE9c+CeJyrrd6kTpGoKWloUMz1oH4Guaf2Mn2VsNELZLdB/eBaxOqwjMa1ef67n +riv6uvw8l5VAk1/DLQOj7aRvU9f6QA4w9QAgLABMjDu0ox+2v5Eyq6+SmNMW5tTR +VFxDWy6u71cqqLRvpO8NVhTaIasgdp4D/Ca4nj8+AybmTNudX0KEPUUDAxxZiMrc +LmEkWqTqJwtzEr5SswrPMhfiHocaFpVIbVrg0M8JkiZmkdijYQ6qgYF/6FKC0ULn +4B0Y+qSFNueG4A3rvNTJ1jxD8V1Jbn6Bm2m1iWKPiFLY1/4nwSPFyysCu7Ff/vtD +hQNGvl3GyiEm/9cCnnRK3PgTFbGBVzbLZVzRHTF36SXDw7IyN9XxmAnkbWOACKsG +koHU6XCPpz+y7YaMgmo1yEJagtFSGkUPFaUA8JR7ZSdXOUPPfH/mvTWze/EZTN46 +ls/pdu4D58JDUjxqgejBWoC9EV2Ta/vH5mQ/u2kc6d0li690yVRAysuTEwrt+2aS +Ecr1wPrYg1UDfNPFIkZ1cGt5SAYqgpq/5usWDiJFAbzdNpQ0qTUmiteXue4Icr80 +knCDgKs4qllo3UCkGJCy89UDyibK79XH4I9TjvAA46jtn/mtd+ArY0+ew+43u3gJ +hJ65bvspmZDogNOfJA== +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH +# Subject: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH +# Label: "D-TRUST EV Root CA 2 2023" +# Serial: 139766439402180512324132425437959641711 +# MD5 Fingerprint: 96:b4:78:09:f0:09:cb:77:eb:bb:1b:4d:6f:36:bc:b6 +# SHA1 Fingerprint: a5:5b:d8:47:6c:8f:19:f7:4c:f4:6d:6b:b6:c2:79:82:22:df:54:8b +# SHA256 Fingerprint: 8e:82:21:b2:e7:d4:00:78:36:a1:67:2f:0d:cc:29:9c:33:bc:07:d3:16:f1:32:fa:1a:20:6d:58:71:50:f1:ce +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQaSYJfoBLTKCnjHhiU19abzANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEVWIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA5MTAzM1oXDTM4MDUw +OTA5MTAzMlowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBANiOo4mAC7JXUtypU0w3uX9jFxPvp1sjW2l1sJkK +F8GLxNuo4MwxusLyzV3pt/gdr2rElYfXR8mV2IIEUD2BCP/kPbOx1sWy/YgJ25yE +7CUXFId/MHibaljJtnMoPDT3mfd/06b4HEV8rSyMlD/YZxBTfiLNTiVR8CUkNRFe +EMbsh2aJgWi6zCudR3Mfvc2RpHJqnKIbGKBv7FD0fUDCqDDPvXPIEysQEx6Lmqg6 +lHPTGGkKSv/BAQP/eX+1SH977ugpbzZMlWGG2Pmic4ruri+W7mjNPU0oQvlFKzIb +RlUWaqZLKfm7lVa/Rh3sHZMdwGWyH6FDrlaeoLGPaxK3YG14C8qKXO0elg6DpkiV +jTujIcSuWMYAsoS0I6SWhjW42J7YrDRJmGOVxcttSEfi8i4YHtAxq9107PncjLgc +jmgjutDzUNzPZY9zOjLHfP7KgiJPvo5iR2blzYfi6NUPGJ/lBHJLRjwQ8kTCZFZx +TnXonMkmdMV9WdEKWw9t/p51HBjGGjp82A0EzM23RWV6sY+4roRIPrN6TagD4uJ+ +ARZZaBhDM7DS3LAaQzXupdqpRlyuhoFBAUp0JuyfBr/CBTdkdXgpaP3F9ev+R/nk +hbDhezGdpn9yo7nELC7MmVcOIQxFAZRl62UJxmMiCzNJkkg8/M3OsD6Onov4/knF +NXJHAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqvyREBuH +kV8Wub9PS5FeAByxMoAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfZXZfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQCTy6UfmRHsmg1fLBWTxj++EI14 +QvBukEdHjqOSMo1wj/Zbjb6JzkcBahsgIIlbyIIQbODnmaprxiqgYzWRaoUlrRc4 +pZt+UPJ26oUFKidBK7GB0aL2QHWpDsvxVUjY7NHss+jOFKE17MJeNRqrphYBBo7q +3C+jisosketSjl8MmxfPy3MHGcRqwnNU73xDUmPBEcrCRbH0O1P1aa4846XerOhU +t7KR/aypH/KH5BfGSah82ApB9PI+53c0BFLd6IHyTS9URZ0V4U/M5d40VxDJI3IX +cI1QcB9WbMy5/zpaT2N6w25lBx2Eof+pDGOJbbJAiDnXH3dotfyc1dZnaVuodNv8 +ifYbMvekJKZ2t0dT741Jj6m2g1qllpBFYfXeA08mD6iL8AOWsKwV0HFaanuU5nCT +2vFp4LJiTZ6P/4mdm13NRemUAiKN4DV/6PEEeXFsVIP4M7kFMhtYVRFP0OUnR3Hs +7dpn1mKmS00PaaLJvOwiS5THaJQXfuKOKD62xur1NGyfN4gHONuGcfrNlUhDbqNP +gofXNJhuS5N5YHVpD/Aa1VP6IQzCP+k/HxiMkl14p3ZnGbuy6n/pcAlWVqOwDAst +Nl7F6cTVg8uGF5csbBNvh1qvSaYd2804BC5f4ko1Di1L+KIkBI3Y4WNeApI02phh +XBxvWHZks/wCuPWdCg== +-----END CERTIFICATE----- diff --git a/venv/lib/python3.11/site-packages/certifi/core.py b/venv/lib/python3.11/site-packages/certifi/core.py new file mode 100644 index 0000000..91f538b --- /dev/null +++ b/venv/lib/python3.11/site-packages/certifi/core.py @@ -0,0 +1,114 @@ +""" +certifi.py +~~~~~~~~~~ + +This module returns the installation location of cacert.pem or its contents. +""" +import sys +import atexit + +def exit_cacert_ctx() -> None: + _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr] + + +if sys.version_info >= (3, 11): + + from importlib.resources import as_file, files + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the file + # in cases where we're inside of a zipimport situation until someone + # actually calls where(), but we don't want to re-extract the file + # on every call of where(), so we'll do it once then store it in a + # global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you to + # manage the cleanup of this file, so it doesn't actually return a + # path, it returns a context manager that will give you the path + # when you enter it and will do any cleanup when you leave it. In + # the common case of not needing a temporary file, it will just + # return the file system location and the __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = as_file(files("certifi").joinpath("cacert.pem")) + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + atexit.register(exit_cacert_ctx) + + return _CACERT_PATH + + def contents() -> str: + return files("certifi").joinpath("cacert.pem").read_text(encoding="ascii") + +elif sys.version_info >= (3, 7): + + from importlib.resources import path as get_path, read_text + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the + # file in cases where we're inside of a zipimport situation until + # someone actually calls where(), but we don't want to re-extract + # the file on every call of where(), so we'll do it once then store + # it in a global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you + # to manage the cleanup of this file, so it doesn't actually + # return a path, it returns a context manager that will give + # you the path when you enter it and will do any cleanup when + # you leave it. In the common case of not needing a temporary + # file, it will just return the file system location and the + # __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = get_path("certifi", "cacert.pem") + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + atexit.register(exit_cacert_ctx) + + return _CACERT_PATH + + def contents() -> str: + return read_text("certifi", "cacert.pem", encoding="ascii") + +else: + import os + import types + from typing import Union + + Package = Union[types.ModuleType, str] + Resource = Union[str, "os.PathLike"] + + # This fallback will work for Python versions prior to 3.7 that lack the + # importlib.resources module but relies on the existing `where` function + # so won't address issues with environments like PyOxidizer that don't set + # __file__ on modules. + def read_text( + package: Package, + resource: Resource, + encoding: str = 'utf-8', + errors: str = 'strict' + ) -> str: + with open(where(), encoding=encoding) as data: + return data.read() + + # If we don't have importlib.resources, then we will just do the old logic + # of assuming we're on the filesystem and munge the path directly. + def where() -> str: + f = os.path.dirname(__file__) + + return os.path.join(f, "cacert.pem") + + def contents() -> str: + return read_text("certifi", "cacert.pem", encoding="ascii") diff --git a/venv/lib/python3.11/site-packages/certifi/py.typed b/venv/lib/python3.11/site-packages/certifi/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/LICENSE b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/LICENSE new file mode 100644 index 0000000..29225ee --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/LICENSE @@ -0,0 +1,26 @@ + +Except when otherwise stated (look for LICENSE files in directories or +information at the beginning of each file) all software and +documentation is licensed as follows: + + The MIT License + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + diff --git a/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/METADATA b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/METADATA new file mode 100644 index 0000000..60b0779 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/METADATA @@ -0,0 +1,40 @@ +Metadata-Version: 2.1 +Name: cffi +Version: 1.17.1 +Summary: Foreign Function Interface for Python calling C code. +Home-page: http://cffi.readthedocs.org +Author: Armin Rigo, Maciej Fijalkowski +Author-email: python-cffi@googlegroups.com +License: MIT +Project-URL: Documentation, http://cffi.readthedocs.org/ +Project-URL: Source Code, https://github.com/python-cffi/cffi +Project-URL: Issue Tracker, https://github.com/python-cffi/cffi/issues +Project-URL: Changelog, https://cffi.readthedocs.io/en/latest/whatsnew.html +Project-URL: Downloads, https://github.com/python-cffi/cffi/releases +Project-URL: Contact, https://groups.google.com/forum/#!forum/python-cffi +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: License :: OSI Approved :: MIT License +Requires-Python: >=3.8 +License-File: LICENSE +Requires-Dist: pycparser + + +CFFI +==== + +Foreign Function Interface for Python calling C code. +Please see the `Documentation `_. + +Contact +------- + +`Mailing list `_ diff --git a/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/RECORD b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/RECORD new file mode 100644 index 0000000..51f8361 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/RECORD @@ -0,0 +1,48 @@ +_cffi_backend.cpython-311-x86_64-linux-gnu.so,sha256=K3Ig76G2fNGS7ef9yadiP-gNjpCHXd-J1ZNzvv6jfQs,1068624 +cffi-1.17.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +cffi-1.17.1.dist-info/LICENSE,sha256=BLgPWwd7vtaICM_rreteNSPyqMmpZJXFh72W3x6sKjM,1294 +cffi-1.17.1.dist-info/METADATA,sha256=u6nuvP_qPJKu2zvIbi2zkGzVu7KjnnRIYUFyIrOY3j4,1531 +cffi-1.17.1.dist-info/RECORD,, +cffi-1.17.1.dist-info/WHEEL,sha256=JyEZ6Cxo51rQOYRMkM7cW9w1CnY9FuHxSeIJCGoxjS4,151 +cffi-1.17.1.dist-info/entry_points.txt,sha256=y6jTxnyeuLnL-XJcDv8uML3n6wyYiGRg8MTp_QGJ9Ho,75 +cffi-1.17.1.dist-info/top_level.txt,sha256=rE7WR3rZfNKxWI9-jn6hsHCAl7MDkB-FmuQbxWjFehQ,19 +cffi/__init__.py,sha256=H6t_ebva6EeHpUuItFLW1gbRp94eZRNJODLaWKdbx1I,513 +cffi/__pycache__/__init__.cpython-311.pyc,, +cffi/__pycache__/_imp_emulation.cpython-311.pyc,, +cffi/__pycache__/_shimmed_dist_utils.cpython-311.pyc,, +cffi/__pycache__/api.cpython-311.pyc,, +cffi/__pycache__/backend_ctypes.cpython-311.pyc,, +cffi/__pycache__/cffi_opcode.cpython-311.pyc,, +cffi/__pycache__/commontypes.cpython-311.pyc,, +cffi/__pycache__/cparser.cpython-311.pyc,, +cffi/__pycache__/error.cpython-311.pyc,, +cffi/__pycache__/ffiplatform.cpython-311.pyc,, +cffi/__pycache__/lock.cpython-311.pyc,, +cffi/__pycache__/model.cpython-311.pyc,, +cffi/__pycache__/pkgconfig.cpython-311.pyc,, +cffi/__pycache__/recompiler.cpython-311.pyc,, +cffi/__pycache__/setuptools_ext.cpython-311.pyc,, +cffi/__pycache__/vengine_cpy.cpython-311.pyc,, +cffi/__pycache__/vengine_gen.cpython-311.pyc,, +cffi/__pycache__/verifier.cpython-311.pyc,, +cffi/_cffi_errors.h,sha256=zQXt7uR_m8gUW-fI2hJg0KoSkJFwXv8RGUkEDZ177dQ,3908 +cffi/_cffi_include.h,sha256=Exhmgm9qzHWzWivjfTe0D7Xp4rPUkVxdNuwGhMTMzbw,15055 +cffi/_embedding.h,sha256=EDKw5QrLvQoe3uosXB3H1xPVTYxsn33eV3A43zsA_Fw,18787 +cffi/_imp_emulation.py,sha256=RxREG8zAbI2RPGBww90u_5fi8sWdahpdipOoPzkp7C0,2960 +cffi/_shimmed_dist_utils.py,sha256=Bjj2wm8yZbvFvWEx5AEfmqaqZyZFhYfoyLLQHkXZuao,2230 +cffi/api.py,sha256=alBv6hZQkjpmZplBphdaRn2lPO9-CORs_M7ixabvZWI,42169 +cffi/backend_ctypes.py,sha256=h5ZIzLc6BFVXnGyc9xPqZWUS7qGy7yFSDqXe68Sa8z4,42454 +cffi/cffi_opcode.py,sha256=JDV5l0R0_OadBX_uE7xPPTYtMdmpp8I9UYd6av7aiDU,5731 +cffi/commontypes.py,sha256=7N6zPtCFlvxXMWhHV08psUjdYIK2XgsN3yo5dgua_v4,2805 +cffi/cparser.py,sha256=0qI3mEzZSNVcCangoyXOoAcL-RhpQL08eG8798T024s,44789 +cffi/error.py,sha256=v6xTiS4U0kvDcy4h_BDRo5v39ZQuj-IMRYLv5ETddZs,877 +cffi/ffiplatform.py,sha256=avxFjdikYGJoEtmJO7ewVmwG_VEVl6EZ_WaNhZYCqv4,3584 +cffi/lock.py,sha256=l9TTdwMIMpi6jDkJGnQgE9cvTIR7CAntIJr8EGHt3pY,747 +cffi/model.py,sha256=W30UFQZE73jL5Mx5N81YT77us2W2iJjTm0XYfnwz1cg,21797 +cffi/parse_c_type.h,sha256=OdwQfwM9ktq6vlCB43exFQmxDBtj2MBNdK8LYl15tjw,5976 +cffi/pkgconfig.py,sha256=LP1w7vmWvmKwyqLaU1Z243FOWGNQMrgMUZrvgFuOlco,4374 +cffi/recompiler.py,sha256=sim4Tm7lamt2Jn8uzKN0wMYp6ODByk3g7of47-h9LD4,65367 +cffi/setuptools_ext.py,sha256=-ebj79lO2_AUH-kRcaja2pKY1Z_5tloGwsJgzK8P3Cc,8871 +cffi/vengine_cpy.py,sha256=8UagT6ZEOZf6Dju7_CfNulue8CnsHLEzJYhnqUhoF04,43752 +cffi/vengine_gen.py,sha256=DUlEIrDiVin1Pnhn1sfoamnS5NLqfJcOdhRoeSNeJRg,26939 +cffi/verifier.py,sha256=oX8jpaohg2Qm3aHcznidAdvrVm5N4sQYG0a3Eo5mIl4,11182 diff --git a/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/WHEEL b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/WHEEL new file mode 100644 index 0000000..c4af279 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: setuptools (74.1.1) +Root-Is-Purelib: false +Tag: cp311-cp311-manylinux_2_17_x86_64 +Tag: cp311-cp311-manylinux2014_x86_64 + diff --git a/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/entry_points.txt b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/entry_points.txt new file mode 100644 index 0000000..4b0274f --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[distutils.setup_keywords] +cffi_modules = cffi.setuptools_ext:cffi_modules diff --git a/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/top_level.txt new file mode 100644 index 0000000..f645779 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi-1.17.1.dist-info/top_level.txt @@ -0,0 +1,2 @@ +_cffi_backend +cffi diff --git a/venv/lib/python3.11/site-packages/cffi/__init__.py b/venv/lib/python3.11/site-packages/cffi/__init__.py new file mode 100644 index 0000000..2e35a38 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/__init__.py @@ -0,0 +1,14 @@ +__all__ = ['FFI', 'VerificationError', 'VerificationMissing', 'CDefError', + 'FFIError'] + +from .api import FFI +from .error import CDefError, FFIError, VerificationError, VerificationMissing +from .error import PkgConfigError + +__version__ = "1.17.1" +__version_info__ = (1, 17, 1) + +# The verifier module file names are based on the CRC32 of a string that +# contains the following version number. It may be older than __version__ +# if nothing is clearly incompatible. +__version_verifier_modules__ = "0.8.6" diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8dcf96c7846cdbc09e7c46f54f84829753cddb03 GIT binary patch literal 623 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9ff4986c6cf84ea57d7926f507c254dee35bbe6 GIT binary patch literal 2314 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/backend_ctypes.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/backend_ctypes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d912fce087b5c98d9830d30a732baf04ceb29a91 GIT binary patch literal 71903 zcmd443v^pYnkI%f0TLuY0wh3!5AZ31qDVccwIAu1t`lf z*;ac!Yf|H#h8;SFyX76&E%i{{(hNPZGs>?K&ZsH$7H9)JDyzv{0)EG;cI;QGBk`}MhheZye*H}pfg ztht+e2aN{9yN0kKY@9F*iQmTDw`s`4;>|`MgakCTw|;-E!tg z(U5)85pfI^M@ojAkhM(hKyoTH?&5krjq+FL) z!P1J6RuZYurFmGI6KSP+X*&8t)mnvT@*q8_nHvAYlx}RW(?+E=0P|hr2IwQ|BY2v1s?yg-gR{M@C z_$e~~oIOIpkUioc5Z1*OBQL;N7h8hZqP$oqN&tB4@|GfRFkJk)Q5Ro^_>#Qbt}p<7 z$Q>?4SRQT+yIwaARfGY=LmuQW&&%%(1Bizzk><%us|o{%hkQt@%uDl!tB_V5_93h> z86q`dzZM#Y0xYhB6>Yjm-7EHpjonz?4dAQs{O-ev^axfV9g7|u&TYxuG0eUtX> zuNgz8!MJC1WO8yU795|9#zrP%<0G+15a8?}Kt9ZIQ(V?DJUluv5{(WIBi<5?OpIkM zBiy-Y)Pz?CgA9HN-p41$W2mM_oCs9^E-BKBoY86oR}8CVzPa(Go{#r0?N9sr`LY3_ zY#?nH!F!ZSlrBQv42zt?O@7N#a?7L#=vxbIKQ@L<@0;^lZ61ubM=oCkK8b{bBf*PP zMC!$#kHCodV z*5S#>OBdsAbuUni4@E?~5L_{QPF;`*)c?VOA06NWokE~9%|3U{#_H~08;q{azoFo+ z!RXk`roCpwsokt!+_*u%Ae64xj2ywjO(U!DO(4}vBNNjR5u1wRR6HD;%Avw|rMixC zbS+A_N5zO0b>-K9Mux%Mzs1eF28RJ~hCA_^HBAPa4KdY7wiq~%(GZgsV`L-9ECi1) z87`ZjHN0e;F>;$tRH}sC3^T^xH_V!24(Tlh!;E>x^i#a$=klAPl{1Evl0kJhql1B2 z^Q3pZyjlpFHP4s{y${Cga`R-Ai_jDqnas_Y(MWJ=EEuw8ZDO}(%lcw5Zv5Bv_iuSqwRZm@VG_{@ggal6rg_X8ts;b{T|MvNm=dG!Q zsf789wTjAjJKpYit8<}qu0P|dm@AIjQK#36iVaumHkdW@o5q&G@wajFE=KsuLypPQ zfQ%HL$-iduXbWjRY(ZwO5rJl|mJf@gDURIm)YtzoLGWxyJ2$LJF{v=`*(i86rkxw}C(whZFxQ5+fEaR$RLgMQJa!I`aZ?wh zne0>7T9vRJrEnb-5LuBmXa;~ljSavq++YAylejQ)#k4hQryPhk)8Ln;U>jBj=P;Hj zqOpj&$rf>uixVRNbQ1>TXp}_@(jK3+h4Of_QtpO5Fej&F)58G=Kmd?y3-64J)n< z%dQQJmc!($5-Dctg-9PK*JN614d(+}4&^u=q?EXx3 zJ@S;z;V-{W9}KcsZajlivEvsmPDCz5u%d<;`GDrs=$cc?7SgGgCIK-Qxwv0H_EJhe zJxBP1sD{S0y-}=|+{s9>;h(|qCEO4a2^(Kz>6|HS0-~VbNI}hh_>>{xSECCjhAGWSZx?MrS+mEYKLz4w!rKB2jfZ|vg(hj{m)L=kc) zkMf@8w6mFY?VtufpuJ+>hH*pqA%*Y!>!*lP7>Zf&Lo>#U9^{s%k@^{J?jK{6W=xoP z=J&1Q6v+{}!7q(L?jRmSA05LNn? z03B9Vu~HUXE(`KyO+s1IoO#ZiX=+b5?Oz;N>D;&6xsUJMFLdrl1U{dd=`ZanOs5hh z#6a*baKqNIRyB|@9P*G|kx#3B&63PB#)s?v_bpl=2TuSz<&tQfsmV(bE*6ZJ1!Gf0 z^5g(DZlT{?0~!qCn8C2^P(Seq8W8pjkBS8l1tUFLub%Ds=})1|C{1Pp>hih$j84h8 zy({kEvOCDTn*?`Lnted5)U|?I_OyXo_Ovm2;t zx@8v?u!joRO9kwu0`9k%^swPo4~T+4uy(G4HJ&zzB#4!1fX2I2wru3sqa4<9DbWu?efJ38$|;$Gbv;E0nf}@^QP2e@@`JugL(e z!}Q7kJ`#? z3nMQ^h7sGfZ(?e6WFor13qLqK75y6oUw{b+w5GzJbspja{X(EW?dzXAw(4(6ZNJ^Y z`?m}J?Ev@cRnTaNM#$ApGs>AyDRi*e^8f$8_=^G-4_tMB(KJjceuAcMU}-=G*LR z)z_MKw|)+}NcgjsJ-lbH!03qb4Vgg0wY`Y}l9)t3Yu(Fx_6eSSR75CK+j#9%;&844 zsWZH9qu|?^c8drK>_QP%{1J$dvi7Nqgeph^OC8AMj!3rB`$#oM{;?OZ&~d$$VSt-NcS;M$h9ZxeB;3dI;?T-uh` z7^3_ONjXWHSR93naPnMxXit!ddSo*C!pP-`$fS<;z#=W?*RFhW^zT#cNx)2uGGxn( zEsHH_|7N~yi%_;DZQsJG4Jv^IJ>tY~7KIKZZxAI9Ww^_hLRAIe%Sro5@E@I+ib3$t zkx)2W!V-|pp*tcA zxw906DL6;LI0cs}c$tDY1+P#rL%}Qs->2XQ6#Om)w9>G4vWXy~F2Y}=N{b%DkX@1g zGT!tUMVN@z3K%I}&?R!HFy{MwA4uRkY7*bTOdyC$R6 zPY?Jhsp9qTh!NsbC05T}0|NOeil|`)TCA922;?M+a6YI&qm^(+E|4Fk2=RqxYr|aw z0y&8yij7tx0HnZXv$otd$bs9$+L{;IZB}qXa^PmQHd;yCYYoZeQ-sZE?V#9PAlAfa z9bo-9U{vKr6f$>F=3F3UMrRmRoq_wiHWSrY4(t`wnR3u>0DM22xXhOZh0@@aBbm~w zZ|WxjK@Zg@7of^p>8Cyrfs8yF1r?^Q9bj%u?A@K%roz*Y!(9enJ?;SiDB?)8>{Vkm2 zT|vPWOxuGZ%9C1$ECv~W(`43HwJ`o(pFb|#AgppEvJp{8!DbOQiMOoREMl4^DPj^i zqd^2RYHwZkf{?iWVj<){2%5-^%uEz3qQ*DqCqpz0h3OCtjU*e+w{a6CoToxG?uskN z39cFmka7XwN)2W*z=?3h00V`{m$ca26S*wO>VV)X0u_IriW>@lz?qGy{Gsp%v{|zi znttjdC8tKxCj*}!uYK1*s<(AiDI%I}L^kyj#TElej++BA_LeTD4E+OSzek+CHiF4LAF2}0<1R0|H5d1Cv0A=OA_sz+H z_Z-(8e0h^l&e*UTK!BrWt}jzjmH6JmhPlVYKhn5~Nrn4@+Ix>gKkEwx)P15zp)lj* zzS8!L_Ln4|vT$r^K806-6&K~vkX2iU&rVF8%|j||_T}U~+AdMgyg#JM6Rbd%=komU z)vK?*e@STQUb1{#%s1>68us$8eS&LW+P;r9elTP&IQ8aG0)sG-DkwAwN%6^1a1H-a zYKd+Vu36o*LW6impjw)$X}!S!$bsEx?WIimK%AZQic$Q_mpnWFJ47j1KMcczb0%PZ zGQ+V9StGUrMm9x=%{Q{KBR1d2hMCw56^9*|+a)loF~IuFIaG?g`NlM5h=n=LPf;U9 zEZq_u@WUelpo*_!sZxMO46lAyyuIg6z~#x(s~FnsO@K|kLeLwLrJ#|!GEU8H+OXI=xV7i zX}eL(mu?hFH-a#A?8#Ksu2gMWuG+*`bqiJ9N+!>ZaH@na?G#Fh#%38Q@pH0t$kYXs zPbZ(g(UQ9KLFe^Op=oEjX(uTFc9Q~N4=DilVA_}Nftq>6)wJwtO6}B%4%N_MK|L9~ z5j(OzYSu4Nv!)s2j7iZit8HQwbd5ZQ^YjLGX~jZ#n#eD9%|OAK6XRryh!1}WjN1E1 z5(TOj>RM5j`cDxljSmeC6WVCUhrnEt;4AZ=O+3{g{{p$9+Yzvp{D-exeI>b#cQruP zI%moF5xiNtTGxE-xkcYn^T!>0U9V8rJ7*E>HNgLKCHYI7+>hcCN0vk>l%9W~M*z>_ zrH5=-8_B(8Fu>Z#Vl+Gpt^d;o$)1QfZu5Zy2hay>m1CW>38fWY*m5c=bvLM&wO``F zC@I`wYGX1xsxuzny9eGrkm|YK%X_v6o-JwT7Rl&_7958dWIX=F_QZBt@vC8C6D1_} zT6L}AT5*T@rm@4UVF#$O48YvDApkp%Z}E}_-6)Q=p56~5mn2tHw?HTD|0`sR79(J5 z^P972du{&kPz_iuz7|uGwVa)rnkZOHGHjfjnv6%dDF|e8HaF_pDyckGRLz<^#=DvX zS5w-alWeQ!CE;RL;bq+DSd;q*O`|R9nHV<4WSk2-Go4M5GBXPa|FMe5^AlB&uY63P z#`y}4pTUZ7UdHI!xsN3paO|C)lx-JVqe0j#!H!XbxrvD9ZcsqLBMMrGuH$Y}(1}38 z1??1(kE=-Xxkbe1;5B65x<7vO3v%qlR~N3NGU29Vd-Y*`{l^escOw>qpOh z{G71;IA435uQ(x8oJc!QWGZ|s6&sf;HZJz_6`O^M&2vSh3w$NHGu40n1n=q=T-|AV zcm5J@!Ry%2l2k}Lv8h?>Mj6moB+M+fmB zGvwn4iRSt?Tb#4p0JuZ=TWVJPE1_mx|mi+IjB2VS-FUXQn68@eWM-f{1_B? zQ3<~O1aD(KqgiV(`N?W_9Ev+Ay9-QyCG~GmK$I9?A_`!VXms=$Gfl03*!5x8QYGKC z6YIFpba3v3;A}{<4`J6nl0YGRAPljE7KMvf*f3_ggq;90My1J7(!$6K57WuW=mxqR z73sGQ1QGhc6N(l}!roSn_|mL7(H?ljyeO*_5dgAr1B zrWXH>9zBczDBf9-h%J0S6-!rjrk(UzvI(1E^4W=nS#Y(Gie%H8$G6a%b_Su&Sn+IG z_H0>dxntu!2L#W7wDSP#&B0JbK^E;#@s_OR#qr57H-}r1TRTg4G$lmQZ2m#rO z)5-v9g)ogM~ZeQBC&Sdmk?&1MM0STM zTJns5IYKY-kcf)&DhCFI*?TJ%!oNoL+*Sry8@c>*<9DKWqG|sCUv^k1JDj#37V(aZ zHISc30@k2^07(w_E?!ocu5Denk!tex-_!FyqQHru@WAXqigpcF<4HZvQ`TV#`RU*0& zPwf^BSp-*4+TN4jGI@lk;kuTAMhF|UyYtkooi=dQYVuK`E|7~rnO%COB}TM&?n>FD zJM}k{!Rpoy5P(pz9y%V2TnH73eOQfWL}G*l-E1-`dV8+$^09GUK*%@9`;RC!XJxty zE7KjxU8&Q2NrzCZO*^VIy!BuK?&Hl&+K-iAj-6IdGBoYN%T!r-pU>QXcuU2U#&PjKn#E zd!`~rTWK`7rxB>R^S8p@?EeU>L0dDkq>SCqT;ClSDJ$Clou2S~ZG)`Eup%?)?rRNTD&XdDnac@`Uaj5QPG>JU2}5yZe%-#n;h8d z7~UAJ##7DV8l<*_0|;BgwFuk7bqF_vJF%zNIMj~s27HIYLBx8)jR-r!O$axJn-O+~ zTM%vvw+?lo9&O0k9oamzCA1YbHxU>~I5%aSOJYO%|eGJaV)J*oa#CjVpweCd>bL+Y=}%nGWI z6Xn9Q*0G7HkyzFio|-;85rMAo5V$&sM*bDmgd}hr3GcWx1^)|zxP2NWw}yvf+)4b* zI_M|lBf}_zOx%ZKc=%sZZfb_upnpMke}y1klzTR7m!ERr;qds_7z!wgiX~{IsI))< zF&XZSArLo$4dYI{h?P(T8fp=;nu1d{acOeM=nZAa_e>!25lV;3-SO1vQv<`N`i7p( z+S%>kN}M!7PCFx-*+mHX0Js_(#E($q7wsoL-kHt@Q4loZ(m&l zYNJg2DqRgU3V}@|bN8>-1ce%+L|k+D%cpte-XWX^(u?{7cjBc8cZ^&gqND|y?$rx4 zIv%zb*vuxGrb#u;MfXxg2|=Txo+?zvK8HWCGDwmyxiX^pjG78j8@rClIuDabK@h&z z_Z;?45ko_|s;Fd@AXQ6AIjGbOG{gIQ(yrFDy;WT3s5YYnInqUA%pge=ps86>MLtBz z9WA+oEz9!a2T?LMEo;*ieu&D=TKWf0osy>csqwSi2=_9Kg@`iBS}u;nUZ5#Aat_m~nuvt;UEHZQ z5HZ?0zUM3VgUr|rQZMWhd%;ta_Oz|mG$%u=t)ayYA3T5kd7*W0ntdP*Zru+BZ{PqF zynzECaVrlf-L{^+3DFDOJOv7&uch%N9~}f79Fh6Qs6tP$3SGg_&|k)1Gj}`_Xr4Qj zDXoU>Nog%!Us?;oyR7C-G8ZkaU84jGB_NO!qzD!(qN95#83>rMO#R|L`h0U20T1uj3tGBTYD-7O#1u zLXTgyq6|~63^;CrWyL1Mm@gSPP~!O2hF@0p%Z6Vi_*Eq5wj;(AcFdZvIl>w))>7lj z6bKiKPh7RlnX&7oWI8 zJJjD=3}rOTlX+;_V7BNbqS!zv{d45T&dKV)z`QcuF`56PrB^%3D5-PCaD}Xd46wsx`xUjS@G|0}%t3noWNw%yov+j2XSZURBDU2s7J zQCxb$xLRGCeCEBtwLrp_u&qJ`bL7SezPwu~@4joWBRx~yuu{Ewxq35Sy;Z2*s^mJ% zmv;!|uot)KOUab`67`^9Devc14T<#I(2zV3*;pxmdbVI@_OZ3xC`VaCfCWB+)`K$l8vC$5-KCt64olIo-Xu+35d=* zW(HfV?+daglxkT{eTEi!^K&sK+C6DzY_vP#9x7MWxRl<2=Y09kMeJdJ9syU8drx&< zevhg)X2zO(l~!?9#-@A2wNP5)KUDYS?uVZzx;e#B_3arEceP9c=<+=4!lezu?=ScJCKS zFNVAS1D@9mwiywu+lc0)ZlmteTMEt6=1W+8YP&;`_EY-$hV~m!^39x=C|V4-zo&rp z7$G+7qs(>LS^SC*JW7{IJKNt-_f_5Iblv8qD!y))P`4{_BvaRvJd@h--t*U<7wR_S zcc4DGEqUp^z1Q}py>0n`g`&hBa^r@;N@;fvAUGrP-xIAR$5I z-c7aHErCc*q4kXe2W{ex9>NPSkvIa$^{a{lDA+l`rEHQCUe$vWSA<%B z1EBN{fl|&05r7}N_6i@^Cug7Xc#M3y-c1c?kb&$5Ab@)C&AK% zyaXw^OP6=E)(#b#RS+3JCqjc=I{r(y&deGo1NTETNM9F46_aO2ckvp+SH8wn+wE4~w^{JP zEXxi=<*!|>ZcZH`Zvxf*LUliwlFHuIKvQbR;$A+mQwZ#Y3blI6YHP>h4w5M)k0g(L z-rBxc^}%!3pQ9gZdQ|rn7syAM0-TdT^C%jpma2V2u>Z$Ywha3kAp%mq&Z5p$;=y?T zqb%q-u=3JvcQTBX6l^ zr=};vQORiiCsf(%6fnt%pY9adF=2{q>ErN50vLFSxfBdpvc}7d6wW%}Z$#8-axWpH zh)u3Y*n|{hk3<^F66Ze!P(}Y66qloZMs7FXjx7fGz;+=3v52*DKRG8Exn08tdV~P> z_gbp=uLhe_eIMAa+me0BzR#OBraO6yQO3|HeeD?o9R+j57_T8Q>IfV?=L0Pa=(_MyCWPY_=#Ej4 zTJVD;Ec&sZOMM^NKDOOy{F9QU zl1xJ|Xyyx z&RZ_>5kC>w>tcUt4l>yX4QepQ+>pb#I%@CZl3AvNhoipuzrN0?_S%hvy$`ofC>iEge>PN&W- zPK&rE?cOdT519o)E*W|3!w&-3c~c5^`IlZ0rnbJ3wdWXX8dcU<@^!_$4>VH@!@%@1 znYaA}KOSj*D*KH74Yj!zN>R&K}b)F6Zp$-JB=xutPc=!{UhYlhxG04KWt z*eV3JroCHP&ku$wMQZ|5)~P(Rbka`(KJE?$G>W43zK8DSC^$<2u}6#(5#3BNFr)Q} zBeG6Z^%F!fZ&F}inSlE5DT440SBs~!R@&jTMWi%|-vFVBOEev4`TsvezC?}rpD+-B zCFw6y-Iy$fIY4F293-cWse$);VHe=>&kevkOey>_$$<^#0oYYs3S))*K(-N}q+)~H zo0z^jJ2#uMEZROSOO<8HYw>9L20WS<;L(b@g@BlDH&VJB*r=pSSHC~^{agu~s03A@ zdUzA;lgnwNrxfHptbe`g;SB{Je(CC~bFZ>Dmr%9x1GxlB^2={#b+E{-VC}IPf*aD# z+BNua({v5CvbFt5*HTxeyzZ{46oFx#fZkQVfPSR(dR52ZIa@g>C`};err0uL`4;LJ zbzsxfcFor`cZ}+mYck5TkUmrs$YoNjlYxV=lt{Ny5cjh2$PT#vB1kco66c@}RGIc8 zlQgu*svdNz1sigT-$vEW3(N+0{oME2++(u=#+gR|-&xlaPaS{k`03-%93DRX>=TEd zX2_bkKw^&G;KhX*rw~6TPRRmOiEF1>LgYg5yTOBWv00R@AR85}##*udXJ)Tm`8mEt zWwj!}wt8Hku}WNt-ODAl>5|&j3b=aWD>e!hbQA*|LksSf)M>%pF=wS*JFf1Bs|o0j z2j&JcrRC|$_H-$IGM*ZWLNBF#JJT-uWPEiAOTv;VuT1*hZb&rbeiO@Pf$RKaWs-ZZ z`dan1hQ&k6)m?M&`{X3oJ_UkWLwV(#^{#2!=s>4GYWP`w&#ze_zfl)8X*M|gEB2;k zdlPSO5$r8#drQVupSIWMFJnY=(#m?T16WJ6)X|d5%3?7KB_Om`CN%@7FmQQ$KQJbW zgC=a0f~C$?%j9$SEkk!!iP=i)k_{F=WV#@pY6^b+Iz+o3sw^TZbJtfGk)m+% zym^=wGj_pFiJ&3x`YB?5F30BVlu8Df-UH{?fXTk7GD%`*xn0ERL$Hs#NDfVzU)fRl zdE7|7fA1Dxw3oM63(Ou#UIkHX`1p z2*wtS%B~XaxYB`r$SDgO?vt~4vIse4o{2r_TrfsTwR{y&2RuoEdObTm#&&>yX>ISo2{JfT0AGdGEMo*DP_qC$rGC|X>v;>HDfq_AHRg!g zOieNGn=z@Ti7Afqw4JZE?AMeaPc%$$35-d>El(mXXrLTt48tqG7s+e}mz4$jMAH#GMP?oNr{f_a@39LNj75^%BC@74Ho?Xg%F_-2(ARSE(f+Q_3(jRLSR?I4sSlm zoo^pV99Z43N!V~G;}2ddTlDdM?BqALZv~g%zBMr*cw0UXb>9j=jU@Qn7h7&^L~6%Q zq;~A2)Hc`}V0U=O=3Di5?0l$C2=%e()nME8lEnd>EVA0U_15EfsIeChHTM2>?;-eL zD6d>7U8@a(;dCVMm%mce@H2+MI^ePUn71oxt-sfE!fTs0J1~;~|4f(ZG z1Oi)?{iS5Akdv$a1ldKgJ}n+>#4-2J!jb(2cAy1!0nt$2v*Dk@y_!QNhgR@H2s@BM zmRk2mHW+F4Xf+Kq8R$S_NPf6)jNa}^Jtw+oVl+3bLRJFZ%K`F8Sen_q{fAG$ z>)`{Z{BVSRk1*98_85^^Fp#Uh=#5YZv$>#_0(WzQq^Lm=u?1L)YhfLcb@!{6H6ynYg*FY7TE8t z_(IFR&|-_wvG2|qp`)Mo4G6x0v^#g6sN5GQlI|JqJcJu2s9cYj(0M>YpQ6p;HDla| zn>=wP>nCxe7B_&*B1_D=iYSDjB(tQx!p68q=_~p1F6yfml#ag2bZ!xkt-5oD@9Y;k z`x6$NlZ2xh-Jvx5h+KRZs;1F45Z)rW+r1AFF!N6%w_T$EhfR{Q>p~5KTJnOcDa;W9 zf>qD!q0ppJ_`!lwcVvgM{?PfKIZcyfT0+E=NSEM1HMUy<90yKW0ZBsko`C5l%F&J> z>yW7v=5|SEbVAwV2fs2=+oe666Nie3%MHc@LIH@-Do+`2)GQueYP@yqlZa>%C&sQe zv|f94aeC>=TbKEUT|&dIw13xHL;w5Jsb`nWd_#{wpZ-tJq#I7A{U^n-+eBlBSI8HU zn+%?hAmt4hJWyZ1$dWlHO=sy+pm)}|&M2t}SxpXk{nv1+^k#Nx$5RUtSD6P^__LGh z)C{X4lLAZN?%3?adIJxr>`*-%1t;fr7S6ro3tI|vsBDjp^>w@2pg~Vo59oFTYU>Z) zCU=w{w}a*|RZk?r@JqgEKC^BQ;)c-3IV_6L7taDEs}b&7rZ-Cfu#{8W5opeux;As~ z;CI$|QG-CgEZ#RU9*vDoUAVYE{>0Y+L#UEPl3dx`p_F(CFmtaCuLW49TlR^c#gWvL zsqbAsEl03+h8$UQ^yO%_2!~M6ZfZ8WM6ZE_;Ic(eJbrxe^x>y)q9L1bS<88#_NKYfWEzo_4tX|%*hHJR{x`uhuxbTUv979BUZKyl&^%@&tu5#?nY}ZJW<==1 zpUZfpu+z&&m9mc0BA5M+D@B>~LyC^+UJL*_QopG$6Ng2lG-$7YL#p1W1!2gK<=s!b1!gA>k z+qRN+=%{4%gu6Og_`H z_Jl1{zcD#>?E(nnQ+)kyp?){*JXx!5xYmF)SM^*x*_v*I*We!b;=*!Rx|qMve5VJ@W+UMDOz zma=n83WrRI!c;b?mc#=O^b7(~NdtG2y9Cds zIeVtWoj8^__Wl{{ERlAc@ZQ~mcXzskJ~?GfrnDk)IdS=hRS0fddW;Vq5`u?#U%%k% z&-fao_{aI+fDjzueTN0#Va#sdQDWZ9q;O5t>rhcIBwl!b`r50a7x8pyH$IZq$5Ts+ z*^@>G#^kGopZVK=%^vxU`oSTS0WUng@a>h#?&ZqvPplui_{xJq<-xR*J{f1ZI#Jl% z|LGBa^GRXzNxt%wPEhB9g}JYwu$z>UbRiad&0blR*I{(d6g$J>~vOfJ<7^6Yo3Snea5V|OjlN*@O^bR zOq*i9S~S^r-!ks2$GOkDb#ivyYAEV|YPB{w1eBo_Hdi9hx+n#$qZbR4_ex7Mc6cq{gA86KfV_ZgYBVW?!-DA77ZCb5}c%;OF?FS{$ zSJ2F6*Mf~?b3>NN%80q}9%|@G@E%1EXEZ?nAk*+tIrP1t%Q;lEU>mY8n1>wbC+v2I z-U}4=P;sOrx82p2r%`Z{C(xl%rjjscm*JTTyvc+OqOQF6c#uN7^7FU4dUHCHay(xdsiG~fT6zY04bo-!F-o37x{MJz zAE%%ugPmz3x>zJ~2$FJinuaNpiM-d4PFCpi)+;kwhFZ-;tJ$hNF)dCQ$7$L)YkcyQ zN}JKHD@`?!S_X{ssI6)B8j>*6c)$@ty_!JO=K{khE6MWrszJ+QRSbJD^Bd{x(_ zs(w_TtiOF?DfZ_%IZ(2GwV^51^WMwXUS8bt-fYs6w0zzG1Bmxtx%NuZBB$Z$rVZCS zm%Mz__Qb%#$xL12A3XP?=V-SlS-(NjNjeFrM$(?J^qxbs7*Egl zUo}pSsizU%Edw27=^9|-4&CoP>NLImtSH}zy0vebcWBFxR;VW+^FC3)zp+|ouW##B z&3Og-)ce+utsr~BDS%T)no2bJYr~Dr)bV`q%RrnN%>{H(Y#&p z->4lmIL}f)A?q3L^MobVAiaUOU2S>rez^BL7~5IvtW8t0j9?&tvd&l}U6ELlcT zE=4m5eDxEArAVm65qi>ymAI#n7Jo9IuYMp7QtV<236y5hh0#{L4X7y{I3#`+`;r5x z^3;~plOJqLRbD$OCont^uM*K@H!&r_3*%8ZydQmGPcU8?o0&E}gMX+DR+Zx{t5v6>3NXw(6@}cqP?yyXsa0@7pcV=Rm@;T2;F+nL2a*JABnvp=xWw z43CA^dKW8i)$)NILSRS2z8Zu==L6Su7i{j!ceCKFV~M`RbWXyzxMlJ3O~~7J-tqAM zUcuiBd7ig=#mkO$9Jzjesg?Kc61=<8>~q&D6_PKKBXXN9Ni+v_YFiciqeUZ>i>cXpOch1)WQss-VIBNz? z6GA1}LSP&ZrwAB=`DSvq(`xCaCjHqIe>oAl5yT_V?hk%)%Q_FM4m)d@y`{So|%f z<*5{Jbu2-n2;tv8!M88%7SAZma|+4&ovbl_EB$U>$4=wnG?X8qS`Z8}pSd>cIvVj%+N`>V z(Pn99j;zCyDfEImEE2lpUDUZhmt(O8J&$n&FCRmkNH#LX48x0gnktS)zZyA3$du^2 zV~8oFse0hJt2I?OXy}Pr#n9(zs*KPnKvVUJ?c>rr;XgaiZ$2(;KA!GA$p=oRy(d?p zn|f}sh4*y}zU~!Y@3OC#_ZAJ48hdxVf!q(&XW)8JCE)Lu}A-V-gdw0V9(Mn+V za$xtJmQQVb;HVHdn)V*O4|#bIub=@~Z)+snt)ZEUgjPJbT5(QJZjo8nasMMq!oEmn z?nD#TW>GvvAgk>tBCq26zXt!O+6=lxJ=BDP&_me0wBqZ4PXc&I@$D3RJF)MjF2v+R za7A3exf}rxqmPK2W9>JlaF>7SB_~pAw;?Nbgfcda0Rn1ckmwcChZeHhc_18&aOcQf zrr3r5H8s$OqF4iiE57b!U-y!g_w5jTJJRmlZh3mIbdlJRwd${NlZW{I$VExiQF>nG#|Z z5vVeE87l3h1hVP`&B-LDWYnu@q;qSigiA@!UC6lifx|bXY4>&tP0PQu3lbd1>L&ebM%pr8LQY-D!UAV91N4ue94<(~cM+&9 zq(#?W1)PaLumkB0%%}KYP#@B$LDEnaN>_z4Uf;Wqzx_DxZ56z&X>Tj^ryHTqH2OlY zp7Djq1XJA29;z;A13_hFZ6g;iMsN^d5I@+yTpV&3j=)xdgIZdY1K|v-{?o9@S8dj1 zq8XyrRb~&rOC`{nt2%avX1!=5F-La<0URMp7^2X6ErJ_cz6oJu?eK<=ZG*9>xD$~W zV&*=bj3RJ}TX$LZb4dCwb;#$q(b`1>Q*CK~h)g3Y)2>GB^}ANPXydE9$Xo52yL!bP zTy_Uje%{@IeT8W^AP>6=I+p{Ti{BPy8rbXG(28xTnacXPBX=!jrEo5F-yq2LcDhR; z{m2jG4W5+LVl1Vtyi#B@mjZYT1jXjkeUy+Fux-R_CuqvMSoL9jsy@#)!CXp*58gK{ zwv-+tV~E0`xQo?Hp3XIa+!Bf{&h2MK-x#Tbq(II@5jGoHb*vY-4Q24CZYl+&BA^GW z-+WGqV6jRdGLhF{xue5~O{t%pQUOi6eQg3gG?`{k(&m zQKF54-xW8uinbDEWGkV}OzG59wWWlT`Xqs214^Uatm1xFIuPAgH+Kx%hkXsHHs04h zcP!(s7TiJXWBm$-6uFJA--ICrD{4(Nm53M}=<`PnKdb5dH7n#d>Y@g*lhwOouV1#; z^Y)-%52o$GjH^aE%xsj%T9IoNg8Hexvzf5&7=^&>LEpY148cLl`olXZf0@nwEI7N5vFp1$4x$gTXCe4#x5 zGd1Z0Y7(Is_@Qu=1L@`k>H2O^0FH7{0J*fauC0sV#qiR=(m=X-_nZq;68q}0q1|F} zG-3^SsNl0ExXnS<-zfQ=21o6Ry=~dv#@pKkdwbg6o>}LdcX^%}fo__MNITVDLbRF=%en})=Oz^Cx1?je)wo@i zoTY9jdu&WEmuJP*zU*pW^e^@Nd6lqRcQ~PjoBype*~$*W)U?w{41MnjG#OTF zo;SR2RK8L5h7aRRn|i4u3{l&RRl0}%8kLnUSW)Ab!b?MYp*qm}s*lbEnla^B1bBeq z3&hU?>lci7j2mW)&lzS*sI2GDde>l^p)jsb+>6&p=TQn%ASgPSin;(5! z_PTM_P4B>%xNu({YgS$}QyObge(72=0CTf)luhytb^(?N3BW%RgITW_OH$b1TJ3Qr zg zlPH5-pdK|Nqy05oG4B~LJpb6NQw=RM6<-rtoUm>5h;7H6SKo3f_p7!1%|T{`QaQ+W ze8yjky$}hCBCz0D@o+)%%-VnC$nju!DiRG&PQ`-QO?MGTO9sW|3yWYhNV}9KA~75( zdG_TXoU)FOz1$w!8$=u^7nV9c5ebe=hGEeWjg3r91nEV?qc|aOSbEQesqpkfq>I=m z`64VsPSFgVLAENsIhpPJCfi(N@ zjk{B=i&aa$#J9urXTJd+G>6c%azV zDq9l6d}W(Z*#`atj;dS@8Fx*hIJpDoH@e#ecYE3mKUVV5NO)AfY`9~c(FVHZ9SbxQ zPHvl;iqabbV;!IdK^Cc26~RTXY7Xn45w&+(EQz&LrYFdtSWTm7F?aOGx|}i<0jhww z*xZ#TS9hsxB@0+H5{sL=^fiVZznKaK@=1XVH3Lzv} zQi7hezQ{_67N0PLZQAESeHW)n^In1o{c1W}q^Y?~8_ihH%Oj?1t6lSiY?%ow&Z0QI z!LEgsdSKczxA;*#D;OZGS|&le(az8)sG>#|X0@TKwC3qdT7!7*AVqahD7fXEg3zCmCvN=r^z$P9WJZ@H`pDYY`W}U8W^|bKQ?`s2{H?4R#BWCl zRD$xQi1mMh$G`fTuk@J(xH0+`3IVdsxO^nt-Y#1{CcpP~Z=x4QW00A&Jz@O39V+6R zj$4k@%&)DcHhAPS1-3(#M9$$&mD}Mt##^5Z-x%OMA;AMtX;Eo6X|2LH&fGqlZt3AY z+XWA@8p{Wa%!~ISzNTNO=}&w6N#}q1tydOaf$5~m>~aTL@GpBh(w+`xc6mJ0x@)C% zV7YaGZ#^Qk9)Uuu?I>+*4IHDb&j?X^FHQ<%hM&(|f1a<}CRA;M;itD|;bh8^y7WQm zVwCr86TI6J#*Dja#oe?F=M`J7?}6iC_jbX(9gc_bx$BZDBChlQB>@Vp=JAHfNR&v@ z5qJxK`NGt6G)J*UyBWkp<6DRbWe^i2;0d;JAXO*FCIIR*kr<7tC5A^;%alQ;9g=vP zR^O+v@n9?DC02*1tm>shv8jNuxtSp<9m<)t&6rYbxy9==*Njb32y5RVscUV@#1zdc z*gV{cQaCmbb0SAJ``E-&<{X=rH1TpmMmD8Hfw2t+EU=%B@6d{(A56iB&$ZG_>O&o_ z7|4fG6HZQ23@TtwEbiRLK`W0fZR7nr1^-T%^adJN0$t02uEp=&it~XzLSRqYyGJBY z)qNwY=2vxP^x&IT~61{Fqzz| zTJjx|#jn|Y;&U6R`#SJOsJgv@kt_|(jGqy=yHDq5cs-qyM;Rb0PA?b zZA*vHylrXV;}d-I0ipRoav@JB@tvKB0ME zy0(DnuuOnI#YO}39pCwvnw(VQm-`ceGQ5gToMI@K;R48c<$h$VZq8mP$0I*VPwl3j zYQl@KR7w-~_Df5#kK>+}E(}hv_2XwT#w- z5y(^!h7;$oc!B5x^~TmPY}5~-*`g^U!$eEyIIaePw1;1djx9v$qO%PLyH6BZHb)KB03z7r1D0kpG258AK?+MiTW|;myj^JS`G3@ z=;Q=-SQTDDTRL!xV5;xhON%fyBN8m_?h>1#0%?OhF-UxH-==__(*qh?x2QqbGDh$r z&3+j)w6p(FAmJ1>tX^!G+lNi2PhKlZRibI`F2PMr6F;nhp@3-A#MHA_P_L~0@WjOU z#prkxWM%W|C@M{qlJW9q@ap|8x;Hk)eu(_#*6$8 z#r=@ten5AxQ9!+swO{0>;2|USGS^3`-=zcsoovYyqDu>MmJ#xc7&FI-FwQA!ie1b) zVp9-qlAtkL#%@O@#?MU>--X3~Y+~eGG;5)@WNl{|kCJsrlQ)`ms+*K88Wr0rGDHe5 zL_^M?jm=Tfr_0Z%lEl_nRolI#%NWX_ps z>r6P4XLxsW+TFaS&b4$d-LRi`9}wJRO}*OIrR2+$lqdS;akz`w(UECwn|oYvHl>|S z@E1=Cb3}z$RHnH@REBr%O4|d1J@mPw5)S^!34DG4PN}%+O`J18NyUaOhm7o*O?NF- z4scr!4!R894T7h0sc6}=bI!h6UHASd&Nysd99tUaI}QpR2l@Iwp}vo=J|t8hnk!pt z!=VkWjuRLd3VCM}3>0=GcV=APq=~w06&8RUC;6&VLe;6X`_!td3P+DE9_C$J1=m&@ z!2_#RLA1ANM`l+qxXY&fU@mye(Ow;z2rUT1O2R^m(O-F>L zBjoe$`-@|@F7OTegob^0t=4jEOVkEVLwC=eBUIXPVpnyc$V88Q*0ziH>=rz*jkA~c zVy8Ne8}-!zg)TKN`?jTh+cMofpW6P1(o9G1O2^UVj-$V{@*RUh#~>W~UjP2m*vA+6 z4Fkf40o0%xwsM-_i@R<^`=+I5=;bF_6|~`6*EXtO5%c_`5C6_>DD|ej8x|`+vEQls zv1;2vTSnvu;|ig}?4);jbtEW_tcPvUrT`o;^3mzFN^ZTp3` z{k-#l;5?9KpS$HsUGk|mV!UXvx|c=3yvvx$zYOg@d>xv(JPo^b-pp0bTT{rLf9bXM zaN%H10lnp4^Ey8-IXf*Q?6fTGuzG9GR*R5%?$R!eS1t3FlzN$!vgzcq@Z^%S)lyeP zCNFm2v7Dl+3I_Yelw6GZMk@}5vcv~6gUAychB9O~oFX($b*vf8Fa&SYvb zHa$5S8=sogc_>kIRZr4t+=8;9tMcp?KZ`wy0nuv%?`t1E8m436R{ z`Jw@)>)yXb@Q$^RGa9(jwfeZdMNGRONm_3Mx$>>@Wb>_7%fxcGGkIi?AhZ_3#f&tS8~@pj0D5FGthnznlCCWzd^j}S*Z*d2k6Xdv{HwwCOCpJT!nGxToGUa z?v2J6;(*f$hpLPswW>+WRB|0^MU%4aLhTY=*?=L=fq9!AEvo0htYs1|CKQvHS#q^y z(JM;S{`)mGD3R(723J;)6|Rl8CFf;D5XzR7HFW66Fv-^0#TZk2&Um2t5)Rb_x>6en zK>SKPss#Q~(KnLxIDM1MgA6b3T_VT;Ou&3ft8jz2ByG*0e%izoP0R$K@Pe?eT<^Z) z54BF0gLJ@laxDzymaQ-pK^=tJD&}Muqq=4TmIg=4LXFa2TDV5OqFKwchDq~f^RqY^ zOzrAr-liTKZM(V9j0Iu^S@C5sD3CN`QJY>V(4s9tfdJGPkWL25l3b`n-^asu#Ia8-sT6ZkB?pTWQ zt$T%5Y!=E1Bp{QxYqD0hlKZ7t>P&KmJTbMcG;CRJ*s|2ZH|!J|c9OrPFR%dtx%`bQ z{*BB2jl6%8;NO(?Z-U!PN=Ak+z98>T8$R2Zb2dQd3Ae*ZJ@|&|_SNRl^}UO+PoDXB zm~TET(C1`wAUObbs--0{)M@wuio&BdVk+8^CPS`oIqevc(wV~H##iJ z`ZKFqf2wz-*=MmO*>Y{8c#n{+Kip@i+v$*tTcbKMxhB(WFkV>;v~c--mOLV46uro6(OP9e~OG4T5Z$1UaHfw)omrO8(y{xjb)8&6ePl z`{5jR%(;m9E^M`B7-u`43LS<1(5v?FFli`8t+UUTMYA_ZGvZ8+H)XN+q_b{dAW9T#^12w-?HrA0?#S_U4oxZHLarq zP3!g~4kr!+(!gXLzH2Hk2Lt$U!QZuz!t>l`8+P&@IQhgm)NpkQ2Cl6WGmZ2;uDfP) zTl*Rt>ZMi;Fkih(sNQwgidZn(QeZPQZ@60|{Y(rd2Ei=1?G##j6N8!7ZK>Z`I>xv5 z(ob@DpA*R6_jr|7>{vzCH2a8Ljaqt$UKNQm0ub6Vt+OuHDT@?|ZJ$?no{N_TgSU8={x)$V!JhL+LrC%+nO{4g#%M zma;q|zThGkx#8hAY0R&nGzg!o;mIlW(vn4X+3cytT2p?^$j&ngt@yi_{oPANA~Jv~ z))x?bI8=Ob%S{iQVlSP6+#R1xV+(ZmwMiRfFhX6|O5Kj-x*ba|VM~17QK9Z=;s{o? z+=lTUxb^kz5`4STZV{7f7AP5lzK`nV?WiWt=z3p`jZ<%Yf%aj}Z+Z zFg!a2&(5@`AD_&|Zee3@8lS*{wD$l^M&QN(!^=*HU-9)X`*1J{IYdso59d!{0(nN4 z*Wf+OXK69_q}pNu(*(^_Xkc~Pyj`1?+n!-MVR(%;-{3jv(&r3oyxWmMTG(*E{Ayo# z@QK=_&ij>W$k2V1)eszr#>GB7Wax~>WDdkK3u}$SsA|Sq7`XJjgSMxL1DP-8K2h_V z`Hp#>zrpw)8`1Aq+SjXrny*mY1nAX^dGGI5a~R+&WD`2Q6U^vtwGm<%G9GpB>qnLl z@QjT@wSk_#Hx%Q$bXis{zk(i zv5_DSw~N5~ubu4sTB9MhSim@L0R^kLGTLd#O%iT7MR$z%B6X&?Y>>7`JVT4^CuBq| z(ZQh-k&0#PnIm!;+!pa@*%Fa7q2p?z-2Y0Y62B(8jr@@AWRjNqcla44K>|24b}7sm z&Km%G2A_8QkAl~7h5U$68oe7RE#s*tMZmVz0Cb}7?Y_4Awt4aJ&Ei|dIF~OiePECV zzipKt3|${eJ(qe;2yRIn2aA*{x#3Bj`Jm={O{zo)bTZF}_bsMAm?*)4A*s`g+xf;V zLL)n@xsQqZ`;2cLPxL3f8E?aiw{6)A{q@R*J0b#=d-g{8+9!#?jt8_7$ z>osj$JkB@m5SpO2aa7VV0u<6YBFSwT)Mam`cEd_-*K%#w?Mt^_z4JZ3yHDuu<7*EI zwTIHRhcdM-s|}&W=G$?;VUN%NEt94C1eJ<|nH!H7*BYCoc7IU6)W|n(`{eYU=8vBJ z_*r55(RA<_tPLA+R-M`0OlQ?m`2V+d?Xhtj=l%8`3e$o!y=NX6BpkJ>Z_}0A)v{ zX}PL>sj5A-eYs=rQpeugXSI%lddESnYEZ8lRM{sT=}3h1NJr}HYGe=AXQ-@SuIyN< z>_`o3mD_cgQ%bjU$%~Z1u`(XONR+Nf7Mxd6!?-BTf0P!xFDqrLLHfNry`PmStFGa#Yr%o|REi=2_}WyRaiBZD>ois#Sdy zp4&YCtR8Moo==`noxgSE(~#COthd05#iB)$iWhZz@0R28+>YZ3?SMgJ5L>zeI z6s`V_Lq&y@{lNrSzhan`+XNO>6eBJ47X`e137ued=J3UHpDj{D4FVYXuXD{qEu%2} z{}OvV_x1D7KW~_t%kr!gGh04~WIRP}_!B&g8JCG9klo@|KLEG&(IOEQkVd?XX@BU= z6W329hG4?X+F{Ep-`?}qp2XL*@)o_kB`&YJPfA{3;>*K3(cXLP@-^#Ct~edu>SeiU zNp8~Q7F}*p<(71S@)2;R%EEu<)?Qe}TR{nqJOsj&Da0jUYsv^+R^B+29Y;`_8~#4rLpbY=UL}-aO1k{ z;5uK*>Qm4RZ~W%T4_(SQo}Q79ja_9f_gHUhN--or68SR$Weibuu(G_2G&+z!veICd z=sk`i>*eU&6c^oWT^M7bq(7sf_7&Xc0ft#s?V@iUE77~kTGBO*$?4R@?J>RkklHe& z)eNbjAt)xHg_O!#a)4&(>31Gkgg0(8{~$|HSqla((?VYNS32H~YGN z!L#%5@AM)X%ep+=Ltx$3!9}d|NUb$a)tGMYbv%~`9Q=x?7S#tFP8PA>!7qEP0FklJ zL9Cf^@~;T1hjEiUthT56^_p#JXxo>-Wns|qR;1hYvDEE44kuW~?b#;Z$LOu7Td<{} zpgp=w`|J&A)ETPvB0hfD(D-+}{-02NX)Z>6jlXnNHKxm&hUB4l_R?hLDMque14`C8 zCYIw<%6}2^3wSE;|HOXIT`MDJd-?N&suT-gIe!COy!k%Gu9Kb^W`OH+QGt z^1DlK+_lo!kvgU|?$#SgMH(d)Y4j0_v3Qh1EFO&qRtrkKK-%YmMC2Y7TFaGea(K&^ z<+>%gPLsFj@)lLzg2l2_Il`wFys)`ZyQ1oj`$RCrX(gxf63Mb*`EfFNBI70P0yE<( z)MqW3s}-2U95a<7*38m>M;N0HNcaltfh}5~K@T*jas#g=)y&wahOCw(w`^2PJLTjn zcW`feqpol^&DPZkEC@PL=Q@=&i!V`SNk53n$|bs7l?a=t1$Ob_m8MD>n^|dMVoCd( zG|mX$b}`*Rufzu-*XU)WGs^3@Owi}CBqJc}Ga(Vhm+U{t2_6k@7D-Ky!~n}i zg790|>(7s-ss7piQPQAp-LI7#&`S=e@`3#R;l^F*&iDT?ukvEj7LhqpLTD6gKf~30 zv-fx_)3n(gIlG0sQjPL9`(1h8^l+*cMsejE3=l;+g}tofFib}z?vEg*{2)1!3f=Ze zl(Qp{Fg)dU(|ftbRUFNx3@c8-mqN03+{fLC06}=Xnlb3k6$!@ z;}AZqT*p#*hgRN&_0?2=*CyCsCu-(%S<{DYfo#+aHzzY(ows1flZTj0A@ic0I5!g( zM@RPX&j>s196KP_%{QyHK&Kw)RORdk&Wy`}ElYWHiTatbnf-1QN5nz1X)h_XCi5iS z<_0=H8&_hG2Db$ZOn=ja$AceatVuCCv~n5;L|Wm-Ty|+DDB^;S{SzUg1LgU=Wg>zE zq}r8WP5cBf@#eR#e=D(53vAUbNtCRZpndwk|7D5Y8CN z`@7jt$pXHZq$;=aPHJJR9cEK)#e+bN-LEpGE!21tg>#97A&Y3{TW3T;n0RG2-Ao~( zamg8Bk{$wzmZfRT);m)nqS>(g{*o$fq-&~({|^13_VMZYXW>RH(B|VpDmq9s9J`S7 z9ltA!^2S`0j2agu^6)tfZ>ZPd?l|kV#1G=BIsdt9o(mAG&cWm{f}8TqD!q_~___=c z%{kWvK3WEXU&|IBE!g6WGsqUcRb~ofAjXRh*b<{k)38>t*bl zBO?!}x9-LjU?6Ivi9_!UFAmQSk)E_aLB1`u`(fg%L!P>-m|8WE8oM=pYx;+me|%Z( z9)J`V-Y@0P6lf{_)+BvUFUAtxbj;xw-b2|7Hi<9;^Si@BmYemCwC`QJld4< ze7_h9HZ_!ui80!h9!q1F$?;dP^R~k)$non)jV+?Ap5JQXIN4~7ts`9`54UFo{vIzV zU8ssON5IZbzlwu1v4?0qy3feSZwL*?a1FvMobGTte2W%m&{z*vYAB~^7}`YxtTbbl zoK(|?Eg!YKf9l4mgnO~bD9u_o2E}E#-4M%PD*$2W+T*${?SUv+U>7B+lPT0-3RRfV zP}UPT&*x!dL8(Nu|B5Pjh*fY7m83t?9+1bn19A5^Nt>n^)94Py!ix>zRg4Itecla0B-gjS6u!9c}+X$@fcA-@Mhy z15Y)79RfNYA(=7I%=5s|@+rEpf(q7AS#>!|TX2@4Jyw_rj!>mQaCp5&u$L*!9?H1z zOZg8BJf8f4e5Nu56v{MlF6QN2O9L8C*-8L2jzei7K#i$10c5-+h%-bejrcuD^9-AF z0kX2X3j}v2>qK=BPJzf8jaIz0Mt!UekEZwZ1$5t5)z_Z(SI3Xj->TD3O7?t^C|va2 zqvLD2lhuyaSgJXBA$~~rH-aMSwc9m05-*w`y6X$8zB&xD;z215SEcF1bn=;ZW*2AG zP$xbQR>~2I;lxQRT&W;!Si?c`k*Q=$$^%kI2Xs+k3^&*aLRIrSR^2Y|Rt$=KP~-?l z-ahiyk;LeGFMaQ&RI^s!tJn7$i&h~BBv6&~pqb21y0`zK z_FnGfEB`Ws-5>c6xR?)MolEe?1~UH-T%Pi`Xa{4CV(b)6e!>jJmWn=0b{abm1-$_~ zUPB$%!uUm(0?}lx7UBVpKz;YlPvjGOFNcD7Vl(J>f=ss zNE;SD&BPNZlQ?^wbHWV}@Y16u7qy>?&x3i#7SI^4l(g5`Vl za$;SJVQR0~qGHMSib1_%P%RxyhpY8)TPmW5w^IVN@ViyW&W{f(wpXhd&?^Si(t&iS zIx+O#iSM0&nZ9(-$WTv&G>@$r0B?<}7f6A^?%J`MjmuX$uvB}ANB56I>PehXZ_&JdryHmGA^Y!aK z#G@2>LGyxD3*9$E$+7oqZqzI{>{@Erb=#vg4CoC5T5z8p+!r5=4-zf&+}YBj75D1J zy%aorNCH8OfBWXiPu#bj`JwN}KE3zgO7CIH3U-8iy8+|h{*379F0Ep>UO|qzE5VBS z>F;(dbSwwkmV#}muompmgFTi9Y}1PS^kPJVyI9ROEDnMO&n7K6s0RmC{~+S$Nr7EM z@6xeSTCot|slQw|pS>}{bAjlgM{l1)m_I65HcS-+{H!!I|MYjg3*LK$uJRf&x!2 zA2@pM;>77GL^_R(PE4PgZsnfMekohex20&_lr5&~reSl|B#D%VUu z+X=8C(?)xp1iA_I5g?kIQxqtFLq7?W;rhupFfd4@*Dyv*5P6O1VZ@w{$OmFxZ zu0j4%#P2U$OGmaW)~BnZi#=(?hZOUl^-YkC_%-M}J+xQ1S{JA+T6F--omkx}1&1Jl z6?*nD5ck|It(z}cC{9eI#`O9fJbxV4Na;K9X|vw$44+yYy{`Q6F#eE6M5ie;aXOn%uqdbK3XZZbnuIJm;w9Z++#=>f3<(HYAf38BNCaU5zvMw;LlYE89&+_CK!MXkY9|56B_1TSFhTTdP7j1)3!HL) zL-HV=zykNXE=wNB(-x?>N<58ppDc(<9+qk$2T>RDb+bU(aa1}crCVB8J>wEX@p@m+ zBl^wLunO-V6CQO{QKe0=L-Ig2HvyhRnJo-}pOn>6062D#RmKJjJRT$>F+quwZfpYC zMXzUqBFRJ984LjI;yEUe9o6-!yJFSdNZ1p>QTPf5=dg5?=Fpxa;VbFim48NILDc|?z&X^d>^77{c?5fWgA&a_ z-kyA8$%z;(b|Pgr*ZnB}f^&wh;SiA*Iw0s8c=%k_RP)3IEbgUTH3L46xluZ6J+G{f zyWjAqLsj_l#_`AbY2u%a4W)T)U%-w{$zX{s0dI_|Sd10OMZUfP+8(G4UI%`3Bjz)6 z0l3+a5_&xzfJ=m5Fj_HJ7|ab6-IXaM2*+`o-6~Uzxn$JL2VwZS7-$hro*>-th_98h zszhipf?S_vF}*B?L_5LCZty_(n1E>BLJm!Q77+=AeSNq%KIB zZH$xV26Gkl4z}fEbi5(YG!?q$-i)iHxVvlaZ@Vv>CMvXwMR8+13&tXwI>j)^7O(*I zOu>cmk$O@-2|E%VC;rEGG9P>SA@ZPt2=vW%Fz z#OjbFbE%;dH&BimCZx`>5S z%i*>qC`v*fMQ$C^!h7`ao_G;lqTVR^gIDy*)>IL9^5p&s|r6?kb-jU2;{cuIhA2 z+1%l|!*}T`?JJo(lr9E)kuGUbOIqd*gUyh`z7#L>%;lsd+f}b_57ts6}@ympwc+Hw$3TmdH)v$ C<}L>S literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/cffi_opcode.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/cffi_opcode.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ccc68bd8bb641e9d2e9c46fcf2cc4c1cc870bc62 GIT binary patch literal 7136 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 PiA#HNIg{}0jWX~zjq^Wt literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/error.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/error.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af3f0ac4dc4c5e644ab5c5a0b5ff92b0604b6c59 GIT binary patch literal 2121 zcmbVM-D@0G6uQ z6@abNU!!ku>r?!(T+8bGOoxE(&h#OfQ)~tDRioV9kEtUPW-3@(tqOrmu(ue);U56o zBu6&LB1rMFrQw!HHl+<|@pR`RhAY;l+@VKbv0ky|4S7Rx3~tkUFBF-4Hv^Sql{tjkQv5$-)Sp~C#nqa zd<|fWH05+|sPWe5lMi>lcyg!ypfPxTf3UDWSge227`V1SFt$H1UY}|7U)>#hHnaE6 z?Z5hO*Qe{#$A7;i(JCpLq$eR8Se_z@T@8VT|l;1Z-eDjhGk1z6n5EJ_gV= zy-hir(wig+u@l^X{zwl1(=pO8PH=$Zf$sa7GS_h}Gjx4VbZC8CoANY@r%Gd{%c-rc zEKpBdK4Yjkrd#28(G@%grRUu_VxMf^GK}s#N5PyS^uhlSE78ugDNCs=)I61a(Rp6c z{xy=jayGfoT+Usuyk0p!J=e4RYEYpe)nLAAR#;<{YbK*wU~(*i>xI6^*s`f}OM^kz zJioIl3ntg*Db&jLJ$j}(OoRBl3vmN=2-qKv8J;bKjDTNcZt@3-Dmc*ZYFr~NzP35!tOZNuaZ7Cczl7d}$QZ&13fBGfK2P{E*)TZ((S|(wqaDdvQHr11KCqD6Lw%g~acTu?i0CZ;A7XSbN literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/ffiplatform.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/ffiplatform.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f1d895826bb4866e5fbf75f3565dc5a9d14b9f71 GIT binary patch literal 6616 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/lock.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/lock.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1f76e166d07f1b2723787bb596c75acf1129cf4 GIT binary patch literal 633 zcmZ`#y-(Xf6o2OzJ0>6MfK-Vv(jgw23u;G%)PVsZv2=pPa^eedV&|;0laP(Q9m-Vk z7eq*mj4bpou&NH0r%Ig=OHh`GsdxEMJ0$O(-pBpk`@MTNE|&`+<;%m%#j^(RMrk+~l38lA4R(5=!H=UT-(seB}!)O#`r2!L>$9uNdYw^s8+k!c+ zP-|ty;~?ZBJ`#e9tmO8CU}P`wEWZlM_W$>{FjYfePiUJ5jCNca3f^JOIHEil*bS%I z?T2*0dIRcv4H}N(Ht&6??eEjbi`n~7;?4z&XtUMwsCs2B9KD(c0eAa8I}~puxBAxT zhcpu;grrconxEfj{KD;T?oX^FSea<3)6}dc>vWbD-%fz&^q)!1TCzdq7@f{$vx$Lv wJvFUlovtYBigIC6lO`KfQPw48v@6%RHg@2qSj91^;+^pk?u(xgA2lNFUpd9GFaQ7m literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/model.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/model.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3817ca2b699946a1b1ee9d332dce7f7bf89a383b GIT binary patch literal 33878 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 Lp!cPK5&r)Rv!Z-F literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/pkgconfig.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/pkgconfig.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fd6c847324fefebbf89f8778af10257f1179571 GIT binary patch literal 8128 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cffi/__pycache__/setuptools_ext.cpython-311.pyc b/venv/lib/python3.11/site-packages/cffi/__pycache__/setuptools_ext.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d039f138dd6dc2df31c0718bb64db42c6dcee0c0 GIT binary patch literal 12596 zcmbtaYitzRm9AHJS3m6b6En6kg)!J|LmP}Sh+&v9HZ#1&kb%r(2&3M1SJ`gpSE|Yw zd)gT%Vnw&(1Sgsay$LA2t7PH{S;dhy64I_#JF8?h+Fw;xNp6*7328Ob=ATDQB*dTH zb8hw9kT6Mg^{LmbbI-l^+;hHj>i)8(#zn#Qy?^^+@|T?y^*?w~*tq=3<8e5-ONo?7 zN2n{-k-kDZDT$$}Sj}!qV!J5WMpF`Zg?X2XaWm9S_FZa*7MWYr6`RNcwTm23hiC)J zi*}$+(E-#Y@<81peTnip|A-Zih3I^}cwqDY$6as&G62sA6{Y8CnqsIVouod7(hrJn ze3$mIV=@C}eYDv)8dlV4H5^ecN$Paslq|<(A7gG0O-zLS0c9#2jY?ubghByQO2!65 z0XC{kl5+(a3BuE__fN&6QvWrvKOx7jNg-9~k4J9=#)F~j(~15YQtU>5Bs|`qm{q6Z zu|xiY2m6(p{57L+F;1tyQzbe!p$(&Fw@k#6b-*5E7Ef{6gAJPwjvX_o1{eM zW039vN=UYOPIVN{K|&4&lCCU4L%pC9?ATMb&@@o|%$Fj++onOrC?N(#y&;3i|eCXWp91-Th6z3^B55y%4d zClBSSO--dcmO3^m+SZaen5*^PnOK}iPc2QQ*i9Dhkq3l)fknPVQo8r7vnNlUJnQx& z&XF4Y&bft=4R^!xp$wnhtGj)M+qW>f!SSi4l)8Lb=UNS}RV(ZYHg>uBAp2YHu;U?p z*ioSbs7OQ!MnRFw<_gTxiUFZjRG0i#Ik-xf>MT5=D3Mj&r7IXBP@2+QyH@1#Q|3NX z`3!2rUd?aSZ_b15NYYu9cgrSnm7K1E;?1-3T r8bm`gT-lvTFRtN(m!QH+g3@+ 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 3 + bi = PyImport_ImportModule("builtins"); +#else + bi = PyImport_ImportModule("__builtin__"); +#endif + if (bi == NULL) + goto error; + PyDict_SetItemString(result, "__builtins__", bi); + Py_DECREF(bi); + + x = PyRun_String( + "import sys\n" + "class FileLike:\n" + " def write(self, x):\n" + " try:\n" + " of.write(x)\n" + " except: pass\n" + " self.buf += x\n" + " def flush(self):\n" + " pass\n" + "fl = FileLike()\n" + "fl.buf = ''\n" + "of = sys.stderr\n" + "sys.stderr = fl\n" + "def done():\n" + " sys.stderr = of\n" + " return fl.buf\n", /* make sure the returned value stays alive */ + Py_file_input, + result, result); + Py_XDECREF(x); + + error: + if (PyErr_Occurred()) + { + PyErr_WriteUnraisable(Py_None); + PyErr_Clear(); + } + return result; +} + +#pragma comment(lib, "user32.lib") + +static DWORD WINAPI _cffi_bootstrap_dialog(LPVOID ignored) +{ + Sleep(666); /* may be interrupted if the whole process is closing */ +#if PY_MAJOR_VERSION >= 3 + MessageBoxW(NULL, (wchar_t *)_cffi_bootstrap_text, + L"Python-CFFI error", + MB_OK | MB_ICONERROR); +#else + MessageBoxA(NULL, (char *)_cffi_bootstrap_text, + "Python-CFFI error", + MB_OK | MB_ICONERROR); +#endif + _cffi_bootstrap_text = NULL; + return 0; +} + +static void _cffi_stop_error_capture(PyObject *ecap) +{ + PyObject *s; + void *text; + + if (ecap == (PyObject *)1) + return; + + if (ecap == NULL) + goto error; + + s = PyRun_String("done()", Py_eval_input, ecap, ecap); + if (s == NULL) + goto error; + + /* Show a dialog box, but in a background thread, and + never show multiple dialog boxes at once. */ +#if PY_MAJOR_VERSION >= 3 + text = PyUnicode_AsWideCharString(s, NULL); +#else + text = PyString_AsString(s); +#endif + + _cffi_bootstrap_text = text; + + if (text != NULL) + { + HANDLE h; + h = CreateThread(NULL, 0, _cffi_bootstrap_dialog, + NULL, 0, NULL); + if (h != NULL) + CloseHandle(h); + } + /* decref the string, but it should stay alive as 'fl.buf' + in the small module above. It will really be freed only if + we later get another similar error. So it's a leak of at + most one copy of the small module. That's fine for this + situation which is usually a "fatal error" anyway. */ + Py_DECREF(s); + PyErr_Clear(); + return; + + error: + _cffi_bootstrap_text = NULL; + PyErr_Clear(); +} + +#else + +static PyObject *_cffi_start_error_capture(void) { return NULL; } +static void _cffi_stop_error_capture(PyObject *ecap) { } + +#endif diff --git a/venv/lib/python3.11/site-packages/cffi/_cffi_include.h b/venv/lib/python3.11/site-packages/cffi/_cffi_include.h new file mode 100644 index 0000000..908a1d7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/_cffi_include.h @@ -0,0 +1,389 @@ +#define _CFFI_ + +/* We try to define Py_LIMITED_API before including Python.h. + + Mess: we can only define it if Py_DEBUG, Py_TRACE_REFS and + Py_REF_DEBUG are not defined. This is a best-effort approximation: + we can learn about Py_DEBUG from pyconfig.h, but it is unclear if + the same works for the other two macros. Py_DEBUG implies them, + but not the other way around. + + The implementation is messy (issue #350): on Windows, with _MSC_VER, + we have to define Py_LIMITED_API even before including pyconfig.h. + In that case, we guess what pyconfig.h will do to the macros above, + and check our guess after the #include. + + Note that on Windows, with CPython 3.x, you need >= 3.5 and virtualenv + version >= 16.0.0. With older versions of either, you don't get a + copy of PYTHON3.DLL in the virtualenv. We can't check the version of + CPython *before* we even include pyconfig.h. ffi.set_source() puts + a ``#define _CFFI_NO_LIMITED_API'' at the start of this file if it is + running on Windows < 3.5, as an attempt at fixing it, but that's + arguably wrong because it may not be the target version of Python. + Still better than nothing I guess. As another workaround, you can + remove the definition of Py_LIMITED_API here. + + See also 'py_limited_api' in cffi/setuptools_ext.py. +*/ +#if !defined(_CFFI_USE_EMBEDDING) && !defined(Py_LIMITED_API) +# ifdef _MSC_VER +# if !defined(_DEBUG) && !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) && !defined(_CFFI_NO_LIMITED_API) +# define Py_LIMITED_API +# endif +# include + /* sanity-check: Py_LIMITED_API will cause crashes if any of these + are also defined. Normally, the Python file PC/pyconfig.h does not + cause any of these to be defined, with the exception that _DEBUG + causes Py_DEBUG. Double-check that. */ +# ifdef Py_LIMITED_API +# if defined(Py_DEBUG) +# error "pyconfig.h unexpectedly defines Py_DEBUG, but Py_LIMITED_API is set" +# endif +# if defined(Py_TRACE_REFS) +# error "pyconfig.h unexpectedly defines Py_TRACE_REFS, but Py_LIMITED_API is set" +# endif +# if defined(Py_REF_DEBUG) +# error "pyconfig.h unexpectedly defines Py_REF_DEBUG, but Py_LIMITED_API is set" +# endif +# endif +# else +# include +# if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) && !defined(_CFFI_NO_LIMITED_API) +# define Py_LIMITED_API +# endif +# endif +#endif + +#include +#ifdef __cplusplus +extern "C" { +#endif +#include +#include "parse_c_type.h" + +/* this block of #ifs should be kept exactly identical between + c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py + and cffi/_cffi_include.h */ +#if defined(_MSC_VER) +# include /* for alloca() */ +# if _MSC_VER < 1600 /* MSVC < 2010 */ + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int_least8_t; + typedef __int16 int_least16_t; + typedef __int32 int_least32_t; + typedef __int64 int_least64_t; + typedef unsigned __int8 uint_least8_t; + typedef unsigned __int16 uint_least16_t; + typedef unsigned __int32 uint_least32_t; + typedef unsigned __int64 uint_least64_t; + typedef __int8 int_fast8_t; + typedef __int16 int_fast16_t; + typedef __int32 int_fast32_t; + typedef __int64 int_fast64_t; + typedef unsigned __int8 uint_fast8_t; + typedef unsigned __int16 uint_fast16_t; + typedef unsigned __int32 uint_fast32_t; + typedef unsigned __int64 uint_fast64_t; + typedef __int64 intmax_t; + typedef unsigned __int64 uintmax_t; +# else +# include +# endif +# if _MSC_VER < 1800 /* MSVC < 2013 */ +# ifndef __cplusplus + typedef unsigned char _Bool; +# endif +# endif +# define _cffi_float_complex_t _Fcomplex /* include for it */ +# define _cffi_double_complex_t _Dcomplex /* include for it */ +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) +# include +# endif +# define _cffi_float_complex_t float _Complex +# define _cffi_double_complex_t double _Complex +#endif + +#ifdef __GNUC__ +# define _CFFI_UNUSED_FN __attribute__((unused)) +#else +# define _CFFI_UNUSED_FN /* nothing */ +#endif + +#ifdef __cplusplus +# ifndef _Bool + typedef bool _Bool; /* semi-hackish: C++ has no _Bool; bool is builtin */ +# endif +#endif + +/********** CPython-specific section **********/ +#ifndef PYPY_VERSION + + +#if PY_MAJOR_VERSION >= 3 +# define PyInt_FromLong PyLong_FromLong +#endif + +#define _cffi_from_c_double PyFloat_FromDouble +#define _cffi_from_c_float PyFloat_FromDouble +#define _cffi_from_c_long PyInt_FromLong +#define _cffi_from_c_ulong PyLong_FromUnsignedLong +#define _cffi_from_c_longlong PyLong_FromLongLong +#define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong +#define _cffi_from_c__Bool PyBool_FromLong + +#define _cffi_to_c_double PyFloat_AsDouble +#define _cffi_to_c_float PyFloat_AsDouble + +#define _cffi_from_c_int(x, type) \ + (((type)-1) > 0 ? /* unsigned */ \ + (sizeof(type) < sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + sizeof(type) == sizeof(long) ? \ + PyLong_FromUnsignedLong((unsigned long)x) : \ + PyLong_FromUnsignedLongLong((unsigned long long)x)) : \ + (sizeof(type) <= sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + PyLong_FromLongLong((long long)x))) + +#define _cffi_to_c_int(o, type) \ + ((type)( \ + sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o) \ + : (type)_cffi_to_c_i8(o)) : \ + sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o) \ + : (type)_cffi_to_c_i16(o)) : \ + sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o) \ + : (type)_cffi_to_c_i32(o)) : \ + sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o) \ + : (type)_cffi_to_c_i64(o)) : \ + (Py_FatalError("unsupported size for type " #type), (type)0))) + +#define _cffi_to_c_i8 \ + ((int(*)(PyObject *))_cffi_exports[1]) +#define _cffi_to_c_u8 \ + ((int(*)(PyObject *))_cffi_exports[2]) +#define _cffi_to_c_i16 \ + ((int(*)(PyObject *))_cffi_exports[3]) +#define _cffi_to_c_u16 \ + ((int(*)(PyObject *))_cffi_exports[4]) +#define _cffi_to_c_i32 \ + ((int(*)(PyObject *))_cffi_exports[5]) +#define _cffi_to_c_u32 \ + ((unsigned int(*)(PyObject *))_cffi_exports[6]) +#define _cffi_to_c_i64 \ + ((long long(*)(PyObject *))_cffi_exports[7]) +#define _cffi_to_c_u64 \ + ((unsigned long long(*)(PyObject *))_cffi_exports[8]) +#define _cffi_to_c_char \ + ((int(*)(PyObject *))_cffi_exports[9]) +#define _cffi_from_c_pointer \ + ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[10]) +#define _cffi_to_c_pointer \ + ((char *(*)(PyObject *, struct _cffi_ctypedescr *))_cffi_exports[11]) +#define _cffi_get_struct_layout \ + not used any more +#define _cffi_restore_errno \ + ((void(*)(void))_cffi_exports[13]) +#define _cffi_save_errno \ + ((void(*)(void))_cffi_exports[14]) +#define _cffi_from_c_char \ + ((PyObject *(*)(char))_cffi_exports[15]) +#define _cffi_from_c_deref \ + ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[16]) +#define _cffi_to_c \ + ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[17]) +#define _cffi_from_c_struct \ + ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[18]) +#define _cffi_to_c_wchar_t \ + ((_cffi_wchar_t(*)(PyObject *))_cffi_exports[19]) +#define _cffi_from_c_wchar_t \ + ((PyObject *(*)(_cffi_wchar_t))_cffi_exports[20]) +#define _cffi_to_c_long_double \ + ((long double(*)(PyObject *))_cffi_exports[21]) +#define _cffi_to_c__Bool \ + ((_Bool(*)(PyObject *))_cffi_exports[22]) +#define _cffi_prepare_pointer_call_argument \ + ((Py_ssize_t(*)(struct _cffi_ctypedescr *, \ + PyObject *, char **))_cffi_exports[23]) +#define _cffi_convert_array_from_object \ + ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[24]) +#define _CFFI_CPIDX 25 +#define _cffi_call_python \ + ((void(*)(struct _cffi_externpy_s *, char *))_cffi_exports[_CFFI_CPIDX]) +#define _cffi_to_c_wchar3216_t \ + ((int(*)(PyObject *))_cffi_exports[26]) +#define _cffi_from_c_wchar3216_t \ + ((PyObject *(*)(int))_cffi_exports[27]) +#define _CFFI_NUM_EXPORTS 28 + +struct _cffi_ctypedescr; + +static void *_cffi_exports[_CFFI_NUM_EXPORTS]; + +#define _cffi_type(index) ( \ + assert((((uintptr_t)_cffi_types[index]) & 1) == 0), \ + (struct _cffi_ctypedescr *)_cffi_types[index]) + +static PyObject *_cffi_init(const char *module_name, Py_ssize_t version, + const struct _cffi_type_context_s *ctx) +{ + PyObject *module, *o_arg, *new_module; + void *raw[] = { + (void *)module_name, + (void *)version, + (void *)_cffi_exports, + (void *)ctx, + }; + + module = PyImport_ImportModule("_cffi_backend"); + if (module == NULL) + goto failure; + + o_arg = PyLong_FromVoidPtr((void *)raw); + if (o_arg == NULL) + goto failure; + + new_module = PyObject_CallMethod( + module, (char *)"_init_cffi_1_0_external_module", (char *)"O", o_arg); + + Py_DECREF(o_arg); + Py_DECREF(module); + return new_module; + + failure: + Py_XDECREF(module); + return NULL; +} + + +#ifdef HAVE_WCHAR_H +typedef wchar_t _cffi_wchar_t; +#else +typedef uint16_t _cffi_wchar_t; /* same random pick as _cffi_backend.c */ +#endif + +_CFFI_UNUSED_FN static uint16_t _cffi_to_c_char16_t(PyObject *o) +{ + if (sizeof(_cffi_wchar_t) == 2) + return (uint16_t)_cffi_to_c_wchar_t(o); + else + return (uint16_t)_cffi_to_c_wchar3216_t(o); +} + +_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char16_t(uint16_t x) +{ + if (sizeof(_cffi_wchar_t) == 2) + return _cffi_from_c_wchar_t((_cffi_wchar_t)x); + else + return _cffi_from_c_wchar3216_t((int)x); +} + +_CFFI_UNUSED_FN static int _cffi_to_c_char32_t(PyObject *o) +{ + if (sizeof(_cffi_wchar_t) == 4) + return (int)_cffi_to_c_wchar_t(o); + else + return (int)_cffi_to_c_wchar3216_t(o); +} + +_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char32_t(unsigned int x) +{ + if (sizeof(_cffi_wchar_t) == 4) + return _cffi_from_c_wchar_t((_cffi_wchar_t)x); + else + return _cffi_from_c_wchar3216_t((int)x); +} + +union _cffi_union_alignment_u { + unsigned char m_char; + unsigned short m_short; + unsigned int m_int; + unsigned long m_long; + unsigned long long m_longlong; + float m_float; + double m_double; + long double m_longdouble; +}; + +struct _cffi_freeme_s { + struct _cffi_freeme_s *next; + union _cffi_union_alignment_u alignment; +}; + +_CFFI_UNUSED_FN static int +_cffi_convert_array_argument(struct _cffi_ctypedescr *ctptr, PyObject *arg, + char **output_data, Py_ssize_t datasize, + struct _cffi_freeme_s **freeme) +{ + char *p; + if (datasize < 0) + return -1; + + p = *output_data; + if (p == NULL) { + struct _cffi_freeme_s *fp = (struct _cffi_freeme_s *)PyObject_Malloc( + offsetof(struct _cffi_freeme_s, alignment) + (size_t)datasize); + if (fp == NULL) + return -1; + fp->next = *freeme; + *freeme = fp; + p = *output_data = (char *)&fp->alignment; + } + memset((void *)p, 0, (size_t)datasize); + return _cffi_convert_array_from_object(p, ctptr, arg); +} + +_CFFI_UNUSED_FN static void +_cffi_free_array_arguments(struct _cffi_freeme_s *freeme) +{ + do { + void *p = (void *)freeme; + freeme = freeme->next; + PyObject_Free(p); + } while (freeme != NULL); +} + +/********** end CPython-specific section **********/ +#else +_CFFI_UNUSED_FN +static void (*_cffi_call_python_org)(struct _cffi_externpy_s *, char *); +# define _cffi_call_python _cffi_call_python_org +#endif + + +#define _cffi_array_len(array) (sizeof(array) / sizeof((array)[0])) + +#define _cffi_prim_int(size, sign) \ + ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8 : _CFFI_PRIM_UINT8) : \ + (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) : \ + (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) : \ + (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) : \ + _CFFI__UNKNOWN_PRIM) + +#define _cffi_prim_float(size) \ + ((size) == sizeof(float) ? _CFFI_PRIM_FLOAT : \ + (size) == sizeof(double) ? _CFFI_PRIM_DOUBLE : \ + (size) == sizeof(long double) ? _CFFI__UNKNOWN_LONG_DOUBLE : \ + _CFFI__UNKNOWN_FLOAT_PRIM) + +#define _cffi_check_int(got, got_nonpos, expected) \ + ((got_nonpos) == (expected <= 0) && \ + (got) == (unsigned long long)expected) + +#ifdef MS_WIN32 +# define _cffi_stdcall __stdcall +#else +# define _cffi_stdcall /* nothing */ +#endif + +#ifdef __cplusplus +} +#endif diff --git a/venv/lib/python3.11/site-packages/cffi/_embedding.h b/venv/lib/python3.11/site-packages/cffi/_embedding.h new file mode 100644 index 0000000..94d8b30 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/_embedding.h @@ -0,0 +1,550 @@ + +/***** Support code for embedding *****/ + +#ifdef __cplusplus +extern "C" { +#endif + + +#if defined(_WIN32) +# define CFFI_DLLEXPORT __declspec(dllexport) +#elif defined(__GNUC__) +# define CFFI_DLLEXPORT __attribute__((visibility("default"))) +#else +# define CFFI_DLLEXPORT /* nothing */ +#endif + + +/* There are two global variables of type _cffi_call_python_fnptr: + + * _cffi_call_python, which we declare just below, is the one called + by ``extern "Python"`` implementations. + + * _cffi_call_python_org, which on CPython is actually part of the + _cffi_exports[] array, is the function pointer copied from + _cffi_backend. If _cffi_start_python() fails, then this is set + to NULL; otherwise, it should never be NULL. + + After initialization is complete, both are equal. However, the + first one remains equal to &_cffi_start_and_call_python until the + very end of initialization, when we are (or should be) sure that + concurrent threads also see a completely initialized world, and + only then is it changed. +*/ +#undef _cffi_call_python +typedef void (*_cffi_call_python_fnptr)(struct _cffi_externpy_s *, char *); +static void _cffi_start_and_call_python(struct _cffi_externpy_s *, char *); +static _cffi_call_python_fnptr _cffi_call_python = &_cffi_start_and_call_python; + + +#ifndef _MSC_VER + /* --- Assuming a GCC not infinitely old --- */ +# define cffi_compare_and_swap(l,o,n) __sync_bool_compare_and_swap(l,o,n) +# define cffi_write_barrier() __sync_synchronize() +# if !defined(__amd64__) && !defined(__x86_64__) && \ + !defined(__i386__) && !defined(__i386) +# define cffi_read_barrier() __sync_synchronize() +# else +# define cffi_read_barrier() (void)0 +# endif +#else + /* --- Windows threads version --- */ +# include +# define cffi_compare_and_swap(l,o,n) \ + (InterlockedCompareExchangePointer(l,n,o) == (o)) +# define cffi_write_barrier() InterlockedCompareExchange(&_cffi_dummy,0,0) +# define cffi_read_barrier() (void)0 +static volatile LONG _cffi_dummy; +#endif + +#ifdef WITH_THREAD +# ifndef _MSC_VER +# include + static pthread_mutex_t _cffi_embed_startup_lock; +# else + static CRITICAL_SECTION _cffi_embed_startup_lock; +# endif + static char _cffi_embed_startup_lock_ready = 0; +#endif + +static void _cffi_acquire_reentrant_mutex(void) +{ + static void *volatile lock = NULL; + + while (!cffi_compare_and_swap(&lock, NULL, (void *)1)) { + /* should ideally do a spin loop instruction here, but + hard to do it portably and doesn't really matter I + think: pthread_mutex_init() should be very fast, and + this is only run at start-up anyway. */ + } + +#ifdef WITH_THREAD + if (!_cffi_embed_startup_lock_ready) { +# ifndef _MSC_VER + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&_cffi_embed_startup_lock, &attr); +# else + InitializeCriticalSection(&_cffi_embed_startup_lock); +# endif + _cffi_embed_startup_lock_ready = 1; + } +#endif + + while (!cffi_compare_and_swap(&lock, (void *)1, NULL)) + ; + +#ifndef _MSC_VER + pthread_mutex_lock(&_cffi_embed_startup_lock); +#else + EnterCriticalSection(&_cffi_embed_startup_lock); +#endif +} + +static void _cffi_release_reentrant_mutex(void) +{ +#ifndef _MSC_VER + pthread_mutex_unlock(&_cffi_embed_startup_lock); +#else + LeaveCriticalSection(&_cffi_embed_startup_lock); +#endif +} + + +/********** CPython-specific section **********/ +#ifndef PYPY_VERSION + +#include "_cffi_errors.h" + + +#define _cffi_call_python_org _cffi_exports[_CFFI_CPIDX] + +PyMODINIT_FUNC _CFFI_PYTHON_STARTUP_FUNC(void); /* forward */ + +static void _cffi_py_initialize(void) +{ + /* XXX use initsigs=0, which "skips initialization registration of + signal handlers, which might be useful when Python is + embedded" according to the Python docs. But review and think + if it should be a user-controllable setting. + + XXX we should also give a way to write errors to a buffer + instead of to stderr. + + XXX if importing 'site' fails, CPython (any version) calls + exit(). Should we try to work around this behavior here? + */ + Py_InitializeEx(0); +} + +static int _cffi_initialize_python(void) +{ + /* This initializes Python, imports _cffi_backend, and then the + present .dll/.so is set up as a CPython C extension module. + */ + int result; + PyGILState_STATE state; + PyObject *pycode=NULL, *global_dict=NULL, *x; + PyObject *builtins; + + state = PyGILState_Ensure(); + + /* Call the initxxx() function from the present module. It will + create and initialize us as a CPython extension module, instead + of letting the startup Python code do it---it might reimport + the same .dll/.so and get maybe confused on some platforms. + It might also have troubles locating the .dll/.so again for all + I know. + */ + (void)_CFFI_PYTHON_STARTUP_FUNC(); + if (PyErr_Occurred()) + goto error; + + /* Now run the Python code provided to ffi.embedding_init_code(). + */ + pycode = Py_CompileString(_CFFI_PYTHON_STARTUP_CODE, + "", + Py_file_input); + if (pycode == NULL) + goto error; + global_dict = PyDict_New(); + if (global_dict == NULL) + goto error; + builtins = PyEval_GetBuiltins(); + if (builtins == NULL) + goto error; + if (PyDict_SetItemString(global_dict, "__builtins__", builtins) < 0) + goto error; + x = PyEval_EvalCode( +#if PY_MAJOR_VERSION < 3 + (PyCodeObject *) +#endif + pycode, global_dict, global_dict); + if (x == NULL) + goto error; + Py_DECREF(x); + + /* Done! Now if we've been called from + _cffi_start_and_call_python() in an ``extern "Python"``, we can + only hope that the Python code did correctly set up the + corresponding @ffi.def_extern() function. Otherwise, the + general logic of ``extern "Python"`` functions (inside the + _cffi_backend module) will find that the reference is still + missing and print an error. + */ + result = 0; + done: + Py_XDECREF(pycode); + Py_XDECREF(global_dict); + PyGILState_Release(state); + return result; + + error:; + { + /* Print as much information as potentially useful. + Debugging load-time failures with embedding is not fun + */ + PyObject *ecap; + PyObject *exception, *v, *tb, *f, *modules, *mod; + PyErr_Fetch(&exception, &v, &tb); + ecap = _cffi_start_error_capture(); + f = PySys_GetObject((char *)"stderr"); + if (f != NULL && f != Py_None) { + PyFile_WriteString( + "Failed to initialize the Python-CFFI embedding logic:\n\n", f); + } + + if (exception != NULL) { + PyErr_NormalizeException(&exception, &v, &tb); + PyErr_Display(exception, v, tb); + } + Py_XDECREF(exception); + Py_XDECREF(v); + Py_XDECREF(tb); + + if (f != NULL && f != Py_None) { + PyFile_WriteString("\nFrom: " _CFFI_MODULE_NAME + "\ncompiled with cffi version: 1.17.1" + "\n_cffi_backend module: ", f); + modules = PyImport_GetModuleDict(); + mod = PyDict_GetItemString(modules, "_cffi_backend"); + if (mod == NULL) { + PyFile_WriteString("not loaded", f); + } + else { + v = PyObject_GetAttrString(mod, "__file__"); + PyFile_WriteObject(v, f, 0); + Py_XDECREF(v); + } + PyFile_WriteString("\nsys.path: ", f); + PyFile_WriteObject(PySys_GetObject((char *)"path"), f, 0); + PyFile_WriteString("\n\n", f); + } + _cffi_stop_error_capture(ecap); + } + result = -1; + goto done; +} + +#if PY_VERSION_HEX < 0x03080000 +PyAPI_DATA(char *) _PyParser_TokenNames[]; /* from CPython */ +#endif + +static int _cffi_carefully_make_gil(void) +{ + /* This does the basic initialization of Python. It can be called + completely concurrently from unrelated threads. It assumes + that we don't hold the GIL before (if it exists), and we don't + hold it afterwards. + + (What it really does used to be completely different in Python 2 + and Python 3, with the Python 2 solution avoiding the spin-lock + around the Py_InitializeEx() call. However, after recent changes + to CPython 2.7 (issue #358) it no longer works. So we use the + Python 3 solution everywhere.) + + This initializes Python by calling Py_InitializeEx(). + Important: this must not be called concurrently at all. + So we use a global variable as a simple spin lock. This global + variable must be from 'libpythonX.Y.so', not from this + cffi-based extension module, because it must be shared from + different cffi-based extension modules. + + In Python < 3.8, we choose + _PyParser_TokenNames[0] as a completely arbitrary pointer value + that is never written to. The default is to point to the + string "ENDMARKER". We change it temporarily to point to the + next character in that string. (Yes, I know it's REALLY + obscure.) + + In Python >= 3.8, this string array is no longer writable, so + instead we pick PyCapsuleType.tp_version_tag. We can't change + Python < 3.8 because someone might use a mixture of cffi + embedded modules, some of which were compiled before this file + changed. + + In Python >= 3.12, this stopped working because that particular + tp_version_tag gets modified during interpreter startup. It's + arguably a bad idea before 3.12 too, but again we can't change + that because someone might use a mixture of cffi embedded + modules, and no-one reported a bug so far. In Python >= 3.12 + we go instead for PyCapsuleType.tp_as_buffer, which is supposed + to always be NULL. We write to it temporarily a pointer to + a struct full of NULLs, which is semantically the same. + */ + +#ifdef WITH_THREAD +# if PY_VERSION_HEX < 0x03080000 + char *volatile *lock = (char *volatile *)_PyParser_TokenNames; + char *old_value, *locked_value; + + while (1) { /* spin loop */ + old_value = *lock; + locked_value = old_value + 1; + if (old_value[0] == 'E') { + assert(old_value[1] == 'N'); + if (cffi_compare_and_swap(lock, old_value, locked_value)) + break; + } + else { + assert(old_value[0] == 'N'); + /* should ideally do a spin loop instruction here, but + hard to do it portably and doesn't really matter I + think: PyEval_InitThreads() should be very fast, and + this is only run at start-up anyway. */ + } + } +# else +# if PY_VERSION_HEX < 0x030C0000 + int volatile *lock = (int volatile *)&PyCapsule_Type.tp_version_tag; + int old_value, locked_value = -42; + assert(!(PyCapsule_Type.tp_flags & Py_TPFLAGS_HAVE_VERSION_TAG)); +# else + static struct ebp_s { PyBufferProcs buf; int mark; } empty_buffer_procs; + empty_buffer_procs.mark = -42; + PyBufferProcs *volatile *lock = (PyBufferProcs *volatile *) + &PyCapsule_Type.tp_as_buffer; + PyBufferProcs *old_value, *locked_value = &empty_buffer_procs.buf; +# endif + + while (1) { /* spin loop */ + old_value = *lock; + if (old_value == 0) { + if (cffi_compare_and_swap(lock, old_value, locked_value)) + break; + } + else { +# if PY_VERSION_HEX < 0x030C0000 + assert(old_value == locked_value); +# else + /* The pointer should point to a possibly different + empty_buffer_procs from another C extension module */ + assert(((struct ebp_s *)old_value)->mark == -42); +# endif + /* should ideally do a spin loop instruction here, but + hard to do it portably and doesn't really matter I + think: PyEval_InitThreads() should be very fast, and + this is only run at start-up anyway. */ + } + } +# endif +#endif + + /* call Py_InitializeEx() */ + if (!Py_IsInitialized()) { + _cffi_py_initialize(); +#if PY_VERSION_HEX < 0x03070000 + PyEval_InitThreads(); +#endif + PyEval_SaveThread(); /* release the GIL */ + /* the returned tstate must be the one that has been stored into the + autoTLSkey by _PyGILState_Init() called from Py_Initialize(). */ + } + else { +#if PY_VERSION_HEX < 0x03070000 + /* PyEval_InitThreads() is always a no-op from CPython 3.7 */ + PyGILState_STATE state = PyGILState_Ensure(); + PyEval_InitThreads(); + PyGILState_Release(state); +#endif + } + +#ifdef WITH_THREAD + /* release the lock */ + while (!cffi_compare_and_swap(lock, locked_value, old_value)) + ; +#endif + + return 0; +} + +/********** end CPython-specific section **********/ + + +#else + + +/********** PyPy-specific section **********/ + +PyMODINIT_FUNC _CFFI_PYTHON_STARTUP_FUNC(const void *[]); /* forward */ + +static struct _cffi_pypy_init_s { + const char *name; + void *func; /* function pointer */ + const char *code; +} _cffi_pypy_init = { + _CFFI_MODULE_NAME, + _CFFI_PYTHON_STARTUP_FUNC, + _CFFI_PYTHON_STARTUP_CODE, +}; + +extern int pypy_carefully_make_gil(const char *); +extern int pypy_init_embedded_cffi_module(int, struct _cffi_pypy_init_s *); + +static int _cffi_carefully_make_gil(void) +{ + return pypy_carefully_make_gil(_CFFI_MODULE_NAME); +} + +static int _cffi_initialize_python(void) +{ + return pypy_init_embedded_cffi_module(0xB011, &_cffi_pypy_init); +} + +/********** end PyPy-specific section **********/ + + +#endif + + +#ifdef __GNUC__ +__attribute__((noinline)) +#endif +static _cffi_call_python_fnptr _cffi_start_python(void) +{ + /* Delicate logic to initialize Python. This function can be + called multiple times concurrently, e.g. when the process calls + its first ``extern "Python"`` functions in multiple threads at + once. It can also be called recursively, in which case we must + ignore it. We also have to consider what occurs if several + different cffi-based extensions reach this code in parallel + threads---it is a different copy of the code, then, and we + can't have any shared global variable unless it comes from + 'libpythonX.Y.so'. + + Idea: + + * _cffi_carefully_make_gil(): "carefully" call + PyEval_InitThreads() (possibly with Py_InitializeEx() first). + + * then we use a (local) custom lock to make sure that a call to this + cffi-based extension will wait if another call to the *same* + extension is running the initialization in another thread. + It is reentrant, so that a recursive call will not block, but + only one from a different thread. + + * then we grab the GIL and (Python 2) we call Py_InitializeEx(). + At this point, concurrent calls to Py_InitializeEx() are not + possible: we have the GIL. + + * do the rest of the specific initialization, which may + temporarily release the GIL but not the custom lock. + Only release the custom lock when we are done. + */ + static char called = 0; + + if (_cffi_carefully_make_gil() != 0) + return NULL; + + _cffi_acquire_reentrant_mutex(); + + /* Here the GIL exists, but we don't have it. We're only protected + from concurrency by the reentrant mutex. */ + + /* This file only initializes the embedded module once, the first + time this is called, even if there are subinterpreters. */ + if (!called) { + called = 1; /* invoke _cffi_initialize_python() only once, + but don't set '_cffi_call_python' right now, + otherwise concurrent threads won't call + this function at all (we need them to wait) */ + if (_cffi_initialize_python() == 0) { + /* now initialization is finished. Switch to the fast-path. */ + + /* We would like nobody to see the new value of + '_cffi_call_python' without also seeing the rest of the + data initialized. However, this is not possible. But + the new value of '_cffi_call_python' is the function + 'cffi_call_python()' from _cffi_backend. So: */ + cffi_write_barrier(); + /* ^^^ we put a write barrier here, and a corresponding + read barrier at the start of cffi_call_python(). This + ensures that after that read barrier, we see everything + done here before the write barrier. + */ + + assert(_cffi_call_python_org != NULL); + _cffi_call_python = (_cffi_call_python_fnptr)_cffi_call_python_org; + } + else { + /* initialization failed. Reset this to NULL, even if it was + already set to some other value. Future calls to + _cffi_start_python() are still forced to occur, and will + always return NULL from now on. */ + _cffi_call_python_org = NULL; + } + } + + _cffi_release_reentrant_mutex(); + + return (_cffi_call_python_fnptr)_cffi_call_python_org; +} + +static +void _cffi_start_and_call_python(struct _cffi_externpy_s *externpy, char *args) +{ + _cffi_call_python_fnptr fnptr; + int current_err = errno; +#ifdef _MSC_VER + int current_lasterr = GetLastError(); +#endif + fnptr = _cffi_start_python(); + if (fnptr == NULL) { + fprintf(stderr, "function %s() called, but initialization code " + "failed. Returning 0.\n", externpy->name); + memset(args, 0, externpy->size_of_result); + } +#ifdef _MSC_VER + SetLastError(current_lasterr); +#endif + errno = current_err; + + if (fnptr != NULL) + fnptr(externpy, args); +} + + +/* The cffi_start_python() function makes sure Python is initialized + and our cffi module is set up. It can be called manually from the + user C code. The same effect is obtained automatically from any + dll-exported ``extern "Python"`` function. This function returns + -1 if initialization failed, 0 if all is OK. */ +_CFFI_UNUSED_FN +static int cffi_start_python(void) +{ + if (_cffi_call_python == &_cffi_start_and_call_python) { + if (_cffi_start_python() == NULL) + return -1; + } + cffi_read_barrier(); + return 0; +} + +#undef cffi_compare_and_swap +#undef cffi_write_barrier +#undef cffi_read_barrier + +#ifdef __cplusplus +} +#endif diff --git a/venv/lib/python3.11/site-packages/cffi/_imp_emulation.py b/venv/lib/python3.11/site-packages/cffi/_imp_emulation.py new file mode 100644 index 0000000..136abdd --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/_imp_emulation.py @@ -0,0 +1,83 @@ + +try: + # this works on Python < 3.12 + from imp import * + +except ImportError: + # this is a limited emulation for Python >= 3.12. + # Note that this is used only for tests or for the old ffi.verify(). + # This is copied from the source code of Python 3.11. + + from _imp import (acquire_lock, release_lock, + is_builtin, is_frozen) + + from importlib._bootstrap import _load + + from importlib import machinery + import os + import sys + import tokenize + + SEARCH_ERROR = 0 + PY_SOURCE = 1 + PY_COMPILED = 2 + C_EXTENSION = 3 + PY_RESOURCE = 4 + PKG_DIRECTORY = 5 + C_BUILTIN = 6 + PY_FROZEN = 7 + PY_CODERESOURCE = 8 + IMP_HOOK = 9 + + def get_suffixes(): + extensions = [(s, 'rb', C_EXTENSION) + for s in machinery.EXTENSION_SUFFIXES] + source = [(s, 'r', PY_SOURCE) for s in machinery.SOURCE_SUFFIXES] + bytecode = [(s, 'rb', PY_COMPILED) for s in machinery.BYTECODE_SUFFIXES] + return extensions + source + bytecode + + def find_module(name, path=None): + if not isinstance(name, str): + raise TypeError("'name' must be a str, not {}".format(type(name))) + elif not isinstance(path, (type(None), list)): + # Backwards-compatibility + raise RuntimeError("'path' must be None or a list, " + "not {}".format(type(path))) + + if path is None: + if is_builtin(name): + return None, None, ('', '', C_BUILTIN) + elif is_frozen(name): + return None, None, ('', '', PY_FROZEN) + else: + path = sys.path + + for entry in path: + package_directory = os.path.join(entry, name) + for suffix in ['.py', machinery.BYTECODE_SUFFIXES[0]]: + package_file_name = '__init__' + suffix + file_path = os.path.join(package_directory, package_file_name) + if os.path.isfile(file_path): + return None, package_directory, ('', '', PKG_DIRECTORY) + for suffix, mode, type_ in get_suffixes(): + file_name = name + suffix + file_path = os.path.join(entry, file_name) + if os.path.isfile(file_path): + break + else: + continue + break # Break out of outer loop when breaking out of inner loop. + else: + raise ImportError(name, name=name) + + encoding = None + if 'b' not in mode: + with open(file_path, 'rb') as file: + encoding = tokenize.detect_encoding(file.readline)[0] + file = open(file_path, mode, encoding=encoding) + return file, file_path, (suffix, mode, type_) + + def load_dynamic(name, path, file=None): + loader = machinery.ExtensionFileLoader(name, path) + spec = machinery.ModuleSpec(name=name, loader=loader, origin=path) + return _load(spec) diff --git a/venv/lib/python3.11/site-packages/cffi/_shimmed_dist_utils.py b/venv/lib/python3.11/site-packages/cffi/_shimmed_dist_utils.py new file mode 100644 index 0000000..c3d2312 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/_shimmed_dist_utils.py @@ -0,0 +1,45 @@ +""" +Temporary shim module to indirect the bits of distutils we need from setuptools/distutils while providing useful +error messages beyond `No module named 'distutils' on Python >= 3.12, or when setuptools' vendored distutils is broken. + +This is a compromise to avoid a hard-dep on setuptools for Python >= 3.12, since many users don't need runtime compilation support from CFFI. +""" +import sys + +try: + # import setuptools first; this is the most robust way to ensure its embedded distutils is available + # (the .pth shim should usually work, but this is even more robust) + import setuptools +except Exception as ex: + if sys.version_info >= (3, 12): + # Python 3.12 has no built-in distutils to fall back on, so any import problem is fatal + raise Exception("This CFFI feature requires setuptools on Python >= 3.12. The setuptools module is missing or non-functional.") from ex + + # silently ignore on older Pythons (support fallback to stdlib distutils where available) +else: + del setuptools + +try: + # bring in just the bits of distutils we need, whether they really came from setuptools or stdlib-embedded distutils + from distutils import log, sysconfig + from distutils.ccompiler import CCompiler + from distutils.command.build_ext import build_ext + from distutils.core import Distribution, Extension + from distutils.dir_util import mkpath + from distutils.errors import DistutilsSetupError, CompileError, LinkError + from distutils.log import set_threshold, set_verbosity + + if sys.platform == 'win32': + try: + # FUTURE: msvc9compiler module was removed in setuptools 74; consider removing, as it's only used by an ancient patch in `recompiler` + from distutils.msvc9compiler import MSVCCompiler + except ImportError: + MSVCCompiler = None +except Exception as ex: + if sys.version_info >= (3, 12): + raise Exception("This CFFI feature requires setuptools on Python >= 3.12. Please install the setuptools package.") from ex + + # anything older, just let the underlying distutils import error fly + raise Exception("This CFFI feature requires distutils. Please install the distutils or setuptools package.") from ex + +del sys diff --git a/venv/lib/python3.11/site-packages/cffi/api.py b/venv/lib/python3.11/site-packages/cffi/api.py new file mode 100644 index 0000000..5a474f3 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/api.py @@ -0,0 +1,967 @@ +import sys, types +from .lock import allocate_lock +from .error import CDefError +from . import model + +try: + callable +except NameError: + # Python 3.1 + from collections import Callable + callable = lambda x: isinstance(x, Callable) + +try: + basestring +except NameError: + # Python 3.x + basestring = str + +_unspecified = object() + + + +class FFI(object): + r''' + The main top-level class that you instantiate once, or once per module. + + Example usage: + + ffi = FFI() + ffi.cdef(""" + int printf(const char *, ...); + """) + + C = ffi.dlopen(None) # standard library + -or- + C = ffi.verify() # use a C compiler: verify the decl above is right + + C.printf("hello, %s!\n", ffi.new("char[]", "world")) + ''' + + def __init__(self, backend=None): + """Create an FFI instance. The 'backend' argument is used to + select a non-default backend, mostly for tests. + """ + if backend is None: + # You need PyPy (>= 2.0 beta), or a CPython (>= 2.6) with + # _cffi_backend.so compiled. + import _cffi_backend as backend + from . import __version__ + if backend.__version__ != __version__: + # bad version! Try to be as explicit as possible. + if hasattr(backend, '__file__'): + # CPython + raise Exception("Version mismatch: this is the 'cffi' package version %s, located in %r. When we import the top-level '_cffi_backend' extension module, we get version %s, located in %r. The two versions should be equal; check your installation." % ( + __version__, __file__, + backend.__version__, backend.__file__)) + else: + # PyPy + raise Exception("Version mismatch: this is the 'cffi' package version %s, located in %r. This interpreter comes with a built-in '_cffi_backend' module, which is version %s. The two versions should be equal; check your installation." % ( + __version__, __file__, backend.__version__)) + # (If you insist you can also try to pass the option + # 'backend=backend_ctypes.CTypesBackend()', but don't + # rely on it! It's probably not going to work well.) + + from . import cparser + self._backend = backend + self._lock = allocate_lock() + self._parser = cparser.Parser() + self._cached_btypes = {} + self._parsed_types = types.ModuleType('parsed_types').__dict__ + self._new_types = types.ModuleType('new_types').__dict__ + self._function_caches = [] + self._libraries = [] + self._cdefsources = [] + self._included_ffis = [] + self._windows_unicode = None + self._init_once_cache = {} + self._cdef_version = None + self._embedding = None + self._typecache = model.get_typecache(backend) + if hasattr(backend, 'set_ffi'): + backend.set_ffi(self) + for name in list(backend.__dict__): + if name.startswith('RTLD_'): + setattr(self, name, getattr(backend, name)) + # + with self._lock: + self.BVoidP = self._get_cached_btype(model.voidp_type) + self.BCharA = self._get_cached_btype(model.char_array_type) + if isinstance(backend, types.ModuleType): + # _cffi_backend: attach these constants to the class + if not hasattr(FFI, 'NULL'): + FFI.NULL = self.cast(self.BVoidP, 0) + FFI.CData, FFI.CType = backend._get_types() + else: + # ctypes backend: attach these constants to the instance + self.NULL = self.cast(self.BVoidP, 0) + self.CData, self.CType = backend._get_types() + self.buffer = backend.buffer + + def cdef(self, csource, override=False, packed=False, pack=None): + """Parse the given C source. This registers all declared functions, + types, and global variables. The functions and global variables can + then be accessed via either 'ffi.dlopen()' or 'ffi.verify()'. + The types can be used in 'ffi.new()' and other functions. + If 'packed' is specified as True, all structs declared inside this + cdef are packed, i.e. laid out without any field alignment at all. + Alternatively, 'pack' can be a small integer, and requests for + alignment greater than that are ignored (pack=1 is equivalent to + packed=True). + """ + self._cdef(csource, override=override, packed=packed, pack=pack) + + def embedding_api(self, csource, packed=False, pack=None): + self._cdef(csource, packed=packed, pack=pack, dllexport=True) + if self._embedding is None: + self._embedding = '' + + def _cdef(self, csource, override=False, **options): + if not isinstance(csource, str): # unicode, on Python 2 + if not isinstance(csource, basestring): + raise TypeError("cdef() argument must be a string") + csource = csource.encode('ascii') + with self._lock: + self._cdef_version = object() + self._parser.parse(csource, override=override, **options) + self._cdefsources.append(csource) + if override: + for cache in self._function_caches: + cache.clear() + finishlist = self._parser._recomplete + if finishlist: + self._parser._recomplete = [] + for tp in finishlist: + tp.finish_backend_type(self, finishlist) + + def dlopen(self, name, flags=0): + """Load and return a dynamic library identified by 'name'. + The standard C library can be loaded by passing None. + Note that functions and types declared by 'ffi.cdef()' are not + linked to a particular library, just like C headers; in the + library we only look for the actual (untyped) symbols. + """ + if not (isinstance(name, basestring) or + name is None or + isinstance(name, self.CData)): + raise TypeError("dlopen(name): name must be a file name, None, " + "or an already-opened 'void *' handle") + with self._lock: + lib, function_cache = _make_ffi_library(self, name, flags) + self._function_caches.append(function_cache) + self._libraries.append(lib) + return lib + + def dlclose(self, lib): + """Close a library obtained with ffi.dlopen(). After this call, + access to functions or variables from the library will fail + (possibly with a segmentation fault). + """ + type(lib).__cffi_close__(lib) + + def _typeof_locked(self, cdecl): + # call me with the lock! + key = cdecl + if key in self._parsed_types: + return self._parsed_types[key] + # + if not isinstance(cdecl, str): # unicode, on Python 2 + cdecl = cdecl.encode('ascii') + # + type = self._parser.parse_type(cdecl) + really_a_function_type = type.is_raw_function + if really_a_function_type: + type = type.as_function_pointer() + btype = self._get_cached_btype(type) + result = btype, really_a_function_type + self._parsed_types[key] = result + return result + + def _typeof(self, cdecl, consider_function_as_funcptr=False): + # string -> ctype object + try: + result = self._parsed_types[cdecl] + except KeyError: + with self._lock: + result = self._typeof_locked(cdecl) + # + btype, really_a_function_type = result + if really_a_function_type and not consider_function_as_funcptr: + raise CDefError("the type %r is a function type, not a " + "pointer-to-function type" % (cdecl,)) + return btype + + def typeof(self, cdecl): + """Parse the C type given as a string and return the + corresponding object. + It can also be used on 'cdata' instance to get its C type. + """ + if isinstance(cdecl, basestring): + return self._typeof(cdecl) + if isinstance(cdecl, self.CData): + return self._backend.typeof(cdecl) + if isinstance(cdecl, types.BuiltinFunctionType): + res = _builtin_function_type(cdecl) + if res is not None: + return res + if (isinstance(cdecl, types.FunctionType) + and hasattr(cdecl, '_cffi_base_type')): + with self._lock: + return self._get_cached_btype(cdecl._cffi_base_type) + raise TypeError(type(cdecl)) + + def sizeof(self, cdecl): + """Return the size in bytes of the argument. It can be a + string naming a C type, or a 'cdata' instance. + """ + if isinstance(cdecl, basestring): + BType = self._typeof(cdecl) + return self._backend.sizeof(BType) + else: + return self._backend.sizeof(cdecl) + + def alignof(self, cdecl): + """Return the natural alignment size in bytes of the C type + given as a string. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._backend.alignof(cdecl) + + def offsetof(self, cdecl, *fields_or_indexes): + """Return the offset of the named field inside the given + structure or array, which must be given as a C type name. + You can give several field names in case of nested structures. + You can also give numeric values which correspond to array + items, in case of an array type. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._typeoffsetof(cdecl, *fields_or_indexes)[1] + + def new(self, cdecl, init=None): + """Allocate an instance according to the specified C type and + return a pointer to it. The specified C type must be either a + pointer or an array: ``new('X *')`` allocates an X and returns + a pointer to it, whereas ``new('X[n]')`` allocates an array of + n X'es and returns an array referencing it (which works + mostly like a pointer, like in C). You can also use + ``new('X[]', n)`` to allocate an array of a non-constant + length n. + + The memory is initialized following the rules of declaring a + global variable in C: by default it is zero-initialized, but + an explicit initializer can be given which can be used to + fill all or part of the memory. + + When the returned object goes out of scope, the memory + is freed. In other words the returned object has + ownership of the value of type 'cdecl' that it points to. This + means that the raw data can be used as long as this object is + kept alive, but must not be used for a longer time. Be careful + about that when copying the pointer to the memory somewhere + else, e.g. into another structure. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._backend.newp(cdecl, init) + + def new_allocator(self, alloc=None, free=None, + should_clear_after_alloc=True): + """Return a new allocator, i.e. a function that behaves like ffi.new() + but uses the provided low-level 'alloc' and 'free' functions. + + 'alloc' is called with the size as argument. If it returns NULL, a + MemoryError is raised. 'free' is called with the result of 'alloc' + as argument. Both can be either Python function or directly C + functions. If 'free' is None, then no free function is called. + If both 'alloc' and 'free' are None, the default is used. + + If 'should_clear_after_alloc' is set to False, then the memory + returned by 'alloc' is assumed to be already cleared (or you are + fine with garbage); otherwise CFFI will clear it. + """ + compiled_ffi = self._backend.FFI() + allocator = compiled_ffi.new_allocator(alloc, free, + should_clear_after_alloc) + def allocate(cdecl, init=None): + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return allocator(cdecl, init) + return allocate + + def cast(self, cdecl, source): + """Similar to a C cast: returns an instance of the named C + type initialized with the given 'source'. The source is + casted between integers or pointers of any type. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._backend.cast(cdecl, source) + + def string(self, cdata, maxlen=-1): + """Return a Python string (or unicode string) from the 'cdata'. + If 'cdata' is a pointer or array of characters or bytes, returns + the null-terminated string. The returned string extends until + the first null character, or at most 'maxlen' characters. If + 'cdata' is an array then 'maxlen' defaults to its length. + + If 'cdata' is a pointer or array of wchar_t, returns a unicode + string following the same rules. + + If 'cdata' is a single character or byte or a wchar_t, returns + it as a string or unicode string. + + If 'cdata' is an enum, returns the value of the enumerator as a + string, or 'NUMBER' if the value is out of range. + """ + return self._backend.string(cdata, maxlen) + + def unpack(self, cdata, length): + """Unpack an array of C data of the given length, + returning a Python string/unicode/list. + + If 'cdata' is a pointer to 'char', returns a byte string. + It does not stop at the first null. This is equivalent to: + ffi.buffer(cdata, length)[:] + + If 'cdata' is a pointer to 'wchar_t', returns a unicode string. + 'length' is measured in wchar_t's; it is not the size in bytes. + + If 'cdata' is a pointer to anything else, returns a list of + 'length' items. This is a faster equivalent to: + [cdata[i] for i in range(length)] + """ + return self._backend.unpack(cdata, length) + + #def buffer(self, cdata, size=-1): + # """Return a read-write buffer object that references the raw C data + # pointed to by the given 'cdata'. The 'cdata' must be a pointer or + # an array. Can be passed to functions expecting a buffer, or directly + # manipulated with: + # + # buf[:] get a copy of it in a regular string, or + # buf[idx] as a single character + # buf[:] = ... + # buf[idx] = ... change the content + # """ + # note that 'buffer' is a type, set on this instance by __init__ + + def from_buffer(self, cdecl, python_buffer=_unspecified, + require_writable=False): + """Return a cdata of the given type pointing to the data of the + given Python object, which must support the buffer interface. + Note that this is not meant to be used on the built-in types + str or unicode (you can build 'char[]' arrays explicitly) + but only on objects containing large quantities of raw data + in some other format, like 'array.array' or numpy arrays. + + The first argument is optional and default to 'char[]'. + """ + if python_buffer is _unspecified: + cdecl, python_buffer = self.BCharA, cdecl + elif isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._backend.from_buffer(cdecl, python_buffer, + require_writable) + + def memmove(self, dest, src, n): + """ffi.memmove(dest, src, n) copies n bytes of memory from src to dest. + + Like the C function memmove(), the memory areas may overlap; + apart from that it behaves like the C function memcpy(). + + 'src' can be any cdata ptr or array, or any Python buffer object. + 'dest' can be any cdata ptr or array, or a writable Python buffer + object. The size to copy, 'n', is always measured in bytes. + + Unlike other methods, this one supports all Python buffer including + byte strings and bytearrays---but it still does not support + non-contiguous buffers. + """ + return self._backend.memmove(dest, src, n) + + def callback(self, cdecl, python_callable=None, error=None, onerror=None): + """Return a callback object or a decorator making such a + callback object. 'cdecl' must name a C function pointer type. + The callback invokes the specified 'python_callable' (which may + be provided either directly or via a decorator). Important: the + callback object must be manually kept alive for as long as the + callback may be invoked from the C level. + """ + def callback_decorator_wrap(python_callable): + if not callable(python_callable): + raise TypeError("the 'python_callable' argument " + "is not callable") + return self._backend.callback(cdecl, python_callable, + error, onerror) + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl, consider_function_as_funcptr=True) + if python_callable is None: + return callback_decorator_wrap # decorator mode + else: + return callback_decorator_wrap(python_callable) # direct mode + + def getctype(self, cdecl, replace_with=''): + """Return a string giving the C type 'cdecl', which may be itself + a string or a object. If 'replace_with' is given, it gives + extra text to append (or insert for more complicated C types), like + a variable name, or '*' to get actually the C type 'pointer-to-cdecl'. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + replace_with = replace_with.strip() + if (replace_with.startswith('*') + and '&[' in self._backend.getcname(cdecl, '&')): + replace_with = '(%s)' % replace_with + elif replace_with and not replace_with[0] in '[(': + replace_with = ' ' + replace_with + return self._backend.getcname(cdecl, replace_with) + + def gc(self, cdata, destructor, size=0): + """Return a new cdata object that points to the same + data. Later, when this new cdata object is garbage-collected, + 'destructor(old_cdata_object)' will be called. + + The optional 'size' gives an estimate of the size, used to + trigger the garbage collection more eagerly. So far only used + on PyPy. It tells the GC that the returned object keeps alive + roughly 'size' bytes of external memory. + """ + return self._backend.gcp(cdata, destructor, size) + + def _get_cached_btype(self, type): + assert self._lock.acquire(False) is False + # call me with the lock! + try: + BType = self._cached_btypes[type] + except KeyError: + finishlist = [] + BType = type.get_cached_btype(self, finishlist) + for type in finishlist: + type.finish_backend_type(self, finishlist) + return BType + + def verify(self, source='', tmpdir=None, **kwargs): + """Verify that the current ffi signatures compile on this + machine, and return a dynamic library object. The dynamic + library can be used to call functions and access global + variables declared in this 'ffi'. The library is compiled + by the C compiler: it gives you C-level API compatibility + (including calling macros). This is unlike 'ffi.dlopen()', + which requires binary compatibility in the signatures. + """ + from .verifier import Verifier, _caller_dir_pycache + # + # If set_unicode(True) was called, insert the UNICODE and + # _UNICODE macro declarations + if self._windows_unicode: + self._apply_windows_unicode(kwargs) + # + # Set the tmpdir here, and not in Verifier.__init__: it picks + # up the caller's directory, which we want to be the caller of + # ffi.verify(), as opposed to the caller of Veritier(). + tmpdir = tmpdir or _caller_dir_pycache() + # + # Make a Verifier() and use it to load the library. + self.verifier = Verifier(self, source, tmpdir, **kwargs) + lib = self.verifier.load_library() + # + # Save the loaded library for keep-alive purposes, even + # if the caller doesn't keep it alive itself (it should). + self._libraries.append(lib) + return lib + + def _get_errno(self): + return self._backend.get_errno() + def _set_errno(self, errno): + self._backend.set_errno(errno) + errno = property(_get_errno, _set_errno, None, + "the value of 'errno' from/to the C calls") + + def getwinerror(self, code=-1): + return self._backend.getwinerror(code) + + def _pointer_to(self, ctype): + with self._lock: + return model.pointer_cache(self, ctype) + + def addressof(self, cdata, *fields_or_indexes): + """Return the address of a . + If 'fields_or_indexes' are given, returns the address of that + field or array item in the structure or array, recursively in + case of nested structures. + """ + try: + ctype = self._backend.typeof(cdata) + except TypeError: + if '__addressof__' in type(cdata).__dict__: + return type(cdata).__addressof__(cdata, *fields_or_indexes) + raise + if fields_or_indexes: + ctype, offset = self._typeoffsetof(ctype, *fields_or_indexes) + else: + if ctype.kind == "pointer": + raise TypeError("addressof(pointer)") + offset = 0 + ctypeptr = self._pointer_to(ctype) + return self._backend.rawaddressof(ctypeptr, cdata, offset) + + def _typeoffsetof(self, ctype, field_or_index, *fields_or_indexes): + ctype, offset = self._backend.typeoffsetof(ctype, field_or_index) + for field1 in fields_or_indexes: + ctype, offset1 = self._backend.typeoffsetof(ctype, field1, 1) + offset += offset1 + return ctype, offset + + def include(self, ffi_to_include): + """Includes the typedefs, structs, unions and enums defined + in another FFI instance. Usage is similar to a #include in C, + where a part of the program might include types defined in + another part for its own usage. Note that the include() + method has no effect on functions, constants and global + variables, which must anyway be accessed directly from the + lib object returned by the original FFI instance. + """ + if not isinstance(ffi_to_include, FFI): + raise TypeError("ffi.include() expects an argument that is also of" + " type cffi.FFI, not %r" % ( + type(ffi_to_include).__name__,)) + if ffi_to_include is self: + raise ValueError("self.include(self)") + with ffi_to_include._lock: + with self._lock: + self._parser.include(ffi_to_include._parser) + self._cdefsources.append('[') + self._cdefsources.extend(ffi_to_include._cdefsources) + self._cdefsources.append(']') + self._included_ffis.append(ffi_to_include) + + def new_handle(self, x): + return self._backend.newp_handle(self.BVoidP, x) + + def from_handle(self, x): + return self._backend.from_handle(x) + + def release(self, x): + self._backend.release(x) + + def set_unicode(self, enabled_flag): + """Windows: if 'enabled_flag' is True, enable the UNICODE and + _UNICODE defines in C, and declare the types like TCHAR and LPTCSTR + to be (pointers to) wchar_t. If 'enabled_flag' is False, + declare these types to be (pointers to) plain 8-bit characters. + This is mostly for backward compatibility; you usually want True. + """ + if self._windows_unicode is not None: + raise ValueError("set_unicode() can only be called once") + enabled_flag = bool(enabled_flag) + if enabled_flag: + self.cdef("typedef wchar_t TBYTE;" + "typedef wchar_t TCHAR;" + "typedef const wchar_t *LPCTSTR;" + "typedef const wchar_t *PCTSTR;" + "typedef wchar_t *LPTSTR;" + "typedef wchar_t *PTSTR;" + "typedef TBYTE *PTBYTE;" + "typedef TCHAR *PTCHAR;") + else: + self.cdef("typedef char TBYTE;" + "typedef char TCHAR;" + "typedef const char *LPCTSTR;" + "typedef const char *PCTSTR;" + "typedef char *LPTSTR;" + "typedef char *PTSTR;" + "typedef TBYTE *PTBYTE;" + "typedef TCHAR *PTCHAR;") + self._windows_unicode = enabled_flag + + def _apply_windows_unicode(self, kwds): + defmacros = kwds.get('define_macros', ()) + if not isinstance(defmacros, (list, tuple)): + raise TypeError("'define_macros' must be a list or tuple") + defmacros = list(defmacros) + [('UNICODE', '1'), + ('_UNICODE', '1')] + kwds['define_macros'] = defmacros + + def _apply_embedding_fix(self, kwds): + # must include an argument like "-lpython2.7" for the compiler + def ensure(key, value): + lst = kwds.setdefault(key, []) + if value not in lst: + lst.append(value) + # + if '__pypy__' in sys.builtin_module_names: + import os + if sys.platform == "win32": + # we need 'libpypy-c.lib'. Current distributions of + # pypy (>= 4.1) contain it as 'libs/python27.lib'. + pythonlib = "python{0[0]}{0[1]}".format(sys.version_info) + if hasattr(sys, 'prefix'): + ensure('library_dirs', os.path.join(sys.prefix, 'libs')) + else: + # we need 'libpypy-c.{so,dylib}', which should be by + # default located in 'sys.prefix/bin' for installed + # systems. + if sys.version_info < (3,): + pythonlib = "pypy-c" + else: + pythonlib = "pypy3-c" + if hasattr(sys, 'prefix'): + ensure('library_dirs', os.path.join(sys.prefix, 'bin')) + # On uninstalled pypy's, the libpypy-c is typically found in + # .../pypy/goal/. + if hasattr(sys, 'prefix'): + ensure('library_dirs', os.path.join(sys.prefix, 'pypy', 'goal')) + else: + if sys.platform == "win32": + template = "python%d%d" + if hasattr(sys, 'gettotalrefcount'): + template += '_d' + else: + try: + import sysconfig + except ImportError: # 2.6 + from cffi._shimmed_dist_utils import sysconfig + template = "python%d.%d" + if sysconfig.get_config_var('DEBUG_EXT'): + template += sysconfig.get_config_var('DEBUG_EXT') + pythonlib = (template % + (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) + if hasattr(sys, 'abiflags'): + pythonlib += sys.abiflags + ensure('libraries', pythonlib) + if sys.platform == "win32": + ensure('extra_link_args', '/MANIFEST') + + def set_source(self, module_name, source, source_extension='.c', **kwds): + import os + if hasattr(self, '_assigned_source'): + raise ValueError("set_source() cannot be called several times " + "per ffi object") + if not isinstance(module_name, basestring): + raise TypeError("'module_name' must be a string") + if os.sep in module_name or (os.altsep and os.altsep in module_name): + raise ValueError("'module_name' must not contain '/': use a dotted " + "name to make a 'package.module' location") + self._assigned_source = (str(module_name), source, + source_extension, kwds) + + def set_source_pkgconfig(self, module_name, pkgconfig_libs, source, + source_extension='.c', **kwds): + from . import pkgconfig + if not isinstance(pkgconfig_libs, list): + raise TypeError("the pkgconfig_libs argument must be a list " + "of package names") + kwds2 = pkgconfig.flags_from_pkgconfig(pkgconfig_libs) + pkgconfig.merge_flags(kwds, kwds2) + self.set_source(module_name, source, source_extension, **kwds) + + def distutils_extension(self, tmpdir='build', verbose=True): + from cffi._shimmed_dist_utils import mkpath + from .recompiler import recompile + # + if not hasattr(self, '_assigned_source'): + if hasattr(self, 'verifier'): # fallback, 'tmpdir' ignored + return self.verifier.get_extension() + raise ValueError("set_source() must be called before" + " distutils_extension()") + module_name, source, source_extension, kwds = self._assigned_source + if source is None: + raise TypeError("distutils_extension() is only for C extension " + "modules, not for dlopen()-style pure Python " + "modules") + mkpath(tmpdir) + ext, updated = recompile(self, module_name, + source, tmpdir=tmpdir, extradir=tmpdir, + source_extension=source_extension, + call_c_compiler=False, **kwds) + if verbose: + if updated: + sys.stderr.write("regenerated: %r\n" % (ext.sources[0],)) + else: + sys.stderr.write("not modified: %r\n" % (ext.sources[0],)) + return ext + + def emit_c_code(self, filename): + from .recompiler import recompile + # + if not hasattr(self, '_assigned_source'): + raise ValueError("set_source() must be called before emit_c_code()") + module_name, source, source_extension, kwds = self._assigned_source + if source is None: + raise TypeError("emit_c_code() is only for C extension modules, " + "not for dlopen()-style pure Python modules") + recompile(self, module_name, source, + c_file=filename, call_c_compiler=False, + uses_ffiplatform=False, **kwds) + + def emit_python_code(self, filename): + from .recompiler import recompile + # + if not hasattr(self, '_assigned_source'): + raise ValueError("set_source() must be called before emit_c_code()") + module_name, source, source_extension, kwds = self._assigned_source + if source is not None: + raise TypeError("emit_python_code() is only for dlopen()-style " + "pure Python modules, not for C extension modules") + recompile(self, module_name, source, + c_file=filename, call_c_compiler=False, + uses_ffiplatform=False, **kwds) + + def compile(self, tmpdir='.', verbose=0, target=None, debug=None): + """The 'target' argument gives the final file name of the + compiled DLL. Use '*' to force distutils' choice, suitable for + regular CPython C API modules. Use a file name ending in '.*' + to ask for the system's default extension for dynamic libraries + (.so/.dll/.dylib). + + The default is '*' when building a non-embedded C API extension, + and (module_name + '.*') when building an embedded library. + """ + from .recompiler import recompile + # + if not hasattr(self, '_assigned_source'): + raise ValueError("set_source() must be called before compile()") + module_name, source, source_extension, kwds = self._assigned_source + return recompile(self, module_name, source, tmpdir=tmpdir, + target=target, source_extension=source_extension, + compiler_verbose=verbose, debug=debug, **kwds) + + def init_once(self, func, tag): + # Read _init_once_cache[tag], which is either (False, lock) if + # we're calling the function now in some thread, or (True, result). + # Don't call setdefault() in most cases, to avoid allocating and + # immediately freeing a lock; but still use setdefaut() to avoid + # races. + try: + x = self._init_once_cache[tag] + except KeyError: + x = self._init_once_cache.setdefault(tag, (False, allocate_lock())) + # Common case: we got (True, result), so we return the result. + if x[0]: + return x[1] + # Else, it's a lock. Acquire it to serialize the following tests. + with x[1]: + # Read again from _init_once_cache the current status. + x = self._init_once_cache[tag] + if x[0]: + return x[1] + # Call the function and store the result back. + result = func() + self._init_once_cache[tag] = (True, result) + return result + + def embedding_init_code(self, pysource): + if self._embedding: + raise ValueError("embedding_init_code() can only be called once") + # fix 'pysource' before it gets dumped into the C file: + # - remove empty lines at the beginning, so it starts at "line 1" + # - dedent, if all non-empty lines are indented + # - check for SyntaxErrors + import re + match = re.match(r'\s*\n', pysource) + if match: + pysource = pysource[match.end():] + lines = pysource.splitlines() or [''] + prefix = re.match(r'\s*', lines[0]).group() + for i in range(1, len(lines)): + line = lines[i] + if line.rstrip(): + while not line.startswith(prefix): + prefix = prefix[:-1] + i = len(prefix) + lines = [line[i:]+'\n' for line in lines] + pysource = ''.join(lines) + # + compile(pysource, "cffi_init", "exec") + # + self._embedding = pysource + + def def_extern(self, *args, **kwds): + raise ValueError("ffi.def_extern() is only available on API-mode FFI " + "objects") + + def list_types(self): + """Returns the user type names known to this FFI instance. + This returns a tuple containing three lists of names: + (typedef_names, names_of_structs, names_of_unions) + """ + typedefs = [] + structs = [] + unions = [] + for key in self._parser._declarations: + if key.startswith('typedef '): + typedefs.append(key[8:]) + elif key.startswith('struct '): + structs.append(key[7:]) + elif key.startswith('union '): + unions.append(key[6:]) + typedefs.sort() + structs.sort() + unions.sort() + return (typedefs, structs, unions) + + +def _load_backend_lib(backend, name, flags): + import os + if not isinstance(name, basestring): + if sys.platform != "win32" or name is not None: + return backend.load_library(name, flags) + name = "c" # Windows: load_library(None) fails, but this works + # on Python 2 (backward compatibility hack only) + first_error = None + if '.' in name or '/' in name or os.sep in name: + try: + return backend.load_library(name, flags) + except OSError as e: + first_error = e + import ctypes.util + path = ctypes.util.find_library(name) + if path is None: + if name == "c" and sys.platform == "win32" and sys.version_info >= (3,): + raise OSError("dlopen(None) cannot work on Windows for Python 3 " + "(see http://bugs.python.org/issue23606)") + msg = ("ctypes.util.find_library() did not manage " + "to locate a library called %r" % (name,)) + if first_error is not None: + msg = "%s. Additionally, %s" % (first_error, msg) + raise OSError(msg) + return backend.load_library(path, flags) + +def _make_ffi_library(ffi, libname, flags): + backend = ffi._backend + backendlib = _load_backend_lib(backend, libname, flags) + # + def accessor_function(name): + key = 'function ' + name + tp, _ = ffi._parser._declarations[key] + BType = ffi._get_cached_btype(tp) + value = backendlib.load_function(BType, name) + library.__dict__[name] = value + # + def accessor_variable(name): + key = 'variable ' + name + tp, _ = ffi._parser._declarations[key] + BType = ffi._get_cached_btype(tp) + read_variable = backendlib.read_variable + write_variable = backendlib.write_variable + setattr(FFILibrary, name, property( + lambda self: read_variable(BType, name), + lambda self, value: write_variable(BType, name, value))) + # + def addressof_var(name): + try: + return addr_variables[name] + except KeyError: + with ffi._lock: + if name not in addr_variables: + key = 'variable ' + name + tp, _ = ffi._parser._declarations[key] + BType = ffi._get_cached_btype(tp) + if BType.kind != 'array': + BType = model.pointer_cache(ffi, BType) + p = backendlib.load_function(BType, name) + addr_variables[name] = p + return addr_variables[name] + # + def accessor_constant(name): + raise NotImplementedError("non-integer constant '%s' cannot be " + "accessed from a dlopen() library" % (name,)) + # + def accessor_int_constant(name): + library.__dict__[name] = ffi._parser._int_constants[name] + # + accessors = {} + accessors_version = [False] + addr_variables = {} + # + def update_accessors(): + if accessors_version[0] is ffi._cdef_version: + return + # + for key, (tp, _) in ffi._parser._declarations.items(): + if not isinstance(tp, model.EnumType): + tag, name = key.split(' ', 1) + if tag == 'function': + accessors[name] = accessor_function + elif tag == 'variable': + accessors[name] = accessor_variable + elif tag == 'constant': + accessors[name] = accessor_constant + else: + for i, enumname in enumerate(tp.enumerators): + def accessor_enum(name, tp=tp, i=i): + tp.check_not_partial() + library.__dict__[name] = tp.enumvalues[i] + accessors[enumname] = accessor_enum + for name in ffi._parser._int_constants: + accessors.setdefault(name, accessor_int_constant) + accessors_version[0] = ffi._cdef_version + # + def make_accessor(name): + with ffi._lock: + if name in library.__dict__ or name in FFILibrary.__dict__: + return # added by another thread while waiting for the lock + if name not in accessors: + update_accessors() + if name not in accessors: + raise AttributeError(name) + accessors[name](name) + # + class FFILibrary(object): + def __getattr__(self, name): + make_accessor(name) + return getattr(self, name) + def __setattr__(self, name, value): + try: + property = getattr(self.__class__, name) + except AttributeError: + make_accessor(name) + setattr(self, name, value) + else: + property.__set__(self, value) + def __dir__(self): + with ffi._lock: + update_accessors() + return accessors.keys() + def __addressof__(self, name): + if name in library.__dict__: + return library.__dict__[name] + if name in FFILibrary.__dict__: + return addressof_var(name) + make_accessor(name) + if name in library.__dict__: + return library.__dict__[name] + if name in FFILibrary.__dict__: + return addressof_var(name) + raise AttributeError("cffi library has no function or " + "global variable named '%s'" % (name,)) + def __cffi_close__(self): + backendlib.close_lib() + self.__dict__.clear() + # + if isinstance(libname, basestring): + try: + if not isinstance(libname, str): # unicode, on Python 2 + libname = libname.encode('utf-8') + FFILibrary.__name__ = 'FFILibrary_%s' % libname + except UnicodeError: + pass + library = FFILibrary() + return library, library.__dict__ + +def _builtin_function_type(func): + # a hack to make at least ffi.typeof(builtin_function) work, + # if the builtin function was obtained by 'vengine_cpy'. + import sys + try: + module = sys.modules[func.__module__] + ffi = module._cffi_original_ffi + types_of_builtin_funcs = module._cffi_types_of_builtin_funcs + tp = types_of_builtin_funcs[func] + except (KeyError, AttributeError, TypeError): + return None + else: + with ffi._lock: + return ffi._get_cached_btype(tp) diff --git a/venv/lib/python3.11/site-packages/cffi/backend_ctypes.py b/venv/lib/python3.11/site-packages/cffi/backend_ctypes.py new file mode 100644 index 0000000..e7956a7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/backend_ctypes.py @@ -0,0 +1,1121 @@ +import ctypes, ctypes.util, operator, sys +from . import model + +if sys.version_info < (3,): + bytechr = chr +else: + unicode = str + long = int + xrange = range + bytechr = lambda num: bytes([num]) + +class CTypesType(type): + pass + +class CTypesData(object): + __metaclass__ = CTypesType + __slots__ = ['__weakref__'] + __name__ = '' + + def __init__(self, *args): + raise TypeError("cannot instantiate %r" % (self.__class__,)) + + @classmethod + def _newp(cls, init): + raise TypeError("expected a pointer or array ctype, got '%s'" + % (cls._get_c_name(),)) + + @staticmethod + def _to_ctypes(value): + raise TypeError + + @classmethod + def _arg_to_ctypes(cls, *value): + try: + ctype = cls._ctype + except AttributeError: + raise TypeError("cannot create an instance of %r" % (cls,)) + if value: + res = cls._to_ctypes(*value) + if not isinstance(res, ctype): + res = cls._ctype(res) + else: + res = cls._ctype() + return res + + @classmethod + def _create_ctype_obj(cls, init): + if init is None: + return cls._arg_to_ctypes() + else: + return cls._arg_to_ctypes(init) + + @staticmethod + def _from_ctypes(ctypes_value): + raise TypeError + + @classmethod + def _get_c_name(cls, replace_with=''): + return cls._reftypename.replace(' &', replace_with) + + @classmethod + def _fix_class(cls): + cls.__name__ = 'CData<%s>' % (cls._get_c_name(),) + cls.__qualname__ = 'CData<%s>' % (cls._get_c_name(),) + cls.__module__ = 'ffi' + + def _get_own_repr(self): + raise NotImplementedError + + def _addr_repr(self, address): + if address == 0: + return 'NULL' + else: + if address < 0: + address += 1 << (8*ctypes.sizeof(ctypes.c_void_p)) + return '0x%x' % address + + def __repr__(self, c_name=None): + own = self._get_own_repr() + return '' % (c_name or self._get_c_name(), own) + + def _convert_to_address(self, BClass): + if BClass is None: + raise TypeError("cannot convert %r to an address" % ( + self._get_c_name(),)) + else: + raise TypeError("cannot convert %r to %r" % ( + self._get_c_name(), BClass._get_c_name())) + + @classmethod + def _get_size(cls): + return ctypes.sizeof(cls._ctype) + + def _get_size_of_instance(self): + return ctypes.sizeof(self._ctype) + + @classmethod + def _cast_from(cls, source): + raise TypeError("cannot cast to %r" % (cls._get_c_name(),)) + + def _cast_to_integer(self): + return self._convert_to_address(None) + + @classmethod + def _alignment(cls): + return ctypes.alignment(cls._ctype) + + def __iter__(self): + raise TypeError("cdata %r does not support iteration" % ( + self._get_c_name()),) + + def _make_cmp(name): + cmpfunc = getattr(operator, name) + def cmp(self, other): + v_is_ptr = not isinstance(self, CTypesGenericPrimitive) + w_is_ptr = (isinstance(other, CTypesData) and + not isinstance(other, CTypesGenericPrimitive)) + if v_is_ptr and w_is_ptr: + return cmpfunc(self._convert_to_address(None), + other._convert_to_address(None)) + elif v_is_ptr or w_is_ptr: + return NotImplemented + else: + if isinstance(self, CTypesGenericPrimitive): + self = self._value + if isinstance(other, CTypesGenericPrimitive): + other = other._value + return cmpfunc(self, other) + cmp.func_name = name + return cmp + + __eq__ = _make_cmp('__eq__') + __ne__ = _make_cmp('__ne__') + __lt__ = _make_cmp('__lt__') + __le__ = _make_cmp('__le__') + __gt__ = _make_cmp('__gt__') + __ge__ = _make_cmp('__ge__') + + def __hash__(self): + return hash(self._convert_to_address(None)) + + def _to_string(self, maxlen): + raise TypeError("string(): %r" % (self,)) + + +class CTypesGenericPrimitive(CTypesData): + __slots__ = [] + + def __hash__(self): + return hash(self._value) + + def _get_own_repr(self): + return repr(self._from_ctypes(self._value)) + + +class CTypesGenericArray(CTypesData): + __slots__ = [] + + @classmethod + def _newp(cls, init): + return cls(init) + + def __iter__(self): + for i in xrange(len(self)): + yield self[i] + + def _get_own_repr(self): + return self._addr_repr(ctypes.addressof(self._blob)) + + +class CTypesGenericPtr(CTypesData): + __slots__ = ['_address', '_as_ctype_ptr'] + _automatic_casts = False + kind = "pointer" + + @classmethod + def _newp(cls, init): + return cls(init) + + @classmethod + def _cast_from(cls, source): + if source is None: + address = 0 + elif isinstance(source, CTypesData): + address = source._cast_to_integer() + elif isinstance(source, (int, long)): + address = source + else: + raise TypeError("bad type for cast to %r: %r" % + (cls, type(source).__name__)) + return cls._new_pointer_at(address) + + @classmethod + def _new_pointer_at(cls, address): + self = cls.__new__(cls) + self._address = address + self._as_ctype_ptr = ctypes.cast(address, cls._ctype) + return self + + def _get_own_repr(self): + try: + return self._addr_repr(self._address) + except AttributeError: + return '???' + + def _cast_to_integer(self): + return self._address + + def __nonzero__(self): + return bool(self._address) + __bool__ = __nonzero__ + + @classmethod + def _to_ctypes(cls, value): + if not isinstance(value, CTypesData): + raise TypeError("unexpected %s object" % type(value).__name__) + address = value._convert_to_address(cls) + return ctypes.cast(address, cls._ctype) + + @classmethod + def _from_ctypes(cls, ctypes_ptr): + address = ctypes.cast(ctypes_ptr, ctypes.c_void_p).value or 0 + return cls._new_pointer_at(address) + + @classmethod + def _initialize(cls, ctypes_ptr, value): + if value: + ctypes_ptr.contents = cls._to_ctypes(value).contents + + def _convert_to_address(self, BClass): + if (BClass in (self.__class__, None) or BClass._automatic_casts + or self._automatic_casts): + return self._address + else: + return CTypesData._convert_to_address(self, BClass) + + +class CTypesBaseStructOrUnion(CTypesData): + __slots__ = ['_blob'] + + @classmethod + def _create_ctype_obj(cls, init): + # may be overridden + raise TypeError("cannot instantiate opaque type %s" % (cls,)) + + def _get_own_repr(self): + return self._addr_repr(ctypes.addressof(self._blob)) + + @classmethod + def _offsetof(cls, fieldname): + return getattr(cls._ctype, fieldname).offset + + def _convert_to_address(self, BClass): + if getattr(BClass, '_BItem', None) is self.__class__: + return ctypes.addressof(self._blob) + else: + return CTypesData._convert_to_address(self, BClass) + + @classmethod + def _from_ctypes(cls, ctypes_struct_or_union): + self = cls.__new__(cls) + self._blob = ctypes_struct_or_union + return self + + @classmethod + def _to_ctypes(cls, value): + return value._blob + + def __repr__(self, c_name=None): + return CTypesData.__repr__(self, c_name or self._get_c_name(' &')) + + +class CTypesBackend(object): + + PRIMITIVE_TYPES = { + 'char': ctypes.c_char, + 'short': ctypes.c_short, + 'int': ctypes.c_int, + 'long': ctypes.c_long, + 'long long': ctypes.c_longlong, + 'signed char': ctypes.c_byte, + 'unsigned char': ctypes.c_ubyte, + 'unsigned short': ctypes.c_ushort, + 'unsigned int': ctypes.c_uint, + 'unsigned long': ctypes.c_ulong, + 'unsigned long long': ctypes.c_ulonglong, + 'float': ctypes.c_float, + 'double': ctypes.c_double, + '_Bool': ctypes.c_bool, + } + + for _name in ['unsigned long long', 'unsigned long', + 'unsigned int', 'unsigned short', 'unsigned char']: + _size = ctypes.sizeof(PRIMITIVE_TYPES[_name]) + PRIMITIVE_TYPES['uint%d_t' % (8*_size)] = PRIMITIVE_TYPES[_name] + if _size == ctypes.sizeof(ctypes.c_void_p): + PRIMITIVE_TYPES['uintptr_t'] = PRIMITIVE_TYPES[_name] + if _size == ctypes.sizeof(ctypes.c_size_t): + PRIMITIVE_TYPES['size_t'] = PRIMITIVE_TYPES[_name] + + for _name in ['long long', 'long', 'int', 'short', 'signed char']: + _size = ctypes.sizeof(PRIMITIVE_TYPES[_name]) + PRIMITIVE_TYPES['int%d_t' % (8*_size)] = PRIMITIVE_TYPES[_name] + if _size == ctypes.sizeof(ctypes.c_void_p): + PRIMITIVE_TYPES['intptr_t'] = PRIMITIVE_TYPES[_name] + PRIMITIVE_TYPES['ptrdiff_t'] = PRIMITIVE_TYPES[_name] + if _size == ctypes.sizeof(ctypes.c_size_t): + PRIMITIVE_TYPES['ssize_t'] = PRIMITIVE_TYPES[_name] + + + def __init__(self): + self.RTLD_LAZY = 0 # not supported anyway by ctypes + self.RTLD_NOW = 0 + self.RTLD_GLOBAL = ctypes.RTLD_GLOBAL + self.RTLD_LOCAL = ctypes.RTLD_LOCAL + + def set_ffi(self, ffi): + self.ffi = ffi + + def _get_types(self): + return CTypesData, CTypesType + + def load_library(self, path, flags=0): + cdll = ctypes.CDLL(path, flags) + return CTypesLibrary(self, cdll) + + def new_void_type(self): + class CTypesVoid(CTypesData): + __slots__ = [] + _reftypename = 'void &' + @staticmethod + def _from_ctypes(novalue): + return None + @staticmethod + def _to_ctypes(novalue): + if novalue is not None: + raise TypeError("None expected, got %s object" % + (type(novalue).__name__,)) + return None + CTypesVoid._fix_class() + return CTypesVoid + + def new_primitive_type(self, name): + if name == 'wchar_t': + raise NotImplementedError(name) + ctype = self.PRIMITIVE_TYPES[name] + if name == 'char': + kind = 'char' + elif name in ('float', 'double'): + kind = 'float' + else: + if name in ('signed char', 'unsigned char'): + kind = 'byte' + elif name == '_Bool': + kind = 'bool' + else: + kind = 'int' + is_signed = (ctype(-1).value == -1) + # + def _cast_source_to_int(source): + if isinstance(source, (int, long, float)): + source = int(source) + elif isinstance(source, CTypesData): + source = source._cast_to_integer() + elif isinstance(source, bytes): + source = ord(source) + elif source is None: + source = 0 + else: + raise TypeError("bad type for cast to %r: %r" % + (CTypesPrimitive, type(source).__name__)) + return source + # + kind1 = kind + class CTypesPrimitive(CTypesGenericPrimitive): + __slots__ = ['_value'] + _ctype = ctype + _reftypename = '%s &' % name + kind = kind1 + + def __init__(self, value): + self._value = value + + @staticmethod + def _create_ctype_obj(init): + if init is None: + return ctype() + return ctype(CTypesPrimitive._to_ctypes(init)) + + if kind == 'int' or kind == 'byte': + @classmethod + def _cast_from(cls, source): + source = _cast_source_to_int(source) + source = ctype(source).value # cast within range + return cls(source) + def __int__(self): + return self._value + + if kind == 'bool': + @classmethod + def _cast_from(cls, source): + if not isinstance(source, (int, long, float)): + source = _cast_source_to_int(source) + return cls(bool(source)) + def __int__(self): + return int(self._value) + + if kind == 'char': + @classmethod + def _cast_from(cls, source): + source = _cast_source_to_int(source) + source = bytechr(source & 0xFF) + return cls(source) + def __int__(self): + return ord(self._value) + + if kind == 'float': + @classmethod + def _cast_from(cls, source): + if isinstance(source, float): + pass + elif isinstance(source, CTypesGenericPrimitive): + if hasattr(source, '__float__'): + source = float(source) + else: + source = int(source) + else: + source = _cast_source_to_int(source) + source = ctype(source).value # fix precision + return cls(source) + def __int__(self): + return int(self._value) + def __float__(self): + return self._value + + _cast_to_integer = __int__ + + if kind == 'int' or kind == 'byte' or kind == 'bool': + @staticmethod + def _to_ctypes(x): + if not isinstance(x, (int, long)): + if isinstance(x, CTypesData): + x = int(x) + else: + raise TypeError("integer expected, got %s" % + type(x).__name__) + if ctype(x).value != x: + if not is_signed and x < 0: + raise OverflowError("%s: negative integer" % name) + else: + raise OverflowError("%s: integer out of bounds" + % name) + return x + + if kind == 'char': + @staticmethod + def _to_ctypes(x): + if isinstance(x, bytes) and len(x) == 1: + return x + if isinstance(x, CTypesPrimitive): # > + return x._value + raise TypeError("character expected, got %s" % + type(x).__name__) + def __nonzero__(self): + return ord(self._value) != 0 + else: + def __nonzero__(self): + return self._value != 0 + __bool__ = __nonzero__ + + if kind == 'float': + @staticmethod + def _to_ctypes(x): + if not isinstance(x, (int, long, float, CTypesData)): + raise TypeError("float expected, got %s" % + type(x).__name__) + return ctype(x).value + + @staticmethod + def _from_ctypes(value): + return getattr(value, 'value', value) + + @staticmethod + def _initialize(blob, init): + blob.value = CTypesPrimitive._to_ctypes(init) + + if kind == 'char': + def _to_string(self, maxlen): + return self._value + if kind == 'byte': + def _to_string(self, maxlen): + return chr(self._value & 0xff) + # + CTypesPrimitive._fix_class() + return CTypesPrimitive + + def new_pointer_type(self, BItem): + getbtype = self.ffi._get_cached_btype + if BItem is getbtype(model.PrimitiveType('char')): + kind = 'charp' + elif BItem in (getbtype(model.PrimitiveType('signed char')), + getbtype(model.PrimitiveType('unsigned char'))): + kind = 'bytep' + elif BItem is getbtype(model.void_type): + kind = 'voidp' + else: + kind = 'generic' + # + class CTypesPtr(CTypesGenericPtr): + __slots__ = ['_own'] + if kind == 'charp': + __slots__ += ['__as_strbuf'] + _BItem = BItem + if hasattr(BItem, '_ctype'): + _ctype = ctypes.POINTER(BItem._ctype) + _bitem_size = ctypes.sizeof(BItem._ctype) + else: + _ctype = ctypes.c_void_p + if issubclass(BItem, CTypesGenericArray): + _reftypename = BItem._get_c_name('(* &)') + else: + _reftypename = BItem._get_c_name(' * &') + + def __init__(self, init): + ctypeobj = BItem._create_ctype_obj(init) + if kind == 'charp': + self.__as_strbuf = ctypes.create_string_buffer( + ctypeobj.value + b'\x00') + self._as_ctype_ptr = ctypes.cast( + self.__as_strbuf, self._ctype) + else: + self._as_ctype_ptr = ctypes.pointer(ctypeobj) + self._address = ctypes.cast(self._as_ctype_ptr, + ctypes.c_void_p).value + self._own = True + + def __add__(self, other): + if isinstance(other, (int, long)): + return self._new_pointer_at(self._address + + other * self._bitem_size) + else: + return NotImplemented + + def __sub__(self, other): + if isinstance(other, (int, long)): + return self._new_pointer_at(self._address - + other * self._bitem_size) + elif type(self) is type(other): + return (self._address - other._address) // self._bitem_size + else: + return NotImplemented + + def __getitem__(self, index): + if getattr(self, '_own', False) and index != 0: + raise IndexError + return BItem._from_ctypes(self._as_ctype_ptr[index]) + + def __setitem__(self, index, value): + self._as_ctype_ptr[index] = BItem._to_ctypes(value) + + if kind == 'charp' or kind == 'voidp': + @classmethod + def _arg_to_ctypes(cls, *value): + if value and isinstance(value[0], bytes): + return ctypes.c_char_p(value[0]) + else: + return super(CTypesPtr, cls)._arg_to_ctypes(*value) + + if kind == 'charp' or kind == 'bytep': + def _to_string(self, maxlen): + if maxlen < 0: + maxlen = sys.maxsize + p = ctypes.cast(self._as_ctype_ptr, + ctypes.POINTER(ctypes.c_char)) + n = 0 + while n < maxlen and p[n] != b'\x00': + n += 1 + return b''.join([p[i] for i in range(n)]) + + def _get_own_repr(self): + if getattr(self, '_own', False): + return 'owning %d bytes' % ( + ctypes.sizeof(self._as_ctype_ptr.contents),) + return super(CTypesPtr, self)._get_own_repr() + # + if (BItem is self.ffi._get_cached_btype(model.void_type) or + BItem is self.ffi._get_cached_btype(model.PrimitiveType('char'))): + CTypesPtr._automatic_casts = True + # + CTypesPtr._fix_class() + return CTypesPtr + + def new_array_type(self, CTypesPtr, length): + if length is None: + brackets = ' &[]' + else: + brackets = ' &[%d]' % length + BItem = CTypesPtr._BItem + getbtype = self.ffi._get_cached_btype + if BItem is getbtype(model.PrimitiveType('char')): + kind = 'char' + elif BItem in (getbtype(model.PrimitiveType('signed char')), + getbtype(model.PrimitiveType('unsigned char'))): + kind = 'byte' + else: + kind = 'generic' + # + class CTypesArray(CTypesGenericArray): + __slots__ = ['_blob', '_own'] + if length is not None: + _ctype = BItem._ctype * length + else: + __slots__.append('_ctype') + _reftypename = BItem._get_c_name(brackets) + _declared_length = length + _CTPtr = CTypesPtr + + def __init__(self, init): + if length is None: + if isinstance(init, (int, long)): + len1 = init + init = None + elif kind == 'char' and isinstance(init, bytes): + len1 = len(init) + 1 # extra null + else: + init = tuple(init) + len1 = len(init) + self._ctype = BItem._ctype * len1 + self._blob = self._ctype() + self._own = True + if init is not None: + self._initialize(self._blob, init) + + @staticmethod + def _initialize(blob, init): + if isinstance(init, bytes): + init = [init[i:i+1] for i in range(len(init))] + else: + if isinstance(init, CTypesGenericArray): + if (len(init) != len(blob) or + not isinstance(init, CTypesArray)): + raise TypeError("length/type mismatch: %s" % (init,)) + init = tuple(init) + if len(init) > len(blob): + raise IndexError("too many initializers") + addr = ctypes.cast(blob, ctypes.c_void_p).value + PTR = ctypes.POINTER(BItem._ctype) + itemsize = ctypes.sizeof(BItem._ctype) + for i, value in enumerate(init): + p = ctypes.cast(addr + i * itemsize, PTR) + BItem._initialize(p.contents, value) + + def __len__(self): + return len(self._blob) + + def __getitem__(self, index): + if not (0 <= index < len(self._blob)): + raise IndexError + return BItem._from_ctypes(self._blob[index]) + + def __setitem__(self, index, value): + if not (0 <= index < len(self._blob)): + raise IndexError + self._blob[index] = BItem._to_ctypes(value) + + if kind == 'char' or kind == 'byte': + def _to_string(self, maxlen): + if maxlen < 0: + maxlen = len(self._blob) + p = ctypes.cast(self._blob, + ctypes.POINTER(ctypes.c_char)) + n = 0 + while n < maxlen and p[n] != b'\x00': + n += 1 + return b''.join([p[i] for i in range(n)]) + + def _get_own_repr(self): + if getattr(self, '_own', False): + return 'owning %d bytes' % (ctypes.sizeof(self._blob),) + return super(CTypesArray, self)._get_own_repr() + + def _convert_to_address(self, BClass): + if BClass in (CTypesPtr, None) or BClass._automatic_casts: + return ctypes.addressof(self._blob) + else: + return CTypesData._convert_to_address(self, BClass) + + @staticmethod + def _from_ctypes(ctypes_array): + self = CTypesArray.__new__(CTypesArray) + self._blob = ctypes_array + return self + + @staticmethod + def _arg_to_ctypes(value): + return CTypesPtr._arg_to_ctypes(value) + + def __add__(self, other): + if isinstance(other, (int, long)): + return CTypesPtr._new_pointer_at( + ctypes.addressof(self._blob) + + other * ctypes.sizeof(BItem._ctype)) + else: + return NotImplemented + + @classmethod + def _cast_from(cls, source): + raise NotImplementedError("casting to %r" % ( + cls._get_c_name(),)) + # + CTypesArray._fix_class() + return CTypesArray + + def _new_struct_or_union(self, kind, name, base_ctypes_class): + # + class struct_or_union(base_ctypes_class): + pass + struct_or_union.__name__ = '%s_%s' % (kind, name) + kind1 = kind + # + class CTypesStructOrUnion(CTypesBaseStructOrUnion): + __slots__ = ['_blob'] + _ctype = struct_or_union + _reftypename = '%s &' % (name,) + _kind = kind = kind1 + # + CTypesStructOrUnion._fix_class() + return CTypesStructOrUnion + + def new_struct_type(self, name): + return self._new_struct_or_union('struct', name, ctypes.Structure) + + def new_union_type(self, name): + return self._new_struct_or_union('union', name, ctypes.Union) + + def complete_struct_or_union(self, CTypesStructOrUnion, fields, tp, + totalsize=-1, totalalignment=-1, sflags=0, + pack=0): + if totalsize >= 0 or totalalignment >= 0: + raise NotImplementedError("the ctypes backend of CFFI does not support " + "structures completed by verify(); please " + "compile and install the _cffi_backend module.") + struct_or_union = CTypesStructOrUnion._ctype + fnames = [fname for (fname, BField, bitsize) in fields] + btypes = [BField for (fname, BField, bitsize) in fields] + bitfields = [bitsize for (fname, BField, bitsize) in fields] + # + bfield_types = {} + cfields = [] + for (fname, BField, bitsize) in fields: + if bitsize < 0: + cfields.append((fname, BField._ctype)) + bfield_types[fname] = BField + else: + cfields.append((fname, BField._ctype, bitsize)) + bfield_types[fname] = Ellipsis + if sflags & 8: + struct_or_union._pack_ = 1 + elif pack: + struct_or_union._pack_ = pack + struct_or_union._fields_ = cfields + CTypesStructOrUnion._bfield_types = bfield_types + # + @staticmethod + def _create_ctype_obj(init): + result = struct_or_union() + if init is not None: + initialize(result, init) + return result + CTypesStructOrUnion._create_ctype_obj = _create_ctype_obj + # + def initialize(blob, init): + if is_union: + if len(init) > 1: + raise ValueError("union initializer: %d items given, but " + "only one supported (use a dict if needed)" + % (len(init),)) + if not isinstance(init, dict): + if isinstance(init, (bytes, unicode)): + raise TypeError("union initializer: got a str") + init = tuple(init) + if len(init) > len(fnames): + raise ValueError("too many values for %s initializer" % + CTypesStructOrUnion._get_c_name()) + init = dict(zip(fnames, init)) + addr = ctypes.addressof(blob) + for fname, value in init.items(): + BField, bitsize = name2fieldtype[fname] + assert bitsize < 0, \ + "not implemented: initializer with bit fields" + offset = CTypesStructOrUnion._offsetof(fname) + PTR = ctypes.POINTER(BField._ctype) + p = ctypes.cast(addr + offset, PTR) + BField._initialize(p.contents, value) + is_union = CTypesStructOrUnion._kind == 'union' + name2fieldtype = dict(zip(fnames, zip(btypes, bitfields))) + # + for fname, BField, bitsize in fields: + if fname == '': + raise NotImplementedError("nested anonymous structs/unions") + if hasattr(CTypesStructOrUnion, fname): + raise ValueError("the field name %r conflicts in " + "the ctypes backend" % fname) + if bitsize < 0: + def getter(self, fname=fname, BField=BField, + offset=CTypesStructOrUnion._offsetof(fname), + PTR=ctypes.POINTER(BField._ctype)): + addr = ctypes.addressof(self._blob) + p = ctypes.cast(addr + offset, PTR) + return BField._from_ctypes(p.contents) + def setter(self, value, fname=fname, BField=BField): + setattr(self._blob, fname, BField._to_ctypes(value)) + # + if issubclass(BField, CTypesGenericArray): + setter = None + if BField._declared_length == 0: + def getter(self, fname=fname, BFieldPtr=BField._CTPtr, + offset=CTypesStructOrUnion._offsetof(fname), + PTR=ctypes.POINTER(BField._ctype)): + addr = ctypes.addressof(self._blob) + p = ctypes.cast(addr + offset, PTR) + return BFieldPtr._from_ctypes(p) + # + else: + def getter(self, fname=fname, BField=BField): + return BField._from_ctypes(getattr(self._blob, fname)) + def setter(self, value, fname=fname, BField=BField): + # xxx obscure workaround + value = BField._to_ctypes(value) + oldvalue = getattr(self._blob, fname) + setattr(self._blob, fname, value) + if value != getattr(self._blob, fname): + setattr(self._blob, fname, oldvalue) + raise OverflowError("value too large for bitfield") + setattr(CTypesStructOrUnion, fname, property(getter, setter)) + # + CTypesPtr = self.ffi._get_cached_btype(model.PointerType(tp)) + for fname in fnames: + if hasattr(CTypesPtr, fname): + raise ValueError("the field name %r conflicts in " + "the ctypes backend" % fname) + def getter(self, fname=fname): + return getattr(self[0], fname) + def setter(self, value, fname=fname): + setattr(self[0], fname, value) + setattr(CTypesPtr, fname, property(getter, setter)) + + def new_function_type(self, BArgs, BResult, has_varargs): + nameargs = [BArg._get_c_name() for BArg in BArgs] + if has_varargs: + nameargs.append('...') + nameargs = ', '.join(nameargs) + # + class CTypesFunctionPtr(CTypesGenericPtr): + __slots__ = ['_own_callback', '_name'] + _ctype = ctypes.CFUNCTYPE(getattr(BResult, '_ctype', None), + *[BArg._ctype for BArg in BArgs], + use_errno=True) + _reftypename = BResult._get_c_name('(* &)(%s)' % (nameargs,)) + + def __init__(self, init, error=None): + # create a callback to the Python callable init() + import traceback + assert not has_varargs, "varargs not supported for callbacks" + if getattr(BResult, '_ctype', None) is not None: + error = BResult._from_ctypes( + BResult._create_ctype_obj(error)) + else: + error = None + def callback(*args): + args2 = [] + for arg, BArg in zip(args, BArgs): + args2.append(BArg._from_ctypes(arg)) + try: + res2 = init(*args2) + res2 = BResult._to_ctypes(res2) + except: + traceback.print_exc() + res2 = error + if issubclass(BResult, CTypesGenericPtr): + if res2: + res2 = ctypes.cast(res2, ctypes.c_void_p).value + # .value: http://bugs.python.org/issue1574593 + else: + res2 = None + #print repr(res2) + return res2 + if issubclass(BResult, CTypesGenericPtr): + # The only pointers callbacks can return are void*s: + # http://bugs.python.org/issue5710 + callback_ctype = ctypes.CFUNCTYPE( + ctypes.c_void_p, + *[BArg._ctype for BArg in BArgs], + use_errno=True) + else: + callback_ctype = CTypesFunctionPtr._ctype + self._as_ctype_ptr = callback_ctype(callback) + self._address = ctypes.cast(self._as_ctype_ptr, + ctypes.c_void_p).value + self._own_callback = init + + @staticmethod + def _initialize(ctypes_ptr, value): + if value: + raise NotImplementedError("ctypes backend: not supported: " + "initializers for function pointers") + + def __repr__(self): + c_name = getattr(self, '_name', None) + if c_name: + i = self._reftypename.index('(* &)') + if self._reftypename[i-1] not in ' )*': + c_name = ' ' + c_name + c_name = self._reftypename.replace('(* &)', c_name) + return CTypesData.__repr__(self, c_name) + + def _get_own_repr(self): + if getattr(self, '_own_callback', None) is not None: + return 'calling %r' % (self._own_callback,) + return super(CTypesFunctionPtr, self)._get_own_repr() + + def __call__(self, *args): + if has_varargs: + assert len(args) >= len(BArgs) + extraargs = args[len(BArgs):] + args = args[:len(BArgs)] + else: + assert len(args) == len(BArgs) + ctypes_args = [] + for arg, BArg in zip(args, BArgs): + ctypes_args.append(BArg._arg_to_ctypes(arg)) + if has_varargs: + for i, arg in enumerate(extraargs): + if arg is None: + ctypes_args.append(ctypes.c_void_p(0)) # NULL + continue + if not isinstance(arg, CTypesData): + raise TypeError( + "argument %d passed in the variadic part " + "needs to be a cdata object (got %s)" % + (1 + len(BArgs) + i, type(arg).__name__)) + ctypes_args.append(arg._arg_to_ctypes(arg)) + result = self._as_ctype_ptr(*ctypes_args) + return BResult._from_ctypes(result) + # + CTypesFunctionPtr._fix_class() + return CTypesFunctionPtr + + def new_enum_type(self, name, enumerators, enumvalues, CTypesInt): + assert isinstance(name, str) + reverse_mapping = dict(zip(reversed(enumvalues), + reversed(enumerators))) + # + class CTypesEnum(CTypesInt): + __slots__ = [] + _reftypename = '%s &' % name + + def _get_own_repr(self): + value = self._value + try: + return '%d: %s' % (value, reverse_mapping[value]) + except KeyError: + return str(value) + + def _to_string(self, maxlen): + value = self._value + try: + return reverse_mapping[value] + except KeyError: + return str(value) + # + CTypesEnum._fix_class() + return CTypesEnum + + def get_errno(self): + return ctypes.get_errno() + + def set_errno(self, value): + ctypes.set_errno(value) + + def string(self, b, maxlen=-1): + return b._to_string(maxlen) + + def buffer(self, bptr, size=-1): + raise NotImplementedError("buffer() with ctypes backend") + + def sizeof(self, cdata_or_BType): + if isinstance(cdata_or_BType, CTypesData): + return cdata_or_BType._get_size_of_instance() + else: + assert issubclass(cdata_or_BType, CTypesData) + return cdata_or_BType._get_size() + + def alignof(self, BType): + assert issubclass(BType, CTypesData) + return BType._alignment() + + def newp(self, BType, source): + if not issubclass(BType, CTypesData): + raise TypeError + return BType._newp(source) + + def cast(self, BType, source): + return BType._cast_from(source) + + def callback(self, BType, source, error, onerror): + assert onerror is None # XXX not implemented + return BType(source, error) + + _weakref_cache_ref = None + + def gcp(self, cdata, destructor, size=0): + if self._weakref_cache_ref is None: + import weakref + class MyRef(weakref.ref): + def __eq__(self, other): + myref = self() + return self is other or ( + myref is not None and myref is other()) + def __ne__(self, other): + return not (self == other) + def __hash__(self): + try: + return self._hash + except AttributeError: + self._hash = hash(self()) + return self._hash + self._weakref_cache_ref = {}, MyRef + weak_cache, MyRef = self._weakref_cache_ref + + if destructor is None: + try: + del weak_cache[MyRef(cdata)] + except KeyError: + raise TypeError("Can remove destructor only on a object " + "previously returned by ffi.gc()") + return None + + def remove(k): + cdata, destructor = weak_cache.pop(k, (None, None)) + if destructor is not None: + destructor(cdata) + + new_cdata = self.cast(self.typeof(cdata), cdata) + assert new_cdata is not cdata + weak_cache[MyRef(new_cdata, remove)] = (cdata, destructor) + return new_cdata + + typeof = type + + def getcname(self, BType, replace_with): + return BType._get_c_name(replace_with) + + def typeoffsetof(self, BType, fieldname, num=0): + if isinstance(fieldname, str): + if num == 0 and issubclass(BType, CTypesGenericPtr): + BType = BType._BItem + if not issubclass(BType, CTypesBaseStructOrUnion): + raise TypeError("expected a struct or union ctype") + BField = BType._bfield_types[fieldname] + if BField is Ellipsis: + raise TypeError("not supported for bitfields") + return (BField, BType._offsetof(fieldname)) + elif isinstance(fieldname, (int, long)): + if issubclass(BType, CTypesGenericArray): + BType = BType._CTPtr + if not issubclass(BType, CTypesGenericPtr): + raise TypeError("expected an array or ptr ctype") + BItem = BType._BItem + offset = BItem._get_size() * fieldname + if offset > sys.maxsize: + raise OverflowError + return (BItem, offset) + else: + raise TypeError(type(fieldname)) + + def rawaddressof(self, BTypePtr, cdata, offset=None): + if isinstance(cdata, CTypesBaseStructOrUnion): + ptr = ctypes.pointer(type(cdata)._to_ctypes(cdata)) + elif isinstance(cdata, CTypesGenericPtr): + if offset is None or not issubclass(type(cdata)._BItem, + CTypesBaseStructOrUnion): + raise TypeError("unexpected cdata type") + ptr = type(cdata)._to_ctypes(cdata) + elif isinstance(cdata, CTypesGenericArray): + ptr = type(cdata)._to_ctypes(cdata) + else: + raise TypeError("expected a ") + if offset: + ptr = ctypes.cast( + ctypes.c_void_p( + ctypes.cast(ptr, ctypes.c_void_p).value + offset), + type(ptr)) + return BTypePtr._from_ctypes(ptr) + + +class CTypesLibrary(object): + + def __init__(self, backend, cdll): + self.backend = backend + self.cdll = cdll + + def load_function(self, BType, name): + c_func = getattr(self.cdll, name) + funcobj = BType._from_ctypes(c_func) + funcobj._name = name + return funcobj + + def read_variable(self, BType, name): + try: + ctypes_obj = BType._ctype.in_dll(self.cdll, name) + except AttributeError as e: + raise NotImplementedError(e) + return BType._from_ctypes(ctypes_obj) + + def write_variable(self, BType, name, value): + new_ctypes_obj = BType._to_ctypes(value) + ctypes_obj = BType._ctype.in_dll(self.cdll, name) + ctypes.memmove(ctypes.addressof(ctypes_obj), + ctypes.addressof(new_ctypes_obj), + ctypes.sizeof(BType._ctype)) diff --git a/venv/lib/python3.11/site-packages/cffi/cffi_opcode.py b/venv/lib/python3.11/site-packages/cffi/cffi_opcode.py new file mode 100644 index 0000000..6421df6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/cffi_opcode.py @@ -0,0 +1,187 @@ +from .error import VerificationError + +class CffiOp(object): + def __init__(self, op, arg): + self.op = op + self.arg = arg + + def as_c_expr(self): + if self.op is None: + assert isinstance(self.arg, str) + return '(_cffi_opcode_t)(%s)' % (self.arg,) + classname = CLASS_NAME[self.op] + return '_CFFI_OP(_CFFI_OP_%s, %s)' % (classname, self.arg) + + def as_python_bytes(self): + if self.op is None and self.arg.isdigit(): + value = int(self.arg) # non-negative: '-' not in self.arg + if value >= 2**31: + raise OverflowError("cannot emit %r: limited to 2**31-1" + % (self.arg,)) + return format_four_bytes(value) + if isinstance(self.arg, str): + raise VerificationError("cannot emit to Python: %r" % (self.arg,)) + return format_four_bytes((self.arg << 8) | self.op) + + def __str__(self): + classname = CLASS_NAME.get(self.op, self.op) + return '(%s %s)' % (classname, self.arg) + +def format_four_bytes(num): + return '\\x%02X\\x%02X\\x%02X\\x%02X' % ( + (num >> 24) & 0xFF, + (num >> 16) & 0xFF, + (num >> 8) & 0xFF, + (num ) & 0xFF) + +OP_PRIMITIVE = 1 +OP_POINTER = 3 +OP_ARRAY = 5 +OP_OPEN_ARRAY = 7 +OP_STRUCT_UNION = 9 +OP_ENUM = 11 +OP_FUNCTION = 13 +OP_FUNCTION_END = 15 +OP_NOOP = 17 +OP_BITFIELD = 19 +OP_TYPENAME = 21 +OP_CPYTHON_BLTN_V = 23 # varargs +OP_CPYTHON_BLTN_N = 25 # noargs +OP_CPYTHON_BLTN_O = 27 # O (i.e. a single arg) +OP_CONSTANT = 29 +OP_CONSTANT_INT = 31 +OP_GLOBAL_VAR = 33 +OP_DLOPEN_FUNC = 35 +OP_DLOPEN_CONST = 37 +OP_GLOBAL_VAR_F = 39 +OP_EXTERN_PYTHON = 41 + +PRIM_VOID = 0 +PRIM_BOOL = 1 +PRIM_CHAR = 2 +PRIM_SCHAR = 3 +PRIM_UCHAR = 4 +PRIM_SHORT = 5 +PRIM_USHORT = 6 +PRIM_INT = 7 +PRIM_UINT = 8 +PRIM_LONG = 9 +PRIM_ULONG = 10 +PRIM_LONGLONG = 11 +PRIM_ULONGLONG = 12 +PRIM_FLOAT = 13 +PRIM_DOUBLE = 14 +PRIM_LONGDOUBLE = 15 + +PRIM_WCHAR = 16 +PRIM_INT8 = 17 +PRIM_UINT8 = 18 +PRIM_INT16 = 19 +PRIM_UINT16 = 20 +PRIM_INT32 = 21 +PRIM_UINT32 = 22 +PRIM_INT64 = 23 +PRIM_UINT64 = 24 +PRIM_INTPTR = 25 +PRIM_UINTPTR = 26 +PRIM_PTRDIFF = 27 +PRIM_SIZE = 28 +PRIM_SSIZE = 29 +PRIM_INT_LEAST8 = 30 +PRIM_UINT_LEAST8 = 31 +PRIM_INT_LEAST16 = 32 +PRIM_UINT_LEAST16 = 33 +PRIM_INT_LEAST32 = 34 +PRIM_UINT_LEAST32 = 35 +PRIM_INT_LEAST64 = 36 +PRIM_UINT_LEAST64 = 37 +PRIM_INT_FAST8 = 38 +PRIM_UINT_FAST8 = 39 +PRIM_INT_FAST16 = 40 +PRIM_UINT_FAST16 = 41 +PRIM_INT_FAST32 = 42 +PRIM_UINT_FAST32 = 43 +PRIM_INT_FAST64 = 44 +PRIM_UINT_FAST64 = 45 +PRIM_INTMAX = 46 +PRIM_UINTMAX = 47 +PRIM_FLOATCOMPLEX = 48 +PRIM_DOUBLECOMPLEX = 49 +PRIM_CHAR16 = 50 +PRIM_CHAR32 = 51 + +_NUM_PRIM = 52 +_UNKNOWN_PRIM = -1 +_UNKNOWN_FLOAT_PRIM = -2 +_UNKNOWN_LONG_DOUBLE = -3 + +_IO_FILE_STRUCT = -1 + +PRIMITIVE_TO_INDEX = { + 'char': PRIM_CHAR, + 'short': PRIM_SHORT, + 'int': PRIM_INT, + 'long': PRIM_LONG, + 'long long': PRIM_LONGLONG, + 'signed char': PRIM_SCHAR, + 'unsigned char': PRIM_UCHAR, + 'unsigned short': PRIM_USHORT, + 'unsigned int': PRIM_UINT, + 'unsigned long': PRIM_ULONG, + 'unsigned long long': PRIM_ULONGLONG, + 'float': PRIM_FLOAT, + 'double': PRIM_DOUBLE, + 'long double': PRIM_LONGDOUBLE, + '_cffi_float_complex_t': PRIM_FLOATCOMPLEX, + '_cffi_double_complex_t': PRIM_DOUBLECOMPLEX, + '_Bool': PRIM_BOOL, + 'wchar_t': PRIM_WCHAR, + 'char16_t': PRIM_CHAR16, + 'char32_t': PRIM_CHAR32, + 'int8_t': PRIM_INT8, + 'uint8_t': PRIM_UINT8, + 'int16_t': PRIM_INT16, + 'uint16_t': PRIM_UINT16, + 'int32_t': PRIM_INT32, + 'uint32_t': PRIM_UINT32, + 'int64_t': PRIM_INT64, + 'uint64_t': PRIM_UINT64, + 'intptr_t': PRIM_INTPTR, + 'uintptr_t': PRIM_UINTPTR, + 'ptrdiff_t': PRIM_PTRDIFF, + 'size_t': PRIM_SIZE, + 'ssize_t': PRIM_SSIZE, + 'int_least8_t': PRIM_INT_LEAST8, + 'uint_least8_t': PRIM_UINT_LEAST8, + 'int_least16_t': PRIM_INT_LEAST16, + 'uint_least16_t': PRIM_UINT_LEAST16, + 'int_least32_t': PRIM_INT_LEAST32, + 'uint_least32_t': PRIM_UINT_LEAST32, + 'int_least64_t': PRIM_INT_LEAST64, + 'uint_least64_t': PRIM_UINT_LEAST64, + 'int_fast8_t': PRIM_INT_FAST8, + 'uint_fast8_t': PRIM_UINT_FAST8, + 'int_fast16_t': PRIM_INT_FAST16, + 'uint_fast16_t': PRIM_UINT_FAST16, + 'int_fast32_t': PRIM_INT_FAST32, + 'uint_fast32_t': PRIM_UINT_FAST32, + 'int_fast64_t': PRIM_INT_FAST64, + 'uint_fast64_t': PRIM_UINT_FAST64, + 'intmax_t': PRIM_INTMAX, + 'uintmax_t': PRIM_UINTMAX, + } + +F_UNION = 0x01 +F_CHECK_FIELDS = 0x02 +F_PACKED = 0x04 +F_EXTERNAL = 0x08 +F_OPAQUE = 0x10 + +G_FLAGS = dict([('_CFFI_' + _key, globals()[_key]) + for _key in ['F_UNION', 'F_CHECK_FIELDS', 'F_PACKED', + 'F_EXTERNAL', 'F_OPAQUE']]) + +CLASS_NAME = {} +for _name, _value in list(globals().items()): + if _name.startswith('OP_') and isinstance(_value, int): + CLASS_NAME[_value] = _name[3:] diff --git a/venv/lib/python3.11/site-packages/cffi/commontypes.py b/venv/lib/python3.11/site-packages/cffi/commontypes.py new file mode 100644 index 0000000..d4dae35 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/commontypes.py @@ -0,0 +1,82 @@ +import sys +from . import model +from .error import FFIError + + +COMMON_TYPES = {} + +try: + # fetch "bool" and all simple Windows types + from _cffi_backend import _get_common_types + _get_common_types(COMMON_TYPES) +except ImportError: + pass + +COMMON_TYPES['FILE'] = model.unknown_type('FILE', '_IO_FILE') +COMMON_TYPES['bool'] = '_Bool' # in case we got ImportError above +COMMON_TYPES['float _Complex'] = '_cffi_float_complex_t' +COMMON_TYPES['double _Complex'] = '_cffi_double_complex_t' + +for _type in model.PrimitiveType.ALL_PRIMITIVE_TYPES: + if _type.endswith('_t'): + COMMON_TYPES[_type] = _type +del _type + +_CACHE = {} + +def resolve_common_type(parser, commontype): + try: + return _CACHE[commontype] + except KeyError: + cdecl = COMMON_TYPES.get(commontype, commontype) + if not isinstance(cdecl, str): + result, quals = cdecl, 0 # cdecl is already a BaseType + elif cdecl in model.PrimitiveType.ALL_PRIMITIVE_TYPES: + result, quals = model.PrimitiveType(cdecl), 0 + elif cdecl == 'set-unicode-needed': + raise FFIError("The Windows type %r is only available after " + "you call ffi.set_unicode()" % (commontype,)) + else: + if commontype == cdecl: + raise FFIError( + "Unsupported type: %r. Please look at " + "http://cffi.readthedocs.io/en/latest/cdef.html#ffi-cdef-limitations " + "and file an issue if you think this type should really " + "be supported." % (commontype,)) + result, quals = parser.parse_type_and_quals(cdecl) # recursive + + assert isinstance(result, model.BaseTypeByIdentity) + _CACHE[commontype] = result, quals + return result, quals + + +# ____________________________________________________________ +# extra types for Windows (most of them are in commontypes.c) + + +def win_common_types(): + return { + "UNICODE_STRING": model.StructType( + "_UNICODE_STRING", + ["Length", + "MaximumLength", + "Buffer"], + [model.PrimitiveType("unsigned short"), + model.PrimitiveType("unsigned short"), + model.PointerType(model.PrimitiveType("wchar_t"))], + [-1, -1, -1]), + "PUNICODE_STRING": "UNICODE_STRING *", + "PCUNICODE_STRING": "const UNICODE_STRING *", + + "TBYTE": "set-unicode-needed", + "TCHAR": "set-unicode-needed", + "LPCTSTR": "set-unicode-needed", + "PCTSTR": "set-unicode-needed", + "LPTSTR": "set-unicode-needed", + "PTSTR": "set-unicode-needed", + "PTBYTE": "set-unicode-needed", + "PTCHAR": "set-unicode-needed", + } + +if sys.platform == 'win32': + COMMON_TYPES.update(win_common_types()) diff --git a/venv/lib/python3.11/site-packages/cffi/cparser.py b/venv/lib/python3.11/site-packages/cffi/cparser.py new file mode 100644 index 0000000..eee83ca --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/cparser.py @@ -0,0 +1,1015 @@ +from . import model +from .commontypes import COMMON_TYPES, resolve_common_type +from .error import FFIError, CDefError +try: + from . import _pycparser as pycparser +except ImportError: + import pycparser +import weakref, re, sys + +try: + if sys.version_info < (3,): + import thread as _thread + else: + import _thread + lock = _thread.allocate_lock() +except ImportError: + lock = None + +def _workaround_for_static_import_finders(): + # Issue #392: packaging tools like cx_Freeze can not find these + # because pycparser uses exec dynamic import. This is an obscure + # workaround. This function is never called. + import pycparser.yacctab + import pycparser.lextab + +CDEF_SOURCE_STRING = "" +_r_comment = re.compile(r"/\*.*?\*/|//([^\n\\]|\\.)*?$", + re.DOTALL | re.MULTILINE) +_r_define = re.compile(r"^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)" + r"\b((?:[^\n\\]|\\.)*?)$", + re.DOTALL | re.MULTILINE) +_r_line_directive = re.compile(r"^[ \t]*#[ \t]*(?:line|\d+)\b.*$", re.MULTILINE) +_r_partial_enum = re.compile(r"=\s*\.\.\.\s*[,}]|\.\.\.\s*\}") +_r_enum_dotdotdot = re.compile(r"__dotdotdot\d+__$") +_r_partial_array = re.compile(r"\[\s*\.\.\.\s*\]") +_r_words = re.compile(r"\w+|\S") +_parser_cache = None +_r_int_literal = re.compile(r"-?0?x?[0-9a-f]+[lu]*$", re.IGNORECASE) +_r_stdcall1 = re.compile(r"\b(__stdcall|WINAPI)\b") +_r_stdcall2 = re.compile(r"[(]\s*(__stdcall|WINAPI)\b") +_r_cdecl = re.compile(r"\b__cdecl\b") +_r_extern_python = re.compile(r'\bextern\s*"' + r'(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.') +_r_star_const_space = re.compile( # matches "* const " + r"[*]\s*((const|volatile|restrict)\b\s*)+") +_r_int_dotdotdot = re.compile(r"(\b(int|long|short|signed|unsigned|char)\s*)+" + r"\.\.\.") +_r_float_dotdotdot = re.compile(r"\b(double|float)\s*\.\.\.") + +def _get_parser(): + global _parser_cache + if _parser_cache is None: + _parser_cache = pycparser.CParser() + return _parser_cache + +def _workaround_for_old_pycparser(csource): + # Workaround for a pycparser issue (fixed between pycparser 2.10 and + # 2.14): "char*const***" gives us a wrong syntax tree, the same as + # for "char***(*const)". This means we can't tell the difference + # afterwards. But "char(*const(***))" gives us the right syntax + # tree. The issue only occurs if there are several stars in + # sequence with no parenthesis inbetween, just possibly qualifiers. + # Attempt to fix it by adding some parentheses in the source: each + # time we see "* const" or "* const *", we add an opening + # parenthesis before each star---the hard part is figuring out where + # to close them. + parts = [] + while True: + match = _r_star_const_space.search(csource) + if not match: + break + #print repr(''.join(parts)+csource), '=>', + parts.append(csource[:match.start()]) + parts.append('('); closing = ')' + parts.append(match.group()) # e.g. "* const " + endpos = match.end() + if csource.startswith('*', endpos): + parts.append('('); closing += ')' + level = 0 + i = endpos + while i < len(csource): + c = csource[i] + if c == '(': + level += 1 + elif c == ')': + if level == 0: + break + level -= 1 + elif c in ',;=': + if level == 0: + break + i += 1 + csource = csource[endpos:i] + closing + csource[i:] + #print repr(''.join(parts)+csource) + parts.append(csource) + return ''.join(parts) + +def _preprocess_extern_python(csource): + # input: `extern "Python" int foo(int);` or + # `extern "Python" { int foo(int); }` + # output: + # void __cffi_extern_python_start; + # int foo(int); + # void __cffi_extern_python_stop; + # + # input: `extern "Python+C" int foo(int);` + # output: + # void __cffi_extern_python_plus_c_start; + # int foo(int); + # void __cffi_extern_python_stop; + parts = [] + while True: + match = _r_extern_python.search(csource) + if not match: + break + endpos = match.end() - 1 + #print + #print ''.join(parts)+csource + #print '=>' + parts.append(csource[:match.start()]) + if 'C' in match.group(1): + parts.append('void __cffi_extern_python_plus_c_start; ') + else: + parts.append('void __cffi_extern_python_start; ') + if csource[endpos] == '{': + # grouping variant + closing = csource.find('}', endpos) + if closing < 0: + raise CDefError("'extern \"Python\" {': no '}' found") + if csource.find('{', endpos + 1, closing) >= 0: + raise NotImplementedError("cannot use { } inside a block " + "'extern \"Python\" { ... }'") + parts.append(csource[endpos+1:closing]) + csource = csource[closing+1:] + else: + # non-grouping variant + semicolon = csource.find(';', endpos) + if semicolon < 0: + raise CDefError("'extern \"Python\": no ';' found") + parts.append(csource[endpos:semicolon+1]) + csource = csource[semicolon+1:] + parts.append(' void __cffi_extern_python_stop;') + #print ''.join(parts)+csource + #print + parts.append(csource) + return ''.join(parts) + +def _warn_for_string_literal(csource): + if '"' not in csource: + return + for line in csource.splitlines(): + if '"' in line and not line.lstrip().startswith('#'): + import warnings + warnings.warn("String literal found in cdef() or type source. " + "String literals are ignored here, but you should " + "remove them anyway because some character sequences " + "confuse pre-parsing.") + break + +def _warn_for_non_extern_non_static_global_variable(decl): + if not decl.storage: + import warnings + warnings.warn("Global variable '%s' in cdef(): for consistency " + "with C it should have a storage class specifier " + "(usually 'extern')" % (decl.name,)) + +def _remove_line_directives(csource): + # _r_line_directive matches whole lines, without the final \n, if they + # start with '#line' with some spacing allowed, or '#NUMBER'. This + # function stores them away and replaces them with exactly the string + # '#line@N', where N is the index in the list 'line_directives'. + line_directives = [] + def replace(m): + i = len(line_directives) + line_directives.append(m.group()) + return '#line@%d' % i + csource = _r_line_directive.sub(replace, csource) + return csource, line_directives + +def _put_back_line_directives(csource, line_directives): + def replace(m): + s = m.group() + if not s.startswith('#line@'): + raise AssertionError("unexpected #line directive " + "(should have been processed and removed") + return line_directives[int(s[6:])] + return _r_line_directive.sub(replace, csource) + +def _preprocess(csource): + # First, remove the lines of the form '#line N "filename"' because + # the "filename" part could confuse the rest + csource, line_directives = _remove_line_directives(csource) + # Remove comments. NOTE: this only work because the cdef() section + # should not contain any string literals (except in line directives)! + def replace_keeping_newlines(m): + return ' ' + m.group().count('\n') * '\n' + csource = _r_comment.sub(replace_keeping_newlines, csource) + # Remove the "#define FOO x" lines + macros = {} + for match in _r_define.finditer(csource): + macroname, macrovalue = match.groups() + macrovalue = macrovalue.replace('\\\n', '').strip() + macros[macroname] = macrovalue + csource = _r_define.sub('', csource) + # + if pycparser.__version__ < '2.14': + csource = _workaround_for_old_pycparser(csource) + # + # BIG HACK: replace WINAPI or __stdcall with "volatile const". + # It doesn't make sense for the return type of a function to be + # "volatile volatile const", so we abuse it to detect __stdcall... + # Hack number 2 is that "int(volatile *fptr)();" is not valid C + # syntax, so we place the "volatile" before the opening parenthesis. + csource = _r_stdcall2.sub(' volatile volatile const(', csource) + csource = _r_stdcall1.sub(' volatile volatile const ', csource) + csource = _r_cdecl.sub(' ', csource) + # + # Replace `extern "Python"` with start/end markers + csource = _preprocess_extern_python(csource) + # + # Now there should not be any string literal left; warn if we get one + _warn_for_string_literal(csource) + # + # Replace "[...]" with "[__dotdotdotarray__]" + csource = _r_partial_array.sub('[__dotdotdotarray__]', csource) + # + # Replace "...}" with "__dotdotdotNUM__}". This construction should + # occur only at the end of enums; at the end of structs we have "...;}" + # and at the end of vararg functions "...);". Also replace "=...[,}]" + # with ",__dotdotdotNUM__[,}]": this occurs in the enums too, when + # giving an unknown value. + matches = list(_r_partial_enum.finditer(csource)) + for number, match in enumerate(reversed(matches)): + p = match.start() + if csource[p] == '=': + p2 = csource.find('...', p, match.end()) + assert p2 > p + csource = '%s,__dotdotdot%d__ %s' % (csource[:p], number, + csource[p2+3:]) + else: + assert csource[p:p+3] == '...' + csource = '%s __dotdotdot%d__ %s' % (csource[:p], number, + csource[p+3:]) + # Replace "int ..." or "unsigned long int..." with "__dotdotdotint__" + csource = _r_int_dotdotdot.sub(' __dotdotdotint__ ', csource) + # Replace "float ..." or "double..." with "__dotdotdotfloat__" + csource = _r_float_dotdotdot.sub(' __dotdotdotfloat__ ', csource) + # Replace all remaining "..." with the same name, "__dotdotdot__", + # which is declared with a typedef for the purpose of C parsing. + csource = csource.replace('...', ' __dotdotdot__ ') + # Finally, put back the line directives + csource = _put_back_line_directives(csource, line_directives) + return csource, macros + +def _common_type_names(csource): + # Look in the source for what looks like usages of types from the + # list of common types. A "usage" is approximated here as the + # appearance of the word, minus a "definition" of the type, which + # is the last word in a "typedef" statement. Approximative only + # but should be fine for all the common types. + look_for_words = set(COMMON_TYPES) + look_for_words.add(';') + look_for_words.add(',') + look_for_words.add('(') + look_for_words.add(')') + look_for_words.add('typedef') + words_used = set() + is_typedef = False + paren = 0 + previous_word = '' + for word in _r_words.findall(csource): + if word in look_for_words: + if word == ';': + if is_typedef: + words_used.discard(previous_word) + look_for_words.discard(previous_word) + is_typedef = False + elif word == 'typedef': + is_typedef = True + paren = 0 + elif word == '(': + paren += 1 + elif word == ')': + paren -= 1 + elif word == ',': + if is_typedef and paren == 0: + words_used.discard(previous_word) + look_for_words.discard(previous_word) + else: # word in COMMON_TYPES + words_used.add(word) + previous_word = word + return words_used + + +class Parser(object): + + def __init__(self): + self._declarations = {} + self._included_declarations = set() + self._anonymous_counter = 0 + self._structnode2type = weakref.WeakKeyDictionary() + self._options = {} + self._int_constants = {} + self._recomplete = [] + self._uses_new_feature = None + + def _parse(self, csource): + csource, macros = _preprocess(csource) + # XXX: for more efficiency we would need to poke into the + # internals of CParser... the following registers the + # typedefs, because their presence or absence influences the + # parsing itself (but what they are typedef'ed to plays no role) + ctn = _common_type_names(csource) + typenames = [] + for name in sorted(self._declarations): + if name.startswith('typedef '): + name = name[8:] + typenames.append(name) + ctn.discard(name) + typenames += sorted(ctn) + # + csourcelines = [] + csourcelines.append('# 1 ""') + for typename in typenames: + csourcelines.append('typedef int %s;' % typename) + csourcelines.append('typedef int __dotdotdotint__, __dotdotdotfloat__,' + ' __dotdotdot__;') + # this forces pycparser to consider the following in the file + # called from line 1 + csourcelines.append('# 1 "%s"' % (CDEF_SOURCE_STRING,)) + csourcelines.append(csource) + csourcelines.append('') # see test_missing_newline_bug + fullcsource = '\n'.join(csourcelines) + if lock is not None: + lock.acquire() # pycparser is not thread-safe... + try: + ast = _get_parser().parse(fullcsource) + except pycparser.c_parser.ParseError as e: + self.convert_pycparser_error(e, csource) + finally: + if lock is not None: + lock.release() + # csource will be used to find buggy source text + return ast, macros, csource + + def _convert_pycparser_error(self, e, csource): + # xxx look for ":NUM:" at the start of str(e) + # and interpret that as a line number. This will not work if + # the user gives explicit ``# NUM "FILE"`` directives. + line = None + msg = str(e) + match = re.match(r"%s:(\d+):" % (CDEF_SOURCE_STRING,), msg) + if match: + linenum = int(match.group(1), 10) + csourcelines = csource.splitlines() + if 1 <= linenum <= len(csourcelines): + line = csourcelines[linenum-1] + return line + + def convert_pycparser_error(self, e, csource): + line = self._convert_pycparser_error(e, csource) + + msg = str(e) + if line: + msg = 'cannot parse "%s"\n%s' % (line.strip(), msg) + else: + msg = 'parse error\n%s' % (msg,) + raise CDefError(msg) + + def parse(self, csource, override=False, packed=False, pack=None, + dllexport=False): + if packed: + if packed != True: + raise ValueError("'packed' should be False or True; use " + "'pack' to give another value") + if pack: + raise ValueError("cannot give both 'pack' and 'packed'") + pack = 1 + elif pack: + if pack & (pack - 1): + raise ValueError("'pack' must be a power of two, not %r" % + (pack,)) + else: + pack = 0 + prev_options = self._options + try: + self._options = {'override': override, + 'packed': pack, + 'dllexport': dllexport} + self._internal_parse(csource) + finally: + self._options = prev_options + + def _internal_parse(self, csource): + ast, macros, csource = self._parse(csource) + # add the macros + self._process_macros(macros) + # find the first "__dotdotdot__" and use that as a separator + # between the repeated typedefs and the real csource + iterator = iter(ast.ext) + for decl in iterator: + if decl.name == '__dotdotdot__': + break + else: + assert 0 + current_decl = None + # + try: + self._inside_extern_python = '__cffi_extern_python_stop' + for decl in iterator: + current_decl = decl + if isinstance(decl, pycparser.c_ast.Decl): + self._parse_decl(decl) + elif isinstance(decl, pycparser.c_ast.Typedef): + if not decl.name: + raise CDefError("typedef does not declare any name", + decl) + quals = 0 + if (isinstance(decl.type.type, pycparser.c_ast.IdentifierType) and + decl.type.type.names[-1].startswith('__dotdotdot')): + realtype = self._get_unknown_type(decl) + elif (isinstance(decl.type, pycparser.c_ast.PtrDecl) and + isinstance(decl.type.type, pycparser.c_ast.TypeDecl) and + isinstance(decl.type.type.type, + pycparser.c_ast.IdentifierType) and + decl.type.type.type.names[-1].startswith('__dotdotdot')): + realtype = self._get_unknown_ptr_type(decl) + else: + realtype, quals = self._get_type_and_quals( + decl.type, name=decl.name, partial_length_ok=True, + typedef_example="*(%s *)0" % (decl.name,)) + self._declare('typedef ' + decl.name, realtype, quals=quals) + elif decl.__class__.__name__ == 'Pragma': + # skip pragma, only in pycparser 2.15 + import warnings + warnings.warn( + "#pragma in cdef() are entirely ignored. " + "They should be removed for now, otherwise your " + "code might behave differently in a future version " + "of CFFI if #pragma support gets added. Note that " + "'#pragma pack' needs to be replaced with the " + "'packed' keyword argument to cdef().") + else: + raise CDefError("unexpected <%s>: this construct is valid " + "C but not valid in cdef()" % + decl.__class__.__name__, decl) + except CDefError as e: + if len(e.args) == 1: + e.args = e.args + (current_decl,) + raise + except FFIError as e: + msg = self._convert_pycparser_error(e, csource) + if msg: + e.args = (e.args[0] + "\n *** Err: %s" % msg,) + raise + + def _add_constants(self, key, val): + if key in self._int_constants: + if self._int_constants[key] == val: + return # ignore identical double declarations + raise FFIError( + "multiple declarations of constant: %s" % (key,)) + self._int_constants[key] = val + + def _add_integer_constant(self, name, int_str): + int_str = int_str.lower().rstrip("ul") + neg = int_str.startswith('-') + if neg: + int_str = int_str[1:] + # "010" is not valid oct in py3 + if (int_str.startswith("0") and int_str != '0' + and not int_str.startswith("0x")): + int_str = "0o" + int_str[1:] + pyvalue = int(int_str, 0) + if neg: + pyvalue = -pyvalue + self._add_constants(name, pyvalue) + self._declare('macro ' + name, pyvalue) + + def _process_macros(self, macros): + for key, value in macros.items(): + value = value.strip() + if _r_int_literal.match(value): + self._add_integer_constant(key, value) + elif value == '...': + self._declare('macro ' + key, value) + else: + raise CDefError( + 'only supports one of the following syntax:\n' + ' #define %s ... (literally dot-dot-dot)\n' + ' #define %s NUMBER (with NUMBER an integer' + ' constant, decimal/hex/octal)\n' + 'got:\n' + ' #define %s %s' + % (key, key, key, value)) + + def _declare_function(self, tp, quals, decl): + tp = self._get_type_pointer(tp, quals) + if self._options.get('dllexport'): + tag = 'dllexport_python ' + elif self._inside_extern_python == '__cffi_extern_python_start': + tag = 'extern_python ' + elif self._inside_extern_python == '__cffi_extern_python_plus_c_start': + tag = 'extern_python_plus_c ' + else: + tag = 'function ' + self._declare(tag + decl.name, tp) + + def _parse_decl(self, decl): + node = decl.type + if isinstance(node, pycparser.c_ast.FuncDecl): + tp, quals = self._get_type_and_quals(node, name=decl.name) + assert isinstance(tp, model.RawFunctionType) + self._declare_function(tp, quals, decl) + else: + if isinstance(node, pycparser.c_ast.Struct): + self._get_struct_union_enum_type('struct', node) + elif isinstance(node, pycparser.c_ast.Union): + self._get_struct_union_enum_type('union', node) + elif isinstance(node, pycparser.c_ast.Enum): + self._get_struct_union_enum_type('enum', node) + elif not decl.name: + raise CDefError("construct does not declare any variable", + decl) + # + if decl.name: + tp, quals = self._get_type_and_quals(node, + partial_length_ok=True) + if tp.is_raw_function: + self._declare_function(tp, quals, decl) + elif (tp.is_integer_type() and + hasattr(decl, 'init') and + hasattr(decl.init, 'value') and + _r_int_literal.match(decl.init.value)): + self._add_integer_constant(decl.name, decl.init.value) + elif (tp.is_integer_type() and + isinstance(decl.init, pycparser.c_ast.UnaryOp) and + decl.init.op == '-' and + hasattr(decl.init.expr, 'value') and + _r_int_literal.match(decl.init.expr.value)): + self._add_integer_constant(decl.name, + '-' + decl.init.expr.value) + elif (tp is model.void_type and + decl.name.startswith('__cffi_extern_python_')): + # hack: `extern "Python"` in the C source is replaced + # with "void __cffi_extern_python_start;" and + # "void __cffi_extern_python_stop;" + self._inside_extern_python = decl.name + else: + if self._inside_extern_python !='__cffi_extern_python_stop': + raise CDefError( + "cannot declare constants or " + "variables with 'extern \"Python\"'") + if (quals & model.Q_CONST) and not tp.is_array_type: + self._declare('constant ' + decl.name, tp, quals=quals) + else: + _warn_for_non_extern_non_static_global_variable(decl) + self._declare('variable ' + decl.name, tp, quals=quals) + + def parse_type(self, cdecl): + return self.parse_type_and_quals(cdecl)[0] + + def parse_type_and_quals(self, cdecl): + ast, macros = self._parse('void __dummy(\n%s\n);' % cdecl)[:2] + assert not macros + exprnode = ast.ext[-1].type.args.params[0] + if isinstance(exprnode, pycparser.c_ast.ID): + raise CDefError("unknown identifier '%s'" % (exprnode.name,)) + return self._get_type_and_quals(exprnode.type) + + def _declare(self, name, obj, included=False, quals=0): + if name in self._declarations: + prevobj, prevquals = self._declarations[name] + if prevobj is obj and prevquals == quals: + return + if not self._options.get('override'): + raise FFIError( + "multiple declarations of %s (for interactive usage, " + "try cdef(xx, override=True))" % (name,)) + assert '__dotdotdot__' not in name.split() + self._declarations[name] = (obj, quals) + if included: + self._included_declarations.add(obj) + + def _extract_quals(self, type): + quals = 0 + if isinstance(type, (pycparser.c_ast.TypeDecl, + pycparser.c_ast.PtrDecl)): + if 'const' in type.quals: + quals |= model.Q_CONST + if 'volatile' in type.quals: + quals |= model.Q_VOLATILE + if 'restrict' in type.quals: + quals |= model.Q_RESTRICT + return quals + + def _get_type_pointer(self, type, quals, declname=None): + if isinstance(type, model.RawFunctionType): + return type.as_function_pointer() + if (isinstance(type, model.StructOrUnionOrEnum) and + type.name.startswith('$') and type.name[1:].isdigit() and + type.forcename is None and declname is not None): + return model.NamedPointerType(type, declname, quals) + return model.PointerType(type, quals) + + def _get_type_and_quals(self, typenode, name=None, partial_length_ok=False, + typedef_example=None): + # first, dereference typedefs, if we have it already parsed, we're good + if (isinstance(typenode, pycparser.c_ast.TypeDecl) and + isinstance(typenode.type, pycparser.c_ast.IdentifierType) and + len(typenode.type.names) == 1 and + ('typedef ' + typenode.type.names[0]) in self._declarations): + tp, quals = self._declarations['typedef ' + typenode.type.names[0]] + quals |= self._extract_quals(typenode) + return tp, quals + # + if isinstance(typenode, pycparser.c_ast.ArrayDecl): + # array type + if typenode.dim is None: + length = None + else: + length = self._parse_constant( + typenode.dim, partial_length_ok=partial_length_ok) + # a hack: in 'typedef int foo_t[...][...];', don't use '...' as + # the length but use directly the C expression that would be + # generated by recompiler.py. This lets the typedef be used in + # many more places within recompiler.py + if typedef_example is not None: + if length == '...': + length = '_cffi_array_len(%s)' % (typedef_example,) + typedef_example = "*" + typedef_example + # + tp, quals = self._get_type_and_quals(typenode.type, + partial_length_ok=partial_length_ok, + typedef_example=typedef_example) + return model.ArrayType(tp, length), quals + # + if isinstance(typenode, pycparser.c_ast.PtrDecl): + # pointer type + itemtype, itemquals = self._get_type_and_quals(typenode.type) + tp = self._get_type_pointer(itemtype, itemquals, declname=name) + quals = self._extract_quals(typenode) + return tp, quals + # + if isinstance(typenode, pycparser.c_ast.TypeDecl): + quals = self._extract_quals(typenode) + type = typenode.type + if isinstance(type, pycparser.c_ast.IdentifierType): + # assume a primitive type. get it from .names, but reduce + # synonyms to a single chosen combination + names = list(type.names) + if names != ['signed', 'char']: # keep this unmodified + prefixes = {} + while names: + name = names[0] + if name in ('short', 'long', 'signed', 'unsigned'): + prefixes[name] = prefixes.get(name, 0) + 1 + del names[0] + else: + break + # ignore the 'signed' prefix below, and reorder the others + newnames = [] + for prefix in ('unsigned', 'short', 'long'): + for i in range(prefixes.get(prefix, 0)): + newnames.append(prefix) + if not names: + names = ['int'] # implicitly + if names == ['int']: # but kill it if 'short' or 'long' + if 'short' in prefixes or 'long' in prefixes: + names = [] + names = newnames + names + ident = ' '.join(names) + if ident == 'void': + return model.void_type, quals + if ident == '__dotdotdot__': + raise FFIError(':%d: bad usage of "..."' % + typenode.coord.line) + tp0, quals0 = resolve_common_type(self, ident) + return tp0, (quals | quals0) + # + if isinstance(type, pycparser.c_ast.Struct): + # 'struct foobar' + tp = self._get_struct_union_enum_type('struct', type, name) + return tp, quals + # + if isinstance(type, pycparser.c_ast.Union): + # 'union foobar' + tp = self._get_struct_union_enum_type('union', type, name) + return tp, quals + # + if isinstance(type, pycparser.c_ast.Enum): + # 'enum foobar' + tp = self._get_struct_union_enum_type('enum', type, name) + return tp, quals + # + if isinstance(typenode, pycparser.c_ast.FuncDecl): + # a function type + return self._parse_function_type(typenode, name), 0 + # + # nested anonymous structs or unions end up here + if isinstance(typenode, pycparser.c_ast.Struct): + return self._get_struct_union_enum_type('struct', typenode, name, + nested=True), 0 + if isinstance(typenode, pycparser.c_ast.Union): + return self._get_struct_union_enum_type('union', typenode, name, + nested=True), 0 + # + raise FFIError(":%d: bad or unsupported type declaration" % + typenode.coord.line) + + def _parse_function_type(self, typenode, funcname=None): + params = list(getattr(typenode.args, 'params', [])) + for i, arg in enumerate(params): + if not hasattr(arg, 'type'): + raise CDefError("%s arg %d: unknown type '%s'" + " (if you meant to use the old C syntax of giving" + " untyped arguments, it is not supported)" + % (funcname or 'in expression', i + 1, + getattr(arg, 'name', '?'))) + ellipsis = ( + len(params) > 0 and + isinstance(params[-1].type, pycparser.c_ast.TypeDecl) and + isinstance(params[-1].type.type, + pycparser.c_ast.IdentifierType) and + params[-1].type.type.names == ['__dotdotdot__']) + if ellipsis: + params.pop() + if not params: + raise CDefError( + "%s: a function with only '(...)' as argument" + " is not correct C" % (funcname or 'in expression')) + args = [self._as_func_arg(*self._get_type_and_quals(argdeclnode.type)) + for argdeclnode in params] + if not ellipsis and args == [model.void_type]: + args = [] + result, quals = self._get_type_and_quals(typenode.type) + # the 'quals' on the result type are ignored. HACK: we absure them + # to detect __stdcall functions: we textually replace "__stdcall" + # with "volatile volatile const" above. + abi = None + if hasattr(typenode.type, 'quals'): # else, probable syntax error anyway + if typenode.type.quals[-3:] == ['volatile', 'volatile', 'const']: + abi = '__stdcall' + return model.RawFunctionType(tuple(args), result, ellipsis, abi) + + def _as_func_arg(self, type, quals): + if isinstance(type, model.ArrayType): + return model.PointerType(type.item, quals) + elif isinstance(type, model.RawFunctionType): + return type.as_function_pointer() + else: + return type + + def _get_struct_union_enum_type(self, kind, type, name=None, nested=False): + # First, a level of caching on the exact 'type' node of the AST. + # This is obscure, but needed because pycparser "unrolls" declarations + # such as "typedef struct { } foo_t, *foo_p" and we end up with + # an AST that is not a tree, but a DAG, with the "type" node of the + # two branches foo_t and foo_p of the trees being the same node. + # It's a bit silly but detecting "DAG-ness" in the AST tree seems + # to be the only way to distinguish this case from two independent + # structs. See test_struct_with_two_usages. + try: + return self._structnode2type[type] + except KeyError: + pass + # + # Note that this must handle parsing "struct foo" any number of + # times and always return the same StructType object. Additionally, + # one of these times (not necessarily the first), the fields of + # the struct can be specified with "struct foo { ...fields... }". + # If no name is given, then we have to create a new anonymous struct + # with no caching; in this case, the fields are either specified + # right now or never. + # + force_name = name + name = type.name + # + # get the type or create it if needed + if name is None: + # 'force_name' is used to guess a more readable name for + # anonymous structs, for the common case "typedef struct { } foo". + if force_name is not None: + explicit_name = '$%s' % force_name + else: + self._anonymous_counter += 1 + explicit_name = '$%d' % self._anonymous_counter + tp = None + else: + explicit_name = name + key = '%s %s' % (kind, name) + tp, _ = self._declarations.get(key, (None, None)) + # + if tp is None: + if kind == 'struct': + tp = model.StructType(explicit_name, None, None, None) + elif kind == 'union': + tp = model.UnionType(explicit_name, None, None, None) + elif kind == 'enum': + if explicit_name == '__dotdotdot__': + raise CDefError("Enums cannot be declared with ...") + tp = self._build_enum_type(explicit_name, type.values) + else: + raise AssertionError("kind = %r" % (kind,)) + if name is not None: + self._declare(key, tp) + else: + if kind == 'enum' and type.values is not None: + raise NotImplementedError( + "enum %s: the '{}' declaration should appear on the first " + "time the enum is mentioned, not later" % explicit_name) + if not tp.forcename: + tp.force_the_name(force_name) + if tp.forcename and '$' in tp.name: + self._declare('anonymous %s' % tp.forcename, tp) + # + self._structnode2type[type] = tp + # + # enums: done here + if kind == 'enum': + return tp + # + # is there a 'type.decls'? If yes, then this is the place in the + # C sources that declare the fields. If no, then just return the + # existing type, possibly still incomplete. + if type.decls is None: + return tp + # + if tp.fldnames is not None: + raise CDefError("duplicate declaration of struct %s" % name) + fldnames = [] + fldtypes = [] + fldbitsize = [] + fldquals = [] + for decl in type.decls: + if (isinstance(decl.type, pycparser.c_ast.IdentifierType) and + ''.join(decl.type.names) == '__dotdotdot__'): + # XXX pycparser is inconsistent: 'names' should be a list + # of strings, but is sometimes just one string. Use + # str.join() as a way to cope with both. + self._make_partial(tp, nested) + continue + if decl.bitsize is None: + bitsize = -1 + else: + bitsize = self._parse_constant(decl.bitsize) + self._partial_length = False + type, fqual = self._get_type_and_quals(decl.type, + partial_length_ok=True) + if self._partial_length: + self._make_partial(tp, nested) + if isinstance(type, model.StructType) and type.partial: + self._make_partial(tp, nested) + fldnames.append(decl.name or '') + fldtypes.append(type) + fldbitsize.append(bitsize) + fldquals.append(fqual) + tp.fldnames = tuple(fldnames) + tp.fldtypes = tuple(fldtypes) + tp.fldbitsize = tuple(fldbitsize) + tp.fldquals = tuple(fldquals) + if fldbitsize != [-1] * len(fldbitsize): + if isinstance(tp, model.StructType) and tp.partial: + raise NotImplementedError("%s: using both bitfields and '...;'" + % (tp,)) + tp.packed = self._options.get('packed') + if tp.completed: # must be re-completed: it is not opaque any more + tp.completed = 0 + self._recomplete.append(tp) + return tp + + def _make_partial(self, tp, nested): + if not isinstance(tp, model.StructOrUnion): + raise CDefError("%s cannot be partial" % (tp,)) + if not tp.has_c_name() and not nested: + raise NotImplementedError("%s is partial but has no C name" %(tp,)) + tp.partial = True + + def _parse_constant(self, exprnode, partial_length_ok=False): + # for now, limited to expressions that are an immediate number + # or positive/negative number + if isinstance(exprnode, pycparser.c_ast.Constant): + s = exprnode.value + if '0' <= s[0] <= '9': + s = s.rstrip('uUlL') + try: + if s.startswith('0'): + return int(s, 8) + else: + return int(s, 10) + except ValueError: + if len(s) > 1: + if s.lower()[0:2] == '0x': + return int(s, 16) + elif s.lower()[0:2] == '0b': + return int(s, 2) + raise CDefError("invalid constant %r" % (s,)) + elif s[0] == "'" and s[-1] == "'" and ( + len(s) == 3 or (len(s) == 4 and s[1] == "\\")): + return ord(s[-2]) + else: + raise CDefError("invalid constant %r" % (s,)) + # + if (isinstance(exprnode, pycparser.c_ast.UnaryOp) and + exprnode.op == '+'): + return self._parse_constant(exprnode.expr) + # + if (isinstance(exprnode, pycparser.c_ast.UnaryOp) and + exprnode.op == '-'): + return -self._parse_constant(exprnode.expr) + # load previously defined int constant + if (isinstance(exprnode, pycparser.c_ast.ID) and + exprnode.name in self._int_constants): + return self._int_constants[exprnode.name] + # + if (isinstance(exprnode, pycparser.c_ast.ID) and + exprnode.name == '__dotdotdotarray__'): + if partial_length_ok: + self._partial_length = True + return '...' + raise FFIError(":%d: unsupported '[...]' here, cannot derive " + "the actual array length in this context" + % exprnode.coord.line) + # + if isinstance(exprnode, pycparser.c_ast.BinaryOp): + left = self._parse_constant(exprnode.left) + right = self._parse_constant(exprnode.right) + if exprnode.op == '+': + return left + right + elif exprnode.op == '-': + return left - right + elif exprnode.op == '*': + return left * right + elif exprnode.op == '/': + return self._c_div(left, right) + elif exprnode.op == '%': + return left - self._c_div(left, right) * right + elif exprnode.op == '<<': + return left << right + elif exprnode.op == '>>': + return left >> right + elif exprnode.op == '&': + return left & right + elif exprnode.op == '|': + return left | right + elif exprnode.op == '^': + return left ^ right + # + raise FFIError(":%d: unsupported expression: expected a " + "simple numeric constant" % exprnode.coord.line) + + def _c_div(self, a, b): + result = a // b + if ((a < 0) ^ (b < 0)) and (a % b) != 0: + result += 1 + return result + + def _build_enum_type(self, explicit_name, decls): + if decls is not None: + partial = False + enumerators = [] + enumvalues = [] + nextenumvalue = 0 + for enum in decls.enumerators: + if _r_enum_dotdotdot.match(enum.name): + partial = True + continue + if enum.value is not None: + nextenumvalue = self._parse_constant(enum.value) + enumerators.append(enum.name) + enumvalues.append(nextenumvalue) + self._add_constants(enum.name, nextenumvalue) + nextenumvalue += 1 + enumerators = tuple(enumerators) + enumvalues = tuple(enumvalues) + tp = model.EnumType(explicit_name, enumerators, enumvalues) + tp.partial = partial + else: # opaque enum + tp = model.EnumType(explicit_name, (), ()) + return tp + + def include(self, other): + for name, (tp, quals) in other._declarations.items(): + if name.startswith('anonymous $enum_$'): + continue # fix for test_anonymous_enum_include + kind = name.split(' ', 1)[0] + if kind in ('struct', 'union', 'enum', 'anonymous', 'typedef'): + self._declare(name, tp, included=True, quals=quals) + for k, v in other._int_constants.items(): + self._add_constants(k, v) + + def _get_unknown_type(self, decl): + typenames = decl.type.type.names + if typenames == ['__dotdotdot__']: + return model.unknown_type(decl.name) + + if typenames == ['__dotdotdotint__']: + if self._uses_new_feature is None: + self._uses_new_feature = "'typedef int... %s'" % decl.name + return model.UnknownIntegerType(decl.name) + + if typenames == ['__dotdotdotfloat__']: + # note: not for 'long double' so far + if self._uses_new_feature is None: + self._uses_new_feature = "'typedef float... %s'" % decl.name + return model.UnknownFloatType(decl.name) + + raise FFIError(':%d: unsupported usage of "..." in typedef' + % decl.coord.line) + + def _get_unknown_ptr_type(self, decl): + if decl.type.type.type.names == ['__dotdotdot__']: + return model.unknown_ptr_type(decl.name) + raise FFIError(':%d: unsupported usage of "..." in typedef' + % decl.coord.line) diff --git a/venv/lib/python3.11/site-packages/cffi/error.py b/venv/lib/python3.11/site-packages/cffi/error.py new file mode 100644 index 0000000..0a27247 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/error.py @@ -0,0 +1,31 @@ + +class FFIError(Exception): + __module__ = 'cffi' + +class CDefError(Exception): + __module__ = 'cffi' + def __str__(self): + try: + current_decl = self.args[1] + filename = current_decl.coord.file + linenum = current_decl.coord.line + prefix = '%s:%d: ' % (filename, linenum) + except (AttributeError, TypeError, IndexError): + prefix = '' + return '%s%s' % (prefix, self.args[0]) + +class VerificationError(Exception): + """ An error raised when verification fails + """ + __module__ = 'cffi' + +class VerificationMissing(Exception): + """ An error raised when incomplete structures are passed into + cdef, but no verification has been done + """ + __module__ = 'cffi' + +class PkgConfigError(Exception): + """ An error raised for missing modules in pkg-config + """ + __module__ = 'cffi' diff --git a/venv/lib/python3.11/site-packages/cffi/ffiplatform.py b/venv/lib/python3.11/site-packages/cffi/ffiplatform.py new file mode 100644 index 0000000..adca28f --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/ffiplatform.py @@ -0,0 +1,113 @@ +import sys, os +from .error import VerificationError + + +LIST_OF_FILE_NAMES = ['sources', 'include_dirs', 'library_dirs', + 'extra_objects', 'depends'] + +def get_extension(srcfilename, modname, sources=(), **kwds): + from cffi._shimmed_dist_utils import Extension + allsources = [srcfilename] + for src in sources: + allsources.append(os.path.normpath(src)) + return Extension(name=modname, sources=allsources, **kwds) + +def compile(tmpdir, ext, compiler_verbose=0, debug=None): + """Compile a C extension module using distutils.""" + + saved_environ = os.environ.copy() + try: + outputfilename = _build(tmpdir, ext, compiler_verbose, debug) + outputfilename = os.path.abspath(outputfilename) + finally: + # workaround for a distutils bugs where some env vars can + # become longer and longer every time it is used + for key, value in saved_environ.items(): + if os.environ.get(key) != value: + os.environ[key] = value + return outputfilename + +def _build(tmpdir, ext, compiler_verbose=0, debug=None): + # XXX compact but horrible :-( + from cffi._shimmed_dist_utils import Distribution, CompileError, LinkError, set_threshold, set_verbosity + + dist = Distribution({'ext_modules': [ext]}) + dist.parse_config_files() + options = dist.get_option_dict('build_ext') + if debug is None: + debug = sys.flags.debug + options['debug'] = ('ffiplatform', debug) + options['force'] = ('ffiplatform', True) + options['build_lib'] = ('ffiplatform', tmpdir) + options['build_temp'] = ('ffiplatform', tmpdir) + # + try: + old_level = set_threshold(0) or 0 + try: + set_verbosity(compiler_verbose) + dist.run_command('build_ext') + cmd_obj = dist.get_command_obj('build_ext') + [soname] = cmd_obj.get_outputs() + finally: + set_threshold(old_level) + except (CompileError, LinkError) as e: + raise VerificationError('%s: %s' % (e.__class__.__name__, e)) + # + return soname + +try: + from os.path import samefile +except ImportError: + def samefile(f1, f2): + return os.path.abspath(f1) == os.path.abspath(f2) + +def maybe_relative_path(path): + if not os.path.isabs(path): + return path # already relative + dir = path + names = [] + while True: + prevdir = dir + dir, name = os.path.split(prevdir) + if dir == prevdir or not dir: + return path # failed to make it relative + names.append(name) + try: + if samefile(dir, os.curdir): + names.reverse() + return os.path.join(*names) + except OSError: + pass + +# ____________________________________________________________ + +try: + int_or_long = (int, long) + import cStringIO +except NameError: + int_or_long = int # Python 3 + import io as cStringIO + +def _flatten(x, f): + if isinstance(x, str): + f.write('%ds%s' % (len(x), x)) + elif isinstance(x, dict): + keys = sorted(x.keys()) + f.write('%dd' % len(keys)) + for key in keys: + _flatten(key, f) + _flatten(x[key], f) + elif isinstance(x, (list, tuple)): + f.write('%dl' % len(x)) + for value in x: + _flatten(value, f) + elif isinstance(x, int_or_long): + f.write('%di' % (x,)) + else: + raise TypeError( + "the keywords to verify() contains unsupported object %r" % (x,)) + +def flatten(x): + f = cStringIO.StringIO() + _flatten(x, f) + return f.getvalue() diff --git a/venv/lib/python3.11/site-packages/cffi/lock.py b/venv/lib/python3.11/site-packages/cffi/lock.py new file mode 100644 index 0000000..db91b71 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/lock.py @@ -0,0 +1,30 @@ +import sys + +if sys.version_info < (3,): + try: + from thread import allocate_lock + except ImportError: + from dummy_thread import allocate_lock +else: + try: + from _thread import allocate_lock + except ImportError: + from _dummy_thread import allocate_lock + + +##import sys +##l1 = allocate_lock + +##class allocate_lock(object): +## def __init__(self): +## self._real = l1() +## def __enter__(self): +## for i in range(4, 0, -1): +## print sys._getframe(i).f_code +## print +## return self._real.__enter__() +## def __exit__(self, *args): +## return self._real.__exit__(*args) +## def acquire(self, f): +## assert f is False +## return self._real.acquire(f) diff --git a/venv/lib/python3.11/site-packages/cffi/model.py b/venv/lib/python3.11/site-packages/cffi/model.py new file mode 100644 index 0000000..e5f4cae --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/model.py @@ -0,0 +1,618 @@ +import types +import weakref + +from .lock import allocate_lock +from .error import CDefError, VerificationError, VerificationMissing + +# type qualifiers +Q_CONST = 0x01 +Q_RESTRICT = 0x02 +Q_VOLATILE = 0x04 + +def qualify(quals, replace_with): + if quals & Q_CONST: + replace_with = ' const ' + replace_with.lstrip() + if quals & Q_VOLATILE: + replace_with = ' volatile ' + replace_with.lstrip() + if quals & Q_RESTRICT: + # It seems that __restrict is supported by gcc and msvc. + # If you hit some different compiler, add a #define in + # _cffi_include.h for it (and in its copies, documented there) + replace_with = ' __restrict ' + replace_with.lstrip() + return replace_with + + +class BaseTypeByIdentity(object): + is_array_type = False + is_raw_function = False + + def get_c_name(self, replace_with='', context='a C file', quals=0): + result = self.c_name_with_marker + assert result.count('&') == 1 + # some logic duplication with ffi.getctype()... :-( + replace_with = replace_with.strip() + if replace_with: + if replace_with.startswith('*') and '&[' in result: + replace_with = '(%s)' % replace_with + elif not replace_with[0] in '[(': + replace_with = ' ' + replace_with + replace_with = qualify(quals, replace_with) + result = result.replace('&', replace_with) + if '$' in result: + raise VerificationError( + "cannot generate '%s' in %s: unknown type name" + % (self._get_c_name(), context)) + return result + + def _get_c_name(self): + return self.c_name_with_marker.replace('&', '') + + def has_c_name(self): + return '$' not in self._get_c_name() + + def is_integer_type(self): + return False + + def get_cached_btype(self, ffi, finishlist, can_delay=False): + try: + BType = ffi._cached_btypes[self] + except KeyError: + BType = self.build_backend_type(ffi, finishlist) + BType2 = ffi._cached_btypes.setdefault(self, BType) + assert BType2 is BType + return BType + + def __repr__(self): + return '<%s>' % (self._get_c_name(),) + + def _get_items(self): + return [(name, getattr(self, name)) for name in self._attrs_] + + +class BaseType(BaseTypeByIdentity): + + def __eq__(self, other): + return (self.__class__ == other.__class__ and + self._get_items() == other._get_items()) + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash((self.__class__, tuple(self._get_items()))) + + +class VoidType(BaseType): + _attrs_ = () + + def __init__(self): + self.c_name_with_marker = 'void&' + + def build_backend_type(self, ffi, finishlist): + return global_cache(self, ffi, 'new_void_type') + +void_type = VoidType() + + +class BasePrimitiveType(BaseType): + def is_complex_type(self): + return False + + +class PrimitiveType(BasePrimitiveType): + _attrs_ = ('name',) + + ALL_PRIMITIVE_TYPES = { + 'char': 'c', + 'short': 'i', + 'int': 'i', + 'long': 'i', + 'long long': 'i', + 'signed char': 'i', + 'unsigned char': 'i', + 'unsigned short': 'i', + 'unsigned int': 'i', + 'unsigned long': 'i', + 'unsigned long long': 'i', + 'float': 'f', + 'double': 'f', + 'long double': 'f', + '_cffi_float_complex_t': 'j', + '_cffi_double_complex_t': 'j', + '_Bool': 'i', + # the following types are not primitive in the C sense + 'wchar_t': 'c', + 'char16_t': 'c', + 'char32_t': 'c', + 'int8_t': 'i', + 'uint8_t': 'i', + 'int16_t': 'i', + 'uint16_t': 'i', + 'int32_t': 'i', + 'uint32_t': 'i', + 'int64_t': 'i', + 'uint64_t': 'i', + 'int_least8_t': 'i', + 'uint_least8_t': 'i', + 'int_least16_t': 'i', + 'uint_least16_t': 'i', + 'int_least32_t': 'i', + 'uint_least32_t': 'i', + 'int_least64_t': 'i', + 'uint_least64_t': 'i', + 'int_fast8_t': 'i', + 'uint_fast8_t': 'i', + 'int_fast16_t': 'i', + 'uint_fast16_t': 'i', + 'int_fast32_t': 'i', + 'uint_fast32_t': 'i', + 'int_fast64_t': 'i', + 'uint_fast64_t': 'i', + 'intptr_t': 'i', + 'uintptr_t': 'i', + 'intmax_t': 'i', + 'uintmax_t': 'i', + 'ptrdiff_t': 'i', + 'size_t': 'i', + 'ssize_t': 'i', + } + + def __init__(self, name): + assert name in self.ALL_PRIMITIVE_TYPES + self.name = name + self.c_name_with_marker = name + '&' + + def is_char_type(self): + return self.ALL_PRIMITIVE_TYPES[self.name] == 'c' + def is_integer_type(self): + return self.ALL_PRIMITIVE_TYPES[self.name] == 'i' + def is_float_type(self): + return self.ALL_PRIMITIVE_TYPES[self.name] == 'f' + def is_complex_type(self): + return self.ALL_PRIMITIVE_TYPES[self.name] == 'j' + + def build_backend_type(self, ffi, finishlist): + return global_cache(self, ffi, 'new_primitive_type', self.name) + + +class UnknownIntegerType(BasePrimitiveType): + _attrs_ = ('name',) + + def __init__(self, name): + self.name = name + self.c_name_with_marker = name + '&' + + def is_integer_type(self): + return True + + def build_backend_type(self, ffi, finishlist): + raise NotImplementedError("integer type '%s' can only be used after " + "compilation" % self.name) + +class UnknownFloatType(BasePrimitiveType): + _attrs_ = ('name', ) + + def __init__(self, name): + self.name = name + self.c_name_with_marker = name + '&' + + def build_backend_type(self, ffi, finishlist): + raise NotImplementedError("float type '%s' can only be used after " + "compilation" % self.name) + + +class BaseFunctionType(BaseType): + _attrs_ = ('args', 'result', 'ellipsis', 'abi') + + def __init__(self, args, result, ellipsis, abi=None): + self.args = args + self.result = result + self.ellipsis = ellipsis + self.abi = abi + # + reprargs = [arg._get_c_name() for arg in self.args] + if self.ellipsis: + reprargs.append('...') + reprargs = reprargs or ['void'] + replace_with = self._base_pattern % (', '.join(reprargs),) + if abi is not None: + replace_with = replace_with[:1] + abi + ' ' + replace_with[1:] + self.c_name_with_marker = ( + self.result.c_name_with_marker.replace('&', replace_with)) + + +class RawFunctionType(BaseFunctionType): + # Corresponds to a C type like 'int(int)', which is the C type of + # a function, but not a pointer-to-function. The backend has no + # notion of such a type; it's used temporarily by parsing. + _base_pattern = '(&)(%s)' + is_raw_function = True + + def build_backend_type(self, ffi, finishlist): + raise CDefError("cannot render the type %r: it is a function " + "type, not a pointer-to-function type" % (self,)) + + def as_function_pointer(self): + return FunctionPtrType(self.args, self.result, self.ellipsis, self.abi) + + +class FunctionPtrType(BaseFunctionType): + _base_pattern = '(*&)(%s)' + + def build_backend_type(self, ffi, finishlist): + result = self.result.get_cached_btype(ffi, finishlist) + args = [] + for tp in self.args: + args.append(tp.get_cached_btype(ffi, finishlist)) + abi_args = () + if self.abi == "__stdcall": + if not self.ellipsis: # __stdcall ignored for variadic funcs + try: + abi_args = (ffi._backend.FFI_STDCALL,) + except AttributeError: + pass + return global_cache(self, ffi, 'new_function_type', + tuple(args), result, self.ellipsis, *abi_args) + + def as_raw_function(self): + return RawFunctionType(self.args, self.result, self.ellipsis, self.abi) + + +class PointerType(BaseType): + _attrs_ = ('totype', 'quals') + + def __init__(self, totype, quals=0): + self.totype = totype + self.quals = quals + extra = " *&" + if totype.is_array_type: + extra = "(%s)" % (extra.lstrip(),) + extra = qualify(quals, extra) + self.c_name_with_marker = totype.c_name_with_marker.replace('&', extra) + + def build_backend_type(self, ffi, finishlist): + BItem = self.totype.get_cached_btype(ffi, finishlist, can_delay=True) + return global_cache(self, ffi, 'new_pointer_type', BItem) + +voidp_type = PointerType(void_type) + +def ConstPointerType(totype): + return PointerType(totype, Q_CONST) + +const_voidp_type = ConstPointerType(void_type) + + +class NamedPointerType(PointerType): + _attrs_ = ('totype', 'name') + + def __init__(self, totype, name, quals=0): + PointerType.__init__(self, totype, quals) + self.name = name + self.c_name_with_marker = name + '&' + + +class ArrayType(BaseType): + _attrs_ = ('item', 'length') + is_array_type = True + + def __init__(self, item, length): + self.item = item + self.length = length + # + if length is None: + brackets = '&[]' + elif length == '...': + brackets = '&[/*...*/]' + else: + brackets = '&[%s]' % length + self.c_name_with_marker = ( + self.item.c_name_with_marker.replace('&', brackets)) + + def length_is_unknown(self): + return isinstance(self.length, str) + + def resolve_length(self, newlength): + return ArrayType(self.item, newlength) + + def build_backend_type(self, ffi, finishlist): + if self.length_is_unknown(): + raise CDefError("cannot render the type %r: unknown length" % + (self,)) + self.item.get_cached_btype(ffi, finishlist) # force the item BType + BPtrItem = PointerType(self.item).get_cached_btype(ffi, finishlist) + return global_cache(self, ffi, 'new_array_type', BPtrItem, self.length) + +char_array_type = ArrayType(PrimitiveType('char'), None) + + +class StructOrUnionOrEnum(BaseTypeByIdentity): + _attrs_ = ('name',) + forcename = None + + def build_c_name_with_marker(self): + name = self.forcename or '%s %s' % (self.kind, self.name) + self.c_name_with_marker = name + '&' + + def force_the_name(self, forcename): + self.forcename = forcename + self.build_c_name_with_marker() + + def get_official_name(self): + assert self.c_name_with_marker.endswith('&') + return self.c_name_with_marker[:-1] + + +class StructOrUnion(StructOrUnionOrEnum): + fixedlayout = None + completed = 0 + partial = False + packed = 0 + + def __init__(self, name, fldnames, fldtypes, fldbitsize, fldquals=None): + self.name = name + self.fldnames = fldnames + self.fldtypes = fldtypes + self.fldbitsize = fldbitsize + self.fldquals = fldquals + self.build_c_name_with_marker() + + def anonymous_struct_fields(self): + if self.fldtypes is not None: + for name, type in zip(self.fldnames, self.fldtypes): + if name == '' and isinstance(type, StructOrUnion): + yield type + + def enumfields(self, expand_anonymous_struct_union=True): + fldquals = self.fldquals + if fldquals is None: + fldquals = (0,) * len(self.fldnames) + for name, type, bitsize, quals in zip(self.fldnames, self.fldtypes, + self.fldbitsize, fldquals): + if (name == '' and isinstance(type, StructOrUnion) + and expand_anonymous_struct_union): + # nested anonymous struct/union + for result in type.enumfields(): + yield result + else: + yield (name, type, bitsize, quals) + + def force_flatten(self): + # force the struct or union to have a declaration that lists + # directly all fields returned by enumfields(), flattening + # nested anonymous structs/unions. + names = [] + types = [] + bitsizes = [] + fldquals = [] + for name, type, bitsize, quals in self.enumfields(): + names.append(name) + types.append(type) + bitsizes.append(bitsize) + fldquals.append(quals) + self.fldnames = tuple(names) + self.fldtypes = tuple(types) + self.fldbitsize = tuple(bitsizes) + self.fldquals = tuple(fldquals) + + def get_cached_btype(self, ffi, finishlist, can_delay=False): + BType = StructOrUnionOrEnum.get_cached_btype(self, ffi, finishlist, + can_delay) + if not can_delay: + self.finish_backend_type(ffi, finishlist) + return BType + + def finish_backend_type(self, ffi, finishlist): + if self.completed: + if self.completed != 2: + raise NotImplementedError("recursive structure declaration " + "for '%s'" % (self.name,)) + return + BType = ffi._cached_btypes[self] + # + self.completed = 1 + # + if self.fldtypes is None: + pass # not completing it: it's an opaque struct + # + elif self.fixedlayout is None: + fldtypes = [tp.get_cached_btype(ffi, finishlist) + for tp in self.fldtypes] + lst = list(zip(self.fldnames, fldtypes, self.fldbitsize)) + extra_flags = () + if self.packed: + if self.packed == 1: + extra_flags = (8,) # SF_PACKED + else: + extra_flags = (0, self.packed) + ffi._backend.complete_struct_or_union(BType, lst, self, + -1, -1, *extra_flags) + # + else: + fldtypes = [] + fieldofs, fieldsize, totalsize, totalalignment = self.fixedlayout + for i in range(len(self.fldnames)): + fsize = fieldsize[i] + ftype = self.fldtypes[i] + # + if isinstance(ftype, ArrayType) and ftype.length_is_unknown(): + # fix the length to match the total size + BItemType = ftype.item.get_cached_btype(ffi, finishlist) + nlen, nrest = divmod(fsize, ffi.sizeof(BItemType)) + if nrest != 0: + self._verification_error( + "field '%s.%s' has a bogus size?" % ( + self.name, self.fldnames[i] or '{}')) + ftype = ftype.resolve_length(nlen) + self.fldtypes = (self.fldtypes[:i] + (ftype,) + + self.fldtypes[i+1:]) + # + BFieldType = ftype.get_cached_btype(ffi, finishlist) + if isinstance(ftype, ArrayType) and ftype.length is None: + assert fsize == 0 + else: + bitemsize = ffi.sizeof(BFieldType) + if bitemsize != fsize: + self._verification_error( + "field '%s.%s' is declared as %d bytes, but is " + "really %d bytes" % (self.name, + self.fldnames[i] or '{}', + bitemsize, fsize)) + fldtypes.append(BFieldType) + # + lst = list(zip(self.fldnames, fldtypes, self.fldbitsize, fieldofs)) + ffi._backend.complete_struct_or_union(BType, lst, self, + totalsize, totalalignment) + self.completed = 2 + + def _verification_error(self, msg): + raise VerificationError(msg) + + def check_not_partial(self): + if self.partial and self.fixedlayout is None: + raise VerificationMissing(self._get_c_name()) + + def build_backend_type(self, ffi, finishlist): + self.check_not_partial() + finishlist.append(self) + # + return global_cache(self, ffi, 'new_%s_type' % self.kind, + self.get_official_name(), key=self) + + +class StructType(StructOrUnion): + kind = 'struct' + + +class UnionType(StructOrUnion): + kind = 'union' + + +class EnumType(StructOrUnionOrEnum): + kind = 'enum' + partial = False + partial_resolved = False + + def __init__(self, name, enumerators, enumvalues, baseinttype=None): + self.name = name + self.enumerators = enumerators + self.enumvalues = enumvalues + self.baseinttype = baseinttype + self.build_c_name_with_marker() + + def force_the_name(self, forcename): + StructOrUnionOrEnum.force_the_name(self, forcename) + if self.forcename is None: + name = self.get_official_name() + self.forcename = '$' + name.replace(' ', '_') + + def check_not_partial(self): + if self.partial and not self.partial_resolved: + raise VerificationMissing(self._get_c_name()) + + def build_backend_type(self, ffi, finishlist): + self.check_not_partial() + base_btype = self.build_baseinttype(ffi, finishlist) + return global_cache(self, ffi, 'new_enum_type', + self.get_official_name(), + self.enumerators, self.enumvalues, + base_btype, key=self) + + def build_baseinttype(self, ffi, finishlist): + if self.baseinttype is not None: + return self.baseinttype.get_cached_btype(ffi, finishlist) + # + if self.enumvalues: + smallest_value = min(self.enumvalues) + largest_value = max(self.enumvalues) + else: + import warnings + try: + # XXX! The goal is to ensure that the warnings.warn() + # will not suppress the warning. We want to get it + # several times if we reach this point several times. + __warningregistry__.clear() + except NameError: + pass + warnings.warn("%r has no values explicitly defined; " + "guessing that it is equivalent to 'unsigned int'" + % self._get_c_name()) + smallest_value = largest_value = 0 + if smallest_value < 0: # needs a signed type + sign = 1 + candidate1 = PrimitiveType("int") + candidate2 = PrimitiveType("long") + else: + sign = 0 + candidate1 = PrimitiveType("unsigned int") + candidate2 = PrimitiveType("unsigned long") + btype1 = candidate1.get_cached_btype(ffi, finishlist) + btype2 = candidate2.get_cached_btype(ffi, finishlist) + size1 = ffi.sizeof(btype1) + size2 = ffi.sizeof(btype2) + if (smallest_value >= ((-1) << (8*size1-1)) and + largest_value < (1 << (8*size1-sign))): + return btype1 + if (smallest_value >= ((-1) << (8*size2-1)) and + largest_value < (1 << (8*size2-sign))): + return btype2 + raise CDefError("%s values don't all fit into either 'long' " + "or 'unsigned long'" % self._get_c_name()) + +def unknown_type(name, structname=None): + if structname is None: + structname = '$%s' % name + tp = StructType(structname, None, None, None) + tp.force_the_name(name) + tp.origin = "unknown_type" + return tp + +def unknown_ptr_type(name, structname=None): + if structname is None: + structname = '$$%s' % name + tp = StructType(structname, None, None, None) + return NamedPointerType(tp, name) + + +global_lock = allocate_lock() +_typecache_cffi_backend = weakref.WeakValueDictionary() + +def get_typecache(backend): + # returns _typecache_cffi_backend if backend is the _cffi_backend + # module, or type(backend).__typecache if backend is an instance of + # CTypesBackend (or some FakeBackend class during tests) + if isinstance(backend, types.ModuleType): + return _typecache_cffi_backend + with global_lock: + if not hasattr(type(backend), '__typecache'): + type(backend).__typecache = weakref.WeakValueDictionary() + return type(backend).__typecache + +def global_cache(srctype, ffi, funcname, *args, **kwds): + key = kwds.pop('key', (funcname, args)) + assert not kwds + try: + return ffi._typecache[key] + except KeyError: + pass + try: + res = getattr(ffi._backend, funcname)(*args) + except NotImplementedError as e: + raise NotImplementedError("%s: %r: %s" % (funcname, srctype, e)) + # note that setdefault() on WeakValueDictionary is not atomic + # and contains a rare bug (http://bugs.python.org/issue19542); + # we have to use a lock and do it ourselves + cache = ffi._typecache + with global_lock: + res1 = cache.get(key) + if res1 is None: + cache[key] = res + return res + else: + return res1 + +def pointer_cache(ffi, BType): + return global_cache('?', ffi, 'new_pointer_type', BType) + +def attach_exception_info(e, name): + if e.args and type(e.args[0]) is str: + e.args = ('%s: %s' % (name, e.args[0]),) + e.args[1:] diff --git a/venv/lib/python3.11/site-packages/cffi/parse_c_type.h b/venv/lib/python3.11/site-packages/cffi/parse_c_type.h new file mode 100644 index 0000000..84e4ef8 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/parse_c_type.h @@ -0,0 +1,181 @@ + +/* This part is from file 'cffi/parse_c_type.h'. It is copied at the + beginning of C sources generated by CFFI's ffi.set_source(). */ + +typedef void *_cffi_opcode_t; + +#define _CFFI_OP(opcode, arg) (_cffi_opcode_t)(opcode | (((uintptr_t)(arg)) << 8)) +#define _CFFI_GETOP(cffi_opcode) ((unsigned char)(uintptr_t)cffi_opcode) +#define _CFFI_GETARG(cffi_opcode) (((intptr_t)cffi_opcode) >> 8) + +#define _CFFI_OP_PRIMITIVE 1 +#define _CFFI_OP_POINTER 3 +#define _CFFI_OP_ARRAY 5 +#define _CFFI_OP_OPEN_ARRAY 7 +#define _CFFI_OP_STRUCT_UNION 9 +#define _CFFI_OP_ENUM 11 +#define _CFFI_OP_FUNCTION 13 +#define _CFFI_OP_FUNCTION_END 15 +#define _CFFI_OP_NOOP 17 +#define _CFFI_OP_BITFIELD 19 +#define _CFFI_OP_TYPENAME 21 +#define _CFFI_OP_CPYTHON_BLTN_V 23 // varargs +#define _CFFI_OP_CPYTHON_BLTN_N 25 // noargs +#define _CFFI_OP_CPYTHON_BLTN_O 27 // O (i.e. a single arg) +#define _CFFI_OP_CONSTANT 29 +#define _CFFI_OP_CONSTANT_INT 31 +#define _CFFI_OP_GLOBAL_VAR 33 +#define _CFFI_OP_DLOPEN_FUNC 35 +#define _CFFI_OP_DLOPEN_CONST 37 +#define _CFFI_OP_GLOBAL_VAR_F 39 +#define _CFFI_OP_EXTERN_PYTHON 41 + +#define _CFFI_PRIM_VOID 0 +#define _CFFI_PRIM_BOOL 1 +#define _CFFI_PRIM_CHAR 2 +#define _CFFI_PRIM_SCHAR 3 +#define _CFFI_PRIM_UCHAR 4 +#define _CFFI_PRIM_SHORT 5 +#define _CFFI_PRIM_USHORT 6 +#define _CFFI_PRIM_INT 7 +#define _CFFI_PRIM_UINT 8 +#define _CFFI_PRIM_LONG 9 +#define _CFFI_PRIM_ULONG 10 +#define _CFFI_PRIM_LONGLONG 11 +#define _CFFI_PRIM_ULONGLONG 12 +#define _CFFI_PRIM_FLOAT 13 +#define _CFFI_PRIM_DOUBLE 14 +#define _CFFI_PRIM_LONGDOUBLE 15 + +#define _CFFI_PRIM_WCHAR 16 +#define _CFFI_PRIM_INT8 17 +#define _CFFI_PRIM_UINT8 18 +#define _CFFI_PRIM_INT16 19 +#define _CFFI_PRIM_UINT16 20 +#define _CFFI_PRIM_INT32 21 +#define _CFFI_PRIM_UINT32 22 +#define _CFFI_PRIM_INT64 23 +#define _CFFI_PRIM_UINT64 24 +#define _CFFI_PRIM_INTPTR 25 +#define _CFFI_PRIM_UINTPTR 26 +#define _CFFI_PRIM_PTRDIFF 27 +#define _CFFI_PRIM_SIZE 28 +#define _CFFI_PRIM_SSIZE 29 +#define _CFFI_PRIM_INT_LEAST8 30 +#define _CFFI_PRIM_UINT_LEAST8 31 +#define _CFFI_PRIM_INT_LEAST16 32 +#define _CFFI_PRIM_UINT_LEAST16 33 +#define _CFFI_PRIM_INT_LEAST32 34 +#define _CFFI_PRIM_UINT_LEAST32 35 +#define _CFFI_PRIM_INT_LEAST64 36 +#define _CFFI_PRIM_UINT_LEAST64 37 +#define _CFFI_PRIM_INT_FAST8 38 +#define _CFFI_PRIM_UINT_FAST8 39 +#define _CFFI_PRIM_INT_FAST16 40 +#define _CFFI_PRIM_UINT_FAST16 41 +#define _CFFI_PRIM_INT_FAST32 42 +#define _CFFI_PRIM_UINT_FAST32 43 +#define _CFFI_PRIM_INT_FAST64 44 +#define _CFFI_PRIM_UINT_FAST64 45 +#define _CFFI_PRIM_INTMAX 46 +#define _CFFI_PRIM_UINTMAX 47 +#define _CFFI_PRIM_FLOATCOMPLEX 48 +#define _CFFI_PRIM_DOUBLECOMPLEX 49 +#define _CFFI_PRIM_CHAR16 50 +#define _CFFI_PRIM_CHAR32 51 + +#define _CFFI__NUM_PRIM 52 +#define _CFFI__UNKNOWN_PRIM (-1) +#define _CFFI__UNKNOWN_FLOAT_PRIM (-2) +#define _CFFI__UNKNOWN_LONG_DOUBLE (-3) + +#define _CFFI__IO_FILE_STRUCT (-1) + + +struct _cffi_global_s { + const char *name; + void *address; + _cffi_opcode_t type_op; + void *size_or_direct_fn; // OP_GLOBAL_VAR: size, or 0 if unknown + // OP_CPYTHON_BLTN_*: addr of direct function +}; + +struct _cffi_getconst_s { + unsigned long long value; + const struct _cffi_type_context_s *ctx; + int gindex; +}; + +struct _cffi_struct_union_s { + const char *name; + int type_index; // -> _cffi_types, on a OP_STRUCT_UNION + int flags; // _CFFI_F_* flags below + size_t size; + int alignment; + int first_field_index; // -> _cffi_fields array + int num_fields; +}; +#define _CFFI_F_UNION 0x01 // is a union, not a struct +#define _CFFI_F_CHECK_FIELDS 0x02 // complain if fields are not in the + // "standard layout" or if some are missing +#define _CFFI_F_PACKED 0x04 // for CHECK_FIELDS, assume a packed struct +#define _CFFI_F_EXTERNAL 0x08 // in some other ffi.include() +#define _CFFI_F_OPAQUE 0x10 // opaque + +struct _cffi_field_s { + const char *name; + size_t field_offset; + size_t field_size; + _cffi_opcode_t field_type_op; +}; + +struct _cffi_enum_s { + const char *name; + int type_index; // -> _cffi_types, on a OP_ENUM + int type_prim; // _CFFI_PRIM_xxx + const char *enumerators; // comma-delimited string +}; + +struct _cffi_typename_s { + const char *name; + int type_index; /* if opaque, points to a possibly artificial + OP_STRUCT which is itself opaque */ +}; + +struct _cffi_type_context_s { + _cffi_opcode_t *types; + const struct _cffi_global_s *globals; + const struct _cffi_field_s *fields; + const struct _cffi_struct_union_s *struct_unions; + const struct _cffi_enum_s *enums; + const struct _cffi_typename_s *typenames; + int num_globals; + int num_struct_unions; + int num_enums; + int num_typenames; + const char *const *includes; + int num_types; + int flags; /* future extension */ +}; + +struct _cffi_parse_info_s { + const struct _cffi_type_context_s *ctx; + _cffi_opcode_t *output; + unsigned int output_size; + size_t error_location; + const char *error_message; +}; + +struct _cffi_externpy_s { + const char *name; + size_t size_of_result; + void *reserved1, *reserved2; +}; + +#ifdef _CFFI_INTERNAL +static int parse_c_type(struct _cffi_parse_info_s *info, const char *input); +static int search_in_globals(const struct _cffi_type_context_s *ctx, + const char *search, size_t search_len); +static int search_in_struct_unions(const struct _cffi_type_context_s *ctx, + const char *search, size_t search_len); +#endif diff --git a/venv/lib/python3.11/site-packages/cffi/pkgconfig.py b/venv/lib/python3.11/site-packages/cffi/pkgconfig.py new file mode 100644 index 0000000..5c93f15 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/pkgconfig.py @@ -0,0 +1,121 @@ +# pkg-config, https://www.freedesktop.org/wiki/Software/pkg-config/ integration for cffi +import sys, os, subprocess + +from .error import PkgConfigError + + +def merge_flags(cfg1, cfg2): + """Merge values from cffi config flags cfg2 to cf1 + + Example: + merge_flags({"libraries": ["one"]}, {"libraries": ["two"]}) + {"libraries": ["one", "two"]} + """ + for key, value in cfg2.items(): + if key not in cfg1: + cfg1[key] = value + else: + if not isinstance(cfg1[key], list): + raise TypeError("cfg1[%r] should be a list of strings" % (key,)) + if not isinstance(value, list): + raise TypeError("cfg2[%r] should be a list of strings" % (key,)) + cfg1[key].extend(value) + return cfg1 + + +def call(libname, flag, encoding=sys.getfilesystemencoding()): + """Calls pkg-config and returns the output if found + """ + a = ["pkg-config", "--print-errors"] + a.append(flag) + a.append(libname) + try: + pc = subprocess.Popen(a, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except EnvironmentError as e: + raise PkgConfigError("cannot run pkg-config: %s" % (str(e).strip(),)) + + bout, berr = pc.communicate() + if pc.returncode != 0: + try: + berr = berr.decode(encoding) + except Exception: + pass + raise PkgConfigError(berr.strip()) + + if sys.version_info >= (3,) and not isinstance(bout, str): # Python 3.x + try: + bout = bout.decode(encoding) + except UnicodeDecodeError: + raise PkgConfigError("pkg-config %s %s returned bytes that cannot " + "be decoded with encoding %r:\n%r" % + (flag, libname, encoding, bout)) + + if os.altsep != '\\' and '\\' in bout: + raise PkgConfigError("pkg-config %s %s returned an unsupported " + "backslash-escaped output:\n%r" % + (flag, libname, bout)) + return bout + + +def flags_from_pkgconfig(libs): + r"""Return compiler line flags for FFI.set_source based on pkg-config output + + Usage + ... + ffibuilder.set_source("_foo", pkgconfig = ["libfoo", "libbar >= 1.8.3"]) + + If pkg-config is installed on build machine, then arguments include_dirs, + library_dirs, libraries, define_macros, extra_compile_args and + extra_link_args are extended with an output of pkg-config for libfoo and + libbar. + + Raises PkgConfigError in case the pkg-config call fails. + """ + + def get_include_dirs(string): + return [x[2:] for x in string.split() if x.startswith("-I")] + + def get_library_dirs(string): + return [x[2:] for x in string.split() if x.startswith("-L")] + + def get_libraries(string): + return [x[2:] for x in string.split() if x.startswith("-l")] + + # convert -Dfoo=bar to list of tuples [("foo", "bar")] expected by distutils + def get_macros(string): + def _macro(x): + x = x[2:] # drop "-D" + if '=' in x: + return tuple(x.split("=", 1)) # "-Dfoo=bar" => ("foo", "bar") + else: + return (x, None) # "-Dfoo" => ("foo", None) + return [_macro(x) for x in string.split() if x.startswith("-D")] + + def get_other_cflags(string): + return [x for x in string.split() if not x.startswith("-I") and + not x.startswith("-D")] + + def get_other_libs(string): + return [x for x in string.split() if not x.startswith("-L") and + not x.startswith("-l")] + + # return kwargs for given libname + def kwargs(libname): + fse = sys.getfilesystemencoding() + all_cflags = call(libname, "--cflags") + all_libs = call(libname, "--libs") + return { + "include_dirs": get_include_dirs(all_cflags), + "library_dirs": get_library_dirs(all_libs), + "libraries": get_libraries(all_libs), + "define_macros": get_macros(all_cflags), + "extra_compile_args": get_other_cflags(all_cflags), + "extra_link_args": get_other_libs(all_libs), + } + + # merge all arguments together + ret = {} + for libname in libs: + lib_flags = kwargs(libname) + merge_flags(ret, lib_flags) + return ret diff --git a/venv/lib/python3.11/site-packages/cffi/recompiler.py b/venv/lib/python3.11/site-packages/cffi/recompiler.py new file mode 100644 index 0000000..57781a3 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/recompiler.py @@ -0,0 +1,1598 @@ +import os, sys, io +from . import ffiplatform, model +from .error import VerificationError +from .cffi_opcode import * + +VERSION_BASE = 0x2601 +VERSION_EMBEDDED = 0x2701 +VERSION_CHAR16CHAR32 = 0x2801 + +USE_LIMITED_API = (sys.platform != 'win32' or sys.version_info < (3, 0) or + sys.version_info >= (3, 5)) + + +class GlobalExpr: + def __init__(self, name, address, type_op, size=0, check_value=0): + self.name = name + self.address = address + self.type_op = type_op + self.size = size + self.check_value = check_value + + def as_c_expr(self): + return ' { "%s", (void *)%s, %s, (void *)%s },' % ( + self.name, self.address, self.type_op.as_c_expr(), self.size) + + def as_python_expr(self): + return "b'%s%s',%d" % (self.type_op.as_python_bytes(), self.name, + self.check_value) + +class FieldExpr: + def __init__(self, name, field_offset, field_size, fbitsize, field_type_op): + self.name = name + self.field_offset = field_offset + self.field_size = field_size + self.fbitsize = fbitsize + self.field_type_op = field_type_op + + def as_c_expr(self): + spaces = " " * len(self.name) + return (' { "%s", %s,\n' % (self.name, self.field_offset) + + ' %s %s,\n' % (spaces, self.field_size) + + ' %s %s },' % (spaces, self.field_type_op.as_c_expr())) + + def as_python_expr(self): + raise NotImplementedError + + def as_field_python_expr(self): + if self.field_type_op.op == OP_NOOP: + size_expr = '' + elif self.field_type_op.op == OP_BITFIELD: + size_expr = format_four_bytes(self.fbitsize) + else: + raise NotImplementedError + return "b'%s%s%s'" % (self.field_type_op.as_python_bytes(), + size_expr, + self.name) + +class StructUnionExpr: + def __init__(self, name, type_index, flags, size, alignment, comment, + first_field_index, c_fields): + self.name = name + self.type_index = type_index + self.flags = flags + self.size = size + self.alignment = alignment + self.comment = comment + self.first_field_index = first_field_index + self.c_fields = c_fields + + def as_c_expr(self): + return (' { "%s", %d, %s,' % (self.name, self.type_index, self.flags) + + '\n %s, %s, ' % (self.size, self.alignment) + + '%d, %d ' % (self.first_field_index, len(self.c_fields)) + + ('/* %s */ ' % self.comment if self.comment else '') + + '},') + + def as_python_expr(self): + flags = eval(self.flags, G_FLAGS) + fields_expr = [c_field.as_field_python_expr() + for c_field in self.c_fields] + return "(b'%s%s%s',%s)" % ( + format_four_bytes(self.type_index), + format_four_bytes(flags), + self.name, + ','.join(fields_expr)) + +class EnumExpr: + def __init__(self, name, type_index, size, signed, allenums): + self.name = name + self.type_index = type_index + self.size = size + self.signed = signed + self.allenums = allenums + + def as_c_expr(self): + return (' { "%s", %d, _cffi_prim_int(%s, %s),\n' + ' "%s" },' % (self.name, self.type_index, + self.size, self.signed, self.allenums)) + + def as_python_expr(self): + prim_index = { + (1, 0): PRIM_UINT8, (1, 1): PRIM_INT8, + (2, 0): PRIM_UINT16, (2, 1): PRIM_INT16, + (4, 0): PRIM_UINT32, (4, 1): PRIM_INT32, + (8, 0): PRIM_UINT64, (8, 1): PRIM_INT64, + }[self.size, self.signed] + return "b'%s%s%s\\x00%s'" % (format_four_bytes(self.type_index), + format_four_bytes(prim_index), + self.name, self.allenums) + +class TypenameExpr: + def __init__(self, name, type_index): + self.name = name + self.type_index = type_index + + def as_c_expr(self): + return ' { "%s", %d },' % (self.name, self.type_index) + + def as_python_expr(self): + return "b'%s%s'" % (format_four_bytes(self.type_index), self.name) + + +# ____________________________________________________________ + + +class Recompiler: + _num_externpy = 0 + + def __init__(self, ffi, module_name, target_is_python=False): + self.ffi = ffi + self.module_name = module_name + self.target_is_python = target_is_python + self._version = VERSION_BASE + + def needs_version(self, ver): + self._version = max(self._version, ver) + + def collect_type_table(self): + self._typesdict = {} + self._generate("collecttype") + # + all_decls = sorted(self._typesdict, key=str) + # + # prepare all FUNCTION bytecode sequences first + self.cffi_types = [] + for tp in all_decls: + if tp.is_raw_function: + assert self._typesdict[tp] is None + self._typesdict[tp] = len(self.cffi_types) + self.cffi_types.append(tp) # placeholder + for tp1 in tp.args: + assert isinstance(tp1, (model.VoidType, + model.BasePrimitiveType, + model.PointerType, + model.StructOrUnionOrEnum, + model.FunctionPtrType)) + if self._typesdict[tp1] is None: + self._typesdict[tp1] = len(self.cffi_types) + self.cffi_types.append(tp1) # placeholder + self.cffi_types.append('END') # placeholder + # + # prepare all OTHER bytecode sequences + for tp in all_decls: + if not tp.is_raw_function and self._typesdict[tp] is None: + self._typesdict[tp] = len(self.cffi_types) + self.cffi_types.append(tp) # placeholder + if tp.is_array_type and tp.length is not None: + self.cffi_types.append('LEN') # placeholder + assert None not in self._typesdict.values() + # + # collect all structs and unions and enums + self._struct_unions = {} + self._enums = {} + for tp in all_decls: + if isinstance(tp, model.StructOrUnion): + self._struct_unions[tp] = None + elif isinstance(tp, model.EnumType): + self._enums[tp] = None + for i, tp in enumerate(sorted(self._struct_unions, + key=lambda tp: tp.name)): + self._struct_unions[tp] = i + for i, tp in enumerate(sorted(self._enums, + key=lambda tp: tp.name)): + self._enums[tp] = i + # + # emit all bytecode sequences now + for tp in all_decls: + method = getattr(self, '_emit_bytecode_' + tp.__class__.__name__) + method(tp, self._typesdict[tp]) + # + # consistency check + for op in self.cffi_types: + assert isinstance(op, CffiOp) + self.cffi_types = tuple(self.cffi_types) # don't change any more + + def _enum_fields(self, tp): + # When producing C, expand all anonymous struct/union fields. + # That's necessary to have C code checking the offsets of the + # individual fields contained in them. When producing Python, + # don't do it and instead write it like it is, with the + # corresponding fields having an empty name. Empty names are + # recognized at runtime when we import the generated Python + # file. + expand_anonymous_struct_union = not self.target_is_python + return tp.enumfields(expand_anonymous_struct_union) + + def _do_collect_type(self, tp): + if not isinstance(tp, model.BaseTypeByIdentity): + if isinstance(tp, tuple): + for x in tp: + self._do_collect_type(x) + return + if tp not in self._typesdict: + self._typesdict[tp] = None + if isinstance(tp, model.FunctionPtrType): + self._do_collect_type(tp.as_raw_function()) + elif isinstance(tp, model.StructOrUnion): + if tp.fldtypes is not None and ( + tp not in self.ffi._parser._included_declarations): + for name1, tp1, _, _ in self._enum_fields(tp): + self._do_collect_type(self._field_type(tp, name1, tp1)) + else: + for _, x in tp._get_items(): + self._do_collect_type(x) + + def _generate(self, step_name): + lst = self.ffi._parser._declarations.items() + for name, (tp, quals) in sorted(lst): + kind, realname = name.split(' ', 1) + try: + method = getattr(self, '_generate_cpy_%s_%s' % (kind, + step_name)) + except AttributeError: + raise VerificationError( + "not implemented in recompile(): %r" % name) + try: + self._current_quals = quals + method(tp, realname) + except Exception as e: + model.attach_exception_info(e, name) + raise + + # ---------- + + ALL_STEPS = ["global", "field", "struct_union", "enum", "typename"] + + def collect_step_tables(self): + # collect the declarations for '_cffi_globals', '_cffi_typenames', etc. + self._lsts = {} + for step_name in self.ALL_STEPS: + self._lsts[step_name] = [] + self._seen_struct_unions = set() + self._generate("ctx") + self._add_missing_struct_unions() + # + for step_name in self.ALL_STEPS: + lst = self._lsts[step_name] + if step_name != "field": + lst.sort(key=lambda entry: entry.name) + self._lsts[step_name] = tuple(lst) # don't change any more + # + # check for a possible internal inconsistency: _cffi_struct_unions + # should have been generated with exactly self._struct_unions + lst = self._lsts["struct_union"] + for tp, i in self._struct_unions.items(): + assert i < len(lst) + assert lst[i].name == tp.name + assert len(lst) == len(self._struct_unions) + # same with enums + lst = self._lsts["enum"] + for tp, i in self._enums.items(): + assert i < len(lst) + assert lst[i].name == tp.name + assert len(lst) == len(self._enums) + + # ---------- + + def _prnt(self, what=''): + self._f.write(what + '\n') + + def write_source_to_f(self, f, preamble): + if self.target_is_python: + assert preamble is None + self.write_py_source_to_f(f) + else: + assert preamble is not None + self.write_c_source_to_f(f, preamble) + + def _rel_readlines(self, filename): + g = open(os.path.join(os.path.dirname(__file__), filename), 'r') + lines = g.readlines() + g.close() + return lines + + def write_c_source_to_f(self, f, preamble): + self._f = f + prnt = self._prnt + if self.ffi._embedding is not None: + prnt('#define _CFFI_USE_EMBEDDING') + if not USE_LIMITED_API: + prnt('#define _CFFI_NO_LIMITED_API') + # + # first the '#include' (actually done by inlining the file's content) + lines = self._rel_readlines('_cffi_include.h') + i = lines.index('#include "parse_c_type.h"\n') + lines[i:i+1] = self._rel_readlines('parse_c_type.h') + prnt(''.join(lines)) + # + # if we have ffi._embedding != None, we give it here as a macro + # and include an extra file + base_module_name = self.module_name.split('.')[-1] + if self.ffi._embedding is not None: + prnt('#define _CFFI_MODULE_NAME "%s"' % (self.module_name,)) + prnt('static const char _CFFI_PYTHON_STARTUP_CODE[] = {') + self._print_string_literal_in_array(self.ffi._embedding) + prnt('0 };') + prnt('#ifdef PYPY_VERSION') + prnt('# define _CFFI_PYTHON_STARTUP_FUNC _cffi_pypyinit_%s' % ( + base_module_name,)) + prnt('#elif PY_MAJOR_VERSION >= 3') + prnt('# define _CFFI_PYTHON_STARTUP_FUNC PyInit_%s' % ( + base_module_name,)) + prnt('#else') + prnt('# define _CFFI_PYTHON_STARTUP_FUNC init%s' % ( + base_module_name,)) + prnt('#endif') + lines = self._rel_readlines('_embedding.h') + i = lines.index('#include "_cffi_errors.h"\n') + lines[i:i+1] = self._rel_readlines('_cffi_errors.h') + prnt(''.join(lines)) + self.needs_version(VERSION_EMBEDDED) + # + # then paste the C source given by the user, verbatim. + prnt('/************************************************************/') + prnt() + prnt(preamble) + prnt() + prnt('/************************************************************/') + prnt() + # + # the declaration of '_cffi_types' + prnt('static void *_cffi_types[] = {') + typeindex2type = dict([(i, tp) for (tp, i) in self._typesdict.items()]) + for i, op in enumerate(self.cffi_types): + comment = '' + if i in typeindex2type: + comment = ' // ' + typeindex2type[i]._get_c_name() + prnt('/* %2d */ %s,%s' % (i, op.as_c_expr(), comment)) + if not self.cffi_types: + prnt(' 0') + prnt('};') + prnt() + # + # call generate_cpy_xxx_decl(), for every xxx found from + # ffi._parser._declarations. This generates all the functions. + self._seen_constants = set() + self._generate("decl") + # + # the declaration of '_cffi_globals' and '_cffi_typenames' + nums = {} + for step_name in self.ALL_STEPS: + lst = self._lsts[step_name] + nums[step_name] = len(lst) + if nums[step_name] > 0: + prnt('static const struct _cffi_%s_s _cffi_%ss[] = {' % ( + step_name, step_name)) + for entry in lst: + prnt(entry.as_c_expr()) + prnt('};') + prnt() + # + # the declaration of '_cffi_includes' + if self.ffi._included_ffis: + prnt('static const char * const _cffi_includes[] = {') + for ffi_to_include in self.ffi._included_ffis: + try: + included_module_name, included_source = ( + ffi_to_include._assigned_source[:2]) + except AttributeError: + raise VerificationError( + "ffi object %r includes %r, but the latter has not " + "been prepared with set_source()" % ( + self.ffi, ffi_to_include,)) + if included_source is None: + raise VerificationError( + "not implemented yet: ffi.include() of a Python-based " + "ffi inside a C-based ffi") + prnt(' "%s",' % (included_module_name,)) + prnt(' NULL') + prnt('};') + prnt() + # + # the declaration of '_cffi_type_context' + prnt('static const struct _cffi_type_context_s _cffi_type_context = {') + prnt(' _cffi_types,') + for step_name in self.ALL_STEPS: + if nums[step_name] > 0: + prnt(' _cffi_%ss,' % step_name) + else: + prnt(' NULL, /* no %ss */' % step_name) + for step_name in self.ALL_STEPS: + if step_name != "field": + prnt(' %d, /* num_%ss */' % (nums[step_name], step_name)) + if self.ffi._included_ffis: + prnt(' _cffi_includes,') + else: + prnt(' NULL, /* no includes */') + prnt(' %d, /* num_types */' % (len(self.cffi_types),)) + flags = 0 + if self._num_externpy > 0 or self.ffi._embedding is not None: + flags |= 1 # set to mean that we use extern "Python" + prnt(' %d, /* flags */' % flags) + prnt('};') + prnt() + # + # the init function + prnt('#ifdef __GNUC__') + prnt('# pragma GCC visibility push(default) /* for -fvisibility= */') + prnt('#endif') + prnt() + prnt('#ifdef PYPY_VERSION') + prnt('PyMODINIT_FUNC') + prnt('_cffi_pypyinit_%s(const void *p[])' % (base_module_name,)) + prnt('{') + if flags & 1: + prnt(' if (((intptr_t)p[0]) >= 0x0A03) {') + prnt(' _cffi_call_python_org = ' + '(void(*)(struct _cffi_externpy_s *, char *))p[1];') + prnt(' }') + prnt(' p[0] = (const void *)0x%x;' % self._version) + prnt(' p[1] = &_cffi_type_context;') + prnt('#if PY_MAJOR_VERSION >= 3') + prnt(' return NULL;') + prnt('#endif') + prnt('}') + # on Windows, distutils insists on putting init_cffi_xyz in + # 'export_symbols', so instead of fighting it, just give up and + # give it one + prnt('# ifdef _MSC_VER') + prnt(' PyMODINIT_FUNC') + prnt('# if PY_MAJOR_VERSION >= 3') + prnt(' PyInit_%s(void) { return NULL; }' % (base_module_name,)) + prnt('# else') + prnt(' init%s(void) { }' % (base_module_name,)) + prnt('# endif') + prnt('# endif') + prnt('#elif PY_MAJOR_VERSION >= 3') + prnt('PyMODINIT_FUNC') + prnt('PyInit_%s(void)' % (base_module_name,)) + prnt('{') + prnt(' return _cffi_init("%s", 0x%x, &_cffi_type_context);' % ( + self.module_name, self._version)) + prnt('}') + prnt('#else') + prnt('PyMODINIT_FUNC') + prnt('init%s(void)' % (base_module_name,)) + prnt('{') + prnt(' _cffi_init("%s", 0x%x, &_cffi_type_context);' % ( + self.module_name, self._version)) + prnt('}') + prnt('#endif') + prnt() + prnt('#ifdef __GNUC__') + prnt('# pragma GCC visibility pop') + prnt('#endif') + self._version = None + + def _to_py(self, x): + if isinstance(x, str): + return "b'%s'" % (x,) + if isinstance(x, (list, tuple)): + rep = [self._to_py(item) for item in x] + if len(rep) == 1: + rep.append('') + return "(%s)" % (','.join(rep),) + return x.as_python_expr() # Py2: unicode unexpected; Py3: bytes unexp. + + def write_py_source_to_f(self, f): + self._f = f + prnt = self._prnt + # + # header + prnt("# auto-generated file") + prnt("import _cffi_backend") + # + # the 'import' of the included ffis + num_includes = len(self.ffi._included_ffis or ()) + for i in range(num_includes): + ffi_to_include = self.ffi._included_ffis[i] + try: + included_module_name, included_source = ( + ffi_to_include._assigned_source[:2]) + except AttributeError: + raise VerificationError( + "ffi object %r includes %r, but the latter has not " + "been prepared with set_source()" % ( + self.ffi, ffi_to_include,)) + if included_source is not None: + raise VerificationError( + "not implemented yet: ffi.include() of a C-based " + "ffi inside a Python-based ffi") + prnt('from %s import ffi as _ffi%d' % (included_module_name, i)) + prnt() + prnt("ffi = _cffi_backend.FFI('%s'," % (self.module_name,)) + prnt(" _version = 0x%x," % (self._version,)) + self._version = None + # + # the '_types' keyword argument + self.cffi_types = tuple(self.cffi_types) # don't change any more + types_lst = [op.as_python_bytes() for op in self.cffi_types] + prnt(' _types = %s,' % (self._to_py(''.join(types_lst)),)) + typeindex2type = dict([(i, tp) for (tp, i) in self._typesdict.items()]) + # + # the keyword arguments from ALL_STEPS + for step_name in self.ALL_STEPS: + lst = self._lsts[step_name] + if len(lst) > 0 and step_name != "field": + prnt(' _%ss = %s,' % (step_name, self._to_py(lst))) + # + # the '_includes' keyword argument + if num_includes > 0: + prnt(' _includes = (%s,),' % ( + ', '.join(['_ffi%d' % i for i in range(num_includes)]),)) + # + # the footer + prnt(')') + + # ---------- + + def _gettypenum(self, type): + # a KeyError here is a bug. please report it! :-) + return self._typesdict[type] + + def _convert_funcarg_to_c(self, tp, fromvar, tovar, errcode): + extraarg = '' + if isinstance(tp, model.BasePrimitiveType) and not tp.is_complex_type(): + if tp.is_integer_type() and tp.name != '_Bool': + converter = '_cffi_to_c_int' + extraarg = ', %s' % tp.name + elif isinstance(tp, model.UnknownFloatType): + # don't check with is_float_type(): it may be a 'long + # double' here, and _cffi_to_c_double would loose precision + converter = '(%s)_cffi_to_c_double' % (tp.get_c_name(''),) + else: + cname = tp.get_c_name('') + converter = '(%s)_cffi_to_c_%s' % (cname, + tp.name.replace(' ', '_')) + if cname in ('char16_t', 'char32_t'): + self.needs_version(VERSION_CHAR16CHAR32) + errvalue = '-1' + # + elif isinstance(tp, model.PointerType): + self._convert_funcarg_to_c_ptr_or_array(tp, fromvar, + tovar, errcode) + return + # + elif (isinstance(tp, model.StructOrUnionOrEnum) or + isinstance(tp, model.BasePrimitiveType)): + # a struct (not a struct pointer) as a function argument; + # or, a complex (the same code works) + self._prnt(' if (_cffi_to_c((char *)&%s, _cffi_type(%d), %s) < 0)' + % (tovar, self._gettypenum(tp), fromvar)) + self._prnt(' %s;' % errcode) + return + # + elif isinstance(tp, model.FunctionPtrType): + converter = '(%s)_cffi_to_c_pointer' % tp.get_c_name('') + extraarg = ', _cffi_type(%d)' % self._gettypenum(tp) + errvalue = 'NULL' + # + else: + raise NotImplementedError(tp) + # + self._prnt(' %s = %s(%s%s);' % (tovar, converter, fromvar, extraarg)) + self._prnt(' if (%s == (%s)%s && PyErr_Occurred())' % ( + tovar, tp.get_c_name(''), errvalue)) + self._prnt(' %s;' % errcode) + + def _extra_local_variables(self, tp, localvars, freelines): + if isinstance(tp, model.PointerType): + localvars.add('Py_ssize_t datasize') + localvars.add('struct _cffi_freeme_s *large_args_free = NULL') + freelines.add('if (large_args_free != NULL)' + ' _cffi_free_array_arguments(large_args_free);') + + def _convert_funcarg_to_c_ptr_or_array(self, tp, fromvar, tovar, errcode): + self._prnt(' datasize = _cffi_prepare_pointer_call_argument(') + self._prnt(' _cffi_type(%d), %s, (char **)&%s);' % ( + self._gettypenum(tp), fromvar, tovar)) + self._prnt(' if (datasize != 0) {') + self._prnt(' %s = ((size_t)datasize) <= 640 ? ' + '(%s)alloca((size_t)datasize) : NULL;' % ( + tovar, tp.get_c_name(''))) + self._prnt(' if (_cffi_convert_array_argument(_cffi_type(%d), %s, ' + '(char **)&%s,' % (self._gettypenum(tp), fromvar, tovar)) + self._prnt(' datasize, &large_args_free) < 0)') + self._prnt(' %s;' % errcode) + self._prnt(' }') + + def _convert_expr_from_c(self, tp, var, context): + if isinstance(tp, model.BasePrimitiveType): + if tp.is_integer_type() and tp.name != '_Bool': + return '_cffi_from_c_int(%s, %s)' % (var, tp.name) + elif isinstance(tp, model.UnknownFloatType): + return '_cffi_from_c_double(%s)' % (var,) + elif tp.name != 'long double' and not tp.is_complex_type(): + cname = tp.name.replace(' ', '_') + if cname in ('char16_t', 'char32_t'): + self.needs_version(VERSION_CHAR16CHAR32) + return '_cffi_from_c_%s(%s)' % (cname, var) + else: + return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, (model.PointerType, model.FunctionPtrType)): + return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, model.ArrayType): + return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( + var, self._gettypenum(model.PointerType(tp.item))) + elif isinstance(tp, model.StructOrUnion): + if tp.fldnames is None: + raise TypeError("'%s' is used as %s, but is opaque" % ( + tp._get_c_name(), context)) + return '_cffi_from_c_struct((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, model.EnumType): + return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + else: + raise NotImplementedError(tp) + + # ---------- + # typedefs + + def _typedef_type(self, tp, name): + return self._global_type(tp, "(*(%s *)0)" % (name,)) + + def _generate_cpy_typedef_collecttype(self, tp, name): + self._do_collect_type(self._typedef_type(tp, name)) + + def _generate_cpy_typedef_decl(self, tp, name): + pass + + def _typedef_ctx(self, tp, name): + type_index = self._typesdict[tp] + self._lsts["typename"].append(TypenameExpr(name, type_index)) + + def _generate_cpy_typedef_ctx(self, tp, name): + tp = self._typedef_type(tp, name) + self._typedef_ctx(tp, name) + if getattr(tp, "origin", None) == "unknown_type": + self._struct_ctx(tp, tp.name, approxname=None) + elif isinstance(tp, model.NamedPointerType): + self._struct_ctx(tp.totype, tp.totype.name, approxname=tp.name, + named_ptr=tp) + + # ---------- + # function declarations + + def _generate_cpy_function_collecttype(self, tp, name): + self._do_collect_type(tp.as_raw_function()) + if tp.ellipsis and not self.target_is_python: + self._do_collect_type(tp) + + def _generate_cpy_function_decl(self, tp, name): + assert not self.target_is_python + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + # cannot support vararg functions better than this: check for its + # exact type (including the fixed arguments), and build it as a + # constant function pointer (no CPython wrapper) + self._generate_cpy_constant_decl(tp, name) + return + prnt = self._prnt + numargs = len(tp.args) + if numargs == 0: + argname = 'noarg' + elif numargs == 1: + argname = 'arg0' + else: + argname = 'args' + # + # ------------------------------ + # the 'd' version of the function, only for addressof(lib, 'func') + arguments = [] + call_arguments = [] + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + arguments.append(type.get_c_name(' x%d' % i, context)) + call_arguments.append('x%d' % i) + repr_arguments = ', '.join(arguments) + repr_arguments = repr_arguments or 'void' + if tp.abi: + abi = tp.abi + ' ' + else: + abi = '' + name_and_arguments = '%s_cffi_d_%s(%s)' % (abi, name, repr_arguments) + prnt('static %s' % (tp.result.get_c_name(name_and_arguments),)) + prnt('{') + call_arguments = ', '.join(call_arguments) + result_code = 'return ' + if isinstance(tp.result, model.VoidType): + result_code = '' + prnt(' %s%s(%s);' % (result_code, name, call_arguments)) + prnt('}') + # + prnt('#ifndef PYPY_VERSION') # ------------------------------ + # + prnt('static PyObject *') + prnt('_cffi_f_%s(PyObject *self, PyObject *%s)' % (name, argname)) + prnt('{') + # + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + arg = type.get_c_name(' x%d' % i, context) + prnt(' %s;' % arg) + # + localvars = set() + freelines = set() + for type in tp.args: + self._extra_local_variables(type, localvars, freelines) + for decl in sorted(localvars): + prnt(' %s;' % (decl,)) + # + if not isinstance(tp.result, model.VoidType): + result_code = 'result = ' + context = 'result of %s' % name + result_decl = ' %s;' % tp.result.get_c_name(' result', context) + prnt(result_decl) + prnt(' PyObject *pyresult;') + else: + result_decl = None + result_code = '' + # + if len(tp.args) > 1: + rng = range(len(tp.args)) + for i in rng: + prnt(' PyObject *arg%d;' % i) + prnt() + prnt(' if (!PyArg_UnpackTuple(args, "%s", %d, %d, %s))' % ( + name, len(rng), len(rng), + ', '.join(['&arg%d' % i for i in rng]))) + prnt(' return NULL;') + prnt() + # + for i, type in enumerate(tp.args): + self._convert_funcarg_to_c(type, 'arg%d' % i, 'x%d' % i, + 'return NULL') + prnt() + # + prnt(' Py_BEGIN_ALLOW_THREADS') + prnt(' _cffi_restore_errno();') + call_arguments = ['x%d' % i for i in range(len(tp.args))] + call_arguments = ', '.join(call_arguments) + prnt(' { %s%s(%s); }' % (result_code, name, call_arguments)) + prnt(' _cffi_save_errno();') + prnt(' Py_END_ALLOW_THREADS') + prnt() + # + prnt(' (void)self; /* unused */') + if numargs == 0: + prnt(' (void)noarg; /* unused */') + if result_code: + prnt(' pyresult = %s;' % + self._convert_expr_from_c(tp.result, 'result', 'result type')) + for freeline in freelines: + prnt(' ' + freeline) + prnt(' return pyresult;') + else: + for freeline in freelines: + prnt(' ' + freeline) + prnt(' Py_INCREF(Py_None);') + prnt(' return Py_None;') + prnt('}') + # + prnt('#else') # ------------------------------ + # + # the PyPy version: need to replace struct/union arguments with + # pointers, and if the result is a struct/union, insert a first + # arg that is a pointer to the result. We also do that for + # complex args and return type. + def need_indirection(type): + return (isinstance(type, model.StructOrUnion) or + (isinstance(type, model.PrimitiveType) and + type.is_complex_type())) + difference = False + arguments = [] + call_arguments = [] + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + indirection = '' + if need_indirection(type): + indirection = '*' + difference = True + arg = type.get_c_name(' %sx%d' % (indirection, i), context) + arguments.append(arg) + call_arguments.append('%sx%d' % (indirection, i)) + tp_result = tp.result + if need_indirection(tp_result): + context = 'result of %s' % name + arg = tp_result.get_c_name(' *result', context) + arguments.insert(0, arg) + tp_result = model.void_type + result_decl = None + result_code = '*result = ' + difference = True + if difference: + repr_arguments = ', '.join(arguments) + repr_arguments = repr_arguments or 'void' + name_and_arguments = '%s_cffi_f_%s(%s)' % (abi, name, + repr_arguments) + prnt('static %s' % (tp_result.get_c_name(name_and_arguments),)) + prnt('{') + if result_decl: + prnt(result_decl) + call_arguments = ', '.join(call_arguments) + prnt(' { %s%s(%s); }' % (result_code, name, call_arguments)) + if result_decl: + prnt(' return result;') + prnt('}') + else: + prnt('# define _cffi_f_%s _cffi_d_%s' % (name, name)) + # + prnt('#endif') # ------------------------------ + prnt() + + def _generate_cpy_function_ctx(self, tp, name): + if tp.ellipsis and not self.target_is_python: + self._generate_cpy_constant_ctx(tp, name) + return + type_index = self._typesdict[tp.as_raw_function()] + numargs = len(tp.args) + if self.target_is_python: + meth_kind = OP_DLOPEN_FUNC + elif numargs == 0: + meth_kind = OP_CPYTHON_BLTN_N # 'METH_NOARGS' + elif numargs == 1: + meth_kind = OP_CPYTHON_BLTN_O # 'METH_O' + else: + meth_kind = OP_CPYTHON_BLTN_V # 'METH_VARARGS' + self._lsts["global"].append( + GlobalExpr(name, '_cffi_f_%s' % name, + CffiOp(meth_kind, type_index), + size='_cffi_d_%s' % name)) + + # ---------- + # named structs or unions + + def _field_type(self, tp_struct, field_name, tp_field): + if isinstance(tp_field, model.ArrayType): + actual_length = tp_field.length + if actual_length == '...': + ptr_struct_name = tp_struct.get_c_name('*') + actual_length = '_cffi_array_len(((%s)0)->%s)' % ( + ptr_struct_name, field_name) + tp_item = self._field_type(tp_struct, '%s[0]' % field_name, + tp_field.item) + tp_field = model.ArrayType(tp_item, actual_length) + return tp_field + + def _struct_collecttype(self, tp): + self._do_collect_type(tp) + if self.target_is_python: + # also requires nested anon struct/unions in ABI mode, recursively + for fldtype in tp.anonymous_struct_fields(): + self._struct_collecttype(fldtype) + + def _struct_decl(self, tp, cname, approxname): + if tp.fldtypes is None: + return + prnt = self._prnt + checkfuncname = '_cffi_checkfld_%s' % (approxname,) + prnt('_CFFI_UNUSED_FN') + prnt('static void %s(%s *p)' % (checkfuncname, cname)) + prnt('{') + prnt(' /* only to generate compile-time warnings or errors */') + prnt(' (void)p;') + for fname, ftype, fbitsize, fqual in self._enum_fields(tp): + try: + if ftype.is_integer_type() or fbitsize >= 0: + # accept all integers, but complain on float or double + if fname != '': + prnt(" (void)((p->%s) | 0); /* check that '%s.%s' is " + "an integer */" % (fname, cname, fname)) + continue + # only accept exactly the type declared, except that '[]' + # is interpreted as a '*' and so will match any array length. + # (It would also match '*', but that's harder to detect...) + while (isinstance(ftype, model.ArrayType) + and (ftype.length is None or ftype.length == '...')): + ftype = ftype.item + fname = fname + '[0]' + prnt(' { %s = &p->%s; (void)tmp; }' % ( + ftype.get_c_name('*tmp', 'field %r'%fname, quals=fqual), + fname)) + except VerificationError as e: + prnt(' /* %s */' % str(e)) # cannot verify it, ignore + prnt('}') + prnt('struct _cffi_align_%s { char x; %s y; };' % (approxname, cname)) + prnt() + + def _struct_ctx(self, tp, cname, approxname, named_ptr=None): + type_index = self._typesdict[tp] + reason_for_not_expanding = None + flags = [] + if isinstance(tp, model.UnionType): + flags.append("_CFFI_F_UNION") + if tp.fldtypes is None: + flags.append("_CFFI_F_OPAQUE") + reason_for_not_expanding = "opaque" + if (tp not in self.ffi._parser._included_declarations and + (named_ptr is None or + named_ptr not in self.ffi._parser._included_declarations)): + if tp.fldtypes is None: + pass # opaque + elif tp.partial or any(tp.anonymous_struct_fields()): + pass # field layout obtained silently from the C compiler + else: + flags.append("_CFFI_F_CHECK_FIELDS") + if tp.packed: + if tp.packed > 1: + raise NotImplementedError( + "%r is declared with 'pack=%r'; only 0 or 1 are " + "supported in API mode (try to use \"...;\", which " + "does not require a 'pack' declaration)" % + (tp, tp.packed)) + flags.append("_CFFI_F_PACKED") + else: + flags.append("_CFFI_F_EXTERNAL") + reason_for_not_expanding = "external" + flags = '|'.join(flags) or '0' + c_fields = [] + if reason_for_not_expanding is None: + enumfields = list(self._enum_fields(tp)) + for fldname, fldtype, fbitsize, fqual in enumfields: + fldtype = self._field_type(tp, fldname, fldtype) + self._check_not_opaque(fldtype, + "field '%s.%s'" % (tp.name, fldname)) + # cname is None for _add_missing_struct_unions() only + op = OP_NOOP + if fbitsize >= 0: + op = OP_BITFIELD + size = '%d /* bits */' % fbitsize + elif cname is None or ( + isinstance(fldtype, model.ArrayType) and + fldtype.length is None): + size = '(size_t)-1' + else: + size = 'sizeof(((%s)0)->%s)' % ( + tp.get_c_name('*') if named_ptr is None + else named_ptr.name, + fldname) + if cname is None or fbitsize >= 0: + offset = '(size_t)-1' + elif named_ptr is not None: + offset = '((char *)&((%s)4096)->%s) - (char *)4096' % ( + named_ptr.name, fldname) + else: + offset = 'offsetof(%s, %s)' % (tp.get_c_name(''), fldname) + c_fields.append( + FieldExpr(fldname, offset, size, fbitsize, + CffiOp(op, self._typesdict[fldtype]))) + first_field_index = len(self._lsts["field"]) + self._lsts["field"].extend(c_fields) + # + if cname is None: # unknown name, for _add_missing_struct_unions + size = '(size_t)-2' + align = -2 + comment = "unnamed" + else: + if named_ptr is not None: + size = 'sizeof(*(%s)0)' % (named_ptr.name,) + align = '-1 /* unknown alignment */' + else: + size = 'sizeof(%s)' % (cname,) + align = 'offsetof(struct _cffi_align_%s, y)' % (approxname,) + comment = None + else: + size = '(size_t)-1' + align = -1 + first_field_index = -1 + comment = reason_for_not_expanding + self._lsts["struct_union"].append( + StructUnionExpr(tp.name, type_index, flags, size, align, comment, + first_field_index, c_fields)) + self._seen_struct_unions.add(tp) + + def _check_not_opaque(self, tp, location): + while isinstance(tp, model.ArrayType): + tp = tp.item + if isinstance(tp, model.StructOrUnion) and tp.fldtypes is None: + raise TypeError( + "%s is of an opaque type (not declared in cdef())" % location) + + def _add_missing_struct_unions(self): + # not very nice, but some struct declarations might be missing + # because they don't have any known C name. Check that they are + # not partial (we can't complete or verify them!) and emit them + # anonymously. + lst = list(self._struct_unions.items()) + lst.sort(key=lambda tp_order: tp_order[1]) + for tp, order in lst: + if tp not in self._seen_struct_unions: + if tp.partial: + raise NotImplementedError("internal inconsistency: %r is " + "partial but was not seen at " + "this point" % (tp,)) + if tp.name.startswith('$') and tp.name[1:].isdigit(): + approxname = tp.name[1:] + elif tp.name == '_IO_FILE' and tp.forcename == 'FILE': + approxname = 'FILE' + self._typedef_ctx(tp, 'FILE') + else: + raise NotImplementedError("internal inconsistency: %r" % + (tp,)) + self._struct_ctx(tp, None, approxname) + + def _generate_cpy_struct_collecttype(self, tp, name): + self._struct_collecttype(tp) + _generate_cpy_union_collecttype = _generate_cpy_struct_collecttype + + def _struct_names(self, tp): + cname = tp.get_c_name('') + if ' ' in cname: + return cname, cname.replace(' ', '_') + else: + return cname, '_' + cname + + def _generate_cpy_struct_decl(self, tp, name): + self._struct_decl(tp, *self._struct_names(tp)) + _generate_cpy_union_decl = _generate_cpy_struct_decl + + def _generate_cpy_struct_ctx(self, tp, name): + self._struct_ctx(tp, *self._struct_names(tp)) + _generate_cpy_union_ctx = _generate_cpy_struct_ctx + + # ---------- + # 'anonymous' declarations. These are produced for anonymous structs + # or unions; the 'name' is obtained by a typedef. + + def _generate_cpy_anonymous_collecttype(self, tp, name): + if isinstance(tp, model.EnumType): + self._generate_cpy_enum_collecttype(tp, name) + else: + self._struct_collecttype(tp) + + def _generate_cpy_anonymous_decl(self, tp, name): + if isinstance(tp, model.EnumType): + self._generate_cpy_enum_decl(tp) + else: + self._struct_decl(tp, name, 'typedef_' + name) + + def _generate_cpy_anonymous_ctx(self, tp, name): + if isinstance(tp, model.EnumType): + self._enum_ctx(tp, name) + else: + self._struct_ctx(tp, name, 'typedef_' + name) + + # ---------- + # constants, declared with "static const ..." + + def _generate_cpy_const(self, is_int, name, tp=None, category='const', + check_value=None): + if (category, name) in self._seen_constants: + raise VerificationError( + "duplicate declaration of %s '%s'" % (category, name)) + self._seen_constants.add((category, name)) + # + prnt = self._prnt + funcname = '_cffi_%s_%s' % (category, name) + if is_int: + prnt('static int %s(unsigned long long *o)' % funcname) + prnt('{') + prnt(' int n = (%s) <= 0;' % (name,)) + prnt(' *o = (unsigned long long)((%s) | 0);' + ' /* check that %s is an integer */' % (name, name)) + if check_value is not None: + if check_value > 0: + check_value = '%dU' % (check_value,) + prnt(' if (!_cffi_check_int(*o, n, %s))' % (check_value,)) + prnt(' n |= 2;') + prnt(' return n;') + prnt('}') + else: + assert check_value is None + prnt('static void %s(char *o)' % funcname) + prnt('{') + prnt(' *(%s)o = %s;' % (tp.get_c_name('*'), name)) + prnt('}') + prnt() + + def _generate_cpy_constant_collecttype(self, tp, name): + is_int = tp.is_integer_type() + if not is_int or self.target_is_python: + self._do_collect_type(tp) + + def _generate_cpy_constant_decl(self, tp, name): + is_int = tp.is_integer_type() + self._generate_cpy_const(is_int, name, tp) + + def _generate_cpy_constant_ctx(self, tp, name): + if not self.target_is_python and tp.is_integer_type(): + type_op = CffiOp(OP_CONSTANT_INT, -1) + else: + if self.target_is_python: + const_kind = OP_DLOPEN_CONST + else: + const_kind = OP_CONSTANT + type_index = self._typesdict[tp] + type_op = CffiOp(const_kind, type_index) + self._lsts["global"].append( + GlobalExpr(name, '_cffi_const_%s' % name, type_op)) + + # ---------- + # enums + + def _generate_cpy_enum_collecttype(self, tp, name): + self._do_collect_type(tp) + + def _generate_cpy_enum_decl(self, tp, name=None): + for enumerator in tp.enumerators: + self._generate_cpy_const(True, enumerator) + + def _enum_ctx(self, tp, cname): + type_index = self._typesdict[tp] + type_op = CffiOp(OP_ENUM, -1) + if self.target_is_python: + tp.check_not_partial() + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + self._lsts["global"].append( + GlobalExpr(enumerator, '_cffi_const_%s' % enumerator, type_op, + check_value=enumvalue)) + # + if cname is not None and '$' not in cname and not self.target_is_python: + size = "sizeof(%s)" % cname + signed = "((%s)-1) <= 0" % cname + else: + basetp = tp.build_baseinttype(self.ffi, []) + size = self.ffi.sizeof(basetp) + signed = int(int(self.ffi.cast(basetp, -1)) < 0) + allenums = ",".join(tp.enumerators) + self._lsts["enum"].append( + EnumExpr(tp.name, type_index, size, signed, allenums)) + + def _generate_cpy_enum_ctx(self, tp, name): + self._enum_ctx(tp, tp._get_c_name()) + + # ---------- + # macros: for now only for integers + + def _generate_cpy_macro_collecttype(self, tp, name): + pass + + def _generate_cpy_macro_decl(self, tp, name): + if tp == '...': + check_value = None + else: + check_value = tp # an integer + self._generate_cpy_const(True, name, check_value=check_value) + + def _generate_cpy_macro_ctx(self, tp, name): + if tp == '...': + if self.target_is_python: + raise VerificationError( + "cannot use the syntax '...' in '#define %s ...' when " + "using the ABI mode" % (name,)) + check_value = None + else: + check_value = tp # an integer + type_op = CffiOp(OP_CONSTANT_INT, -1) + self._lsts["global"].append( + GlobalExpr(name, '_cffi_const_%s' % name, type_op, + check_value=check_value)) + + # ---------- + # global variables + + def _global_type(self, tp, global_name): + if isinstance(tp, model.ArrayType): + actual_length = tp.length + if actual_length == '...': + actual_length = '_cffi_array_len(%s)' % (global_name,) + tp_item = self._global_type(tp.item, '%s[0]' % global_name) + tp = model.ArrayType(tp_item, actual_length) + return tp + + def _generate_cpy_variable_collecttype(self, tp, name): + self._do_collect_type(self._global_type(tp, name)) + + def _generate_cpy_variable_decl(self, tp, name): + prnt = self._prnt + tp = self._global_type(tp, name) + if isinstance(tp, model.ArrayType) and tp.length is None: + tp = tp.item + ampersand = '' + else: + ampersand = '&' + # This code assumes that casts from "tp *" to "void *" is a + # no-op, i.e. a function that returns a "tp *" can be called + # as if it returned a "void *". This should be generally true + # on any modern machine. The only exception to that rule (on + # uncommon architectures, and as far as I can tell) might be + # if 'tp' were a function type, but that is not possible here. + # (If 'tp' is a function _pointer_ type, then casts from "fn_t + # **" to "void *" are again no-ops, as far as I can tell.) + decl = '*_cffi_var_%s(void)' % (name,) + prnt('static ' + tp.get_c_name(decl, quals=self._current_quals)) + prnt('{') + prnt(' return %s(%s);' % (ampersand, name)) + prnt('}') + prnt() + + def _generate_cpy_variable_ctx(self, tp, name): + tp = self._global_type(tp, name) + type_index = self._typesdict[tp] + if self.target_is_python: + op = OP_GLOBAL_VAR + else: + op = OP_GLOBAL_VAR_F + self._lsts["global"].append( + GlobalExpr(name, '_cffi_var_%s' % name, CffiOp(op, type_index))) + + # ---------- + # extern "Python" + + def _generate_cpy_extern_python_collecttype(self, tp, name): + assert isinstance(tp, model.FunctionPtrType) + self._do_collect_type(tp) + _generate_cpy_dllexport_python_collecttype = \ + _generate_cpy_extern_python_plus_c_collecttype = \ + _generate_cpy_extern_python_collecttype + + def _extern_python_decl(self, tp, name, tag_and_space): + prnt = self._prnt + if isinstance(tp.result, model.VoidType): + size_of_result = '0' + else: + context = 'result of %s' % name + size_of_result = '(int)sizeof(%s)' % ( + tp.result.get_c_name('', context),) + prnt('static struct _cffi_externpy_s _cffi_externpy__%s =' % name) + prnt(' { "%s.%s", %s, 0, 0 };' % ( + self.module_name, name, size_of_result)) + prnt() + # + arguments = [] + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + arg = type.get_c_name(' a%d' % i, context) + arguments.append(arg) + # + repr_arguments = ', '.join(arguments) + repr_arguments = repr_arguments or 'void' + name_and_arguments = '%s(%s)' % (name, repr_arguments) + if tp.abi == "__stdcall": + name_and_arguments = '_cffi_stdcall ' + name_and_arguments + # + def may_need_128_bits(tp): + return (isinstance(tp, model.PrimitiveType) and + tp.name == 'long double') + # + size_of_a = max(len(tp.args)*8, 8) + if may_need_128_bits(tp.result): + size_of_a = max(size_of_a, 16) + if isinstance(tp.result, model.StructOrUnion): + size_of_a = 'sizeof(%s) > %d ? sizeof(%s) : %d' % ( + tp.result.get_c_name(''), size_of_a, + tp.result.get_c_name(''), size_of_a) + prnt('%s%s' % (tag_and_space, tp.result.get_c_name(name_and_arguments))) + prnt('{') + prnt(' char a[%s];' % size_of_a) + prnt(' char *p = a;') + for i, type in enumerate(tp.args): + arg = 'a%d' % i + if (isinstance(type, model.StructOrUnion) or + may_need_128_bits(type)): + arg = '&' + arg + type = model.PointerType(type) + prnt(' *(%s)(p + %d) = %s;' % (type.get_c_name('*'), i*8, arg)) + prnt(' _cffi_call_python(&_cffi_externpy__%s, p);' % name) + if not isinstance(tp.result, model.VoidType): + prnt(' return *(%s)p;' % (tp.result.get_c_name('*'),)) + prnt('}') + prnt() + self._num_externpy += 1 + + def _generate_cpy_extern_python_decl(self, tp, name): + self._extern_python_decl(tp, name, 'static ') + + def _generate_cpy_dllexport_python_decl(self, tp, name): + self._extern_python_decl(tp, name, 'CFFI_DLLEXPORT ') + + def _generate_cpy_extern_python_plus_c_decl(self, tp, name): + self._extern_python_decl(tp, name, '') + + def _generate_cpy_extern_python_ctx(self, tp, name): + if self.target_is_python: + raise VerificationError( + "cannot use 'extern \"Python\"' in the ABI mode") + if tp.ellipsis: + raise NotImplementedError("a vararg function is extern \"Python\"") + type_index = self._typesdict[tp] + type_op = CffiOp(OP_EXTERN_PYTHON, type_index) + self._lsts["global"].append( + GlobalExpr(name, '&_cffi_externpy__%s' % name, type_op, name)) + + _generate_cpy_dllexport_python_ctx = \ + _generate_cpy_extern_python_plus_c_ctx = \ + _generate_cpy_extern_python_ctx + + def _print_string_literal_in_array(self, s): + prnt = self._prnt + prnt('// # NB. this is not a string because of a size limit in MSVC') + if not isinstance(s, bytes): # unicode + s = s.encode('utf-8') # -> bytes + else: + s.decode('utf-8') # got bytes, check for valid utf-8 + try: + s.decode('ascii') + except UnicodeDecodeError: + s = b'# -*- encoding: utf8 -*-\n' + s + for line in s.splitlines(True): + comment = line + if type('//') is bytes: # python2 + line = map(ord, line) # make a list of integers + else: # python3 + # type(line) is bytes, which enumerates like a list of integers + comment = ascii(comment)[1:-1] + prnt(('// ' + comment).rstrip()) + printed_line = '' + for c in line: + if len(printed_line) >= 76: + prnt(printed_line) + printed_line = '' + printed_line += '%d,' % (c,) + prnt(printed_line) + + # ---------- + # emitting the opcodes for individual types + + def _emit_bytecode_VoidType(self, tp, index): + self.cffi_types[index] = CffiOp(OP_PRIMITIVE, PRIM_VOID) + + def _emit_bytecode_PrimitiveType(self, tp, index): + prim_index = PRIMITIVE_TO_INDEX[tp.name] + self.cffi_types[index] = CffiOp(OP_PRIMITIVE, prim_index) + + def _emit_bytecode_UnknownIntegerType(self, tp, index): + s = ('_cffi_prim_int(sizeof(%s), (\n' + ' ((%s)-1) | 0 /* check that %s is an integer type */\n' + ' ) <= 0)' % (tp.name, tp.name, tp.name)) + self.cffi_types[index] = CffiOp(OP_PRIMITIVE, s) + + def _emit_bytecode_UnknownFloatType(self, tp, index): + s = ('_cffi_prim_float(sizeof(%s) *\n' + ' (((%s)1) / 2) * 2 /* integer => 0, float => 1 */\n' + ' )' % (tp.name, tp.name)) + self.cffi_types[index] = CffiOp(OP_PRIMITIVE, s) + + def _emit_bytecode_RawFunctionType(self, tp, index): + self.cffi_types[index] = CffiOp(OP_FUNCTION, self._typesdict[tp.result]) + index += 1 + for tp1 in tp.args: + realindex = self._typesdict[tp1] + if index != realindex: + if isinstance(tp1, model.PrimitiveType): + self._emit_bytecode_PrimitiveType(tp1, index) + else: + self.cffi_types[index] = CffiOp(OP_NOOP, realindex) + index += 1 + flags = int(tp.ellipsis) + if tp.abi is not None: + if tp.abi == '__stdcall': + flags |= 2 + else: + raise NotImplementedError("abi=%r" % (tp.abi,)) + self.cffi_types[index] = CffiOp(OP_FUNCTION_END, flags) + + def _emit_bytecode_PointerType(self, tp, index): + self.cffi_types[index] = CffiOp(OP_POINTER, self._typesdict[tp.totype]) + + _emit_bytecode_ConstPointerType = _emit_bytecode_PointerType + _emit_bytecode_NamedPointerType = _emit_bytecode_PointerType + + def _emit_bytecode_FunctionPtrType(self, tp, index): + raw = tp.as_raw_function() + self.cffi_types[index] = CffiOp(OP_POINTER, self._typesdict[raw]) + + def _emit_bytecode_ArrayType(self, tp, index): + item_index = self._typesdict[tp.item] + if tp.length is None: + self.cffi_types[index] = CffiOp(OP_OPEN_ARRAY, item_index) + elif tp.length == '...': + raise VerificationError( + "type %s badly placed: the '...' array length can only be " + "used on global arrays or on fields of structures" % ( + str(tp).replace('/*...*/', '...'),)) + else: + assert self.cffi_types[index + 1] == 'LEN' + self.cffi_types[index] = CffiOp(OP_ARRAY, item_index) + self.cffi_types[index + 1] = CffiOp(None, str(tp.length)) + + def _emit_bytecode_StructType(self, tp, index): + struct_index = self._struct_unions[tp] + self.cffi_types[index] = CffiOp(OP_STRUCT_UNION, struct_index) + _emit_bytecode_UnionType = _emit_bytecode_StructType + + def _emit_bytecode_EnumType(self, tp, index): + enum_index = self._enums[tp] + self.cffi_types[index] = CffiOp(OP_ENUM, enum_index) + + +if sys.version_info >= (3,): + NativeIO = io.StringIO +else: + class NativeIO(io.BytesIO): + def write(self, s): + if isinstance(s, unicode): + s = s.encode('ascii') + super(NativeIO, self).write(s) + +def _is_file_like(maybefile): + # compare to xml.etree.ElementTree._get_writer + return hasattr(maybefile, 'write') + +def _make_c_or_py_source(ffi, module_name, preamble, target_file, verbose): + if verbose: + print("generating %s" % (target_file,)) + recompiler = Recompiler(ffi, module_name, + target_is_python=(preamble is None)) + recompiler.collect_type_table() + recompiler.collect_step_tables() + if _is_file_like(target_file): + recompiler.write_source_to_f(target_file, preamble) + return True + f = NativeIO() + recompiler.write_source_to_f(f, preamble) + output = f.getvalue() + try: + with open(target_file, 'r') as f1: + if f1.read(len(output) + 1) != output: + raise IOError + if verbose: + print("(already up-to-date)") + return False # already up-to-date + except IOError: + tmp_file = '%s.~%d' % (target_file, os.getpid()) + with open(tmp_file, 'w') as f1: + f1.write(output) + try: + os.rename(tmp_file, target_file) + except OSError: + os.unlink(target_file) + os.rename(tmp_file, target_file) + return True + +def make_c_source(ffi, module_name, preamble, target_c_file, verbose=False): + assert preamble is not None + return _make_c_or_py_source(ffi, module_name, preamble, target_c_file, + verbose) + +def make_py_source(ffi, module_name, target_py_file, verbose=False): + return _make_c_or_py_source(ffi, module_name, None, target_py_file, + verbose) + +def _modname_to_file(outputdir, modname, extension): + parts = modname.split('.') + try: + os.makedirs(os.path.join(outputdir, *parts[:-1])) + except OSError: + pass + parts[-1] += extension + return os.path.join(outputdir, *parts), parts + + +# Aaargh. Distutils is not tested at all for the purpose of compiling +# DLLs that are not extension modules. Here are some hacks to work +# around that, in the _patch_for_*() functions... + +def _patch_meth(patchlist, cls, name, new_meth): + old = getattr(cls, name) + patchlist.append((cls, name, old)) + setattr(cls, name, new_meth) + return old + +def _unpatch_meths(patchlist): + for cls, name, old_meth in reversed(patchlist): + setattr(cls, name, old_meth) + +def _patch_for_embedding(patchlist): + if sys.platform == 'win32': + # we must not remove the manifest when building for embedding! + # FUTURE: this module was removed in setuptools 74; this is likely dead code and should be removed, + # since the toolchain it supports (VS2005-2008) is also long dead. + from cffi._shimmed_dist_utils import MSVCCompiler + if MSVCCompiler is not None: + _patch_meth(patchlist, MSVCCompiler, '_remove_visual_c_ref', + lambda self, manifest_file: manifest_file) + + if sys.platform == 'darwin': + # we must not make a '-bundle', but a '-dynamiclib' instead + from cffi._shimmed_dist_utils import CCompiler + def my_link_shared_object(self, *args, **kwds): + if '-bundle' in self.linker_so: + self.linker_so = list(self.linker_so) + i = self.linker_so.index('-bundle') + self.linker_so[i] = '-dynamiclib' + return old_link_shared_object(self, *args, **kwds) + old_link_shared_object = _patch_meth(patchlist, CCompiler, + 'link_shared_object', + my_link_shared_object) + +def _patch_for_target(patchlist, target): + from cffi._shimmed_dist_utils import build_ext + # if 'target' is different from '*', we need to patch some internal + # method to just return this 'target' value, instead of having it + # built from module_name + if target.endswith('.*'): + target = target[:-2] + if sys.platform == 'win32': + target += '.dll' + elif sys.platform == 'darwin': + target += '.dylib' + else: + target += '.so' + _patch_meth(patchlist, build_ext, 'get_ext_filename', + lambda self, ext_name: target) + + +def recompile(ffi, module_name, preamble, tmpdir='.', call_c_compiler=True, + c_file=None, source_extension='.c', extradir=None, + compiler_verbose=1, target=None, debug=None, + uses_ffiplatform=True, **kwds): + if not isinstance(module_name, str): + module_name = module_name.encode('ascii') + if ffi._windows_unicode: + ffi._apply_windows_unicode(kwds) + if preamble is not None: + if call_c_compiler and _is_file_like(c_file): + raise TypeError("Writing to file-like objects is not supported " + "with call_c_compiler=True") + embedding = (ffi._embedding is not None) + if embedding: + ffi._apply_embedding_fix(kwds) + if c_file is None: + c_file, parts = _modname_to_file(tmpdir, module_name, + source_extension) + if extradir: + parts = [extradir] + parts + ext_c_file = os.path.join(*parts) + else: + ext_c_file = c_file + # + if target is None: + if embedding: + target = '%s.*' % module_name + else: + target = '*' + # + if uses_ffiplatform: + ext = ffiplatform.get_extension(ext_c_file, module_name, **kwds) + else: + ext = None + updated = make_c_source(ffi, module_name, preamble, c_file, + verbose=compiler_verbose) + if call_c_compiler: + patchlist = [] + cwd = os.getcwd() + try: + if embedding: + _patch_for_embedding(patchlist) + if target != '*': + _patch_for_target(patchlist, target) + if compiler_verbose: + if tmpdir == '.': + msg = 'the current directory is' + else: + msg = 'setting the current directory to' + print('%s %r' % (msg, os.path.abspath(tmpdir))) + os.chdir(tmpdir) + outputfilename = ffiplatform.compile('.', ext, + compiler_verbose, debug) + finally: + os.chdir(cwd) + _unpatch_meths(patchlist) + return outputfilename + else: + return ext, updated + else: + if c_file is None: + c_file, _ = _modname_to_file(tmpdir, module_name, '.py') + updated = make_py_source(ffi, module_name, c_file, + verbose=compiler_verbose) + if call_c_compiler: + return c_file + else: + return None, updated + diff --git a/venv/lib/python3.11/site-packages/cffi/setuptools_ext.py b/venv/lib/python3.11/site-packages/cffi/setuptools_ext.py new file mode 100644 index 0000000..681b49d --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/setuptools_ext.py @@ -0,0 +1,216 @@ +import os +import sys + +try: + basestring +except NameError: + # Python 3.x + basestring = str + +def error(msg): + from cffi._shimmed_dist_utils import DistutilsSetupError + raise DistutilsSetupError(msg) + + +def execfile(filename, glob): + # We use execfile() (here rewritten for Python 3) instead of + # __import__() to load the build script. The problem with + # a normal import is that in some packages, the intermediate + # __init__.py files may already try to import the file that + # we are generating. + with open(filename) as f: + src = f.read() + src += '\n' # Python 2.6 compatibility + code = compile(src, filename, 'exec') + exec(code, glob, glob) + + +def add_cffi_module(dist, mod_spec): + from cffi.api import FFI + + if not isinstance(mod_spec, basestring): + error("argument to 'cffi_modules=...' must be a str or a list of str," + " not %r" % (type(mod_spec).__name__,)) + mod_spec = str(mod_spec) + try: + build_file_name, ffi_var_name = mod_spec.split(':') + except ValueError: + error("%r must be of the form 'path/build.py:ffi_variable'" % + (mod_spec,)) + if not os.path.exists(build_file_name): + ext = '' + rewritten = build_file_name.replace('.', '/') + '.py' + if os.path.exists(rewritten): + ext = ' (rewrite cffi_modules to [%r])' % ( + rewritten + ':' + ffi_var_name,) + error("%r does not name an existing file%s" % (build_file_name, ext)) + + mod_vars = {'__name__': '__cffi__', '__file__': build_file_name} + execfile(build_file_name, mod_vars) + + try: + ffi = mod_vars[ffi_var_name] + except KeyError: + error("%r: object %r not found in module" % (mod_spec, + ffi_var_name)) + if not isinstance(ffi, FFI): + ffi = ffi() # maybe it's a function instead of directly an ffi + if not isinstance(ffi, FFI): + error("%r is not an FFI instance (got %r)" % (mod_spec, + type(ffi).__name__)) + if not hasattr(ffi, '_assigned_source'): + error("%r: the set_source() method was not called" % (mod_spec,)) + module_name, source, source_extension, kwds = ffi._assigned_source + if ffi._windows_unicode: + kwds = kwds.copy() + ffi._apply_windows_unicode(kwds) + + if source is None: + _add_py_module(dist, ffi, module_name) + else: + _add_c_module(dist, ffi, module_name, source, source_extension, kwds) + +def _set_py_limited_api(Extension, kwds): + """ + Add py_limited_api to kwds if setuptools >= 26 is in use. + Do not alter the setting if it already exists. + Setuptools takes care of ignoring the flag on Python 2 and PyPy. + + CPython itself should ignore the flag in a debugging version + (by not listing .abi3.so in the extensions it supports), but + it doesn't so far, creating troubles. That's why we check + for "not hasattr(sys, 'gettotalrefcount')" (the 2.7 compatible equivalent + of 'd' not in sys.abiflags). (http://bugs.python.org/issue28401) + + On Windows, with CPython <= 3.4, it's better not to use py_limited_api + because virtualenv *still* doesn't copy PYTHON3.DLL on these versions. + Recently (2020) we started shipping only >= 3.5 wheels, though. So + we'll give it another try and set py_limited_api on Windows >= 3.5. + """ + from cffi import recompiler + + if ('py_limited_api' not in kwds and not hasattr(sys, 'gettotalrefcount') + and recompiler.USE_LIMITED_API): + import setuptools + try: + setuptools_major_version = int(setuptools.__version__.partition('.')[0]) + if setuptools_major_version >= 26: + kwds['py_limited_api'] = True + except ValueError: # certain development versions of setuptools + # If we don't know the version number of setuptools, we + # try to set 'py_limited_api' anyway. At worst, we get a + # warning. + kwds['py_limited_api'] = True + return kwds + +def _add_c_module(dist, ffi, module_name, source, source_extension, kwds): + # We are a setuptools extension. Need this build_ext for py_limited_api. + from setuptools.command.build_ext import build_ext + from cffi._shimmed_dist_utils import Extension, log, mkpath + from cffi import recompiler + + allsources = ['$PLACEHOLDER'] + allsources.extend(kwds.pop('sources', [])) + kwds = _set_py_limited_api(Extension, kwds) + ext = Extension(name=module_name, sources=allsources, **kwds) + + def make_mod(tmpdir, pre_run=None): + c_file = os.path.join(tmpdir, module_name + source_extension) + log.info("generating cffi module %r" % c_file) + mkpath(tmpdir) + # a setuptools-only, API-only hook: called with the "ext" and "ffi" + # arguments just before we turn the ffi into C code. To use it, + # subclass the 'distutils.command.build_ext.build_ext' class and + # add a method 'def pre_run(self, ext, ffi)'. + if pre_run is not None: + pre_run(ext, ffi) + updated = recompiler.make_c_source(ffi, module_name, source, c_file) + if not updated: + log.info("already up-to-date") + return c_file + + if dist.ext_modules is None: + dist.ext_modules = [] + dist.ext_modules.append(ext) + + base_class = dist.cmdclass.get('build_ext', build_ext) + class build_ext_make_mod(base_class): + def run(self): + if ext.sources[0] == '$PLACEHOLDER': + pre_run = getattr(self, 'pre_run', None) + ext.sources[0] = make_mod(self.build_temp, pre_run) + base_class.run(self) + dist.cmdclass['build_ext'] = build_ext_make_mod + # NB. multiple runs here will create multiple 'build_ext_make_mod' + # classes. Even in this case the 'build_ext' command should be + # run once; but just in case, the logic above does nothing if + # called again. + + +def _add_py_module(dist, ffi, module_name): + from setuptools.command.build_py import build_py + from setuptools.command.build_ext import build_ext + from cffi._shimmed_dist_utils import log, mkpath + from cffi import recompiler + + def generate_mod(py_file): + log.info("generating cffi module %r" % py_file) + mkpath(os.path.dirname(py_file)) + updated = recompiler.make_py_source(ffi, module_name, py_file) + if not updated: + log.info("already up-to-date") + + base_class = dist.cmdclass.get('build_py', build_py) + class build_py_make_mod(base_class): + def run(self): + base_class.run(self) + module_path = module_name.split('.') + module_path[-1] += '.py' + generate_mod(os.path.join(self.build_lib, *module_path)) + def get_source_files(self): + # This is called from 'setup.py sdist' only. Exclude + # the generate .py module in this case. + saved_py_modules = self.py_modules + try: + if saved_py_modules: + self.py_modules = [m for m in saved_py_modules + if m != module_name] + return base_class.get_source_files(self) + finally: + self.py_modules = saved_py_modules + dist.cmdclass['build_py'] = build_py_make_mod + + # distutils and setuptools have no notion I could find of a + # generated python module. If we don't add module_name to + # dist.py_modules, then things mostly work but there are some + # combination of options (--root and --record) that will miss + # the module. So we add it here, which gives a few apparently + # harmless warnings about not finding the file outside the + # build directory. + # Then we need to hack more in get_source_files(); see above. + if dist.py_modules is None: + dist.py_modules = [] + dist.py_modules.append(module_name) + + # the following is only for "build_ext -i" + base_class_2 = dist.cmdclass.get('build_ext', build_ext) + class build_ext_make_mod(base_class_2): + def run(self): + base_class_2.run(self) + if self.inplace: + # from get_ext_fullpath() in distutils/command/build_ext.py + module_path = module_name.split('.') + package = '.'.join(module_path[:-1]) + build_py = self.get_finalized_command('build_py') + package_dir = build_py.get_package_dir(package) + file_name = module_path[-1] + '.py' + generate_mod(os.path.join(package_dir, file_name)) + dist.cmdclass['build_ext'] = build_ext_make_mod + +def cffi_modules(dist, attr, value): + assert attr == 'cffi_modules' + if isinstance(value, basestring): + value = [value] + + for cffi_module in value: + add_cffi_module(dist, cffi_module) diff --git a/venv/lib/python3.11/site-packages/cffi/vengine_cpy.py b/venv/lib/python3.11/site-packages/cffi/vengine_cpy.py new file mode 100644 index 0000000..eb0b6f7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/vengine_cpy.py @@ -0,0 +1,1084 @@ +# +# DEPRECATED: implementation for ffi.verify() +# +import sys +from . import model +from .error import VerificationError +from . import _imp_emulation as imp + + +class VCPythonEngine(object): + _class_key = 'x' + _gen_python_module = True + + def __init__(self, verifier): + self.verifier = verifier + self.ffi = verifier.ffi + self._struct_pending_verification = {} + self._types_of_builtin_functions = {} + + def patch_extension_kwds(self, kwds): + pass + + def find_module(self, module_name, path, so_suffixes): + try: + f, filename, descr = imp.find_module(module_name, path) + except ImportError: + return None + if f is not None: + f.close() + # Note that after a setuptools installation, there are both .py + # and .so files with the same basename. The code here relies on + # imp.find_module() locating the .so in priority. + if descr[0] not in so_suffixes: + return None + return filename + + def collect_types(self): + self._typesdict = {} + self._generate("collecttype") + + def _prnt(self, what=''): + self._f.write(what + '\n') + + def _gettypenum(self, type): + # a KeyError here is a bug. please report it! :-) + return self._typesdict[type] + + def _do_collect_type(self, tp): + if ((not isinstance(tp, model.PrimitiveType) + or tp.name == 'long double') + and tp not in self._typesdict): + num = len(self._typesdict) + self._typesdict[tp] = num + + def write_source_to_f(self): + self.collect_types() + # + # The new module will have a _cffi_setup() function that receives + # objects from the ffi world, and that calls some setup code in + # the module. This setup code is split in several independent + # functions, e.g. one per constant. The functions are "chained" + # by ending in a tail call to each other. + # + # This is further split in two chained lists, depending on if we + # can do it at import-time or if we must wait for _cffi_setup() to + # provide us with the objects. This is needed because we + # need the values of the enum constants in order to build the + # that we may have to pass to _cffi_setup(). + # + # The following two 'chained_list_constants' items contains + # the head of these two chained lists, as a string that gives the + # call to do, if any. + self._chained_list_constants = ['((void)lib,0)', '((void)lib,0)'] + # + prnt = self._prnt + # first paste some standard set of lines that are mostly '#define' + prnt(cffimod_header) + prnt() + # then paste the C source given by the user, verbatim. + prnt(self.verifier.preamble) + prnt() + # + # call generate_cpy_xxx_decl(), for every xxx found from + # ffi._parser._declarations. This generates all the functions. + self._generate("decl") + # + # implement the function _cffi_setup_custom() as calling the + # head of the chained list. + self._generate_setup_custom() + prnt() + # + # produce the method table, including the entries for the + # generated Python->C function wrappers, which are done + # by generate_cpy_function_method(). + prnt('static PyMethodDef _cffi_methods[] = {') + self._generate("method") + prnt(' {"_cffi_setup", _cffi_setup, METH_VARARGS, NULL},') + prnt(' {NULL, NULL, 0, NULL} /* Sentinel */') + prnt('};') + prnt() + # + # standard init. + modname = self.verifier.get_module_name() + constants = self._chained_list_constants[False] + prnt('#if PY_MAJOR_VERSION >= 3') + prnt() + prnt('static struct PyModuleDef _cffi_module_def = {') + prnt(' PyModuleDef_HEAD_INIT,') + prnt(' "%s",' % modname) + prnt(' NULL,') + prnt(' -1,') + prnt(' _cffi_methods,') + prnt(' NULL, NULL, NULL, NULL') + prnt('};') + prnt() + prnt('PyMODINIT_FUNC') + prnt('PyInit_%s(void)' % modname) + prnt('{') + prnt(' PyObject *lib;') + prnt(' lib = PyModule_Create(&_cffi_module_def);') + prnt(' if (lib == NULL)') + prnt(' return NULL;') + prnt(' if (%s < 0 || _cffi_init() < 0) {' % (constants,)) + prnt(' Py_DECREF(lib);') + prnt(' return NULL;') + prnt(' }') + prnt(' return lib;') + prnt('}') + prnt() + prnt('#else') + prnt() + prnt('PyMODINIT_FUNC') + prnt('init%s(void)' % modname) + prnt('{') + prnt(' PyObject *lib;') + prnt(' lib = Py_InitModule("%s", _cffi_methods);' % modname) + prnt(' if (lib == NULL)') + prnt(' return;') + prnt(' if (%s < 0 || _cffi_init() < 0)' % (constants,)) + prnt(' return;') + prnt(' return;') + prnt('}') + prnt() + prnt('#endif') + + def load_library(self, flags=None): + # XXX review all usages of 'self' here! + # import it as a new extension module + imp.acquire_lock() + try: + if hasattr(sys, "getdlopenflags"): + previous_flags = sys.getdlopenflags() + try: + if hasattr(sys, "setdlopenflags") and flags is not None: + sys.setdlopenflags(flags) + module = imp.load_dynamic(self.verifier.get_module_name(), + self.verifier.modulefilename) + except ImportError as e: + error = "importing %r: %s" % (self.verifier.modulefilename, e) + raise VerificationError(error) + finally: + if hasattr(sys, "setdlopenflags"): + sys.setdlopenflags(previous_flags) + finally: + imp.release_lock() + # + # call loading_cpy_struct() to get the struct layout inferred by + # the C compiler + self._load(module, 'loading') + # + # the C code will need the objects. Collect them in + # order in a list. + revmapping = dict([(value, key) + for (key, value) in self._typesdict.items()]) + lst = [revmapping[i] for i in range(len(revmapping))] + lst = list(map(self.ffi._get_cached_btype, lst)) + # + # build the FFILibrary class and instance and call _cffi_setup(). + # this will set up some fields like '_cffi_types', and only then + # it will invoke the chained list of functions that will really + # build (notably) the constant objects, as if they are + # pointers, and store them as attributes on the 'library' object. + class FFILibrary(object): + _cffi_python_module = module + _cffi_ffi = self.ffi + _cffi_dir = [] + def __dir__(self): + return FFILibrary._cffi_dir + list(self.__dict__) + library = FFILibrary() + if module._cffi_setup(lst, VerificationError, library): + import warnings + warnings.warn("reimporting %r might overwrite older definitions" + % (self.verifier.get_module_name())) + # + # finally, call the loaded_cpy_xxx() functions. This will perform + # the final adjustments, like copying the Python->C wrapper + # functions from the module to the 'library' object, and setting + # up the FFILibrary class with properties for the global C variables. + self._load(module, 'loaded', library=library) + module._cffi_original_ffi = self.ffi + module._cffi_types_of_builtin_funcs = self._types_of_builtin_functions + return library + + def _get_declarations(self): + lst = [(key, tp) for (key, (tp, qual)) in + self.ffi._parser._declarations.items()] + lst.sort() + return lst + + def _generate(self, step_name): + for name, tp in self._get_declarations(): + kind, realname = name.split(' ', 1) + try: + method = getattr(self, '_generate_cpy_%s_%s' % (kind, + step_name)) + except AttributeError: + raise VerificationError( + "not implemented in verify(): %r" % name) + try: + method(tp, realname) + except Exception as e: + model.attach_exception_info(e, name) + raise + + def _load(self, module, step_name, **kwds): + for name, tp in self._get_declarations(): + kind, realname = name.split(' ', 1) + method = getattr(self, '_%s_cpy_%s' % (step_name, kind)) + try: + method(tp, realname, module, **kwds) + except Exception as e: + model.attach_exception_info(e, name) + raise + + def _generate_nothing(self, tp, name): + pass + + def _loaded_noop(self, tp, name, module, **kwds): + pass + + # ---------- + + def _convert_funcarg_to_c(self, tp, fromvar, tovar, errcode): + extraarg = '' + if isinstance(tp, model.PrimitiveType): + if tp.is_integer_type() and tp.name != '_Bool': + converter = '_cffi_to_c_int' + extraarg = ', %s' % tp.name + elif tp.is_complex_type(): + raise VerificationError( + "not implemented in verify(): complex types") + else: + converter = '(%s)_cffi_to_c_%s' % (tp.get_c_name(''), + tp.name.replace(' ', '_')) + errvalue = '-1' + # + elif isinstance(tp, model.PointerType): + self._convert_funcarg_to_c_ptr_or_array(tp, fromvar, + tovar, errcode) + return + # + elif isinstance(tp, (model.StructOrUnion, model.EnumType)): + # a struct (not a struct pointer) as a function argument + self._prnt(' if (_cffi_to_c((char *)&%s, _cffi_type(%d), %s) < 0)' + % (tovar, self._gettypenum(tp), fromvar)) + self._prnt(' %s;' % errcode) + return + # + elif isinstance(tp, model.FunctionPtrType): + converter = '(%s)_cffi_to_c_pointer' % tp.get_c_name('') + extraarg = ', _cffi_type(%d)' % self._gettypenum(tp) + errvalue = 'NULL' + # + else: + raise NotImplementedError(tp) + # + self._prnt(' %s = %s(%s%s);' % (tovar, converter, fromvar, extraarg)) + self._prnt(' if (%s == (%s)%s && PyErr_Occurred())' % ( + tovar, tp.get_c_name(''), errvalue)) + self._prnt(' %s;' % errcode) + + def _extra_local_variables(self, tp, localvars, freelines): + if isinstance(tp, model.PointerType): + localvars.add('Py_ssize_t datasize') + localvars.add('struct _cffi_freeme_s *large_args_free = NULL') + freelines.add('if (large_args_free != NULL)' + ' _cffi_free_array_arguments(large_args_free);') + + def _convert_funcarg_to_c_ptr_or_array(self, tp, fromvar, tovar, errcode): + self._prnt(' datasize = _cffi_prepare_pointer_call_argument(') + self._prnt(' _cffi_type(%d), %s, (char **)&%s);' % ( + self._gettypenum(tp), fromvar, tovar)) + self._prnt(' if (datasize != 0) {') + self._prnt(' %s = ((size_t)datasize) <= 640 ? ' + 'alloca((size_t)datasize) : NULL;' % (tovar,)) + self._prnt(' if (_cffi_convert_array_argument(_cffi_type(%d), %s, ' + '(char **)&%s,' % (self._gettypenum(tp), fromvar, tovar)) + self._prnt(' datasize, &large_args_free) < 0)') + self._prnt(' %s;' % errcode) + self._prnt(' }') + + def _convert_expr_from_c(self, tp, var, context): + if isinstance(tp, model.PrimitiveType): + if tp.is_integer_type() and tp.name != '_Bool': + return '_cffi_from_c_int(%s, %s)' % (var, tp.name) + elif tp.name != 'long double': + return '_cffi_from_c_%s(%s)' % (tp.name.replace(' ', '_'), var) + else: + return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, (model.PointerType, model.FunctionPtrType)): + return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, model.ArrayType): + return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( + var, self._gettypenum(model.PointerType(tp.item))) + elif isinstance(tp, model.StructOrUnion): + if tp.fldnames is None: + raise TypeError("'%s' is used as %s, but is opaque" % ( + tp._get_c_name(), context)) + return '_cffi_from_c_struct((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, model.EnumType): + return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + else: + raise NotImplementedError(tp) + + # ---------- + # typedefs: generates no code so far + + _generate_cpy_typedef_collecttype = _generate_nothing + _generate_cpy_typedef_decl = _generate_nothing + _generate_cpy_typedef_method = _generate_nothing + _loading_cpy_typedef = _loaded_noop + _loaded_cpy_typedef = _loaded_noop + + # ---------- + # function declarations + + def _generate_cpy_function_collecttype(self, tp, name): + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + self._do_collect_type(tp) + else: + # don't call _do_collect_type(tp) in this common case, + # otherwise test_autofilled_struct_as_argument fails + for type in tp.args: + self._do_collect_type(type) + self._do_collect_type(tp.result) + + def _generate_cpy_function_decl(self, tp, name): + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + # cannot support vararg functions better than this: check for its + # exact type (including the fixed arguments), and build it as a + # constant function pointer (no CPython wrapper) + self._generate_cpy_const(False, name, tp) + return + prnt = self._prnt + numargs = len(tp.args) + if numargs == 0: + argname = 'noarg' + elif numargs == 1: + argname = 'arg0' + else: + argname = 'args' + prnt('static PyObject *') + prnt('_cffi_f_%s(PyObject *self, PyObject *%s)' % (name, argname)) + prnt('{') + # + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + prnt(' %s;' % type.get_c_name(' x%d' % i, context)) + # + localvars = set() + freelines = set() + for type in tp.args: + self._extra_local_variables(type, localvars, freelines) + for decl in sorted(localvars): + prnt(' %s;' % (decl,)) + # + if not isinstance(tp.result, model.VoidType): + result_code = 'result = ' + context = 'result of %s' % name + prnt(' %s;' % tp.result.get_c_name(' result', context)) + prnt(' PyObject *pyresult;') + else: + result_code = '' + # + if len(tp.args) > 1: + rng = range(len(tp.args)) + for i in rng: + prnt(' PyObject *arg%d;' % i) + prnt() + prnt(' if (!PyArg_ParseTuple(args, "%s:%s", %s))' % ( + 'O' * numargs, name, ', '.join(['&arg%d' % i for i in rng]))) + prnt(' return NULL;') + prnt() + # + for i, type in enumerate(tp.args): + self._convert_funcarg_to_c(type, 'arg%d' % i, 'x%d' % i, + 'return NULL') + prnt() + # + prnt(' Py_BEGIN_ALLOW_THREADS') + prnt(' _cffi_restore_errno();') + prnt(' { %s%s(%s); }' % ( + result_code, name, + ', '.join(['x%d' % i for i in range(len(tp.args))]))) + prnt(' _cffi_save_errno();') + prnt(' Py_END_ALLOW_THREADS') + prnt() + # + prnt(' (void)self; /* unused */') + if numargs == 0: + prnt(' (void)noarg; /* unused */') + if result_code: + prnt(' pyresult = %s;' % + self._convert_expr_from_c(tp.result, 'result', 'result type')) + for freeline in freelines: + prnt(' ' + freeline) + prnt(' return pyresult;') + else: + for freeline in freelines: + prnt(' ' + freeline) + prnt(' Py_INCREF(Py_None);') + prnt(' return Py_None;') + prnt('}') + prnt() + + def _generate_cpy_function_method(self, tp, name): + if tp.ellipsis: + return + numargs = len(tp.args) + if numargs == 0: + meth = 'METH_NOARGS' + elif numargs == 1: + meth = 'METH_O' + else: + meth = 'METH_VARARGS' + self._prnt(' {"%s", _cffi_f_%s, %s, NULL},' % (name, name, meth)) + + _loading_cpy_function = _loaded_noop + + def _loaded_cpy_function(self, tp, name, module, library): + if tp.ellipsis: + return + func = getattr(module, name) + setattr(library, name, func) + self._types_of_builtin_functions[func] = tp + + # ---------- + # named structs + + _generate_cpy_struct_collecttype = _generate_nothing + def _generate_cpy_struct_decl(self, tp, name): + assert name == tp.name + self._generate_struct_or_union_decl(tp, 'struct', name) + def _generate_cpy_struct_method(self, tp, name): + self._generate_struct_or_union_method(tp, 'struct', name) + def _loading_cpy_struct(self, tp, name, module): + self._loading_struct_or_union(tp, 'struct', name, module) + def _loaded_cpy_struct(self, tp, name, module, **kwds): + self._loaded_struct_or_union(tp) + + _generate_cpy_union_collecttype = _generate_nothing + def _generate_cpy_union_decl(self, tp, name): + assert name == tp.name + self._generate_struct_or_union_decl(tp, 'union', name) + def _generate_cpy_union_method(self, tp, name): + self._generate_struct_or_union_method(tp, 'union', name) + def _loading_cpy_union(self, tp, name, module): + self._loading_struct_or_union(tp, 'union', name, module) + def _loaded_cpy_union(self, tp, name, module, **kwds): + self._loaded_struct_or_union(tp) + + def _generate_struct_or_union_decl(self, tp, prefix, name): + if tp.fldnames is None: + return # nothing to do with opaque structs + checkfuncname = '_cffi_check_%s_%s' % (prefix, name) + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + cname = ('%s %s' % (prefix, name)).strip() + # + prnt = self._prnt + prnt('static void %s(%s *p)' % (checkfuncname, cname)) + prnt('{') + prnt(' /* only to generate compile-time warnings or errors */') + prnt(' (void)p;') + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if (isinstance(ftype, model.PrimitiveType) + and ftype.is_integer_type()) or fbitsize >= 0: + # accept all integers, but complain on float or double + prnt(' (void)((p->%s) << 1);' % fname) + else: + # only accept exactly the type declared. + try: + prnt(' { %s = &p->%s; (void)tmp; }' % ( + ftype.get_c_name('*tmp', 'field %r'%fname, quals=fqual), + fname)) + except VerificationError as e: + prnt(' /* %s */' % str(e)) # cannot verify it, ignore + prnt('}') + prnt('static PyObject *') + prnt('%s(PyObject *self, PyObject *noarg)' % (layoutfuncname,)) + prnt('{') + prnt(' struct _cffi_aligncheck { char x; %s y; };' % cname) + prnt(' static Py_ssize_t nums[] = {') + prnt(' sizeof(%s),' % cname) + prnt(' offsetof(struct _cffi_aligncheck, y),') + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if fbitsize >= 0: + continue # xxx ignore fbitsize for now + prnt(' offsetof(%s, %s),' % (cname, fname)) + if isinstance(ftype, model.ArrayType) and ftype.length is None: + prnt(' 0, /* %s */' % ftype._get_c_name()) + else: + prnt(' sizeof(((%s *)0)->%s),' % (cname, fname)) + prnt(' -1') + prnt(' };') + prnt(' (void)self; /* unused */') + prnt(' (void)noarg; /* unused */') + prnt(' return _cffi_get_struct_layout(nums);') + prnt(' /* the next line is not executed, but compiled */') + prnt(' %s(0);' % (checkfuncname,)) + prnt('}') + prnt() + + def _generate_struct_or_union_method(self, tp, prefix, name): + if tp.fldnames is None: + return # nothing to do with opaque structs + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + self._prnt(' {"%s", %s, METH_NOARGS, NULL},' % (layoutfuncname, + layoutfuncname)) + + def _loading_struct_or_union(self, tp, prefix, name, module): + if tp.fldnames is None: + return # nothing to do with opaque structs + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + # + function = getattr(module, layoutfuncname) + layout = function() + if isinstance(tp, model.StructOrUnion) and tp.partial: + # use the function()'s sizes and offsets to guide the + # layout of the struct + totalsize = layout[0] + totalalignment = layout[1] + fieldofs = layout[2::2] + fieldsize = layout[3::2] + tp.force_flatten() + assert len(fieldofs) == len(fieldsize) == len(tp.fldnames) + tp.fixedlayout = fieldofs, fieldsize, totalsize, totalalignment + else: + cname = ('%s %s' % (prefix, name)).strip() + self._struct_pending_verification[tp] = layout, cname + + def _loaded_struct_or_union(self, tp): + if tp.fldnames is None: + return # nothing to do with opaque structs + self.ffi._get_cached_btype(tp) # force 'fixedlayout' to be considered + + if tp in self._struct_pending_verification: + # check that the layout sizes and offsets match the real ones + def check(realvalue, expectedvalue, msg): + if realvalue != expectedvalue: + raise VerificationError( + "%s (we have %d, but C compiler says %d)" + % (msg, expectedvalue, realvalue)) + ffi = self.ffi + BStruct = ffi._get_cached_btype(tp) + layout, cname = self._struct_pending_verification.pop(tp) + check(layout[0], ffi.sizeof(BStruct), "wrong total size") + check(layout[1], ffi.alignof(BStruct), "wrong total alignment") + i = 2 + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if fbitsize >= 0: + continue # xxx ignore fbitsize for now + check(layout[i], ffi.offsetof(BStruct, fname), + "wrong offset for field %r" % (fname,)) + if layout[i+1] != 0: + BField = ffi._get_cached_btype(ftype) + check(layout[i+1], ffi.sizeof(BField), + "wrong size for field %r" % (fname,)) + i += 2 + assert i == len(layout) + + # ---------- + # 'anonymous' declarations. These are produced for anonymous structs + # or unions; the 'name' is obtained by a typedef. + + _generate_cpy_anonymous_collecttype = _generate_nothing + + def _generate_cpy_anonymous_decl(self, tp, name): + if isinstance(tp, model.EnumType): + self._generate_cpy_enum_decl(tp, name, '') + else: + self._generate_struct_or_union_decl(tp, '', name) + + def _generate_cpy_anonymous_method(self, tp, name): + if not isinstance(tp, model.EnumType): + self._generate_struct_or_union_method(tp, '', name) + + def _loading_cpy_anonymous(self, tp, name, module): + if isinstance(tp, model.EnumType): + self._loading_cpy_enum(tp, name, module) + else: + self._loading_struct_or_union(tp, '', name, module) + + def _loaded_cpy_anonymous(self, tp, name, module, **kwds): + if isinstance(tp, model.EnumType): + self._loaded_cpy_enum(tp, name, module, **kwds) + else: + self._loaded_struct_or_union(tp) + + # ---------- + # constants, likely declared with '#define' + + def _generate_cpy_const(self, is_int, name, tp=None, category='const', + vartp=None, delayed=True, size_too=False, + check_value=None): + prnt = self._prnt + funcname = '_cffi_%s_%s' % (category, name) + prnt('static int %s(PyObject *lib)' % funcname) + prnt('{') + prnt(' PyObject *o;') + prnt(' int res;') + if not is_int: + prnt(' %s;' % (vartp or tp).get_c_name(' i', name)) + else: + assert category == 'const' + # + if check_value is not None: + self._check_int_constant_value(name, check_value) + # + if not is_int: + if category == 'var': + realexpr = '&' + name + else: + realexpr = name + prnt(' i = (%s);' % (realexpr,)) + prnt(' o = %s;' % (self._convert_expr_from_c(tp, 'i', + 'variable type'),)) + assert delayed + else: + prnt(' o = _cffi_from_c_int_const(%s);' % name) + prnt(' if (o == NULL)') + prnt(' return -1;') + if size_too: + prnt(' {') + prnt(' PyObject *o1 = o;') + prnt(' o = Py_BuildValue("On", o1, (Py_ssize_t)sizeof(%s));' + % (name,)) + prnt(' Py_DECREF(o1);') + prnt(' if (o == NULL)') + prnt(' return -1;') + prnt(' }') + prnt(' res = PyObject_SetAttrString(lib, "%s", o);' % name) + prnt(' Py_DECREF(o);') + prnt(' if (res < 0)') + prnt(' return -1;') + prnt(' return %s;' % self._chained_list_constants[delayed]) + self._chained_list_constants[delayed] = funcname + '(lib)' + prnt('}') + prnt() + + def _generate_cpy_constant_collecttype(self, tp, name): + is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() + if not is_int: + self._do_collect_type(tp) + + def _generate_cpy_constant_decl(self, tp, name): + is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() + self._generate_cpy_const(is_int, name, tp) + + _generate_cpy_constant_method = _generate_nothing + _loading_cpy_constant = _loaded_noop + _loaded_cpy_constant = _loaded_noop + + # ---------- + # enums + + def _check_int_constant_value(self, name, value, err_prefix=''): + prnt = self._prnt + if value <= 0: + prnt(' if ((%s) > 0 || (long)(%s) != %dL) {' % ( + name, name, value)) + else: + prnt(' if ((%s) <= 0 || (unsigned long)(%s) != %dUL) {' % ( + name, name, value)) + prnt(' char buf[64];') + prnt(' if ((%s) <= 0)' % name) + prnt(' snprintf(buf, 63, "%%ld", (long)(%s));' % name) + prnt(' else') + prnt(' snprintf(buf, 63, "%%lu", (unsigned long)(%s));' % + name) + prnt(' PyErr_Format(_cffi_VerificationError,') + prnt(' "%s%s has the real value %s, not %s",') + prnt(' "%s", "%s", buf, "%d");' % ( + err_prefix, name, value)) + prnt(' return -1;') + prnt(' }') + + def _enum_funcname(self, prefix, name): + # "$enum_$1" => "___D_enum____D_1" + name = name.replace('$', '___D_') + return '_cffi_e_%s_%s' % (prefix, name) + + def _generate_cpy_enum_decl(self, tp, name, prefix='enum'): + if tp.partial: + for enumerator in tp.enumerators: + self._generate_cpy_const(True, enumerator, delayed=False) + return + # + funcname = self._enum_funcname(prefix, name) + prnt = self._prnt + prnt('static int %s(PyObject *lib)' % funcname) + prnt('{') + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + self._check_int_constant_value(enumerator, enumvalue, + "enum %s: " % name) + prnt(' return %s;' % self._chained_list_constants[True]) + self._chained_list_constants[True] = funcname + '(lib)' + prnt('}') + prnt() + + _generate_cpy_enum_collecttype = _generate_nothing + _generate_cpy_enum_method = _generate_nothing + + def _loading_cpy_enum(self, tp, name, module): + if tp.partial: + enumvalues = [getattr(module, enumerator) + for enumerator in tp.enumerators] + tp.enumvalues = tuple(enumvalues) + tp.partial_resolved = True + + def _loaded_cpy_enum(self, tp, name, module, library): + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + setattr(library, enumerator, enumvalue) + + # ---------- + # macros: for now only for integers + + def _generate_cpy_macro_decl(self, tp, name): + if tp == '...': + check_value = None + else: + check_value = tp # an integer + self._generate_cpy_const(True, name, check_value=check_value) + + _generate_cpy_macro_collecttype = _generate_nothing + _generate_cpy_macro_method = _generate_nothing + _loading_cpy_macro = _loaded_noop + _loaded_cpy_macro = _loaded_noop + + # ---------- + # global variables + + def _generate_cpy_variable_collecttype(self, tp, name): + if isinstance(tp, model.ArrayType): + tp_ptr = model.PointerType(tp.item) + else: + tp_ptr = model.PointerType(tp) + self._do_collect_type(tp_ptr) + + def _generate_cpy_variable_decl(self, tp, name): + if isinstance(tp, model.ArrayType): + tp_ptr = model.PointerType(tp.item) + self._generate_cpy_const(False, name, tp, vartp=tp_ptr, + size_too = tp.length_is_unknown()) + else: + tp_ptr = model.PointerType(tp) + self._generate_cpy_const(False, name, tp_ptr, category='var') + + _generate_cpy_variable_method = _generate_nothing + _loading_cpy_variable = _loaded_noop + + def _loaded_cpy_variable(self, tp, name, module, library): + value = getattr(library, name) + if isinstance(tp, model.ArrayType): # int a[5] is "constant" in the + # sense that "a=..." is forbidden + if tp.length_is_unknown(): + assert isinstance(value, tuple) + (value, size) = value + BItemType = self.ffi._get_cached_btype(tp.item) + length, rest = divmod(size, self.ffi.sizeof(BItemType)) + if rest != 0: + raise VerificationError( + "bad size: %r does not seem to be an array of %s" % + (name, tp.item)) + tp = tp.resolve_length(length) + # 'value' is a which we have to replace with + # a if the N is actually known + if tp.length is not None: + BArray = self.ffi._get_cached_btype(tp) + value = self.ffi.cast(BArray, value) + setattr(library, name, value) + return + # remove ptr= from the library instance, and replace + # it by a property on the class, which reads/writes into ptr[0]. + ptr = value + delattr(library, name) + def getter(library): + return ptr[0] + def setter(library, value): + ptr[0] = value + setattr(type(library), name, property(getter, setter)) + type(library)._cffi_dir.append(name) + + # ---------- + + def _generate_setup_custom(self): + prnt = self._prnt + prnt('static int _cffi_setup_custom(PyObject *lib)') + prnt('{') + prnt(' return %s;' % self._chained_list_constants[True]) + prnt('}') + +cffimod_header = r''' +#include +#include + +/* this block of #ifs should be kept exactly identical between + c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py + and cffi/_cffi_include.h */ +#if defined(_MSC_VER) +# include /* for alloca() */ +# if _MSC_VER < 1600 /* MSVC < 2010 */ + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int_least8_t; + typedef __int16 int_least16_t; + typedef __int32 int_least32_t; + typedef __int64 int_least64_t; + typedef unsigned __int8 uint_least8_t; + typedef unsigned __int16 uint_least16_t; + typedef unsigned __int32 uint_least32_t; + typedef unsigned __int64 uint_least64_t; + typedef __int8 int_fast8_t; + typedef __int16 int_fast16_t; + typedef __int32 int_fast32_t; + typedef __int64 int_fast64_t; + typedef unsigned __int8 uint_fast8_t; + typedef unsigned __int16 uint_fast16_t; + typedef unsigned __int32 uint_fast32_t; + typedef unsigned __int64 uint_fast64_t; + typedef __int64 intmax_t; + typedef unsigned __int64 uintmax_t; +# else +# include +# endif +# if _MSC_VER < 1800 /* MSVC < 2013 */ +# ifndef __cplusplus + typedef unsigned char _Bool; +# endif +# endif +# define _cffi_float_complex_t _Fcomplex /* include for it */ +# define _cffi_double_complex_t _Dcomplex /* include for it */ +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) +# include +# endif +# define _cffi_float_complex_t float _Complex +# define _cffi_double_complex_t double _Complex +#endif + +#if PY_MAJOR_VERSION < 3 +# undef PyCapsule_CheckExact +# undef PyCapsule_GetPointer +# define PyCapsule_CheckExact(capsule) (PyCObject_Check(capsule)) +# define PyCapsule_GetPointer(capsule, name) \ + (PyCObject_AsVoidPtr(capsule)) +#endif + +#if PY_MAJOR_VERSION >= 3 +# define PyInt_FromLong PyLong_FromLong +#endif + +#define _cffi_from_c_double PyFloat_FromDouble +#define _cffi_from_c_float PyFloat_FromDouble +#define _cffi_from_c_long PyInt_FromLong +#define _cffi_from_c_ulong PyLong_FromUnsignedLong +#define _cffi_from_c_longlong PyLong_FromLongLong +#define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong +#define _cffi_from_c__Bool PyBool_FromLong + +#define _cffi_to_c_double PyFloat_AsDouble +#define _cffi_to_c_float PyFloat_AsDouble + +#define _cffi_from_c_int_const(x) \ + (((x) > 0) ? \ + ((unsigned long long)(x) <= (unsigned long long)LONG_MAX) ? \ + PyInt_FromLong((long)(x)) : \ + PyLong_FromUnsignedLongLong((unsigned long long)(x)) : \ + ((long long)(x) >= (long long)LONG_MIN) ? \ + PyInt_FromLong((long)(x)) : \ + PyLong_FromLongLong((long long)(x))) + +#define _cffi_from_c_int(x, type) \ + (((type)-1) > 0 ? /* unsigned */ \ + (sizeof(type) < sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + sizeof(type) == sizeof(long) ? \ + PyLong_FromUnsignedLong((unsigned long)x) : \ + PyLong_FromUnsignedLongLong((unsigned long long)x)) : \ + (sizeof(type) <= sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + PyLong_FromLongLong((long long)x))) + +#define _cffi_to_c_int(o, type) \ + ((type)( \ + sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o) \ + : (type)_cffi_to_c_i8(o)) : \ + sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o) \ + : (type)_cffi_to_c_i16(o)) : \ + sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o) \ + : (type)_cffi_to_c_i32(o)) : \ + sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o) \ + : (type)_cffi_to_c_i64(o)) : \ + (Py_FatalError("unsupported size for type " #type), (type)0))) + +#define _cffi_to_c_i8 \ + ((int(*)(PyObject *))_cffi_exports[1]) +#define _cffi_to_c_u8 \ + ((int(*)(PyObject *))_cffi_exports[2]) +#define _cffi_to_c_i16 \ + ((int(*)(PyObject *))_cffi_exports[3]) +#define _cffi_to_c_u16 \ + ((int(*)(PyObject *))_cffi_exports[4]) +#define _cffi_to_c_i32 \ + ((int(*)(PyObject *))_cffi_exports[5]) +#define _cffi_to_c_u32 \ + ((unsigned int(*)(PyObject *))_cffi_exports[6]) +#define _cffi_to_c_i64 \ + ((long long(*)(PyObject *))_cffi_exports[7]) +#define _cffi_to_c_u64 \ + ((unsigned long long(*)(PyObject *))_cffi_exports[8]) +#define _cffi_to_c_char \ + ((int(*)(PyObject *))_cffi_exports[9]) +#define _cffi_from_c_pointer \ + ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[10]) +#define _cffi_to_c_pointer \ + ((char *(*)(PyObject *, CTypeDescrObject *))_cffi_exports[11]) +#define _cffi_get_struct_layout \ + ((PyObject *(*)(Py_ssize_t[]))_cffi_exports[12]) +#define _cffi_restore_errno \ + ((void(*)(void))_cffi_exports[13]) +#define _cffi_save_errno \ + ((void(*)(void))_cffi_exports[14]) +#define _cffi_from_c_char \ + ((PyObject *(*)(char))_cffi_exports[15]) +#define _cffi_from_c_deref \ + ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[16]) +#define _cffi_to_c \ + ((int(*)(char *, CTypeDescrObject *, PyObject *))_cffi_exports[17]) +#define _cffi_from_c_struct \ + ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[18]) +#define _cffi_to_c_wchar_t \ + ((wchar_t(*)(PyObject *))_cffi_exports[19]) +#define _cffi_from_c_wchar_t \ + ((PyObject *(*)(wchar_t))_cffi_exports[20]) +#define _cffi_to_c_long_double \ + ((long double(*)(PyObject *))_cffi_exports[21]) +#define _cffi_to_c__Bool \ + ((_Bool(*)(PyObject *))_cffi_exports[22]) +#define _cffi_prepare_pointer_call_argument \ + ((Py_ssize_t(*)(CTypeDescrObject *, PyObject *, char **))_cffi_exports[23]) +#define _cffi_convert_array_from_object \ + ((int(*)(char *, CTypeDescrObject *, PyObject *))_cffi_exports[24]) +#define _CFFI_NUM_EXPORTS 25 + +typedef struct _ctypedescr CTypeDescrObject; + +static void *_cffi_exports[_CFFI_NUM_EXPORTS]; +static PyObject *_cffi_types, *_cffi_VerificationError; + +static int _cffi_setup_custom(PyObject *lib); /* forward */ + +static PyObject *_cffi_setup(PyObject *self, PyObject *args) +{ + PyObject *library; + int was_alive = (_cffi_types != NULL); + (void)self; /* unused */ + if (!PyArg_ParseTuple(args, "OOO", &_cffi_types, &_cffi_VerificationError, + &library)) + return NULL; + Py_INCREF(_cffi_types); + Py_INCREF(_cffi_VerificationError); + if (_cffi_setup_custom(library) < 0) + return NULL; + return PyBool_FromLong(was_alive); +} + +union _cffi_union_alignment_u { + unsigned char m_char; + unsigned short m_short; + unsigned int m_int; + unsigned long m_long; + unsigned long long m_longlong; + float m_float; + double m_double; + long double m_longdouble; +}; + +struct _cffi_freeme_s { + struct _cffi_freeme_s *next; + union _cffi_union_alignment_u alignment; +}; + +#ifdef __GNUC__ + __attribute__((unused)) +#endif +static int _cffi_convert_array_argument(CTypeDescrObject *ctptr, PyObject *arg, + char **output_data, Py_ssize_t datasize, + struct _cffi_freeme_s **freeme) +{ + char *p; + if (datasize < 0) + return -1; + + p = *output_data; + if (p == NULL) { + struct _cffi_freeme_s *fp = (struct _cffi_freeme_s *)PyObject_Malloc( + offsetof(struct _cffi_freeme_s, alignment) + (size_t)datasize); + if (fp == NULL) + return -1; + fp->next = *freeme; + *freeme = fp; + p = *output_data = (char *)&fp->alignment; + } + memset((void *)p, 0, (size_t)datasize); + return _cffi_convert_array_from_object(p, ctptr, arg); +} + +#ifdef __GNUC__ + __attribute__((unused)) +#endif +static void _cffi_free_array_arguments(struct _cffi_freeme_s *freeme) +{ + do { + void *p = (void *)freeme; + freeme = freeme->next; + PyObject_Free(p); + } while (freeme != NULL); +} + +static int _cffi_init(void) +{ + PyObject *module, *c_api_object = NULL; + + module = PyImport_ImportModule("_cffi_backend"); + if (module == NULL) + goto failure; + + c_api_object = PyObject_GetAttrString(module, "_C_API"); + if (c_api_object == NULL) + goto failure; + if (!PyCapsule_CheckExact(c_api_object)) { + PyErr_SetNone(PyExc_ImportError); + goto failure; + } + memcpy(_cffi_exports, PyCapsule_GetPointer(c_api_object, "cffi"), + _CFFI_NUM_EXPORTS * sizeof(void *)); + + Py_DECREF(module); + Py_DECREF(c_api_object); + return 0; + + failure: + Py_XDECREF(module); + Py_XDECREF(c_api_object); + return -1; +} + +#define _cffi_type(num) ((CTypeDescrObject *)PyList_GET_ITEM(_cffi_types, num)) + +/**********/ +''' diff --git a/venv/lib/python3.11/site-packages/cffi/vengine_gen.py b/venv/lib/python3.11/site-packages/cffi/vengine_gen.py new file mode 100644 index 0000000..bffc821 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/vengine_gen.py @@ -0,0 +1,679 @@ +# +# DEPRECATED: implementation for ffi.verify() +# +import sys, os +import types + +from . import model +from .error import VerificationError + + +class VGenericEngine(object): + _class_key = 'g' + _gen_python_module = False + + def __init__(self, verifier): + self.verifier = verifier + self.ffi = verifier.ffi + self.export_symbols = [] + self._struct_pending_verification = {} + + def patch_extension_kwds(self, kwds): + # add 'export_symbols' to the dictionary. Note that we add the + # list before filling it. When we fill it, it will thus also show + # up in kwds['export_symbols']. + kwds.setdefault('export_symbols', self.export_symbols) + + def find_module(self, module_name, path, so_suffixes): + for so_suffix in so_suffixes: + basename = module_name + so_suffix + if path is None: + path = sys.path + for dirname in path: + filename = os.path.join(dirname, basename) + if os.path.isfile(filename): + return filename + + def collect_types(self): + pass # not needed in the generic engine + + def _prnt(self, what=''): + self._f.write(what + '\n') + + def write_source_to_f(self): + prnt = self._prnt + # first paste some standard set of lines that are mostly '#include' + prnt(cffimod_header) + # then paste the C source given by the user, verbatim. + prnt(self.verifier.preamble) + # + # call generate_gen_xxx_decl(), for every xxx found from + # ffi._parser._declarations. This generates all the functions. + self._generate('decl') + # + # on Windows, distutils insists on putting init_cffi_xyz in + # 'export_symbols', so instead of fighting it, just give up and + # give it one + if sys.platform == 'win32': + if sys.version_info >= (3,): + prefix = 'PyInit_' + else: + prefix = 'init' + modname = self.verifier.get_module_name() + prnt("void %s%s(void) { }\n" % (prefix, modname)) + + def load_library(self, flags=0): + # import it with the CFFI backend + backend = self.ffi._backend + # needs to make a path that contains '/', on Posix + filename = os.path.join(os.curdir, self.verifier.modulefilename) + module = backend.load_library(filename, flags) + # + # call loading_gen_struct() to get the struct layout inferred by + # the C compiler + self._load(module, 'loading') + + # build the FFILibrary class and instance, this is a module subclass + # because modules are expected to have usually-constant-attributes and + # in PyPy this means the JIT is able to treat attributes as constant, + # which we want. + class FFILibrary(types.ModuleType): + _cffi_generic_module = module + _cffi_ffi = self.ffi + _cffi_dir = [] + def __dir__(self): + return FFILibrary._cffi_dir + library = FFILibrary("") + # + # finally, call the loaded_gen_xxx() functions. This will set + # up the 'library' object. + self._load(module, 'loaded', library=library) + return library + + def _get_declarations(self): + lst = [(key, tp) for (key, (tp, qual)) in + self.ffi._parser._declarations.items()] + lst.sort() + return lst + + def _generate(self, step_name): + for name, tp in self._get_declarations(): + kind, realname = name.split(' ', 1) + try: + method = getattr(self, '_generate_gen_%s_%s' % (kind, + step_name)) + except AttributeError: + raise VerificationError( + "not implemented in verify(): %r" % name) + try: + method(tp, realname) + except Exception as e: + model.attach_exception_info(e, name) + raise + + def _load(self, module, step_name, **kwds): + for name, tp in self._get_declarations(): + kind, realname = name.split(' ', 1) + method = getattr(self, '_%s_gen_%s' % (step_name, kind)) + try: + method(tp, realname, module, **kwds) + except Exception as e: + model.attach_exception_info(e, name) + raise + + def _generate_nothing(self, tp, name): + pass + + def _loaded_noop(self, tp, name, module, **kwds): + pass + + # ---------- + # typedefs: generates no code so far + + _generate_gen_typedef_decl = _generate_nothing + _loading_gen_typedef = _loaded_noop + _loaded_gen_typedef = _loaded_noop + + # ---------- + # function declarations + + def _generate_gen_function_decl(self, tp, name): + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + # cannot support vararg functions better than this: check for its + # exact type (including the fixed arguments), and build it as a + # constant function pointer (no _cffi_f_%s wrapper) + self._generate_gen_const(False, name, tp) + return + prnt = self._prnt + numargs = len(tp.args) + argnames = [] + for i, type in enumerate(tp.args): + indirection = '' + if isinstance(type, model.StructOrUnion): + indirection = '*' + argnames.append('%sx%d' % (indirection, i)) + context = 'argument of %s' % name + arglist = [type.get_c_name(' %s' % arg, context) + for type, arg in zip(tp.args, argnames)] + tpresult = tp.result + if isinstance(tpresult, model.StructOrUnion): + arglist.insert(0, tpresult.get_c_name(' *r', context)) + tpresult = model.void_type + arglist = ', '.join(arglist) or 'void' + wrappername = '_cffi_f_%s' % name + self.export_symbols.append(wrappername) + if tp.abi: + abi = tp.abi + ' ' + else: + abi = '' + funcdecl = ' %s%s(%s)' % (abi, wrappername, arglist) + context = 'result of %s' % name + prnt(tpresult.get_c_name(funcdecl, context)) + prnt('{') + # + if isinstance(tp.result, model.StructOrUnion): + result_code = '*r = ' + elif not isinstance(tp.result, model.VoidType): + result_code = 'return ' + else: + result_code = '' + prnt(' %s%s(%s);' % (result_code, name, ', '.join(argnames))) + prnt('}') + prnt() + + _loading_gen_function = _loaded_noop + + def _loaded_gen_function(self, tp, name, module, library): + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + newfunction = self._load_constant(False, tp, name, module) + else: + indirections = [] + base_tp = tp + if (any(isinstance(typ, model.StructOrUnion) for typ in tp.args) + or isinstance(tp.result, model.StructOrUnion)): + indirect_args = [] + for i, typ in enumerate(tp.args): + if isinstance(typ, model.StructOrUnion): + typ = model.PointerType(typ) + indirections.append((i, typ)) + indirect_args.append(typ) + indirect_result = tp.result + if isinstance(indirect_result, model.StructOrUnion): + if indirect_result.fldtypes is None: + raise TypeError("'%s' is used as result type, " + "but is opaque" % ( + indirect_result._get_c_name(),)) + indirect_result = model.PointerType(indirect_result) + indirect_args.insert(0, indirect_result) + indirections.insert(0, ("result", indirect_result)) + indirect_result = model.void_type + tp = model.FunctionPtrType(tuple(indirect_args), + indirect_result, tp.ellipsis) + BFunc = self.ffi._get_cached_btype(tp) + wrappername = '_cffi_f_%s' % name + newfunction = module.load_function(BFunc, wrappername) + for i, typ in indirections: + newfunction = self._make_struct_wrapper(newfunction, i, typ, + base_tp) + setattr(library, name, newfunction) + type(library)._cffi_dir.append(name) + + def _make_struct_wrapper(self, oldfunc, i, tp, base_tp): + backend = self.ffi._backend + BType = self.ffi._get_cached_btype(tp) + if i == "result": + ffi = self.ffi + def newfunc(*args): + res = ffi.new(BType) + oldfunc(res, *args) + return res[0] + else: + def newfunc(*args): + args = args[:i] + (backend.newp(BType, args[i]),) + args[i+1:] + return oldfunc(*args) + newfunc._cffi_base_type = base_tp + return newfunc + + # ---------- + # named structs + + def _generate_gen_struct_decl(self, tp, name): + assert name == tp.name + self._generate_struct_or_union_decl(tp, 'struct', name) + + def _loading_gen_struct(self, tp, name, module): + self._loading_struct_or_union(tp, 'struct', name, module) + + def _loaded_gen_struct(self, tp, name, module, **kwds): + self._loaded_struct_or_union(tp) + + def _generate_gen_union_decl(self, tp, name): + assert name == tp.name + self._generate_struct_or_union_decl(tp, 'union', name) + + def _loading_gen_union(self, tp, name, module): + self._loading_struct_or_union(tp, 'union', name, module) + + def _loaded_gen_union(self, tp, name, module, **kwds): + self._loaded_struct_or_union(tp) + + def _generate_struct_or_union_decl(self, tp, prefix, name): + if tp.fldnames is None: + return # nothing to do with opaque structs + checkfuncname = '_cffi_check_%s_%s' % (prefix, name) + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + cname = ('%s %s' % (prefix, name)).strip() + # + prnt = self._prnt + prnt('static void %s(%s *p)' % (checkfuncname, cname)) + prnt('{') + prnt(' /* only to generate compile-time warnings or errors */') + prnt(' (void)p;') + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if (isinstance(ftype, model.PrimitiveType) + and ftype.is_integer_type()) or fbitsize >= 0: + # accept all integers, but complain on float or double + prnt(' (void)((p->%s) << 1);' % fname) + else: + # only accept exactly the type declared. + try: + prnt(' { %s = &p->%s; (void)tmp; }' % ( + ftype.get_c_name('*tmp', 'field %r'%fname, quals=fqual), + fname)) + except VerificationError as e: + prnt(' /* %s */' % str(e)) # cannot verify it, ignore + prnt('}') + self.export_symbols.append(layoutfuncname) + prnt('intptr_t %s(intptr_t i)' % (layoutfuncname,)) + prnt('{') + prnt(' struct _cffi_aligncheck { char x; %s y; };' % cname) + prnt(' static intptr_t nums[] = {') + prnt(' sizeof(%s),' % cname) + prnt(' offsetof(struct _cffi_aligncheck, y),') + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if fbitsize >= 0: + continue # xxx ignore fbitsize for now + prnt(' offsetof(%s, %s),' % (cname, fname)) + if isinstance(ftype, model.ArrayType) and ftype.length is None: + prnt(' 0, /* %s */' % ftype._get_c_name()) + else: + prnt(' sizeof(((%s *)0)->%s),' % (cname, fname)) + prnt(' -1') + prnt(' };') + prnt(' return nums[i];') + prnt(' /* the next line is not executed, but compiled */') + prnt(' %s(0);' % (checkfuncname,)) + prnt('}') + prnt() + + def _loading_struct_or_union(self, tp, prefix, name, module): + if tp.fldnames is None: + return # nothing to do with opaque structs + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + # + BFunc = self.ffi._typeof_locked("intptr_t(*)(intptr_t)")[0] + function = module.load_function(BFunc, layoutfuncname) + layout = [] + num = 0 + while True: + x = function(num) + if x < 0: break + layout.append(x) + num += 1 + if isinstance(tp, model.StructOrUnion) and tp.partial: + # use the function()'s sizes and offsets to guide the + # layout of the struct + totalsize = layout[0] + totalalignment = layout[1] + fieldofs = layout[2::2] + fieldsize = layout[3::2] + tp.force_flatten() + assert len(fieldofs) == len(fieldsize) == len(tp.fldnames) + tp.fixedlayout = fieldofs, fieldsize, totalsize, totalalignment + else: + cname = ('%s %s' % (prefix, name)).strip() + self._struct_pending_verification[tp] = layout, cname + + def _loaded_struct_or_union(self, tp): + if tp.fldnames is None: + return # nothing to do with opaque structs + self.ffi._get_cached_btype(tp) # force 'fixedlayout' to be considered + + if tp in self._struct_pending_verification: + # check that the layout sizes and offsets match the real ones + def check(realvalue, expectedvalue, msg): + if realvalue != expectedvalue: + raise VerificationError( + "%s (we have %d, but C compiler says %d)" + % (msg, expectedvalue, realvalue)) + ffi = self.ffi + BStruct = ffi._get_cached_btype(tp) + layout, cname = self._struct_pending_verification.pop(tp) + check(layout[0], ffi.sizeof(BStruct), "wrong total size") + check(layout[1], ffi.alignof(BStruct), "wrong total alignment") + i = 2 + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if fbitsize >= 0: + continue # xxx ignore fbitsize for now + check(layout[i], ffi.offsetof(BStruct, fname), + "wrong offset for field %r" % (fname,)) + if layout[i+1] != 0: + BField = ffi._get_cached_btype(ftype) + check(layout[i+1], ffi.sizeof(BField), + "wrong size for field %r" % (fname,)) + i += 2 + assert i == len(layout) + + # ---------- + # 'anonymous' declarations. These are produced for anonymous structs + # or unions; the 'name' is obtained by a typedef. + + def _generate_gen_anonymous_decl(self, tp, name): + if isinstance(tp, model.EnumType): + self._generate_gen_enum_decl(tp, name, '') + else: + self._generate_struct_or_union_decl(tp, '', name) + + def _loading_gen_anonymous(self, tp, name, module): + if isinstance(tp, model.EnumType): + self._loading_gen_enum(tp, name, module, '') + else: + self._loading_struct_or_union(tp, '', name, module) + + def _loaded_gen_anonymous(self, tp, name, module, **kwds): + if isinstance(tp, model.EnumType): + self._loaded_gen_enum(tp, name, module, **kwds) + else: + self._loaded_struct_or_union(tp) + + # ---------- + # constants, likely declared with '#define' + + def _generate_gen_const(self, is_int, name, tp=None, category='const', + check_value=None): + prnt = self._prnt + funcname = '_cffi_%s_%s' % (category, name) + self.export_symbols.append(funcname) + if check_value is not None: + assert is_int + assert category == 'const' + prnt('int %s(char *out_error)' % funcname) + prnt('{') + self._check_int_constant_value(name, check_value) + prnt(' return 0;') + prnt('}') + elif is_int: + assert category == 'const' + prnt('int %s(long long *out_value)' % funcname) + prnt('{') + prnt(' *out_value = (long long)(%s);' % (name,)) + prnt(' return (%s) <= 0;' % (name,)) + prnt('}') + else: + assert tp is not None + assert check_value is None + if category == 'var': + ampersand = '&' + else: + ampersand = '' + extra = '' + if category == 'const' and isinstance(tp, model.StructOrUnion): + extra = 'const *' + ampersand = '&' + prnt(tp.get_c_name(' %s%s(void)' % (extra, funcname), name)) + prnt('{') + prnt(' return (%s%s);' % (ampersand, name)) + prnt('}') + prnt() + + def _generate_gen_constant_decl(self, tp, name): + is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() + self._generate_gen_const(is_int, name, tp) + + _loading_gen_constant = _loaded_noop + + def _load_constant(self, is_int, tp, name, module, check_value=None): + funcname = '_cffi_const_%s' % name + if check_value is not None: + assert is_int + self._load_known_int_constant(module, funcname) + value = check_value + elif is_int: + BType = self.ffi._typeof_locked("long long*")[0] + BFunc = self.ffi._typeof_locked("int(*)(long long*)")[0] + function = module.load_function(BFunc, funcname) + p = self.ffi.new(BType) + negative = function(p) + value = int(p[0]) + if value < 0 and not negative: + BLongLong = self.ffi._typeof_locked("long long")[0] + value += (1 << (8*self.ffi.sizeof(BLongLong))) + else: + assert check_value is None + fntypeextra = '(*)(void)' + if isinstance(tp, model.StructOrUnion): + fntypeextra = '*' + fntypeextra + BFunc = self.ffi._typeof_locked(tp.get_c_name(fntypeextra, name))[0] + function = module.load_function(BFunc, funcname) + value = function() + if isinstance(tp, model.StructOrUnion): + value = value[0] + return value + + def _loaded_gen_constant(self, tp, name, module, library): + is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() + value = self._load_constant(is_int, tp, name, module) + setattr(library, name, value) + type(library)._cffi_dir.append(name) + + # ---------- + # enums + + def _check_int_constant_value(self, name, value): + prnt = self._prnt + if value <= 0: + prnt(' if ((%s) > 0 || (long)(%s) != %dL) {' % ( + name, name, value)) + else: + prnt(' if ((%s) <= 0 || (unsigned long)(%s) != %dUL) {' % ( + name, name, value)) + prnt(' char buf[64];') + prnt(' if ((%s) <= 0)' % name) + prnt(' sprintf(buf, "%%ld", (long)(%s));' % name) + prnt(' else') + prnt(' sprintf(buf, "%%lu", (unsigned long)(%s));' % + name) + prnt(' sprintf(out_error, "%s has the real value %s, not %s",') + prnt(' "%s", buf, "%d");' % (name[:100], value)) + prnt(' return -1;') + prnt(' }') + + def _load_known_int_constant(self, module, funcname): + BType = self.ffi._typeof_locked("char[]")[0] + BFunc = self.ffi._typeof_locked("int(*)(char*)")[0] + function = module.load_function(BFunc, funcname) + p = self.ffi.new(BType, 256) + if function(p) < 0: + error = self.ffi.string(p) + if sys.version_info >= (3,): + error = str(error, 'utf-8') + raise VerificationError(error) + + def _enum_funcname(self, prefix, name): + # "$enum_$1" => "___D_enum____D_1" + name = name.replace('$', '___D_') + return '_cffi_e_%s_%s' % (prefix, name) + + def _generate_gen_enum_decl(self, tp, name, prefix='enum'): + if tp.partial: + for enumerator in tp.enumerators: + self._generate_gen_const(True, enumerator) + return + # + funcname = self._enum_funcname(prefix, name) + self.export_symbols.append(funcname) + prnt = self._prnt + prnt('int %s(char *out_error)' % funcname) + prnt('{') + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + self._check_int_constant_value(enumerator, enumvalue) + prnt(' return 0;') + prnt('}') + prnt() + + def _loading_gen_enum(self, tp, name, module, prefix='enum'): + if tp.partial: + enumvalues = [self._load_constant(True, tp, enumerator, module) + for enumerator in tp.enumerators] + tp.enumvalues = tuple(enumvalues) + tp.partial_resolved = True + else: + funcname = self._enum_funcname(prefix, name) + self._load_known_int_constant(module, funcname) + + def _loaded_gen_enum(self, tp, name, module, library): + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + setattr(library, enumerator, enumvalue) + type(library)._cffi_dir.append(enumerator) + + # ---------- + # macros: for now only for integers + + def _generate_gen_macro_decl(self, tp, name): + if tp == '...': + check_value = None + else: + check_value = tp # an integer + self._generate_gen_const(True, name, check_value=check_value) + + _loading_gen_macro = _loaded_noop + + def _loaded_gen_macro(self, tp, name, module, library): + if tp == '...': + check_value = None + else: + check_value = tp # an integer + value = self._load_constant(True, tp, name, module, + check_value=check_value) + setattr(library, name, value) + type(library)._cffi_dir.append(name) + + # ---------- + # global variables + + def _generate_gen_variable_decl(self, tp, name): + if isinstance(tp, model.ArrayType): + if tp.length_is_unknown(): + prnt = self._prnt + funcname = '_cffi_sizeof_%s' % (name,) + self.export_symbols.append(funcname) + prnt("size_t %s(void)" % funcname) + prnt("{") + prnt(" return sizeof(%s);" % (name,)) + prnt("}") + tp_ptr = model.PointerType(tp.item) + self._generate_gen_const(False, name, tp_ptr) + else: + tp_ptr = model.PointerType(tp) + self._generate_gen_const(False, name, tp_ptr, category='var') + + _loading_gen_variable = _loaded_noop + + def _loaded_gen_variable(self, tp, name, module, library): + if isinstance(tp, model.ArrayType): # int a[5] is "constant" in the + # sense that "a=..." is forbidden + if tp.length_is_unknown(): + funcname = '_cffi_sizeof_%s' % (name,) + BFunc = self.ffi._typeof_locked('size_t(*)(void)')[0] + function = module.load_function(BFunc, funcname) + size = function() + BItemType = self.ffi._get_cached_btype(tp.item) + length, rest = divmod(size, self.ffi.sizeof(BItemType)) + if rest != 0: + raise VerificationError( + "bad size: %r does not seem to be an array of %s" % + (name, tp.item)) + tp = tp.resolve_length(length) + tp_ptr = model.PointerType(tp.item) + value = self._load_constant(False, tp_ptr, name, module) + # 'value' is a which we have to replace with + # a if the N is actually known + if tp.length is not None: + BArray = self.ffi._get_cached_btype(tp) + value = self.ffi.cast(BArray, value) + setattr(library, name, value) + type(library)._cffi_dir.append(name) + return + # remove ptr= from the library instance, and replace + # it by a property on the class, which reads/writes into ptr[0]. + funcname = '_cffi_var_%s' % name + BFunc = self.ffi._typeof_locked(tp.get_c_name('*(*)(void)', name))[0] + function = module.load_function(BFunc, funcname) + ptr = function() + def getter(library): + return ptr[0] + def setter(library, value): + ptr[0] = value + setattr(type(library), name, property(getter, setter)) + type(library)._cffi_dir.append(name) + +cffimod_header = r''' +#include +#include +#include +#include +#include /* XXX for ssize_t on some platforms */ + +/* this block of #ifs should be kept exactly identical between + c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py + and cffi/_cffi_include.h */ +#if defined(_MSC_VER) +# include /* for alloca() */ +# if _MSC_VER < 1600 /* MSVC < 2010 */ + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int_least8_t; + typedef __int16 int_least16_t; + typedef __int32 int_least32_t; + typedef __int64 int_least64_t; + typedef unsigned __int8 uint_least8_t; + typedef unsigned __int16 uint_least16_t; + typedef unsigned __int32 uint_least32_t; + typedef unsigned __int64 uint_least64_t; + typedef __int8 int_fast8_t; + typedef __int16 int_fast16_t; + typedef __int32 int_fast32_t; + typedef __int64 int_fast64_t; + typedef unsigned __int8 uint_fast8_t; + typedef unsigned __int16 uint_fast16_t; + typedef unsigned __int32 uint_fast32_t; + typedef unsigned __int64 uint_fast64_t; + typedef __int64 intmax_t; + typedef unsigned __int64 uintmax_t; +# else +# include +# endif +# if _MSC_VER < 1800 /* MSVC < 2013 */ +# ifndef __cplusplus + typedef unsigned char _Bool; +# endif +# endif +# define _cffi_float_complex_t _Fcomplex /* include for it */ +# define _cffi_double_complex_t _Dcomplex /* include for it */ +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) +# include +# endif +# define _cffi_float_complex_t float _Complex +# define _cffi_double_complex_t double _Complex +#endif +''' diff --git a/venv/lib/python3.11/site-packages/cffi/verifier.py b/venv/lib/python3.11/site-packages/cffi/verifier.py new file mode 100644 index 0000000..e392a2b --- /dev/null +++ b/venv/lib/python3.11/site-packages/cffi/verifier.py @@ -0,0 +1,306 @@ +# +# DEPRECATED: implementation for ffi.verify() +# +import sys, os, binascii, shutil, io +from . import __version_verifier_modules__ +from . import ffiplatform +from .error import VerificationError + +if sys.version_info >= (3, 3): + import importlib.machinery + def _extension_suffixes(): + return importlib.machinery.EXTENSION_SUFFIXES[:] +else: + import imp + def _extension_suffixes(): + return [suffix for suffix, _, type in imp.get_suffixes() + if type == imp.C_EXTENSION] + + +if sys.version_info >= (3,): + NativeIO = io.StringIO +else: + class NativeIO(io.BytesIO): + def write(self, s): + if isinstance(s, unicode): + s = s.encode('ascii') + super(NativeIO, self).write(s) + + +class Verifier(object): + + def __init__(self, ffi, preamble, tmpdir=None, modulename=None, + ext_package=None, tag='', force_generic_engine=False, + source_extension='.c', flags=None, relative_to=None, **kwds): + if ffi._parser._uses_new_feature: + raise VerificationError( + "feature not supported with ffi.verify(), but only " + "with ffi.set_source(): %s" % (ffi._parser._uses_new_feature,)) + self.ffi = ffi + self.preamble = preamble + if not modulename: + flattened_kwds = ffiplatform.flatten(kwds) + vengine_class = _locate_engine_class(ffi, force_generic_engine) + self._vengine = vengine_class(self) + self._vengine.patch_extension_kwds(kwds) + self.flags = flags + self.kwds = self.make_relative_to(kwds, relative_to) + # + if modulename: + if tag: + raise TypeError("can't specify both 'modulename' and 'tag'") + else: + key = '\x00'.join(['%d.%d' % sys.version_info[:2], + __version_verifier_modules__, + preamble, flattened_kwds] + + ffi._cdefsources) + if sys.version_info >= (3,): + key = key.encode('utf-8') + k1 = hex(binascii.crc32(key[0::2]) & 0xffffffff) + k1 = k1.lstrip('0x').rstrip('L') + k2 = hex(binascii.crc32(key[1::2]) & 0xffffffff) + k2 = k2.lstrip('0').rstrip('L') + modulename = '_cffi_%s_%s%s%s' % (tag, self._vengine._class_key, + k1, k2) + suffix = _get_so_suffixes()[0] + self.tmpdir = tmpdir or _caller_dir_pycache() + self.sourcefilename = os.path.join(self.tmpdir, modulename + source_extension) + self.modulefilename = os.path.join(self.tmpdir, modulename + suffix) + self.ext_package = ext_package + self._has_source = False + self._has_module = False + + def write_source(self, file=None): + """Write the C source code. It is produced in 'self.sourcefilename', + which can be tweaked beforehand.""" + with self.ffi._lock: + if self._has_source and file is None: + raise VerificationError( + "source code already written") + self._write_source(file) + + def compile_module(self): + """Write the C source code (if not done already) and compile it. + This produces a dynamic link library in 'self.modulefilename'.""" + with self.ffi._lock: + if self._has_module: + raise VerificationError("module already compiled") + if not self._has_source: + self._write_source() + self._compile_module() + + def load_library(self): + """Get a C module from this Verifier instance. + Returns an instance of a FFILibrary class that behaves like the + objects returned by ffi.dlopen(), but that delegates all + operations to the C module. If necessary, the C code is written + and compiled first. + """ + with self.ffi._lock: + if not self._has_module: + self._locate_module() + if not self._has_module: + if not self._has_source: + self._write_source() + self._compile_module() + return self._load_library() + + def get_module_name(self): + basename = os.path.basename(self.modulefilename) + # kill both the .so extension and the other .'s, as introduced + # by Python 3: 'basename.cpython-33m.so' + basename = basename.split('.', 1)[0] + # and the _d added in Python 2 debug builds --- but try to be + # conservative and not kill a legitimate _d + if basename.endswith('_d') and hasattr(sys, 'gettotalrefcount'): + basename = basename[:-2] + return basename + + def get_extension(self): + if not self._has_source: + with self.ffi._lock: + if not self._has_source: + self._write_source() + sourcename = ffiplatform.maybe_relative_path(self.sourcefilename) + modname = self.get_module_name() + return ffiplatform.get_extension(sourcename, modname, **self.kwds) + + def generates_python_module(self): + return self._vengine._gen_python_module + + def make_relative_to(self, kwds, relative_to): + if relative_to and os.path.dirname(relative_to): + dirname = os.path.dirname(relative_to) + kwds = kwds.copy() + for key in ffiplatform.LIST_OF_FILE_NAMES: + if key in kwds: + lst = kwds[key] + if not isinstance(lst, (list, tuple)): + raise TypeError("keyword '%s' should be a list or tuple" + % (key,)) + lst = [os.path.join(dirname, fn) for fn in lst] + kwds[key] = lst + return kwds + + # ---------- + + def _locate_module(self): + if not os.path.isfile(self.modulefilename): + if self.ext_package: + try: + pkg = __import__(self.ext_package, None, None, ['__doc__']) + except ImportError: + return # cannot import the package itself, give up + # (e.g. it might be called differently before installation) + path = pkg.__path__ + else: + path = None + filename = self._vengine.find_module(self.get_module_name(), path, + _get_so_suffixes()) + if filename is None: + return + self.modulefilename = filename + self._vengine.collect_types() + self._has_module = True + + def _write_source_to(self, file): + self._vengine._f = file + try: + self._vengine.write_source_to_f() + finally: + del self._vengine._f + + def _write_source(self, file=None): + if file is not None: + self._write_source_to(file) + else: + # Write our source file to an in memory file. + f = NativeIO() + self._write_source_to(f) + source_data = f.getvalue() + + # Determine if this matches the current file + if os.path.exists(self.sourcefilename): + with open(self.sourcefilename, "r") as fp: + needs_written = not (fp.read() == source_data) + else: + needs_written = True + + # Actually write the file out if it doesn't match + if needs_written: + _ensure_dir(self.sourcefilename) + with open(self.sourcefilename, "w") as fp: + fp.write(source_data) + + # Set this flag + self._has_source = True + + def _compile_module(self): + # compile this C source + tmpdir = os.path.dirname(self.sourcefilename) + outputfilename = ffiplatform.compile(tmpdir, self.get_extension()) + try: + same = ffiplatform.samefile(outputfilename, self.modulefilename) + except OSError: + same = False + if not same: + _ensure_dir(self.modulefilename) + shutil.move(outputfilename, self.modulefilename) + self._has_module = True + + def _load_library(self): + assert self._has_module + if self.flags is not None: + return self._vengine.load_library(self.flags) + else: + return self._vengine.load_library() + +# ____________________________________________________________ + +_FORCE_GENERIC_ENGINE = False # for tests + +def _locate_engine_class(ffi, force_generic_engine): + if _FORCE_GENERIC_ENGINE: + force_generic_engine = True + if not force_generic_engine: + if '__pypy__' in sys.builtin_module_names: + force_generic_engine = True + else: + try: + import _cffi_backend + except ImportError: + _cffi_backend = '?' + if ffi._backend is not _cffi_backend: + force_generic_engine = True + if force_generic_engine: + from . import vengine_gen + return vengine_gen.VGenericEngine + else: + from . import vengine_cpy + return vengine_cpy.VCPythonEngine + +# ____________________________________________________________ + +_TMPDIR = None + +def _caller_dir_pycache(): + if _TMPDIR: + return _TMPDIR + result = os.environ.get('CFFI_TMPDIR') + if result: + return result + filename = sys._getframe(2).f_code.co_filename + return os.path.abspath(os.path.join(os.path.dirname(filename), + '__pycache__')) + +def set_tmpdir(dirname): + """Set the temporary directory to use instead of __pycache__.""" + global _TMPDIR + _TMPDIR = dirname + +def cleanup_tmpdir(tmpdir=None, keep_so=False): + """Clean up the temporary directory by removing all files in it + called `_cffi_*.{c,so}` as well as the `build` subdirectory.""" + tmpdir = tmpdir or _caller_dir_pycache() + try: + filelist = os.listdir(tmpdir) + except OSError: + return + if keep_so: + suffix = '.c' # only remove .c files + else: + suffix = _get_so_suffixes()[0].lower() + for fn in filelist: + if fn.lower().startswith('_cffi_') and ( + fn.lower().endswith(suffix) or fn.lower().endswith('.c')): + try: + os.unlink(os.path.join(tmpdir, fn)) + except OSError: + pass + clean_dir = [os.path.join(tmpdir, 'build')] + for dir in clean_dir: + try: + for fn in os.listdir(dir): + fn = os.path.join(dir, fn) + if os.path.isdir(fn): + clean_dir.append(fn) + else: + os.unlink(fn) + except OSError: + pass + +def _get_so_suffixes(): + suffixes = _extension_suffixes() + if not suffixes: + # bah, no C_EXTENSION available. Occurs on pypy without cpyext + if sys.platform == 'win32': + suffixes = [".pyd"] + else: + suffixes = [".so"] + + return suffixes + +def _ensure_dir(filename): + dirname = os.path.dirname(filename) + if dirname and not os.path.isdir(dirname): + os.makedirs(dirname) diff --git a/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/LICENSE b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/LICENSE new file mode 100644 index 0000000..9725772 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 TAHRI Ahmed R. + +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.11/site-packages/charset_normalizer-3.4.1.dist-info/METADATA b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/METADATA new file mode 100644 index 0000000..58f3667 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/METADATA @@ -0,0 +1,721 @@ +Metadata-Version: 2.1 +Name: charset-normalizer +Version: 3.4.1 +Summary: The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet. +Author-email: "Ahmed R. TAHRI" +Maintainer-email: "Ahmed R. TAHRI" +License: MIT +Project-URL: Changelog, https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md +Project-URL: Documentation, https://charset-normalizer.readthedocs.io/ +Project-URL: Code, https://github.com/jawah/charset_normalizer +Project-URL: Issue tracker, https://github.com/jawah/charset_normalizer/issues +Keywords: encoding,charset,charset-detector,detector,normalization,unicode,chardet,detect +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 :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Text Processing :: Linguistic +Classifier: Topic :: Utilities +Classifier: Typing :: Typed +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +License-File: LICENSE +Provides-Extra: unicode-backport + +

Charset Detection, for Everyone 👋

+ +

+ The Real First Universal Charset Detector
+
+ + + + Download Count Total + + + + +

+

+ Featured Packages
+ + Static Badge + + + Static Badge + +

+

+ In other language (unofficial port - by the community)
+ + Static Badge + +

+ +> A library that helps you read text from an unknown charset encoding.
Motivated by `chardet`, +> I'm trying to resolve the issue by taking a new approach. +> All IANA character set names for which the Python core library provides codecs are supported. + +

+ >>>>> 👉 Try Me Online Now, Then Adopt Me 👈 <<<<< +

+ +This project offers you an alternative to **Universal Charset Encoding Detector**, also known as **Chardet**. + +| Feature | [Chardet](https://github.com/chardet/chardet) | Charset Normalizer | [cChardet](https://github.com/PyYoshi/cChardet) | +|--------------------------------------------------|:---------------------------------------------:|:--------------------------------------------------------------------------------------------------:|:-----------------------------------------------:| +| `Fast` | ❌ | ✅ | ✅ | +| `Universal**` | ❌ | ✅ | ❌ | +| `Reliable` **without** distinguishable standards | ❌ | ✅ | ✅ | +| `Reliable` **with** distinguishable standards | ✅ | ✅ | ✅ | +| `License` | LGPL-2.1
_restrictive_ | MIT | MPL-1.1
_restrictive_ | +| `Native Python` | ✅ | ✅ | ❌ | +| `Detect spoken language` | ❌ | ✅ | N/A | +| `UnicodeDecodeError Safety` | ❌ | ✅ | ❌ | +| `Whl Size (min)` | 193.6 kB | 42 kB | ~200 kB | +| `Supported Encoding` | 33 | 🎉 [99](https://charset-normalizer.readthedocs.io/en/latest/user/support.html#supported-encodings) | 40 | + +

+Reading Normalized TextCat Reading Text +

+ +*\*\* : They are clearly using specific code for a specific encoding even if covering most of used one*
+ +## ⚡ Performance + +This package offer better performance than its counterpart Chardet. Here are some numbers. + +| Package | Accuracy | Mean per file (ms) | File per sec (est) | +|-----------------------------------------------|:--------:|:------------------:|:------------------:| +| [chardet](https://github.com/chardet/chardet) | 86 % | 63 ms | 16 file/sec | +| charset-normalizer | **98 %** | **10 ms** | 100 file/sec | + +| Package | 99th percentile | 95th percentile | 50th percentile | +|-----------------------------------------------|:---------------:|:---------------:|:---------------:| +| [chardet](https://github.com/chardet/chardet) | 265 ms | 71 ms | 7 ms | +| charset-normalizer | 100 ms | 50 ms | 5 ms | + +_updated as of december 2024 using CPython 3.12_ + +Chardet's performance on larger file (1MB+) are very poor. Expect huge difference on large payload. + +> Stats are generated using 400+ files using default parameters. More details on used files, see GHA workflows. +> And yes, these results might change at any time. The dataset can be updated to include more files. +> The actual delays heavily depends on your CPU capabilities. The factors should remain the same. +> Keep in mind that the stats are generous and that Chardet accuracy vs our is measured using Chardet initial capability +> (e.g. Supported Encoding) Challenge-them if you want. + +## ✨ Installation + +Using pip: + +```sh +pip install charset-normalizer -U +``` + +## 🚀 Basic Usage + +### CLI +This package comes with a CLI. + +``` +usage: normalizer [-h] [-v] [-a] [-n] [-m] [-r] [-f] [-t THRESHOLD] + file [file ...] + +The Real First Universal Charset Detector. Discover originating encoding used +on text file. Normalize text to unicode. + +positional arguments: + files File(s) to be analysed + +optional arguments: + -h, --help show this help message and exit + -v, --verbose Display complementary information about file if any. + Stdout will contain logs about the detection process. + -a, --with-alternative + Output complementary possibilities if any. Top-level + JSON WILL be a list. + -n, --normalize Permit to normalize input file. If not set, program + does not write anything. + -m, --minimal Only output the charset detected to STDOUT. Disabling + JSON output. + -r, --replace Replace file when trying to normalize it instead of + creating a new one. + -f, --force Replace file without asking if you are sure, use this + flag with caution. + -t THRESHOLD, --threshold THRESHOLD + Define a custom maximum amount of chaos allowed in + decoded content. 0. <= chaos <= 1. + --version Show version information and exit. +``` + +```bash +normalizer ./data/sample.1.fr.srt +``` + +or + +```bash +python -m charset_normalizer ./data/sample.1.fr.srt +``` + +🎉 Since version 1.4.0 the CLI produce easily usable stdout result in JSON format. + +```json +{ + "path": "/home/default/projects/charset_normalizer/data/sample.1.fr.srt", + "encoding": "cp1252", + "encoding_aliases": [ + "1252", + "windows_1252" + ], + "alternative_encodings": [ + "cp1254", + "cp1256", + "cp1258", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + "mbcs" + ], + "language": "French", + "alphabets": [ + "Basic Latin", + "Latin-1 Supplement" + ], + "has_sig_or_bom": false, + "chaos": 0.149, + "coherence": 97.152, + "unicode_path": null, + "is_preferred": true +} +``` + +### Python +*Just print out normalized text* +```python +from charset_normalizer import from_path + +results = from_path('./my_subtitle.srt') + +print(str(results.best())) +``` + +*Upgrade your code without effort* +```python +from charset_normalizer import detect +``` + +The above code will behave the same as **chardet**. We ensure that we offer the best (reasonable) BC result possible. + +See the docs for advanced usage : [readthedocs.io](https://charset-normalizer.readthedocs.io/en/latest/) + +## 😇 Why + +When I started using Chardet, I noticed that it was not suited to my expectations, and I wanted to propose a +reliable alternative using a completely different method. Also! I never back down on a good challenge! + +I **don't care** about the **originating charset** encoding, because **two different tables** can +produce **two identical rendered string.** +What I want is to get readable text, the best I can. + +In a way, **I'm brute forcing text decoding.** How cool is that ? 😎 + +Don't confuse package **ftfy** with charset-normalizer or chardet. ftfy goal is to repair Unicode string whereas charset-normalizer to convert raw file in unknown encoding to unicode. + +## 🍰 How + + - Discard all charset encoding table that could not fit the binary content. + - Measure noise, or the mess once opened (by chunks) with a corresponding charset encoding. + - Extract matches with the lowest mess detected. + - Additionally, we measure coherence / probe for a language. + +**Wait a minute**, what is noise/mess and coherence according to **YOU ?** + +*Noise :* I opened hundred of text files, **written by humans**, with the wrong encoding table. **I observed**, then +**I established** some ground rules about **what is obvious** when **it seems like** a mess (aka. defining noise in rendered text). + I know that my interpretation of what is noise is probably incomplete, feel free to contribute in order to + improve or rewrite it. + +*Coherence :* For each language there is on earth, we have computed ranked letter appearance occurrences (the best we can). So I thought +that intel is worth something here. So I use those records against decoded text to check if I can detect intelligent design. + +## ⚡ Known limitations + + - Language detection is unreliable when text contains two or more languages sharing identical letters. (eg. HTML (english tags) + Turkish content (Sharing Latin characters)) + - Every charset detector heavily depends on sufficient content. In common cases, do not bother run detection on very tiny content. + +## ⚠️ About Python EOLs + +**If you are running:** + +- Python >=2.7,<3.5: Unsupported +- Python 3.5: charset-normalizer < 2.1 +- Python 3.6: charset-normalizer < 3.1 +- Python 3.7: charset-normalizer < 4.0 + +Upgrade your Python interpreter as soon as possible. + +## 👤 Contributing + +Contributions, issues and feature requests are very much welcome.
+Feel free to check [issues page](https://github.com/ousret/charset_normalizer/issues) if you want to contribute. + +## 📝 License + +Copyright © [Ahmed TAHRI @Ousret](https://github.com/Ousret).
+This project is [MIT](https://github.com/Ousret/charset_normalizer/blob/master/LICENSE) licensed. + +Characters frequencies used in this project © 2012 [Denny Vrandečić](http://simia.net/letters/) + +## 💼 For Enterprise + +Professional support for charset-normalizer is available as part of the [Tidelift +Subscription][1]. Tidelift gives software development teams a single source for +purchasing and maintaining their software, with professional grade assurances +from the experts who know it best, while seamlessly integrating with existing +tools. + +[1]: https://tidelift.com/subscription/pkg/pypi-charset-normalizer?utm_source=pypi-charset-normalizer&utm_medium=readme + +[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/7297/badge)](https://www.bestpractices.dev/projects/7297) + +# Changelog +All notable changes to charset-normalizer will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [3.4.1](https://github.com/Ousret/charset_normalizer/compare/3.4.0...3.4.1) (2024-12-24) + +### Changed +- Project metadata are now stored using `pyproject.toml` instead of `setup.cfg` using setuptools as the build backend. +- Enforce annotation delayed loading for a simpler and consistent types in the project. +- Optional mypyc compilation upgraded to version 1.14 for Python >= 3.8 + +### Added +- pre-commit configuration. +- noxfile. + +### Removed +- `build-requirements.txt` as per using `pyproject.toml` native build configuration. +- `bin/integration.py` and `bin/serve.py` in favor of downstream integration test (see noxfile). +- `setup.cfg` in favor of `pyproject.toml` metadata configuration. +- Unused `utils.range_scan` function. + +### Fixed +- Converting content to Unicode bytes may insert `utf_8` instead of preferred `utf-8`. (#572) +- Deprecation warning "'count' is passed as positional argument" when converting to Unicode bytes on Python 3.13+ + +## [3.4.0](https://github.com/Ousret/charset_normalizer/compare/3.3.2...3.4.0) (2024-10-08) + +### Added +- Argument `--no-preemptive` in the CLI to prevent the detector to search for hints. +- Support for Python 3.13 (#512) + +### Fixed +- Relax the TypeError exception thrown when trying to compare a CharsetMatch with anything else than a CharsetMatch. +- Improved the general reliability of the detector based on user feedbacks. (#520) (#509) (#498) (#407) (#537) +- Declared charset in content (preemptive detection) not changed when converting to utf-8 bytes. (#381) + +## [3.3.2](https://github.com/Ousret/charset_normalizer/compare/3.3.1...3.3.2) (2023-10-31) + +### Fixed +- Unintentional memory usage regression when using large payload that match several encoding (#376) +- Regression on some detection case showcased in the documentation (#371) + +### Added +- Noise (md) probe that identify malformed arabic representation due to the presence of letters in isolated form (credit to my wife) + +## [3.3.1](https://github.com/Ousret/charset_normalizer/compare/3.3.0...3.3.1) (2023-10-22) + +### Changed +- Optional mypyc compilation upgraded to version 1.6.1 for Python >= 3.8 +- Improved the general detection reliability based on reports from the community + +## [3.3.0](https://github.com/Ousret/charset_normalizer/compare/3.2.0...3.3.0) (2023-09-30) + +### Added +- Allow to execute the CLI (e.g. normalizer) through `python -m charset_normalizer.cli` or `python -m charset_normalizer` +- Support for 9 forgotten encoding that are supported by Python but unlisted in `encoding.aliases` as they have no alias (#323) + +### Removed +- (internal) Redundant utils.is_ascii function and unused function is_private_use_only +- (internal) charset_normalizer.assets is moved inside charset_normalizer.constant + +### Changed +- (internal) Unicode code blocks in constants are updated using the latest v15.0.0 definition to improve detection +- Optional mypyc compilation upgraded to version 1.5.1 for Python >= 3.8 + +### Fixed +- Unable to properly sort CharsetMatch when both chaos/noise and coherence were close due to an unreachable condition in \_\_lt\_\_ (#350) + +## [3.2.0](https://github.com/Ousret/charset_normalizer/compare/3.1.0...3.2.0) (2023-06-07) + +### Changed +- Typehint for function `from_path` no longer enforce `PathLike` as its first argument +- Minor improvement over the global detection reliability + +### Added +- Introduce function `is_binary` that relies on main capabilities, and optimized to detect binaries +- Propagate `enable_fallback` argument throughout `from_bytes`, `from_path`, and `from_fp` that allow a deeper control over the detection (default True) +- Explicit support for Python 3.12 + +### Fixed +- Edge case detection failure where a file would contain 'very-long' camel cased word (Issue #289) + +## [3.1.0](https://github.com/Ousret/charset_normalizer/compare/3.0.1...3.1.0) (2023-03-06) + +### Added +- Argument `should_rename_legacy` for legacy function `detect` and disregard any new arguments without errors (PR #262) + +### Removed +- Support for Python 3.6 (PR #260) + +### Changed +- Optional speedup provided by mypy/c 1.0.1 + +## [3.0.1](https://github.com/Ousret/charset_normalizer/compare/3.0.0...3.0.1) (2022-11-18) + +### Fixed +- Multi-bytes cutter/chunk generator did not always cut correctly (PR #233) + +### Changed +- Speedup provided by mypy/c 0.990 on Python >= 3.7 + +## [3.0.0](https://github.com/Ousret/charset_normalizer/compare/2.1.1...3.0.0) (2022-10-20) + +### Added +- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results +- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES +- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio +- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) + +### Changed +- Build with static metadata using 'build' frontend +- Make the language detection stricter +- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 + +### Fixed +- CLI with opt --normalize fail when using full path for files +- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it +- Sphinx warnings when generating the documentation + +### Removed +- Coherence detector no longer return 'Simple English' instead return 'English' +- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' +- Breaking: Method `first()` and `best()` from CharsetMatch +- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) +- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches +- Breaking: Top-level function `normalize` +- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch +- Support for the backport `unicodedata2` + +## [3.0.0rc1](https://github.com/Ousret/charset_normalizer/compare/3.0.0b2...3.0.0rc1) (2022-10-18) + +### Added +- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results +- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES +- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio + +### Changed +- Build with static metadata using 'build' frontend +- Make the language detection stricter + +### Fixed +- CLI with opt --normalize fail when using full path for files +- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it + +### Removed +- Coherence detector no longer return 'Simple English' instead return 'English' +- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' + +## [3.0.0b2](https://github.com/Ousret/charset_normalizer/compare/3.0.0b1...3.0.0b2) (2022-08-21) + +### Added +- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) + +### Removed +- Breaking: Method `first()` and `best()` from CharsetMatch +- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) + +### Fixed +- Sphinx warnings when generating the documentation + +## [3.0.0b1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...3.0.0b1) (2022-08-15) + +### Changed +- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 + +### Removed +- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches +- Breaking: Top-level function `normalize` +- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch +- Support for the backport `unicodedata2` + +## [2.1.1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...2.1.1) (2022-08-19) + +### Deprecated +- Function `normalize` scheduled for removal in 3.0 + +### Changed +- Removed useless call to decode in fn is_unprintable (#206) + +### Fixed +- Third-party library (i18n xgettext) crashing not recognizing utf_8 (PEP 263) with underscore from [@aleksandernovikov](https://github.com/aleksandernovikov) (#204) + +## [2.1.0](https://github.com/Ousret/charset_normalizer/compare/2.0.12...2.1.0) (2022-06-19) + +### Added +- Output the Unicode table version when running the CLI with `--version` (PR #194) + +### Changed +- Re-use decoded buffer for single byte character sets from [@nijel](https://github.com/nijel) (PR #175) +- Fixing some performance bottlenecks from [@deedy5](https://github.com/deedy5) (PR #183) + +### Fixed +- Workaround potential bug in cpython with Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space (PR #175) +- CLI default threshold aligned with the API threshold from [@oleksandr-kuzmenko](https://github.com/oleksandr-kuzmenko) (PR #181) + +### Removed +- Support for Python 3.5 (PR #192) + +### Deprecated +- Use of backport unicodedata from `unicodedata2` as Python is quickly catching up, scheduled for removal in 3.0 (PR #194) + +## [2.0.12](https://github.com/Ousret/charset_normalizer/compare/2.0.11...2.0.12) (2022-02-12) + +### Fixed +- ASCII miss-detection on rare cases (PR #170) + +## [2.0.11](https://github.com/Ousret/charset_normalizer/compare/2.0.10...2.0.11) (2022-01-30) + +### Added +- Explicit support for Python 3.11 (PR #164) + +### Changed +- The logging behavior have been completely reviewed, now using only TRACE and DEBUG levels (PR #163 #165) + +## [2.0.10](https://github.com/Ousret/charset_normalizer/compare/2.0.9...2.0.10) (2022-01-04) + +### Fixed +- Fallback match entries might lead to UnicodeDecodeError for large bytes sequence (PR #154) + +### Changed +- Skipping the language-detection (CD) on ASCII (PR #155) + +## [2.0.9](https://github.com/Ousret/charset_normalizer/compare/2.0.8...2.0.9) (2021-12-03) + +### Changed +- Moderating the logging impact (since 2.0.8) for specific environments (PR #147) + +### Fixed +- Wrong logging level applied when setting kwarg `explain` to True (PR #146) + +## [2.0.8](https://github.com/Ousret/charset_normalizer/compare/2.0.7...2.0.8) (2021-11-24) +### Changed +- Improvement over Vietnamese detection (PR #126) +- MD improvement on trailing data and long foreign (non-pure latin) data (PR #124) +- Efficiency improvements in cd/alphabet_languages from [@adbar](https://github.com/adbar) (PR #122) +- call sum() without an intermediary list following PEP 289 recommendations from [@adbar](https://github.com/adbar) (PR #129) +- Code style as refactored by Sourcery-AI (PR #131) +- Minor adjustment on the MD around european words (PR #133) +- Remove and replace SRTs from assets / tests (PR #139) +- Initialize the library logger with a `NullHandler` by default from [@nmaynes](https://github.com/nmaynes) (PR #135) +- Setting kwarg `explain` to True will add provisionally (bounded to function lifespan) a specific stream handler (PR #135) + +### Fixed +- Fix large (misleading) sequence giving UnicodeDecodeError (PR #137) +- Avoid using too insignificant chunk (PR #137) + +### Added +- Add and expose function `set_logging_handler` to configure a specific StreamHandler from [@nmaynes](https://github.com/nmaynes) (PR #135) +- Add `CHANGELOG.md` entries, format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) (PR #141) + +## [2.0.7](https://github.com/Ousret/charset_normalizer/compare/2.0.6...2.0.7) (2021-10-11) +### Added +- Add support for Kazakh (Cyrillic) language detection (PR #109) + +### Changed +- Further, improve inferring the language from a given single-byte code page (PR #112) +- Vainly trying to leverage PEP263 when PEP3120 is not supported (PR #116) +- Refactoring for potential performance improvements in loops from [@adbar](https://github.com/adbar) (PR #113) +- Various detection improvement (MD+CD) (PR #117) + +### Removed +- Remove redundant logging entry about detected language(s) (PR #115) + +### Fixed +- Fix a minor inconsistency between Python 3.5 and other versions regarding language detection (PR #117 #102) + +## [2.0.6](https://github.com/Ousret/charset_normalizer/compare/2.0.5...2.0.6) (2021-09-18) +### Fixed +- Unforeseen regression with the loss of the backward-compatibility with some older minor of Python 3.5.x (PR #100) +- Fix CLI crash when using --minimal output in certain cases (PR #103) + +### Changed +- Minor improvement to the detection efficiency (less than 1%) (PR #106 #101) + +## [2.0.5](https://github.com/Ousret/charset_normalizer/compare/2.0.4...2.0.5) (2021-09-14) +### Changed +- The project now comply with: flake8, mypy, isort and black to ensure a better overall quality (PR #81) +- The BC-support with v1.x was improved, the old staticmethods are restored (PR #82) +- The Unicode detection is slightly improved (PR #93) +- Add syntax sugar \_\_bool\_\_ for results CharsetMatches list-container (PR #91) + +### Removed +- The project no longer raise warning on tiny content given for detection, will be simply logged as warning instead (PR #92) + +### Fixed +- In some rare case, the chunks extractor could cut in the middle of a multi-byte character and could mislead the mess detection (PR #95) +- Some rare 'space' characters could trip up the UnprintablePlugin/Mess detection (PR #96) +- The MANIFEST.in was not exhaustive (PR #78) + +## [2.0.4](https://github.com/Ousret/charset_normalizer/compare/2.0.3...2.0.4) (2021-07-30) +### Fixed +- The CLI no longer raise an unexpected exception when no encoding has been found (PR #70) +- Fix accessing the 'alphabets' property when the payload contains surrogate characters (PR #68) +- The logger could mislead (explain=True) on detected languages and the impact of one MBCS match (PR #72) +- Submatch factoring could be wrong in rare edge cases (PR #72) +- Multiple files given to the CLI were ignored when publishing results to STDOUT. (After the first path) (PR #72) +- Fix line endings from CRLF to LF for certain project files (PR #67) + +### Changed +- Adjust the MD to lower the sensitivity, thus improving the global detection reliability (PR #69 #76) +- Allow fallback on specified encoding if any (PR #71) + +## [2.0.3](https://github.com/Ousret/charset_normalizer/compare/2.0.2...2.0.3) (2021-07-16) +### Changed +- Part of the detection mechanism has been improved to be less sensitive, resulting in more accurate detection results. Especially ASCII. (PR #63) +- According to the community wishes, the detection will fall back on ASCII or UTF-8 in a last-resort case. (PR #64) + +## [2.0.2](https://github.com/Ousret/charset_normalizer/compare/2.0.1...2.0.2) (2021-07-15) +### Fixed +- Empty/Too small JSON payload miss-detection fixed. Report from [@tseaver](https://github.com/tseaver) (PR #59) + +### Changed +- Don't inject unicodedata2 into sys.modules from [@akx](https://github.com/akx) (PR #57) + +## [2.0.1](https://github.com/Ousret/charset_normalizer/compare/2.0.0...2.0.1) (2021-07-13) +### Fixed +- Make it work where there isn't a filesystem available, dropping assets frequencies.json. Report from [@sethmlarson](https://github.com/sethmlarson). (PR #55) +- Using explain=False permanently disable the verbose output in the current runtime (PR #47) +- One log entry (language target preemptive) was not show in logs when using explain=True (PR #47) +- Fix undesired exception (ValueError) on getitem of instance CharsetMatches (PR #52) + +### Changed +- Public function normalize default args values were not aligned with from_bytes (PR #53) + +### Added +- You may now use charset aliases in cp_isolation and cp_exclusion arguments (PR #47) + +## [2.0.0](https://github.com/Ousret/charset_normalizer/compare/1.4.1...2.0.0) (2021-07-02) +### Changed +- 4x to 5 times faster than the previous 1.4.0 release. At least 2x faster than Chardet. +- Accent has been made on UTF-8 detection, should perform rather instantaneous. +- The backward compatibility with Chardet has been greatly improved. The legacy detect function returns an identical charset name whenever possible. +- The detection mechanism has been slightly improved, now Turkish content is detected correctly (most of the time) +- The program has been rewritten to ease the readability and maintainability. (+Using static typing)+ +- utf_7 detection has been reinstated. + +### Removed +- This package no longer require anything when used with Python 3.5 (Dropped cached_property) +- Removed support for these languages: Catalan, Esperanto, Kazakh, Baque, Volapük, Azeri, Galician, Nynorsk, Macedonian, and Serbocroatian. +- The exception hook on UnicodeDecodeError has been removed. + +### Deprecated +- Methods coherence_non_latin, w_counter, chaos_secondary_pass of the class CharsetMatch are now deprecated and scheduled for removal in v3.0 + +### Fixed +- The CLI output used the relative path of the file(s). Should be absolute. + +## [1.4.1](https://github.com/Ousret/charset_normalizer/compare/1.4.0...1.4.1) (2021-05-28) +### Fixed +- Logger configuration/usage no longer conflict with others (PR #44) + +## [1.4.0](https://github.com/Ousret/charset_normalizer/compare/1.3.9...1.4.0) (2021-05-21) +### Removed +- Using standard logging instead of using the package loguru. +- Dropping nose test framework in favor of the maintained pytest. +- Choose to not use dragonmapper package to help with gibberish Chinese/CJK text. +- Require cached_property only for Python 3.5 due to constraint. Dropping for every other interpreter version. +- Stop support for UTF-7 that does not contain a SIG. +- Dropping PrettyTable, replaced with pure JSON output in CLI. + +### Fixed +- BOM marker in a CharsetNormalizerMatch instance could be False in rare cases even if obviously present. Due to the sub-match factoring process. +- Not searching properly for the BOM when trying utf32/16 parent codec. + +### Changed +- Improving the package final size by compressing frequencies.json. +- Huge improvement over the larges payload. + +### Added +- CLI now produces JSON consumable output. +- Return ASCII if given sequences fit. Given reasonable confidence. + +## [1.3.9](https://github.com/Ousret/charset_normalizer/compare/1.3.8...1.3.9) (2021-05-13) + +### Fixed +- In some very rare cases, you may end up getting encode/decode errors due to a bad bytes payload (PR #40) + +## [1.3.8](https://github.com/Ousret/charset_normalizer/compare/1.3.7...1.3.8) (2021-05-12) + +### Fixed +- Empty given payload for detection may cause an exception if trying to access the `alphabets` property. (PR #39) + +## [1.3.7](https://github.com/Ousret/charset_normalizer/compare/1.3.6...1.3.7) (2021-05-12) + +### Fixed +- The legacy detect function should return UTF-8-SIG if sig is present in the payload. (PR #38) + +## [1.3.6](https://github.com/Ousret/charset_normalizer/compare/1.3.5...1.3.6) (2021-02-09) + +### Changed +- Amend the previous release to allow prettytable 2.0 (PR #35) + +## [1.3.5](https://github.com/Ousret/charset_normalizer/compare/1.3.4...1.3.5) (2021-02-08) + +### Fixed +- Fix error while using the package with a python pre-release interpreter (PR #33) + +### Changed +- Dependencies refactoring, constraints revised. + +### Added +- Add python 3.9 and 3.10 to the supported interpreters + +MIT License + +Copyright (c) 2025 TAHRI Ahmed R. + +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.11/site-packages/charset_normalizer-3.4.1.dist-info/RECORD b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/RECORD new file mode 100644 index 0000000..9527b0e --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/RECORD @@ -0,0 +1,35 @@ +../../../bin/normalizer,sha256=5gPRn5JU7we3lSMrc5xhR32NnibLsMBZPWUPCtP5Ock,255 +charset_normalizer-3.4.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +charset_normalizer-3.4.1.dist-info/LICENSE,sha256=bQ1Bv-FwrGx9wkjJpj4lTQ-0WmDVCoJX0K-SxuJJuIc,1071 +charset_normalizer-3.4.1.dist-info/METADATA,sha256=JbyHzhmqZh_ugEn1Y7TY7CDYZA9FoU6BP25hrCNDf50,35313 +charset_normalizer-3.4.1.dist-info/RECORD,, +charset_normalizer-3.4.1.dist-info/WHEEL,sha256=9BFfIe-Zq441iQ0ehutX65O5faGDpmB1Uw3WaQGk4f0,151 +charset_normalizer-3.4.1.dist-info/entry_points.txt,sha256=8C-Y3iXIfyXQ83Tpir2B8t-XLJYpxF5xbb38d_js-h4,65 +charset_normalizer-3.4.1.dist-info/top_level.txt,sha256=7ASyzePr8_xuZWJsnqJjIBtyV8vhEo0wBCv1MPRRi3Q,19 +charset_normalizer/__init__.py,sha256=OKRxRv2Zhnqk00tqkN0c1BtJjm165fWXLydE52IKuHc,1590 +charset_normalizer/__main__.py,sha256=yzYxMR-IhKRHYwcSlavEv8oGdwxsR89mr2X09qXGdps,109 +charset_normalizer/__pycache__/__init__.cpython-311.pyc,, +charset_normalizer/__pycache__/__main__.cpython-311.pyc,, +charset_normalizer/__pycache__/api.cpython-311.pyc,, +charset_normalizer/__pycache__/cd.cpython-311.pyc,, +charset_normalizer/__pycache__/constant.cpython-311.pyc,, +charset_normalizer/__pycache__/legacy.cpython-311.pyc,, +charset_normalizer/__pycache__/md.cpython-311.pyc,, +charset_normalizer/__pycache__/models.cpython-311.pyc,, +charset_normalizer/__pycache__/utils.cpython-311.pyc,, +charset_normalizer/__pycache__/version.cpython-311.pyc,, +charset_normalizer/api.py,sha256=qBRz8mJ_R5E713R6TOyqHEdnmyxbEDnCSHvx32ubDGg,22617 +charset_normalizer/cd.py,sha256=WKTo1HDb-H9HfCDc3Bfwq5jzS25Ziy9SE2a74SgTq88,12522 +charset_normalizer/cli/__init__.py,sha256=D8I86lFk2-py45JvqxniTirSj_sFyE6sjaY_0-G1shc,136 +charset_normalizer/cli/__main__.py,sha256=VGC9klOoi6_R2z8rmyrc936kv7u2A1udjjHtlmNPDTM,10410 +charset_normalizer/cli/__pycache__/__init__.cpython-311.pyc,, +charset_normalizer/cli/__pycache__/__main__.cpython-311.pyc,, +charset_normalizer/constant.py,sha256=4VuTcZNLew1j_8ixA-Rt_VVqNWD4pwgHOHMCMlr0964,40477 +charset_normalizer/legacy.py,sha256=yhNXsPHkBfqPXKRb-sPXNj3Bscp9-mFGcYOkJ62tg9c,2328 +charset_normalizer/md.cpython-311-x86_64-linux-gnu.so,sha256=Y7QSLD5QLoSFAWys0-tL7R6QB7oi5864zM6zr7RWek4,16064 +charset_normalizer/md.py,sha256=iyXXQGWl54nnLQLueMWTmUtlivO0-rTBgVkmJxIIAGU,20036 +charset_normalizer/md__mypyc.cpython-311-x86_64-linux-gnu.so,sha256=XhkMX4lYOzNR-a68sp24uNetCg-njAJCHj14aJM6dY8,272624 +charset_normalizer/models.py,sha256=lKXhOnIPtiakbK3i__J9wpOfzx3JDTKj7Dn3Rg0VaRI,12394 +charset_normalizer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +charset_normalizer/utils.py,sha256=T5UHo8AS7NVMmgruWoZyqEf0WrZVcQpgUNetRoborSk,12002 +charset_normalizer/version.py,sha256=Ambcj3O8FfvdLfDLc8dkaxZx97O1IM_R4_aKGD_TDdE,115 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/WHEEL b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/WHEEL new file mode 100644 index 0000000..8b03636 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: setuptools (75.6.0) +Root-Is-Purelib: false +Tag: cp311-cp311-manylinux_2_17_x86_64 +Tag: cp311-cp311-manylinux2014_x86_64 + diff --git a/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/entry_points.txt b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/entry_points.txt new file mode 100644 index 0000000..ec92012 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +normalizer = charset_normalizer:cli.cli_detect diff --git a/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/top_level.txt new file mode 100644 index 0000000..66958f0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer-3.4.1.dist-info/top_level.txt @@ -0,0 +1 @@ +charset_normalizer diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/__init__.py b/venv/lib/python3.11/site-packages/charset_normalizer/__init__.py new file mode 100644 index 0000000..0d3a379 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/__init__.py @@ -0,0 +1,48 @@ +""" +Charset-Normalizer +~~~~~~~~~~~~~~ +The Real First Universal Charset Detector. +A library that helps you read text from an unknown charset encoding. +Motivated by chardet, This package is trying to resolve the issue by taking a new approach. +All IANA character set names for which the Python core library provides codecs are supported. + +Basic usage: + >>> from charset_normalizer import from_bytes + >>> results = from_bytes('Bсеки човек има право на образование. Oбразованието!'.encode('utf_8')) + >>> best_guess = results.best() + >>> str(best_guess) + 'Bсеки човек има право на образование. Oбразованието!' + +Others methods and usages are available - see the full documentation +at . +:copyright: (c) 2021 by Ahmed TAHRI +:license: MIT, see LICENSE for more details. +""" + +from __future__ import annotations + +import logging + +from .api import from_bytes, from_fp, from_path, is_binary +from .legacy import detect +from .models import CharsetMatch, CharsetMatches +from .utils import set_logging_handler +from .version import VERSION, __version__ + +__all__ = ( + "from_fp", + "from_path", + "from_bytes", + "is_binary", + "detect", + "CharsetMatch", + "CharsetMatches", + "__version__", + "VERSION", + "set_logging_handler", +) + +# Attach a NullHandler to the top level logger by default +# https://docs.python.org/3.3/howto/logging.html#configuring-logging-for-a-library + +logging.getLogger("charset_normalizer").addHandler(logging.NullHandler()) diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/__main__.py b/venv/lib/python3.11/site-packages/charset_normalizer/__main__.py new file mode 100644 index 0000000..e0e76f7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/__main__.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from .cli import cli_detect + +if __name__ == "__main__": + cli_detect() diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb74ca381d092f66a2e517c857aef38808172d25 GIT binary patch literal 1914 zcmcIk&1)M+6d!$9vRAfK+x>t->9mE&DzP@Up)DdcIH`>ViCt{BhlR3?c1PN^XFr&k zm8%|#n@j(MUVBO@xwwT;Q&RU|SOr7Po)UV>%_X;-`es-12Ql>2(d^TEGxO&C-q-vz zF`*$C?Z^LgJ}M#fw-SbN zC9iChy-{Nn_KS9jjd_}(rF@xHym4dPn=mF)d6Z3h*Nkf^KgM43ri>|X+L#7eGiLIL z7It1A0rzdP*(bHd{SO#ZUqKiI^1l(+hjE)!Y5=;z#lC@geSiA0NfP zDgnob@#FXa$A9+s;{#Yb!tozUK8k-ySAI)R9>C&Z{HTsMu3GNjkB{D~*3Jkm;Z0LnzjMy<^p>ZvSdRhd^?MKmK4$@ zE+Z{Q@f;*LtBrO9$+rV5@~AI~bOT?58olL68H$FkcU`bH!;mHMkmTdHdf zD+qhs?KrZ5XRR7uxVbQ|3U1l)pklX|*EXA4gSi&<1#RGa&Fvd0fV<5*E9+Y;X^nZR zq@bt)qNr=nRh!mwNrm`+kl_;R&sDeAiixJ$B`c4lobv538B3XvNGBO{h1qg_=s38c z1b0Fs*7C{tpf&FiX*tQ{MTrVHIRiy+vY^v}9x)w=9itr7%3rQ*ZZ$X7lZt7o9)}Q_ zW=-SpG$LMBWJHlsMaC3SuP3i4GO5UfBI7`k=~rV{dn+lMCdA(~6U{W+k&HMsO%9I` zO3DK;Nr8lJX64+dvX_(??GUS%+D%Fx^dA%F_LGrFLNqhuRsx0b$IRc zFnuQ$>+|!va3!4^yiwwc^3hGx^<8P2^|1GH^cFY~F}lRx1#2qb;u(?<z>I?sDdjHaTZB2J)O^|;Mw5@{Q EKNm%CIsgCw literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/api.cpython-311.pyc b/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/api.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2321b06910a2c38866c4f85b76105e920c36c0d3 GIT binary patch literal 20771 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/cd.cpython-311.pyc b/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/cd.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba555cc926e7fa7970ce17a66743d581283cee03 GIT binary patch literal 15879 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 Y_FQ1UI3V?*>9b8Wr+^>6ZjgumFHLwaC;$Ke literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/md.cpython-311.pyc b/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/md.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d79e206db87972d0ab95c5ef684ed53486b7631b GIT binary patch literal 27598 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/models.cpython-311.pyc b/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e5c00c4b5830b837421dee5d64b57a472b4633a GIT binary patch literal 18569 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 UPajWcv_5>q(!bdtmm%5z1zdSchyVZp literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/utils.cpython-311.pyc b/venv/lib/python3.11/site-packages/charset_normalizer/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..891b9437e1b9eacb0d8748800a9396c3e7bff06f GIT binary patch literal 15400 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 cD^vReRo+qc6;*GJUQq1~)uzQ CharsetMatches: + """ + Given a raw bytes sequence, return the best possibles charset usable to render str objects. + If there is no results, it is a strong indicator that the source is binary/not text. + By default, the process will extract 5 blocks of 512o each to assess the mess and coherence of a given sequence. + And will give up a particular code page after 20% of measured mess. Those criteria are customizable at will. + + The preemptive behavior DOES NOT replace the traditional detection workflow, it prioritize a particular code page + but never take it for granted. Can improve the performance. + + You may want to focus your attention to some code page or/and not others, use cp_isolation and cp_exclusion for that + purpose. + + This function will strip the SIG in the payload/sequence every time except on UTF-16, UTF-32. + By default the library does not setup any handler other than the NullHandler, if you choose to set the 'explain' + toggle to True it will alter the logger configuration to add a StreamHandler that is suitable for debugging. + Custom logging format and handler can be set manually. + """ + + if not isinstance(sequences, (bytearray, bytes)): + raise TypeError( + "Expected object of type bytes or bytearray, got: {}".format( + type(sequences) + ) + ) + + if explain: + previous_logger_level: int = logger.level + logger.addHandler(explain_handler) + logger.setLevel(TRACE) + + length: int = len(sequences) + + if length == 0: + logger.debug("Encoding detection on empty bytes, assuming utf_8 intention.") + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level or logging.WARNING) + return CharsetMatches([CharsetMatch(sequences, "utf_8", 0.0, False, [], "")]) + + if cp_isolation is not None: + logger.log( + TRACE, + "cp_isolation is set. use this flag for debugging purpose. " + "limited list of encoding allowed : %s.", + ", ".join(cp_isolation), + ) + cp_isolation = [iana_name(cp, False) for cp in cp_isolation] + else: + cp_isolation = [] + + if cp_exclusion is not None: + logger.log( + TRACE, + "cp_exclusion is set. use this flag for debugging purpose. " + "limited list of encoding excluded : %s.", + ", ".join(cp_exclusion), + ) + cp_exclusion = [iana_name(cp, False) for cp in cp_exclusion] + else: + cp_exclusion = [] + + if length <= (chunk_size * steps): + logger.log( + TRACE, + "override steps (%i) and chunk_size (%i) as content does not fit (%i byte(s) given) parameters.", + steps, + chunk_size, + length, + ) + steps = 1 + chunk_size = length + + if steps > 1 and length / steps < chunk_size: + chunk_size = int(length / steps) + + is_too_small_sequence: bool = len(sequences) < TOO_SMALL_SEQUENCE + is_too_large_sequence: bool = len(sequences) >= TOO_BIG_SEQUENCE + + if is_too_small_sequence: + logger.log( + TRACE, + "Trying to detect encoding from a tiny portion of ({}) byte(s).".format( + length + ), + ) + elif is_too_large_sequence: + logger.log( + TRACE, + "Using lazy str decoding because the payload is quite large, ({}) byte(s).".format( + length + ), + ) + + prioritized_encodings: list[str] = [] + + specified_encoding: str | None = ( + any_specified_encoding(sequences) if preemptive_behaviour else None + ) + + if specified_encoding is not None: + prioritized_encodings.append(specified_encoding) + logger.log( + TRACE, + "Detected declarative mark in sequence. Priority +1 given for %s.", + specified_encoding, + ) + + tested: set[str] = set() + tested_but_hard_failure: list[str] = [] + tested_but_soft_failure: list[str] = [] + + fallback_ascii: CharsetMatch | None = None + fallback_u8: CharsetMatch | None = None + fallback_specified: CharsetMatch | None = None + + results: CharsetMatches = CharsetMatches() + + early_stop_results: CharsetMatches = CharsetMatches() + + sig_encoding, sig_payload = identify_sig_or_bom(sequences) + + if sig_encoding is not None: + prioritized_encodings.append(sig_encoding) + logger.log( + TRACE, + "Detected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.", + len(sig_payload), + sig_encoding, + ) + + prioritized_encodings.append("ascii") + + if "utf_8" not in prioritized_encodings: + prioritized_encodings.append("utf_8") + + for encoding_iana in prioritized_encodings + IANA_SUPPORTED: + if cp_isolation and encoding_iana not in cp_isolation: + continue + + if cp_exclusion and encoding_iana in cp_exclusion: + continue + + if encoding_iana in tested: + continue + + tested.add(encoding_iana) + + decoded_payload: str | None = None + bom_or_sig_available: bool = sig_encoding == encoding_iana + strip_sig_or_bom: bool = bom_or_sig_available and should_strip_sig_or_bom( + encoding_iana + ) + + if encoding_iana in {"utf_16", "utf_32"} and not bom_or_sig_available: + logger.log( + TRACE, + "Encoding %s won't be tested as-is because it require a BOM. Will try some sub-encoder LE/BE.", + encoding_iana, + ) + continue + if encoding_iana in {"utf_7"} and not bom_or_sig_available: + logger.log( + TRACE, + "Encoding %s won't be tested as-is because detection is unreliable without BOM/SIG.", + encoding_iana, + ) + continue + + try: + is_multi_byte_decoder: bool = is_multi_byte_encoding(encoding_iana) + except (ModuleNotFoundError, ImportError): + logger.log( + TRACE, + "Encoding %s does not provide an IncrementalDecoder", + encoding_iana, + ) + continue + + try: + if is_too_large_sequence and is_multi_byte_decoder is False: + str( + ( + sequences[: int(50e4)] + if strip_sig_or_bom is False + else sequences[len(sig_payload) : int(50e4)] + ), + encoding=encoding_iana, + ) + else: + decoded_payload = str( + ( + sequences + if strip_sig_or_bom is False + else sequences[len(sig_payload) :] + ), + encoding=encoding_iana, + ) + except (UnicodeDecodeError, LookupError) as e: + if not isinstance(e, LookupError): + logger.log( + TRACE, + "Code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + tested_but_hard_failure.append(encoding_iana) + continue + + similar_soft_failure_test: bool = False + + for encoding_soft_failed in tested_but_soft_failure: + if is_cp_similar(encoding_iana, encoding_soft_failed): + similar_soft_failure_test = True + break + + if similar_soft_failure_test: + logger.log( + TRACE, + "%s is deemed too similar to code page %s and was consider unsuited already. Continuing!", + encoding_iana, + encoding_soft_failed, + ) + continue + + r_ = range( + 0 if not bom_or_sig_available else len(sig_payload), + length, + int(length / steps), + ) + + multi_byte_bonus: bool = ( + is_multi_byte_decoder + and decoded_payload is not None + and len(decoded_payload) < length + ) + + if multi_byte_bonus: + logger.log( + TRACE, + "Code page %s is a multi byte encoding table and it appear that at least one character " + "was encoded using n-bytes.", + encoding_iana, + ) + + max_chunk_gave_up: int = int(len(r_) / 4) + + max_chunk_gave_up = max(max_chunk_gave_up, 2) + early_stop_count: int = 0 + lazy_str_hard_failure = False + + md_chunks: list[str] = [] + md_ratios = [] + + try: + for chunk in cut_sequence_chunks( + sequences, + encoding_iana, + r_, + chunk_size, + bom_or_sig_available, + strip_sig_or_bom, + sig_payload, + is_multi_byte_decoder, + decoded_payload, + ): + md_chunks.append(chunk) + + md_ratios.append( + mess_ratio( + chunk, + threshold, + explain is True and 1 <= len(cp_isolation) <= 2, + ) + ) + + if md_ratios[-1] >= threshold: + early_stop_count += 1 + + if (early_stop_count >= max_chunk_gave_up) or ( + bom_or_sig_available and strip_sig_or_bom is False + ): + break + except ( + UnicodeDecodeError + ) as e: # Lazy str loading may have missed something there + logger.log( + TRACE, + "LazyStr Loading: After MD chunk decode, code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + early_stop_count = max_chunk_gave_up + lazy_str_hard_failure = True + + # We might want to check the sequence again with the whole content + # Only if initial MD tests passes + if ( + not lazy_str_hard_failure + and is_too_large_sequence + and not is_multi_byte_decoder + ): + try: + sequences[int(50e3) :].decode(encoding_iana, errors="strict") + except UnicodeDecodeError as e: + logger.log( + TRACE, + "LazyStr Loading: After final lookup, code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + tested_but_hard_failure.append(encoding_iana) + continue + + mean_mess_ratio: float = sum(md_ratios) / len(md_ratios) if md_ratios else 0.0 + if mean_mess_ratio >= threshold or early_stop_count >= max_chunk_gave_up: + tested_but_soft_failure.append(encoding_iana) + logger.log( + TRACE, + "%s was excluded because of initial chaos probing. Gave up %i time(s). " + "Computed mean chaos is %f %%.", + encoding_iana, + early_stop_count, + round(mean_mess_ratio * 100, ndigits=3), + ) + # Preparing those fallbacks in case we got nothing. + if ( + enable_fallback + and encoding_iana in ["ascii", "utf_8", specified_encoding] + and not lazy_str_hard_failure + ): + fallback_entry = CharsetMatch( + sequences, + encoding_iana, + threshold, + False, + [], + decoded_payload, + preemptive_declaration=specified_encoding, + ) + if encoding_iana == specified_encoding: + fallback_specified = fallback_entry + elif encoding_iana == "ascii": + fallback_ascii = fallback_entry + else: + fallback_u8 = fallback_entry + continue + + logger.log( + TRACE, + "%s passed initial chaos probing. Mean measured chaos is %f %%", + encoding_iana, + round(mean_mess_ratio * 100, ndigits=3), + ) + + if not is_multi_byte_decoder: + target_languages: list[str] = encoding_languages(encoding_iana) + else: + target_languages = mb_encoding_languages(encoding_iana) + + if target_languages: + logger.log( + TRACE, + "{} should target any language(s) of {}".format( + encoding_iana, str(target_languages) + ), + ) + + cd_ratios = [] + + # We shall skip the CD when its about ASCII + # Most of the time its not relevant to run "language-detection" on it. + if encoding_iana != "ascii": + for chunk in md_chunks: + chunk_languages = coherence_ratio( + chunk, + language_threshold, + ",".join(target_languages) if target_languages else None, + ) + + cd_ratios.append(chunk_languages) + + cd_ratios_merged = merge_coherence_ratios(cd_ratios) + + if cd_ratios_merged: + logger.log( + TRACE, + "We detected language {} using {}".format( + cd_ratios_merged, encoding_iana + ), + ) + + current_match = CharsetMatch( + sequences, + encoding_iana, + mean_mess_ratio, + bom_or_sig_available, + cd_ratios_merged, + ( + decoded_payload + if ( + is_too_large_sequence is False + or encoding_iana in [specified_encoding, "ascii", "utf_8"] + ) + else None + ), + preemptive_declaration=specified_encoding, + ) + + results.append(current_match) + + if ( + encoding_iana in [specified_encoding, "ascii", "utf_8"] + and mean_mess_ratio < 0.1 + ): + # If md says nothing to worry about, then... stop immediately! + if mean_mess_ratio == 0.0: + logger.debug( + "Encoding detection: %s is most likely the one.", + current_match.encoding, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([current_match]) + + early_stop_results.append(current_match) + + if ( + len(early_stop_results) + and (specified_encoding is None or specified_encoding in tested) + and "ascii" in tested + and "utf_8" in tested + ): + probable_result: CharsetMatch = early_stop_results.best() # type: ignore[assignment] + logger.debug( + "Encoding detection: %s is most likely the one.", + probable_result.encoding, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + + return CharsetMatches([probable_result]) + + if encoding_iana == sig_encoding: + logger.debug( + "Encoding detection: %s is most likely the one as we detected a BOM or SIG within " + "the beginning of the sequence.", + encoding_iana, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([results[encoding_iana]]) + + if len(results) == 0: + if fallback_u8 or fallback_ascii or fallback_specified: + logger.log( + TRACE, + "Nothing got out of the detection process. Using ASCII/UTF-8/Specified fallback.", + ) + + if fallback_specified: + logger.debug( + "Encoding detection: %s will be used as a fallback match", + fallback_specified.encoding, + ) + results.append(fallback_specified) + elif ( + (fallback_u8 and fallback_ascii is None) + or ( + fallback_u8 + and fallback_ascii + and fallback_u8.fingerprint != fallback_ascii.fingerprint + ) + or (fallback_u8 is not None) + ): + logger.debug("Encoding detection: utf_8 will be used as a fallback match") + results.append(fallback_u8) + elif fallback_ascii: + logger.debug("Encoding detection: ascii will be used as a fallback match") + results.append(fallback_ascii) + + if results: + logger.debug( + "Encoding detection: Found %s as plausible (best-candidate) for content. With %i alternatives.", + results.best().encoding, # type: ignore + len(results) - 1, + ) + else: + logger.debug("Encoding detection: Unable to determine any suitable charset.") + + if explain: + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + + return results + + +def from_fp( + fp: BinaryIO, + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Same thing than the function from_bytes but using a file pointer that is already ready. + Will not close the file pointer. + """ + return from_bytes( + fp.read(), + steps, + chunk_size, + threshold, + cp_isolation, + cp_exclusion, + preemptive_behaviour, + explain, + language_threshold, + enable_fallback, + ) + + +def from_path( + path: str | bytes | PathLike, # type: ignore[type-arg] + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Same thing than the function from_bytes but with one extra step. Opening and reading given file path in binary mode. + Can raise IOError. + """ + with open(path, "rb") as fp: + return from_fp( + fp, + steps, + chunk_size, + threshold, + cp_isolation, + cp_exclusion, + preemptive_behaviour, + explain, + language_threshold, + enable_fallback, + ) + + +def is_binary( + fp_or_path_or_payload: PathLike | str | BinaryIO | bytes, # type: ignore[type-arg] + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = False, +) -> bool: + """ + Detect if the given input (file, bytes, or path) points to a binary file. aka. not a string. + Based on the same main heuristic algorithms and default kwargs at the sole exception that fallbacks match + are disabled to be stricter around ASCII-compatible but unlikely to be a string. + """ + if isinstance(fp_or_path_or_payload, (str, PathLike)): + guesses = from_path( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + elif isinstance( + fp_or_path_or_payload, + ( + bytes, + bytearray, + ), + ): + guesses = from_bytes( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + else: + guesses = from_fp( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + + return not guesses diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/cd.py b/venv/lib/python3.11/site-packages/charset_normalizer/cd.py new file mode 100644 index 0000000..71a3ed5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/cd.py @@ -0,0 +1,395 @@ +from __future__ import annotations + +import importlib +from codecs import IncrementalDecoder +from collections import Counter +from functools import lru_cache +from typing import Counter as TypeCounter + +from .constant import ( + FREQUENCIES, + KO_NAMES, + LANGUAGE_SUPPORTED_COUNT, + TOO_SMALL_SEQUENCE, + ZH_NAMES, +) +from .md import is_suspiciously_successive_range +from .models import CoherenceMatches +from .utils import ( + is_accentuated, + is_latin, + is_multi_byte_encoding, + is_unicode_range_secondary, + unicode_range, +) + + +def encoding_unicode_range(iana_name: str) -> list[str]: + """ + Return associated unicode ranges in a single byte code page. + """ + if is_multi_byte_encoding(iana_name): + raise OSError("Function not supported on multi-byte code page") + + decoder = importlib.import_module(f"encodings.{iana_name}").IncrementalDecoder + + p: IncrementalDecoder = decoder(errors="ignore") + seen_ranges: dict[str, int] = {} + character_count: int = 0 + + for i in range(0x40, 0xFF): + chunk: str = p.decode(bytes([i])) + + if chunk: + character_range: str | None = unicode_range(chunk) + + if character_range is None: + continue + + if is_unicode_range_secondary(character_range) is False: + if character_range not in seen_ranges: + seen_ranges[character_range] = 0 + seen_ranges[character_range] += 1 + character_count += 1 + + return sorted( + [ + character_range + for character_range in seen_ranges + if seen_ranges[character_range] / character_count >= 0.15 + ] + ) + + +def unicode_range_languages(primary_range: str) -> list[str]: + """ + Return inferred languages used with a unicode range. + """ + languages: list[str] = [] + + for language, characters in FREQUENCIES.items(): + for character in characters: + if unicode_range(character) == primary_range: + languages.append(language) + break + + return languages + + +@lru_cache() +def encoding_languages(iana_name: str) -> list[str]: + """ + Single-byte encoding language association. Some code page are heavily linked to particular language(s). + This function does the correspondence. + """ + unicode_ranges: list[str] = encoding_unicode_range(iana_name) + primary_range: str | None = None + + for specified_range in unicode_ranges: + if "Latin" not in specified_range: + primary_range = specified_range + break + + if primary_range is None: + return ["Latin Based"] + + return unicode_range_languages(primary_range) + + +@lru_cache() +def mb_encoding_languages(iana_name: str) -> list[str]: + """ + Multi-byte encoding language association. Some code page are heavily linked to particular language(s). + This function does the correspondence. + """ + if ( + iana_name.startswith("shift_") + or iana_name.startswith("iso2022_jp") + or iana_name.startswith("euc_j") + or iana_name == "cp932" + ): + return ["Japanese"] + if iana_name.startswith("gb") or iana_name in ZH_NAMES: + return ["Chinese"] + if iana_name.startswith("iso2022_kr") or iana_name in KO_NAMES: + return ["Korean"] + + return [] + + +@lru_cache(maxsize=LANGUAGE_SUPPORTED_COUNT) +def get_target_features(language: str) -> tuple[bool, bool]: + """ + Determine main aspects from a supported language if it contains accents and if is pure Latin. + """ + target_have_accents: bool = False + target_pure_latin: bool = True + + for character in FREQUENCIES[language]: + if not target_have_accents and is_accentuated(character): + target_have_accents = True + if target_pure_latin and is_latin(character) is False: + target_pure_latin = False + + return target_have_accents, target_pure_latin + + +def alphabet_languages( + characters: list[str], ignore_non_latin: bool = False +) -> list[str]: + """ + Return associated languages associated to given characters. + """ + languages: list[tuple[str, float]] = [] + + source_have_accents = any(is_accentuated(character) for character in characters) + + for language, language_characters in FREQUENCIES.items(): + target_have_accents, target_pure_latin = get_target_features(language) + + if ignore_non_latin and target_pure_latin is False: + continue + + if target_have_accents is False and source_have_accents: + continue + + character_count: int = len(language_characters) + + character_match_count: int = len( + [c for c in language_characters if c in characters] + ) + + ratio: float = character_match_count / character_count + + if ratio >= 0.2: + languages.append((language, ratio)) + + languages = sorted(languages, key=lambda x: x[1], reverse=True) + + return [compatible_language[0] for compatible_language in languages] + + +def characters_popularity_compare( + language: str, ordered_characters: list[str] +) -> float: + """ + Determine if a ordered characters list (by occurrence from most appearance to rarest) match a particular language. + The result is a ratio between 0. (absolutely no correspondence) and 1. (near perfect fit). + Beware that is function is not strict on the match in order to ease the detection. (Meaning close match is 1.) + """ + if language not in FREQUENCIES: + raise ValueError(f"{language} not available") + + character_approved_count: int = 0 + FREQUENCIES_language_set = set(FREQUENCIES[language]) + + ordered_characters_count: int = len(ordered_characters) + target_language_characters_count: int = len(FREQUENCIES[language]) + + large_alphabet: bool = target_language_characters_count > 26 + + for character, character_rank in zip( + ordered_characters, range(0, ordered_characters_count) + ): + if character not in FREQUENCIES_language_set: + continue + + character_rank_in_language: int = FREQUENCIES[language].index(character) + expected_projection_ratio: float = ( + target_language_characters_count / ordered_characters_count + ) + character_rank_projection: int = int(character_rank * expected_projection_ratio) + + if ( + large_alphabet is False + and abs(character_rank_projection - character_rank_in_language) > 4 + ): + continue + + if ( + large_alphabet is True + and abs(character_rank_projection - character_rank_in_language) + < target_language_characters_count / 3 + ): + character_approved_count += 1 + continue + + characters_before_source: list[str] = FREQUENCIES[language][ + 0:character_rank_in_language + ] + characters_after_source: list[str] = FREQUENCIES[language][ + character_rank_in_language: + ] + characters_before: list[str] = ordered_characters[0:character_rank] + characters_after: list[str] = ordered_characters[character_rank:] + + before_match_count: int = len( + set(characters_before) & set(characters_before_source) + ) + + after_match_count: int = len( + set(characters_after) & set(characters_after_source) + ) + + if len(characters_before_source) == 0 and before_match_count <= 4: + character_approved_count += 1 + continue + + if len(characters_after_source) == 0 and after_match_count <= 4: + character_approved_count += 1 + continue + + if ( + before_match_count / len(characters_before_source) >= 0.4 + or after_match_count / len(characters_after_source) >= 0.4 + ): + character_approved_count += 1 + continue + + return character_approved_count / len(ordered_characters) + + +def alpha_unicode_split(decoded_sequence: str) -> list[str]: + """ + Given a decoded text sequence, return a list of str. Unicode range / alphabet separation. + Ex. a text containing English/Latin with a bit a Hebrew will return two items in the resulting list; + One containing the latin letters and the other hebrew. + """ + layers: dict[str, str] = {} + + for character in decoded_sequence: + if character.isalpha() is False: + continue + + character_range: str | None = unicode_range(character) + + if character_range is None: + continue + + layer_target_range: str | None = None + + for discovered_range in layers: + if ( + is_suspiciously_successive_range(discovered_range, character_range) + is False + ): + layer_target_range = discovered_range + break + + if layer_target_range is None: + layer_target_range = character_range + + if layer_target_range not in layers: + layers[layer_target_range] = character.lower() + continue + + layers[layer_target_range] += character.lower() + + return list(layers.values()) + + +def merge_coherence_ratios(results: list[CoherenceMatches]) -> CoherenceMatches: + """ + This function merge results previously given by the function coherence_ratio. + The return type is the same as coherence_ratio. + """ + per_language_ratios: dict[str, list[float]] = {} + for result in results: + for sub_result in result: + language, ratio = sub_result + if language not in per_language_ratios: + per_language_ratios[language] = [ratio] + continue + per_language_ratios[language].append(ratio) + + merge = [ + ( + language, + round( + sum(per_language_ratios[language]) / len(per_language_ratios[language]), + 4, + ), + ) + for language in per_language_ratios + ] + + return sorted(merge, key=lambda x: x[1], reverse=True) + + +def filter_alt_coherence_matches(results: CoherenceMatches) -> CoherenceMatches: + """ + We shall NOT return "English—" in CoherenceMatches because it is an alternative + of "English". This function only keeps the best match and remove the em-dash in it. + """ + index_results: dict[str, list[float]] = dict() + + for result in results: + language, ratio = result + no_em_name: str = language.replace("—", "") + + if no_em_name not in index_results: + index_results[no_em_name] = [] + + index_results[no_em_name].append(ratio) + + if any(len(index_results[e]) > 1 for e in index_results): + filtered_results: CoherenceMatches = [] + + for language in index_results: + filtered_results.append((language, max(index_results[language]))) + + return filtered_results + + return results + + +@lru_cache(maxsize=2048) +def coherence_ratio( + decoded_sequence: str, threshold: float = 0.1, lg_inclusion: str | None = None +) -> CoherenceMatches: + """ + Detect ANY language that can be identified in given sequence. The sequence will be analysed by layers. + A layer = Character extraction by alphabets/ranges. + """ + + results: list[tuple[str, float]] = [] + ignore_non_latin: bool = False + + sufficient_match_count: int = 0 + + lg_inclusion_list = lg_inclusion.split(",") if lg_inclusion is not None else [] + if "Latin Based" in lg_inclusion_list: + ignore_non_latin = True + lg_inclusion_list.remove("Latin Based") + + for layer in alpha_unicode_split(decoded_sequence): + sequence_frequencies: TypeCounter[str] = Counter(layer) + most_common = sequence_frequencies.most_common() + + character_count: int = sum(o for c, o in most_common) + + if character_count <= TOO_SMALL_SEQUENCE: + continue + + popular_character_ordered: list[str] = [c for c, o in most_common] + + for language in lg_inclusion_list or alphabet_languages( + popular_character_ordered, ignore_non_latin + ): + ratio: float = characters_popularity_compare( + language, popular_character_ordered + ) + + if ratio < threshold: + continue + elif ratio >= 0.8: + sufficient_match_count += 1 + + results.append((language, round(ratio, 4))) + + if sufficient_match_count >= 3: + break + + return sorted( + filter_alt_coherence_matches(results), key=lambda x: x[1], reverse=True + ) diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/cli/__init__.py b/venv/lib/python3.11/site-packages/charset_normalizer/cli/__init__.py new file mode 100644 index 0000000..543a5a4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/cli/__init__.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from .__main__ import cli_detect, query_yes_no + +__all__ = ( + "cli_detect", + "query_yes_no", +) diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/cli/__main__.py b/venv/lib/python3.11/site-packages/charset_normalizer/cli/__main__.py new file mode 100644 index 0000000..64a290f --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/cli/__main__.py @@ -0,0 +1,321 @@ +from __future__ import annotations + +import argparse +import sys +from json import dumps +from os.path import abspath, basename, dirname, join, realpath +from platform import python_version +from unicodedata import unidata_version + +import charset_normalizer.md as md_module +from charset_normalizer import from_fp +from charset_normalizer.models import CliDetectionResult +from charset_normalizer.version import __version__ + + +def query_yes_no(question: str, default: str = "yes") -> bool: + """Ask a yes/no question via input() and return their answer. + + "question" is a string that is presented to the user. + "default" is the presumed answer if the user just hits . + It must be "yes" (the default), "no" or None (meaning + an answer is required of the user). + + The "answer" return value is True for "yes" or False for "no". + + Credit goes to (c) https://stackoverflow.com/questions/3041986/apt-command-line-interface-like-yes-no-input + """ + valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} + if default is None: + prompt = " [y/n] " + elif default == "yes": + prompt = " [Y/n] " + elif default == "no": + prompt = " [y/N] " + else: + raise ValueError("invalid default answer: '%s'" % default) + + while True: + sys.stdout.write(question + prompt) + choice = input().lower() + if default is not None and choice == "": + return valid[default] + elif choice in valid: + return valid[choice] + else: + sys.stdout.write("Please respond with 'yes' or 'no' " "(or 'y' or 'n').\n") + + +def cli_detect(argv: list[str] | None = None) -> int: + """ + CLI assistant using ARGV and ArgumentParser + :param argv: + :return: 0 if everything is fine, anything else equal trouble + """ + parser = argparse.ArgumentParser( + description="The Real First Universal Charset Detector. " + "Discover originating encoding used on text file. " + "Normalize text to unicode." + ) + + parser.add_argument( + "files", type=argparse.FileType("rb"), nargs="+", help="File(s) to be analysed" + ) + parser.add_argument( + "-v", + "--verbose", + action="store_true", + default=False, + dest="verbose", + help="Display complementary information about file if any. " + "Stdout will contain logs about the detection process.", + ) + parser.add_argument( + "-a", + "--with-alternative", + action="store_true", + default=False, + dest="alternatives", + help="Output complementary possibilities if any. Top-level JSON WILL be a list.", + ) + parser.add_argument( + "-n", + "--normalize", + action="store_true", + default=False, + dest="normalize", + help="Permit to normalize input file. If not set, program does not write anything.", + ) + parser.add_argument( + "-m", + "--minimal", + action="store_true", + default=False, + dest="minimal", + help="Only output the charset detected to STDOUT. Disabling JSON output.", + ) + parser.add_argument( + "-r", + "--replace", + action="store_true", + default=False, + dest="replace", + help="Replace file when trying to normalize it instead of creating a new one.", + ) + parser.add_argument( + "-f", + "--force", + action="store_true", + default=False, + dest="force", + help="Replace file without asking if you are sure, use this flag with caution.", + ) + parser.add_argument( + "-i", + "--no-preemptive", + action="store_true", + default=False, + dest="no_preemptive", + help="Disable looking at a charset declaration to hint the detector.", + ) + parser.add_argument( + "-t", + "--threshold", + action="store", + default=0.2, + type=float, + dest="threshold", + help="Define a custom maximum amount of noise allowed in decoded content. 0. <= noise <= 1.", + ) + parser.add_argument( + "--version", + action="version", + version="Charset-Normalizer {} - Python {} - Unicode {} - SpeedUp {}".format( + __version__, + python_version(), + unidata_version, + "OFF" if md_module.__file__.lower().endswith(".py") else "ON", + ), + help="Show version information and exit.", + ) + + args = parser.parse_args(argv) + + if args.replace is True and args.normalize is False: + if args.files: + for my_file in args.files: + my_file.close() + print("Use --replace in addition of --normalize only.", file=sys.stderr) + return 1 + + if args.force is True and args.replace is False: + if args.files: + for my_file in args.files: + my_file.close() + print("Use --force in addition of --replace only.", file=sys.stderr) + return 1 + + if args.threshold < 0.0 or args.threshold > 1.0: + if args.files: + for my_file in args.files: + my_file.close() + print("--threshold VALUE should be between 0. AND 1.", file=sys.stderr) + return 1 + + x_ = [] + + for my_file in args.files: + matches = from_fp( + my_file, + threshold=args.threshold, + explain=args.verbose, + preemptive_behaviour=args.no_preemptive is False, + ) + + best_guess = matches.best() + + if best_guess is None: + print( + 'Unable to identify originating encoding for "{}". {}'.format( + my_file.name, + ( + "Maybe try increasing maximum amount of chaos." + if args.threshold < 1.0 + else "" + ), + ), + file=sys.stderr, + ) + x_.append( + CliDetectionResult( + abspath(my_file.name), + None, + [], + [], + "Unknown", + [], + False, + 1.0, + 0.0, + None, + True, + ) + ) + else: + x_.append( + CliDetectionResult( + abspath(my_file.name), + best_guess.encoding, + best_guess.encoding_aliases, + [ + cp + for cp in best_guess.could_be_from_charset + if cp != best_guess.encoding + ], + best_guess.language, + best_guess.alphabets, + best_guess.bom, + best_guess.percent_chaos, + best_guess.percent_coherence, + None, + True, + ) + ) + + if len(matches) > 1 and args.alternatives: + for el in matches: + if el != best_guess: + x_.append( + CliDetectionResult( + abspath(my_file.name), + el.encoding, + el.encoding_aliases, + [ + cp + for cp in el.could_be_from_charset + if cp != el.encoding + ], + el.language, + el.alphabets, + el.bom, + el.percent_chaos, + el.percent_coherence, + None, + False, + ) + ) + + if args.normalize is True: + if best_guess.encoding.startswith("utf") is True: + print( + '"{}" file does not need to be normalized, as it already came from unicode.'.format( + my_file.name + ), + file=sys.stderr, + ) + if my_file.closed is False: + my_file.close() + continue + + dir_path = dirname(realpath(my_file.name)) + file_name = basename(realpath(my_file.name)) + + o_: list[str] = file_name.split(".") + + if args.replace is False: + o_.insert(-1, best_guess.encoding) + if my_file.closed is False: + my_file.close() + elif ( + args.force is False + and query_yes_no( + 'Are you sure to normalize "{}" by replacing it ?'.format( + my_file.name + ), + "no", + ) + is False + ): + if my_file.closed is False: + my_file.close() + continue + + try: + x_[0].unicode_path = join(dir_path, ".".join(o_)) + + with open(x_[0].unicode_path, "wb") as fp: + fp.write(best_guess.output()) + except OSError as e: + print(str(e), file=sys.stderr) + if my_file.closed is False: + my_file.close() + return 2 + + if my_file.closed is False: + my_file.close() + + if args.minimal is False: + print( + dumps( + [el.__dict__ for el in x_] if len(x_) > 1 else x_[0].__dict__, + ensure_ascii=True, + indent=4, + ) + ) + else: + for my_file in args.files: + print( + ", ".join( + [ + el.encoding or "undefined" + for el in x_ + if el.path == abspath(my_file.name) + ] + ) + ) + + return 0 + + +if __name__ == "__main__": + cli_detect() diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd5f92cbb0f760882fc32728786a98ac1c93ea41 GIT binary patch literal 377 zcmZvXy-ou$41kl%^+zpz2?nGNTvV|k#3Qh<-D0Jev`xv+k;_#&CPv05&(98iCHV>H;S7UkB8jAiSejExWFnbK zEX$cq^AwroJ(=E;X>ZpxO=&w8&iN>!_O9B|E|;{U!f22xsv@>0_q7TQG^zsUZ>Ifr z1hA-M9TY%dc)uM2SfL$a4>9z++yFor1Mo@?h~y~v%3HCe*=G1Y>)r| literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-311.pyc b/venv/lib/python3.11/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2785e673737e422db8005bed844218456a42798a GIT binary patch literal 12294 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 HwweD2HHnH_ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/constant.py b/venv/lib/python3.11/site-packages/charset_normalizer/constant.py new file mode 100644 index 0000000..1fb9508 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/constant.py @@ -0,0 +1,1998 @@ +from __future__ import annotations + +from codecs import BOM_UTF8, BOM_UTF16_BE, BOM_UTF16_LE, BOM_UTF32_BE, BOM_UTF32_LE +from encodings.aliases import aliases +from re import IGNORECASE +from re import compile as re_compile + +# Contain for each eligible encoding a list of/item bytes SIG/BOM +ENCODING_MARKS: dict[str, bytes | list[bytes]] = { + "utf_8": BOM_UTF8, + "utf_7": [ + b"\x2b\x2f\x76\x38", + b"\x2b\x2f\x76\x39", + b"\x2b\x2f\x76\x2b", + b"\x2b\x2f\x76\x2f", + b"\x2b\x2f\x76\x38\x2d", + ], + "gb18030": b"\x84\x31\x95\x33", + "utf_32": [BOM_UTF32_BE, BOM_UTF32_LE], + "utf_16": [BOM_UTF16_BE, BOM_UTF16_LE], +} + +TOO_SMALL_SEQUENCE: int = 32 +TOO_BIG_SEQUENCE: int = int(10e6) + +UTF8_MAXIMAL_ALLOCATION: int = 1_112_064 + +# Up-to-date Unicode ucd/15.0.0 +UNICODE_RANGES_COMBINED: dict[str, range] = { + "Control character": range(32), + "Basic Latin": range(32, 128), + "Latin-1 Supplement": range(128, 256), + "Latin Extended-A": range(256, 384), + "Latin Extended-B": range(384, 592), + "IPA Extensions": range(592, 688), + "Spacing Modifier Letters": range(688, 768), + "Combining Diacritical Marks": range(768, 880), + "Greek and Coptic": range(880, 1024), + "Cyrillic": range(1024, 1280), + "Cyrillic Supplement": range(1280, 1328), + "Armenian": range(1328, 1424), + "Hebrew": range(1424, 1536), + "Arabic": range(1536, 1792), + "Syriac": range(1792, 1872), + "Arabic Supplement": range(1872, 1920), + "Thaana": range(1920, 1984), + "NKo": range(1984, 2048), + "Samaritan": range(2048, 2112), + "Mandaic": range(2112, 2144), + "Syriac Supplement": range(2144, 2160), + "Arabic Extended-B": range(2160, 2208), + "Arabic Extended-A": range(2208, 2304), + "Devanagari": range(2304, 2432), + "Bengali": range(2432, 2560), + "Gurmukhi": range(2560, 2688), + "Gujarati": range(2688, 2816), + "Oriya": range(2816, 2944), + "Tamil": range(2944, 3072), + "Telugu": range(3072, 3200), + "Kannada": range(3200, 3328), + "Malayalam": range(3328, 3456), + "Sinhala": range(3456, 3584), + "Thai": range(3584, 3712), + "Lao": range(3712, 3840), + "Tibetan": range(3840, 4096), + "Myanmar": range(4096, 4256), + "Georgian": range(4256, 4352), + "Hangul Jamo": range(4352, 4608), + "Ethiopic": range(4608, 4992), + "Ethiopic Supplement": range(4992, 5024), + "Cherokee": range(5024, 5120), + "Unified Canadian Aboriginal Syllabics": range(5120, 5760), + "Ogham": range(5760, 5792), + "Runic": range(5792, 5888), + "Tagalog": range(5888, 5920), + "Hanunoo": range(5920, 5952), + "Buhid": range(5952, 5984), + "Tagbanwa": range(5984, 6016), + "Khmer": range(6016, 6144), + "Mongolian": range(6144, 6320), + "Unified Canadian Aboriginal Syllabics Extended": range(6320, 6400), + "Limbu": range(6400, 6480), + "Tai Le": range(6480, 6528), + "New Tai Lue": range(6528, 6624), + "Khmer Symbols": range(6624, 6656), + "Buginese": range(6656, 6688), + "Tai Tham": range(6688, 6832), + "Combining Diacritical Marks Extended": range(6832, 6912), + "Balinese": range(6912, 7040), + "Sundanese": range(7040, 7104), + "Batak": range(7104, 7168), + "Lepcha": range(7168, 7248), + "Ol Chiki": range(7248, 7296), + "Cyrillic Extended-C": range(7296, 7312), + "Georgian Extended": range(7312, 7360), + "Sundanese Supplement": range(7360, 7376), + "Vedic Extensions": range(7376, 7424), + "Phonetic Extensions": range(7424, 7552), + "Phonetic Extensions Supplement": range(7552, 7616), + "Combining Diacritical Marks Supplement": range(7616, 7680), + "Latin Extended Additional": range(7680, 7936), + "Greek Extended": range(7936, 8192), + "General Punctuation": range(8192, 8304), + "Superscripts and Subscripts": range(8304, 8352), + "Currency Symbols": range(8352, 8400), + "Combining Diacritical Marks for Symbols": range(8400, 8448), + "Letterlike Symbols": range(8448, 8528), + "Number Forms": range(8528, 8592), + "Arrows": range(8592, 8704), + "Mathematical Operators": range(8704, 8960), + "Miscellaneous Technical": range(8960, 9216), + "Control Pictures": range(9216, 9280), + "Optical Character Recognition": range(9280, 9312), + "Enclosed Alphanumerics": range(9312, 9472), + "Box Drawing": range(9472, 9600), + "Block Elements": range(9600, 9632), + "Geometric Shapes": range(9632, 9728), + "Miscellaneous Symbols": range(9728, 9984), + "Dingbats": range(9984, 10176), + "Miscellaneous Mathematical Symbols-A": range(10176, 10224), + "Supplemental Arrows-A": range(10224, 10240), + "Braille Patterns": range(10240, 10496), + "Supplemental Arrows-B": range(10496, 10624), + "Miscellaneous Mathematical Symbols-B": range(10624, 10752), + "Supplemental Mathematical Operators": range(10752, 11008), + "Miscellaneous Symbols and Arrows": range(11008, 11264), + "Glagolitic": range(11264, 11360), + "Latin Extended-C": range(11360, 11392), + "Coptic": range(11392, 11520), + "Georgian Supplement": range(11520, 11568), + "Tifinagh": range(11568, 11648), + "Ethiopic Extended": range(11648, 11744), + "Cyrillic Extended-A": range(11744, 11776), + "Supplemental Punctuation": range(11776, 11904), + "CJK Radicals Supplement": range(11904, 12032), + "Kangxi Radicals": range(12032, 12256), + "Ideographic Description Characters": range(12272, 12288), + "CJK Symbols and Punctuation": range(12288, 12352), + "Hiragana": range(12352, 12448), + "Katakana": range(12448, 12544), + "Bopomofo": range(12544, 12592), + "Hangul Compatibility Jamo": range(12592, 12688), + "Kanbun": range(12688, 12704), + "Bopomofo Extended": range(12704, 12736), + "CJK Strokes": range(12736, 12784), + "Katakana Phonetic Extensions": range(12784, 12800), + "Enclosed CJK Letters and Months": range(12800, 13056), + "CJK Compatibility": range(13056, 13312), + "CJK Unified Ideographs Extension A": range(13312, 19904), + "Yijing Hexagram Symbols": range(19904, 19968), + "CJK Unified Ideographs": range(19968, 40960), + "Yi Syllables": range(40960, 42128), + "Yi Radicals": range(42128, 42192), + "Lisu": range(42192, 42240), + "Vai": range(42240, 42560), + "Cyrillic Extended-B": range(42560, 42656), + "Bamum": range(42656, 42752), + "Modifier Tone Letters": range(42752, 42784), + "Latin Extended-D": range(42784, 43008), + "Syloti Nagri": range(43008, 43056), + "Common Indic Number Forms": range(43056, 43072), + "Phags-pa": range(43072, 43136), + "Saurashtra": range(43136, 43232), + "Devanagari Extended": range(43232, 43264), + "Kayah Li": range(43264, 43312), + "Rejang": range(43312, 43360), + "Hangul Jamo Extended-A": range(43360, 43392), + "Javanese": range(43392, 43488), + "Myanmar Extended-B": range(43488, 43520), + "Cham": range(43520, 43616), + "Myanmar Extended-A": range(43616, 43648), + "Tai Viet": range(43648, 43744), + "Meetei Mayek Extensions": range(43744, 43776), + "Ethiopic Extended-A": range(43776, 43824), + "Latin Extended-E": range(43824, 43888), + "Cherokee Supplement": range(43888, 43968), + "Meetei Mayek": range(43968, 44032), + "Hangul Syllables": range(44032, 55216), + "Hangul Jamo Extended-B": range(55216, 55296), + "High Surrogates": range(55296, 56192), + "High Private Use Surrogates": range(56192, 56320), + "Low Surrogates": range(56320, 57344), + "Private Use Area": range(57344, 63744), + "CJK Compatibility Ideographs": range(63744, 64256), + "Alphabetic Presentation Forms": range(64256, 64336), + "Arabic Presentation Forms-A": range(64336, 65024), + "Variation Selectors": range(65024, 65040), + "Vertical Forms": range(65040, 65056), + "Combining Half Marks": range(65056, 65072), + "CJK Compatibility Forms": range(65072, 65104), + "Small Form Variants": range(65104, 65136), + "Arabic Presentation Forms-B": range(65136, 65280), + "Halfwidth and Fullwidth Forms": range(65280, 65520), + "Specials": range(65520, 65536), + "Linear B Syllabary": range(65536, 65664), + "Linear B Ideograms": range(65664, 65792), + "Aegean Numbers": range(65792, 65856), + "Ancient Greek Numbers": range(65856, 65936), + "Ancient Symbols": range(65936, 66000), + "Phaistos Disc": range(66000, 66048), + "Lycian": range(66176, 66208), + "Carian": range(66208, 66272), + "Coptic Epact Numbers": range(66272, 66304), + "Old Italic": range(66304, 66352), + "Gothic": range(66352, 66384), + "Old Permic": range(66384, 66432), + "Ugaritic": range(66432, 66464), + "Old Persian": range(66464, 66528), + "Deseret": range(66560, 66640), + "Shavian": range(66640, 66688), + "Osmanya": range(66688, 66736), + "Osage": range(66736, 66816), + "Elbasan": range(66816, 66864), + "Caucasian Albanian": range(66864, 66928), + "Vithkuqi": range(66928, 67008), + "Linear A": range(67072, 67456), + "Latin Extended-F": range(67456, 67520), + "Cypriot Syllabary": range(67584, 67648), + "Imperial Aramaic": range(67648, 67680), + "Palmyrene": range(67680, 67712), + "Nabataean": range(67712, 67760), + "Hatran": range(67808, 67840), + "Phoenician": range(67840, 67872), + "Lydian": range(67872, 67904), + "Meroitic Hieroglyphs": range(67968, 68000), + "Meroitic Cursive": range(68000, 68096), + "Kharoshthi": range(68096, 68192), + "Old South Arabian": range(68192, 68224), + "Old North Arabian": range(68224, 68256), + "Manichaean": range(68288, 68352), + "Avestan": range(68352, 68416), + "Inscriptional Parthian": range(68416, 68448), + "Inscriptional Pahlavi": range(68448, 68480), + "Psalter Pahlavi": range(68480, 68528), + "Old Turkic": range(68608, 68688), + "Old Hungarian": range(68736, 68864), + "Hanifi Rohingya": range(68864, 68928), + "Rumi Numeral Symbols": range(69216, 69248), + "Yezidi": range(69248, 69312), + "Arabic Extended-C": range(69312, 69376), + "Old Sogdian": range(69376, 69424), + "Sogdian": range(69424, 69488), + "Old Uyghur": range(69488, 69552), + "Chorasmian": range(69552, 69600), + "Elymaic": range(69600, 69632), + "Brahmi": range(69632, 69760), + "Kaithi": range(69760, 69840), + "Sora Sompeng": range(69840, 69888), + "Chakma": range(69888, 69968), + "Mahajani": range(69968, 70016), + "Sharada": range(70016, 70112), + "Sinhala Archaic Numbers": range(70112, 70144), + "Khojki": range(70144, 70224), + "Multani": range(70272, 70320), + "Khudawadi": range(70320, 70400), + "Grantha": range(70400, 70528), + "Newa": range(70656, 70784), + "Tirhuta": range(70784, 70880), + "Siddham": range(71040, 71168), + "Modi": range(71168, 71264), + "Mongolian Supplement": range(71264, 71296), + "Takri": range(71296, 71376), + "Ahom": range(71424, 71504), + "Dogra": range(71680, 71760), + "Warang Citi": range(71840, 71936), + "Dives Akuru": range(71936, 72032), + "Nandinagari": range(72096, 72192), + "Zanabazar Square": range(72192, 72272), + "Soyombo": range(72272, 72368), + "Unified Canadian Aboriginal Syllabics Extended-A": range(72368, 72384), + "Pau Cin Hau": range(72384, 72448), + "Devanagari Extended-A": range(72448, 72544), + "Bhaiksuki": range(72704, 72816), + "Marchen": range(72816, 72896), + "Masaram Gondi": range(72960, 73056), + "Gunjala Gondi": range(73056, 73136), + "Makasar": range(73440, 73472), + "Kawi": range(73472, 73568), + "Lisu Supplement": range(73648, 73664), + "Tamil Supplement": range(73664, 73728), + "Cuneiform": range(73728, 74752), + "Cuneiform Numbers and Punctuation": range(74752, 74880), + "Early Dynastic Cuneiform": range(74880, 75088), + "Cypro-Minoan": range(77712, 77824), + "Egyptian Hieroglyphs": range(77824, 78896), + "Egyptian Hieroglyph Format Controls": range(78896, 78944), + "Anatolian Hieroglyphs": range(82944, 83584), + "Bamum Supplement": range(92160, 92736), + "Mro": range(92736, 92784), + "Tangsa": range(92784, 92880), + "Bassa Vah": range(92880, 92928), + "Pahawh Hmong": range(92928, 93072), + "Medefaidrin": range(93760, 93856), + "Miao": range(93952, 94112), + "Ideographic Symbols and Punctuation": range(94176, 94208), + "Tangut": range(94208, 100352), + "Tangut Components": range(100352, 101120), + "Khitan Small Script": range(101120, 101632), + "Tangut Supplement": range(101632, 101760), + "Kana Extended-B": range(110576, 110592), + "Kana Supplement": range(110592, 110848), + "Kana Extended-A": range(110848, 110896), + "Small Kana Extension": range(110896, 110960), + "Nushu": range(110960, 111360), + "Duployan": range(113664, 113824), + "Shorthand Format Controls": range(113824, 113840), + "Znamenny Musical Notation": range(118528, 118736), + "Byzantine Musical Symbols": range(118784, 119040), + "Musical Symbols": range(119040, 119296), + "Ancient Greek Musical Notation": range(119296, 119376), + "Kaktovik Numerals": range(119488, 119520), + "Mayan Numerals": range(119520, 119552), + "Tai Xuan Jing Symbols": range(119552, 119648), + "Counting Rod Numerals": range(119648, 119680), + "Mathematical Alphanumeric Symbols": range(119808, 120832), + "Sutton SignWriting": range(120832, 121520), + "Latin Extended-G": range(122624, 122880), + "Glagolitic Supplement": range(122880, 122928), + "Cyrillic Extended-D": range(122928, 123024), + "Nyiakeng Puachue Hmong": range(123136, 123216), + "Toto": range(123536, 123584), + "Wancho": range(123584, 123648), + "Nag Mundari": range(124112, 124160), + "Ethiopic Extended-B": range(124896, 124928), + "Mende Kikakui": range(124928, 125152), + "Adlam": range(125184, 125280), + "Indic Siyaq Numbers": range(126064, 126144), + "Ottoman Siyaq Numbers": range(126208, 126288), + "Arabic Mathematical Alphabetic Symbols": range(126464, 126720), + "Mahjong Tiles": range(126976, 127024), + "Domino Tiles": range(127024, 127136), + "Playing Cards": range(127136, 127232), + "Enclosed Alphanumeric Supplement": range(127232, 127488), + "Enclosed Ideographic Supplement": range(127488, 127744), + "Miscellaneous Symbols and Pictographs": range(127744, 128512), + "Emoticons range(Emoji)": range(128512, 128592), + "Ornamental Dingbats": range(128592, 128640), + "Transport and Map Symbols": range(128640, 128768), + "Alchemical Symbols": range(128768, 128896), + "Geometric Shapes Extended": range(128896, 129024), + "Supplemental Arrows-C": range(129024, 129280), + "Supplemental Symbols and Pictographs": range(129280, 129536), + "Chess Symbols": range(129536, 129648), + "Symbols and Pictographs Extended-A": range(129648, 129792), + "Symbols for Legacy Computing": range(129792, 130048), + "CJK Unified Ideographs Extension B": range(131072, 173792), + "CJK Unified Ideographs Extension C": range(173824, 177984), + "CJK Unified Ideographs Extension D": range(177984, 178208), + "CJK Unified Ideographs Extension E": range(178208, 183984), + "CJK Unified Ideographs Extension F": range(183984, 191472), + "CJK Compatibility Ideographs Supplement": range(194560, 195104), + "CJK Unified Ideographs Extension G": range(196608, 201552), + "CJK Unified Ideographs Extension H": range(201552, 205744), + "Tags": range(917504, 917632), + "Variation Selectors Supplement": range(917760, 918000), + "Supplementary Private Use Area-A": range(983040, 1048576), + "Supplementary Private Use Area-B": range(1048576, 1114112), +} + + +UNICODE_SECONDARY_RANGE_KEYWORD: list[str] = [ + "Supplement", + "Extended", + "Extensions", + "Modifier", + "Marks", + "Punctuation", + "Symbols", + "Forms", + "Operators", + "Miscellaneous", + "Drawing", + "Block", + "Shapes", + "Supplemental", + "Tags", +] + +RE_POSSIBLE_ENCODING_INDICATION = re_compile( + r"(?:(?:encoding)|(?:charset)|(?:coding))(?:[\:= ]{1,10})(?:[\"\']?)([a-zA-Z0-9\-_]+)(?:[\"\']?)", + IGNORECASE, +) + +IANA_NO_ALIASES = [ + "cp720", + "cp737", + "cp856", + "cp874", + "cp875", + "cp1006", + "koi8_r", + "koi8_t", + "koi8_u", +] + +IANA_SUPPORTED: list[str] = sorted( + filter( + lambda x: x.endswith("_codec") is False + and x not in {"rot_13", "tactis", "mbcs"}, + list(set(aliases.values())) + IANA_NO_ALIASES, + ) +) + +IANA_SUPPORTED_COUNT: int = len(IANA_SUPPORTED) + +# pre-computed code page that are similar using the function cp_similarity. +IANA_SUPPORTED_SIMILAR: dict[str, list[str]] = { + "cp037": ["cp1026", "cp1140", "cp273", "cp500"], + "cp1026": ["cp037", "cp1140", "cp273", "cp500"], + "cp1125": ["cp866"], + "cp1140": ["cp037", "cp1026", "cp273", "cp500"], + "cp1250": ["iso8859_2"], + "cp1251": ["kz1048", "ptcp154"], + "cp1252": ["iso8859_15", "iso8859_9", "latin_1"], + "cp1253": ["iso8859_7"], + "cp1254": ["iso8859_15", "iso8859_9", "latin_1"], + "cp1257": ["iso8859_13"], + "cp273": ["cp037", "cp1026", "cp1140", "cp500"], + "cp437": ["cp850", "cp858", "cp860", "cp861", "cp862", "cp863", "cp865"], + "cp500": ["cp037", "cp1026", "cp1140", "cp273"], + "cp850": ["cp437", "cp857", "cp858", "cp865"], + "cp857": ["cp850", "cp858", "cp865"], + "cp858": ["cp437", "cp850", "cp857", "cp865"], + "cp860": ["cp437", "cp861", "cp862", "cp863", "cp865"], + "cp861": ["cp437", "cp860", "cp862", "cp863", "cp865"], + "cp862": ["cp437", "cp860", "cp861", "cp863", "cp865"], + "cp863": ["cp437", "cp860", "cp861", "cp862", "cp865"], + "cp865": ["cp437", "cp850", "cp857", "cp858", "cp860", "cp861", "cp862", "cp863"], + "cp866": ["cp1125"], + "iso8859_10": ["iso8859_14", "iso8859_15", "iso8859_4", "iso8859_9", "latin_1"], + "iso8859_11": ["tis_620"], + "iso8859_13": ["cp1257"], + "iso8859_14": [ + "iso8859_10", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_15": [ + "cp1252", + "cp1254", + "iso8859_10", + "iso8859_14", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_16": [ + "iso8859_14", + "iso8859_15", + "iso8859_2", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_2": ["cp1250", "iso8859_16", "iso8859_4"], + "iso8859_3": ["iso8859_14", "iso8859_15", "iso8859_16", "iso8859_9", "latin_1"], + "iso8859_4": ["iso8859_10", "iso8859_2", "iso8859_9", "latin_1"], + "iso8859_7": ["cp1253"], + "iso8859_9": [ + "cp1252", + "cp1254", + "cp1258", + "iso8859_10", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_4", + "latin_1", + ], + "kz1048": ["cp1251", "ptcp154"], + "latin_1": [ + "cp1252", + "cp1254", + "cp1258", + "iso8859_10", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_4", + "iso8859_9", + ], + "mac_iceland": ["mac_roman", "mac_turkish"], + "mac_roman": ["mac_iceland", "mac_turkish"], + "mac_turkish": ["mac_iceland", "mac_roman"], + "ptcp154": ["cp1251", "kz1048"], + "tis_620": ["iso8859_11"], +} + + +CHARDET_CORRESPONDENCE: dict[str, str] = { + "iso2022_kr": "ISO-2022-KR", + "iso2022_jp": "ISO-2022-JP", + "euc_kr": "EUC-KR", + "tis_620": "TIS-620", + "utf_32": "UTF-32", + "euc_jp": "EUC-JP", + "koi8_r": "KOI8-R", + "iso8859_1": "ISO-8859-1", + "iso8859_2": "ISO-8859-2", + "iso8859_5": "ISO-8859-5", + "iso8859_6": "ISO-8859-6", + "iso8859_7": "ISO-8859-7", + "iso8859_8": "ISO-8859-8", + "utf_16": "UTF-16", + "cp855": "IBM855", + "mac_cyrillic": "MacCyrillic", + "gb2312": "GB2312", + "gb18030": "GB18030", + "cp932": "CP932", + "cp866": "IBM866", + "utf_8": "utf-8", + "utf_8_sig": "UTF-8-SIG", + "shift_jis": "SHIFT_JIS", + "big5": "Big5", + "cp1250": "windows-1250", + "cp1251": "windows-1251", + "cp1252": "Windows-1252", + "cp1253": "windows-1253", + "cp1255": "windows-1255", + "cp1256": "windows-1256", + "cp1254": "Windows-1254", + "cp949": "CP949", +} + + +COMMON_SAFE_ASCII_CHARACTERS: set[str] = { + "<", + ">", + "=", + ":", + "/", + "&", + ";", + "{", + "}", + "[", + "]", + ",", + "|", + '"', + "-", + "(", + ")", +} + + +KO_NAMES: set[str] = {"johab", "cp949", "euc_kr"} +ZH_NAMES: set[str] = {"big5", "cp950", "big5hkscs", "hz"} + +# Logging LEVEL below DEBUG +TRACE: int = 5 + + +# Language label that contain the em dash "—" +# character are to be considered alternative seq to origin +FREQUENCIES: dict[str, list[str]] = { + "English": [ + "e", + "a", + "t", + "i", + "o", + "n", + "s", + "r", + "h", + "l", + "d", + "c", + "u", + "m", + "f", + "p", + "g", + "w", + "y", + "b", + "v", + "k", + "x", + "j", + "z", + "q", + ], + "English—": [ + "e", + "a", + "t", + "i", + "o", + "n", + "s", + "r", + "h", + "l", + "d", + "c", + "m", + "u", + "f", + "p", + "g", + "w", + "b", + "y", + "v", + "k", + "j", + "x", + "z", + "q", + ], + "German": [ + "e", + "n", + "i", + "r", + "s", + "t", + "a", + "d", + "h", + "u", + "l", + "g", + "o", + "c", + "m", + "b", + "f", + "k", + "w", + "z", + "p", + "v", + "ü", + "ä", + "ö", + "j", + ], + "French": [ + "e", + "a", + "s", + "n", + "i", + "t", + "r", + "l", + "u", + "o", + "d", + "c", + "p", + "m", + "é", + "v", + "g", + "f", + "b", + "h", + "q", + "à", + "x", + "è", + "y", + "j", + ], + "Dutch": [ + "e", + "n", + "a", + "i", + "r", + "t", + "o", + "d", + "s", + "l", + "g", + "h", + "v", + "m", + "u", + "k", + "c", + "p", + "b", + "w", + "j", + "z", + "f", + "y", + "x", + "ë", + ], + "Italian": [ + "e", + "i", + "a", + "o", + "n", + "l", + "t", + "r", + "s", + "c", + "d", + "u", + "p", + "m", + "g", + "v", + "f", + "b", + "z", + "h", + "q", + "è", + "à", + "k", + "y", + "ò", + ], + "Polish": [ + "a", + "i", + "o", + "e", + "n", + "r", + "z", + "w", + "s", + "c", + "t", + "k", + "y", + "d", + "p", + "m", + "u", + "l", + "j", + "ł", + "g", + "b", + "h", + "ą", + "ę", + "ó", + ], + "Spanish": [ + "e", + "a", + "o", + "n", + "s", + "r", + "i", + "l", + "d", + "t", + "c", + "u", + "m", + "p", + "b", + "g", + "v", + "f", + "y", + "ó", + "h", + "q", + "í", + "j", + "z", + "á", + ], + "Russian": [ + "о", + "а", + "е", + "и", + "н", + "с", + "т", + "р", + "в", + "л", + "к", + "м", + "д", + "п", + "у", + "г", + "я", + "ы", + "з", + "б", + "й", + "ь", + "ч", + "х", + "ж", + "ц", + ], + # Jap-Kanji + "Japanese": [ + "人", + "一", + "大", + "亅", + "丁", + "丨", + "竹", + "笑", + "口", + "日", + "今", + "二", + "彳", + "行", + "十", + "土", + "丶", + "寸", + "寺", + "時", + "乙", + "丿", + "乂", + "气", + "気", + "冂", + "巾", + "亠", + "市", + "目", + "儿", + "見", + "八", + "小", + "凵", + "県", + "月", + "彐", + "門", + "間", + "木", + "東", + "山", + "出", + "本", + "中", + "刀", + "分", + "耳", + "又", + "取", + "最", + "言", + "田", + "心", + "思", + "刂", + "前", + "京", + "尹", + "事", + "生", + "厶", + "云", + "会", + "未", + "来", + "白", + "冫", + "楽", + "灬", + "馬", + "尸", + "尺", + "駅", + "明", + "耂", + "者", + "了", + "阝", + "都", + "高", + "卜", + "占", + "厂", + "广", + "店", + "子", + "申", + "奄", + "亻", + "俺", + "上", + "方", + "冖", + "学", + "衣", + "艮", + "食", + "自", + ], + # Jap-Katakana + "Japanese—": [ + "ー", + "ン", + "ス", + "・", + "ル", + "ト", + "リ", + "イ", + "ア", + "ラ", + "ッ", + "ク", + "ド", + "シ", + "レ", + "ジ", + "タ", + "フ", + "ロ", + "カ", + "テ", + "マ", + "ィ", + "グ", + "バ", + "ム", + "プ", + "オ", + "コ", + "デ", + "ニ", + "ウ", + "メ", + "サ", + "ビ", + "ナ", + "ブ", + "ャ", + "エ", + "ュ", + "チ", + "キ", + "ズ", + "ダ", + "パ", + "ミ", + "ェ", + "ョ", + "ハ", + "セ", + "ベ", + "ガ", + "モ", + "ツ", + "ネ", + "ボ", + "ソ", + "ノ", + "ァ", + "ヴ", + "ワ", + "ポ", + "ペ", + "ピ", + "ケ", + "ゴ", + "ギ", + "ザ", + "ホ", + "ゲ", + "ォ", + "ヤ", + "ヒ", + "ユ", + "ヨ", + "ヘ", + "ゼ", + "ヌ", + "ゥ", + "ゾ", + "ヶ", + "ヂ", + "ヲ", + "ヅ", + "ヵ", + "ヱ", + "ヰ", + "ヮ", + "ヽ", + "゠", + "ヾ", + "ヷ", + "ヿ", + "ヸ", + "ヹ", + "ヺ", + ], + # Jap-Hiragana + "Japanese——": [ + "の", + "に", + "る", + "た", + "と", + "は", + "し", + "い", + "を", + "で", + "て", + "が", + "な", + "れ", + "か", + "ら", + "さ", + "っ", + "り", + "す", + "あ", + "も", + "こ", + "ま", + "う", + "く", + "よ", + "き", + "ん", + "め", + "お", + "け", + "そ", + "つ", + "だ", + "や", + "え", + "ど", + "わ", + "ち", + "み", + "せ", + "じ", + "ば", + "へ", + "び", + "ず", + "ろ", + "ほ", + "げ", + "む", + "べ", + "ひ", + "ょ", + "ゆ", + "ぶ", + "ご", + "ゃ", + "ね", + "ふ", + "ぐ", + "ぎ", + "ぼ", + "ゅ", + "づ", + "ざ", + "ぞ", + "ぬ", + "ぜ", + "ぱ", + "ぽ", + "ぷ", + "ぴ", + "ぃ", + "ぁ", + "ぇ", + "ぺ", + "ゞ", + "ぢ", + "ぉ", + "ぅ", + "ゐ", + "ゝ", + "ゑ", + "゛", + "゜", + "ゎ", + "ゔ", + "゚", + "ゟ", + "゙", + "ゕ", + "ゖ", + ], + "Portuguese": [ + "a", + "e", + "o", + "s", + "i", + "r", + "d", + "n", + "t", + "m", + "u", + "c", + "l", + "p", + "g", + "v", + "b", + "f", + "h", + "ã", + "q", + "é", + "ç", + "á", + "z", + "í", + ], + "Swedish": [ + "e", + "a", + "n", + "r", + "t", + "s", + "i", + "l", + "d", + "o", + "m", + "k", + "g", + "v", + "h", + "f", + "u", + "p", + "ä", + "c", + "b", + "ö", + "å", + "y", + "j", + "x", + ], + "Chinese": [ + "的", + "一", + "是", + "不", + "了", + "在", + "人", + "有", + "我", + "他", + "这", + "个", + "们", + "中", + "来", + "上", + "大", + "为", + "和", + "国", + "地", + "到", + "以", + "说", + "时", + "要", + "就", + "出", + "会", + "可", + "也", + "你", + "对", + "生", + "能", + "而", + "子", + "那", + "得", + "于", + "着", + "下", + "自", + "之", + "年", + "过", + "发", + "后", + "作", + "里", + "用", + "道", + "行", + "所", + "然", + "家", + "种", + "事", + "成", + "方", + "多", + "经", + "么", + "去", + "法", + "学", + "如", + "都", + "同", + "现", + "当", + "没", + "动", + "面", + "起", + "看", + "定", + "天", + "分", + "还", + "进", + "好", + "小", + "部", + "其", + "些", + "主", + "样", + "理", + "心", + "她", + "本", + "前", + "开", + "但", + "因", + "只", + "从", + "想", + "实", + ], + "Ukrainian": [ + "о", + "а", + "н", + "і", + "и", + "р", + "в", + "т", + "е", + "с", + "к", + "л", + "у", + "д", + "м", + "п", + "з", + "я", + "ь", + "б", + "г", + "й", + "ч", + "х", + "ц", + "ї", + ], + "Norwegian": [ + "e", + "r", + "n", + "t", + "a", + "s", + "i", + "o", + "l", + "d", + "g", + "k", + "m", + "v", + "f", + "p", + "u", + "b", + "h", + "å", + "y", + "j", + "ø", + "c", + "æ", + "w", + ], + "Finnish": [ + "a", + "i", + "n", + "t", + "e", + "s", + "l", + "o", + "u", + "k", + "ä", + "m", + "r", + "v", + "j", + "h", + "p", + "y", + "d", + "ö", + "g", + "c", + "b", + "f", + "w", + "z", + ], + "Vietnamese": [ + "n", + "h", + "t", + "i", + "c", + "g", + "a", + "o", + "u", + "m", + "l", + "r", + "à", + "đ", + "s", + "e", + "v", + "p", + "b", + "y", + "ư", + "d", + "á", + "k", + "ộ", + "ế", + ], + "Czech": [ + "o", + "e", + "a", + "n", + "t", + "s", + "i", + "l", + "v", + "r", + "k", + "d", + "u", + "m", + "p", + "í", + "c", + "h", + "z", + "á", + "y", + "j", + "b", + "ě", + "é", + "ř", + ], + "Hungarian": [ + "e", + "a", + "t", + "l", + "s", + "n", + "k", + "r", + "i", + "o", + "z", + "á", + "é", + "g", + "m", + "b", + "y", + "v", + "d", + "h", + "u", + "p", + "j", + "ö", + "f", + "c", + ], + "Korean": [ + "이", + "다", + "에", + "의", + "는", + "로", + "하", + "을", + "가", + "고", + "지", + "서", + "한", + "은", + "기", + "으", + "년", + "대", + "사", + "시", + "를", + "리", + "도", + "인", + "스", + "일", + ], + "Indonesian": [ + "a", + "n", + "e", + "i", + "r", + "t", + "u", + "s", + "d", + "k", + "m", + "l", + "g", + "p", + "b", + "o", + "h", + "y", + "j", + "c", + "w", + "f", + "v", + "z", + "x", + "q", + ], + "Turkish": [ + "a", + "e", + "i", + "n", + "r", + "l", + "ı", + "k", + "d", + "t", + "s", + "m", + "y", + "u", + "o", + "b", + "ü", + "ş", + "v", + "g", + "z", + "h", + "c", + "p", + "ç", + "ğ", + ], + "Romanian": [ + "e", + "i", + "a", + "r", + "n", + "t", + "u", + "l", + "o", + "c", + "s", + "d", + "p", + "m", + "ă", + "f", + "v", + "î", + "g", + "b", + "ș", + "ț", + "z", + "h", + "â", + "j", + ], + "Farsi": [ + "ا", + "ی", + "ر", + "د", + "ن", + "ه", + "و", + "م", + "ت", + "ب", + "س", + "ل", + "ک", + "ش", + "ز", + "ف", + "گ", + "ع", + "خ", + "ق", + "ج", + "آ", + "پ", + "ح", + "ط", + "ص", + ], + "Arabic": [ + "ا", + "ل", + "ي", + "م", + "و", + "ن", + "ر", + "ت", + "ب", + "ة", + "ع", + "د", + "س", + "ف", + "ه", + "ك", + "ق", + "أ", + "ح", + "ج", + "ش", + "ط", + "ص", + "ى", + "خ", + "إ", + ], + "Danish": [ + "e", + "r", + "n", + "t", + "a", + "i", + "s", + "d", + "l", + "o", + "g", + "m", + "k", + "f", + "v", + "u", + "b", + "h", + "p", + "å", + "y", + "ø", + "æ", + "c", + "j", + "w", + ], + "Serbian": [ + "а", + "и", + "о", + "е", + "н", + "р", + "с", + "у", + "т", + "к", + "ј", + "в", + "д", + "м", + "п", + "л", + "г", + "з", + "б", + "a", + "i", + "e", + "o", + "n", + "ц", + "ш", + ], + "Lithuanian": [ + "i", + "a", + "s", + "o", + "r", + "e", + "t", + "n", + "u", + "k", + "m", + "l", + "p", + "v", + "d", + "j", + "g", + "ė", + "b", + "y", + "ų", + "š", + "ž", + "c", + "ą", + "į", + ], + "Slovene": [ + "e", + "a", + "i", + "o", + "n", + "r", + "s", + "l", + "t", + "j", + "v", + "k", + "d", + "p", + "m", + "u", + "z", + "b", + "g", + "h", + "č", + "c", + "š", + "ž", + "f", + "y", + ], + "Slovak": [ + "o", + "a", + "e", + "n", + "i", + "r", + "v", + "t", + "s", + "l", + "k", + "d", + "m", + "p", + "u", + "c", + "h", + "j", + "b", + "z", + "á", + "y", + "ý", + "í", + "č", + "é", + ], + "Hebrew": [ + "י", + "ו", + "ה", + "ל", + "ר", + "ב", + "ת", + "מ", + "א", + "ש", + "נ", + "ע", + "ם", + "ד", + "ק", + "ח", + "פ", + "ס", + "כ", + "ג", + "ט", + "צ", + "ן", + "ז", + "ך", + ], + "Bulgarian": [ + "а", + "и", + "о", + "е", + "н", + "т", + "р", + "с", + "в", + "л", + "к", + "д", + "п", + "м", + "з", + "г", + "я", + "ъ", + "у", + "б", + "ч", + "ц", + "й", + "ж", + "щ", + "х", + ], + "Croatian": [ + "a", + "i", + "o", + "e", + "n", + "r", + "j", + "s", + "t", + "u", + "k", + "l", + "v", + "d", + "m", + "p", + "g", + "z", + "b", + "c", + "č", + "h", + "š", + "ž", + "ć", + "f", + ], + "Hindi": [ + "क", + "र", + "स", + "न", + "त", + "म", + "ह", + "प", + "य", + "ल", + "व", + "ज", + "द", + "ग", + "ब", + "श", + "ट", + "अ", + "ए", + "थ", + "भ", + "ड", + "च", + "ध", + "ष", + "इ", + ], + "Estonian": [ + "a", + "i", + "e", + "s", + "t", + "l", + "u", + "n", + "o", + "k", + "r", + "d", + "m", + "v", + "g", + "p", + "j", + "h", + "ä", + "b", + "õ", + "ü", + "f", + "c", + "ö", + "y", + ], + "Thai": [ + "า", + "น", + "ร", + "อ", + "ก", + "เ", + "ง", + "ม", + "ย", + "ล", + "ว", + "ด", + "ท", + "ส", + "ต", + "ะ", + "ป", + "บ", + "ค", + "ห", + "แ", + "จ", + "พ", + "ช", + "ข", + "ใ", + ], + "Greek": [ + "α", + "τ", + "ο", + "ι", + "ε", + "ν", + "ρ", + "σ", + "κ", + "η", + "π", + "ς", + "υ", + "μ", + "λ", + "ί", + "ό", + "ά", + "γ", + "έ", + "δ", + "ή", + "ω", + "χ", + "θ", + "ύ", + ], + "Tamil": [ + "க", + "த", + "ப", + "ட", + "ர", + "ம", + "ல", + "ன", + "வ", + "ற", + "ய", + "ள", + "ச", + "ந", + "இ", + "ண", + "அ", + "ஆ", + "ழ", + "ங", + "எ", + "உ", + "ஒ", + "ஸ", + ], + "Kazakh": [ + "а", + "ы", + "е", + "н", + "т", + "р", + "л", + "і", + "д", + "с", + "м", + "қ", + "к", + "о", + "б", + "и", + "у", + "ғ", + "ж", + "ң", + "з", + "ш", + "й", + "п", + "г", + "ө", + ], +} + +LANGUAGE_SUPPORTED_COUNT: int = len(FREQUENCIES) diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/legacy.py b/venv/lib/python3.11/site-packages/charset_normalizer/legacy.py new file mode 100644 index 0000000..a2f5345 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/legacy.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any +from warnings import warn + +from .api import from_bytes +from .constant import CHARDET_CORRESPONDENCE + +# TODO: remove this check when dropping Python 3.7 support +if TYPE_CHECKING: + from typing_extensions import TypedDict + + class ResultDict(TypedDict): + encoding: str | None + language: str + confidence: float | None + + +def detect( + byte_str: bytes, should_rename_legacy: bool = False, **kwargs: Any +) -> ResultDict: + """ + chardet legacy method + Detect the encoding of the given byte string. It should be mostly backward-compatible. + Encoding name will match Chardet own writing whenever possible. (Not on encoding name unsupported by it) + This function is deprecated and should be used to migrate your project easily, consult the documentation for + further information. Not planned for removal. + + :param byte_str: The byte sequence to examine. + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + """ + if len(kwargs): + warn( + f"charset-normalizer disregard arguments '{','.join(list(kwargs.keys()))}' in legacy function detect()" + ) + + if not isinstance(byte_str, (bytearray, bytes)): + raise TypeError( # pragma: nocover + "Expected object of type bytes or bytearray, got: " "{}".format( + type(byte_str) + ) + ) + + if isinstance(byte_str, bytearray): + byte_str = bytes(byte_str) + + r = from_bytes(byte_str).best() + + encoding = r.encoding if r is not None else None + language = r.language if r is not None and r.language != "Unknown" else "" + confidence = 1.0 - r.chaos if r is not None else None + + # Note: CharsetNormalizer does not return 'UTF-8-SIG' as the sig get stripped in the detection/normalization process + # but chardet does return 'utf-8-sig' and it is a valid codec name. + if r is not None and encoding == "utf_8" and r.bom: + encoding += "_sig" + + if should_rename_legacy is False and encoding in CHARDET_CORRESPONDENCE: + encoding = CHARDET_CORRESPONDENCE[encoding] + + return { + "encoding": encoding, + "language": language, + "confidence": confidence, + } diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/md.cpython-311-x86_64-linux-gnu.so b/venv/lib/python3.11/site-packages/charset_normalizer/md.cpython-311-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..3824a428ffd621958e1f1f22dfd105c58417ffd0 GIT binary patch literal 16064 zcmeHOZ)_Y_5r3D9n`<3x6Ph-Sk-Uu(DM937yCkFpH|O}@8tl{?%Bt)gEUl64ds70bGAW+gqCE^P$Ab~1XvVc@}i%3F4Wxn{Bd2fE} z-Ss&jA@QaAEbq+xX6C)w*?oI+x9@$uZ>WD$BB9Wd>ORHNLW@B%P#gxMR7M?Ex6-jy z?bNoL*Hr7dTLc1?etC=rR*4*?7bPT6=o!}IS?o;B(np`JhzJ_=;}BN%8-tauFdf-s z;Rw->O~~ zdofqfXuMIqAh@10taO}{#d681dTzyY9OX=vraa|L5K+$H*szn!SMn#Ps$RY_Hr!Jv zm-1uocp-0e^)*g**5wY|!ql0(8krlU9-U&2x#D!0Mloc#oSUJJM&^3l=_+voD`#ZR z>CL-^LOBa(M@L1`6{g0gy~#@6&84g5bUVvg<_@WWp}}K4PG`C^eGsQCbQ9e(=8pm9 zenk}5W@hIUC2^CwEY_IMn131MQRXXfC3q@=LtZ>;I^=tm?-8`60FF7wx@!SEIR91x z_!e|RbVtSrjLFo}fEB=b&Y@0O~{Z&>D%cKHP@zrr$?vdhnE`R6Qi3A?;N zvVFemMFQ;e4bL;Vcg5RI;T>Y0!n?J$*xWWxw(3=(WdE49KX``8zE%6&HT&YDC^6hh1ysgyjJ0DkS>0t_K zX_5}FHQYsZiH9*R=<-)dIgxH|dz_^PW>GSBm<@UnO14IZknIdM?X8H`Ay2oujkf z!Xf`0`6gPEM=YZJ<^R&vTJ6(BZ(OU@ST}aPR^xBD{0^C0;>@T@%(f(2w{A%-(60%* z3FCLY^W-81Z~Qos5gYj0D_qqjAsKHK;} z6TkoB_k}#(Wzq-VlMxiRI0JD8;ta$Yh%*ppAkILXfj9$k2I35SATr>ukBqE`#G1z+ zOBNvW+DmR*4e=LZen@1jTfIwUtjBB>8EX-D!e7>3^7l7x(EoF_R%ZDTeuGR6-`QT~ zFOk%+#`3$O=k>$f{$L2LxHWBuP;sLLkOmMpwIF(Y|HPWeI|ZMXfq`G%Y!ry|IkBTf zsJdZ1dONG*e@^V_6|k0(NBSD7<)=jdFOmH?rN93d!Fu-Sc!y-6ZNJb5giZ)OE%X~g z2YPxwW$mSv;QOqOc3REbVRg25cC>fg({Ak@&F3uJ^+d71qhnumw6L6{mA6oApUr?QTiF!uE~+ zev2@^em%J9hi07>v^0EDHTnAng4(2NR`Yf3TNLJL*q$B=GC#xkHidQ4Vf-Vi-hGs$ zUw5#cI&8n)pO0bu4rOP8h~bk8vvN(x^J%lX&PyRejh|1O=qZ5xD^Sv!3yoih&Z(ny^-Vz+oRT6c3kB*jML&s)1u}JE* zzLoH8^r?c+4>;Yufqf_87K{S4djtCi39q*g!xcQbui{a{>-GO6;kyFkf&GE*r_OxO zR=lb=Gcl3Qs)%f;zJ-pl7`lSEw$ zy~D$CD;0On$(Ov!oSLY(#k`Z7DHi9*B_Ns27eUivj-qj#{?YE?KBw<^FYg<1a@Ddk z>6UW5Ii&Xs$Ge9IdkCc`xzlHhsogtD5bYy@)4Lb)&=z#ZS zam@#R)B&It%};JTF0=4Qy_O-2`-VU21yIzLWTKmN2T|F?ag7Im)D@r@2l2xW^aS~H z%?KIw2dE_@MdKG(zuRCP{86WX^5+0Ij2}J!66x6g7#mSTJp;O6VC}!1_^AIZVVo1x z<^Drn9`=5{Fa7XX!B!<9=x>Q1=ycGScv1WGYY~5Z?t|`$Trl{f+s7mR_#6U7eGmI+ z{NED)P8e9i2>l{(p~xS?;(d$ECuL!Cy|p$KfBOxc7V`VrHeoMM)fgujj9AhzHL#o*#&vSie1V(6B$kK%$9= Uy6mp!-@pYpwHt=`$Eg3m0k}Z)kN^Mx literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/md.py b/venv/lib/python3.11/site-packages/charset_normalizer/md.py new file mode 100644 index 0000000..9ed59a8 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/md.py @@ -0,0 +1,630 @@ +from __future__ import annotations + +from functools import lru_cache +from logging import getLogger + +from .constant import ( + COMMON_SAFE_ASCII_CHARACTERS, + TRACE, + UNICODE_SECONDARY_RANGE_KEYWORD, +) +from .utils import ( + is_accentuated, + is_arabic, + is_arabic_isolated_form, + is_case_variable, + is_cjk, + is_emoticon, + is_hangul, + is_hiragana, + is_katakana, + is_latin, + is_punctuation, + is_separator, + is_symbol, + is_thai, + is_unprintable, + remove_accent, + unicode_range, +) + + +class MessDetectorPlugin: + """ + Base abstract class used for mess detection plugins. + All detectors MUST extend and implement given methods. + """ + + def eligible(self, character: str) -> bool: + """ + Determine if given character should be fed in. + """ + raise NotImplementedError # pragma: nocover + + def feed(self, character: str) -> None: + """ + The main routine to be executed upon character. + Insert the logic in witch the text would be considered chaotic. + """ + raise NotImplementedError # pragma: nocover + + def reset(self) -> None: # pragma: no cover + """ + Permit to reset the plugin to the initial state. + """ + raise NotImplementedError + + @property + def ratio(self) -> float: + """ + Compute the chaos ratio based on what your feed() has seen. + Must NOT be lower than 0.; No restriction gt 0. + """ + raise NotImplementedError # pragma: nocover + + +class TooManySymbolOrPunctuationPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._punctuation_count: int = 0 + self._symbol_count: int = 0 + self._character_count: int = 0 + + self._last_printable_char: str | None = None + self._frenzy_symbol_in_word: bool = False + + def eligible(self, character: str) -> bool: + return character.isprintable() + + def feed(self, character: str) -> None: + self._character_count += 1 + + if ( + character != self._last_printable_char + and character not in COMMON_SAFE_ASCII_CHARACTERS + ): + if is_punctuation(character): + self._punctuation_count += 1 + elif ( + character.isdigit() is False + and is_symbol(character) + and is_emoticon(character) is False + ): + self._symbol_count += 2 + + self._last_printable_char = character + + def reset(self) -> None: # Abstract + self._punctuation_count = 0 + self._character_count = 0 + self._symbol_count = 0 + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + ratio_of_punctuation: float = ( + self._punctuation_count + self._symbol_count + ) / self._character_count + + return ratio_of_punctuation if ratio_of_punctuation >= 0.3 else 0.0 + + +class TooManyAccentuatedPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._character_count: int = 0 + self._accentuated_count: int = 0 + + def eligible(self, character: str) -> bool: + return character.isalpha() + + def feed(self, character: str) -> None: + self._character_count += 1 + + if is_accentuated(character): + self._accentuated_count += 1 + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._accentuated_count = 0 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + ratio_of_accentuation: float = self._accentuated_count / self._character_count + return ratio_of_accentuation if ratio_of_accentuation >= 0.35 else 0.0 + + +class UnprintablePlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._unprintable_count: int = 0 + self._character_count: int = 0 + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + if is_unprintable(character): + self._unprintable_count += 1 + self._character_count += 1 + + def reset(self) -> None: # Abstract + self._unprintable_count = 0 + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return (self._unprintable_count * 8) / self._character_count + + +class SuspiciousDuplicateAccentPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._successive_count: int = 0 + self._character_count: int = 0 + + self._last_latin_character: str | None = None + + def eligible(self, character: str) -> bool: + return character.isalpha() and is_latin(character) + + def feed(self, character: str) -> None: + self._character_count += 1 + if ( + self._last_latin_character is not None + and is_accentuated(character) + and is_accentuated(self._last_latin_character) + ): + if character.isupper() and self._last_latin_character.isupper(): + self._successive_count += 1 + # Worse if its the same char duplicated with different accent. + if remove_accent(character) == remove_accent(self._last_latin_character): + self._successive_count += 1 + self._last_latin_character = character + + def reset(self) -> None: # Abstract + self._successive_count = 0 + self._character_count = 0 + self._last_latin_character = None + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return (self._successive_count * 2) / self._character_count + + +class SuspiciousRange(MessDetectorPlugin): + def __init__(self) -> None: + self._suspicious_successive_range_count: int = 0 + self._character_count: int = 0 + self._last_printable_seen: str | None = None + + def eligible(self, character: str) -> bool: + return character.isprintable() + + def feed(self, character: str) -> None: + self._character_count += 1 + + if ( + character.isspace() + or is_punctuation(character) + or character in COMMON_SAFE_ASCII_CHARACTERS + ): + self._last_printable_seen = None + return + + if self._last_printable_seen is None: + self._last_printable_seen = character + return + + unicode_range_a: str | None = unicode_range(self._last_printable_seen) + unicode_range_b: str | None = unicode_range(character) + + if is_suspiciously_successive_range(unicode_range_a, unicode_range_b): + self._suspicious_successive_range_count += 1 + + self._last_printable_seen = character + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._suspicious_successive_range_count = 0 + self._last_printable_seen = None + + @property + def ratio(self) -> float: + if self._character_count <= 13: + return 0.0 + + ratio_of_suspicious_range_usage: float = ( + self._suspicious_successive_range_count * 2 + ) / self._character_count + + return ratio_of_suspicious_range_usage + + +class SuperWeirdWordPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._word_count: int = 0 + self._bad_word_count: int = 0 + self._foreign_long_count: int = 0 + + self._is_current_word_bad: bool = False + self._foreign_long_watch: bool = False + + self._character_count: int = 0 + self._bad_character_count: int = 0 + + self._buffer: str = "" + self._buffer_accent_count: int = 0 + self._buffer_glyph_count: int = 0 + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + if character.isalpha(): + self._buffer += character + if is_accentuated(character): + self._buffer_accent_count += 1 + if ( + self._foreign_long_watch is False + and (is_latin(character) is False or is_accentuated(character)) + and is_cjk(character) is False + and is_hangul(character) is False + and is_katakana(character) is False + and is_hiragana(character) is False + and is_thai(character) is False + ): + self._foreign_long_watch = True + if ( + is_cjk(character) + or is_hangul(character) + or is_katakana(character) + or is_hiragana(character) + or is_thai(character) + ): + self._buffer_glyph_count += 1 + return + if not self._buffer: + return + if ( + character.isspace() or is_punctuation(character) or is_separator(character) + ) and self._buffer: + self._word_count += 1 + buffer_length: int = len(self._buffer) + + self._character_count += buffer_length + + if buffer_length >= 4: + if self._buffer_accent_count / buffer_length >= 0.5: + self._is_current_word_bad = True + # Word/Buffer ending with an upper case accentuated letter are so rare, + # that we will consider them all as suspicious. Same weight as foreign_long suspicious. + elif ( + is_accentuated(self._buffer[-1]) + and self._buffer[-1].isupper() + and all(_.isupper() for _ in self._buffer) is False + ): + self._foreign_long_count += 1 + self._is_current_word_bad = True + elif self._buffer_glyph_count == 1: + self._is_current_word_bad = True + self._foreign_long_count += 1 + if buffer_length >= 24 and self._foreign_long_watch: + camel_case_dst = [ + i + for c, i in zip(self._buffer, range(0, buffer_length)) + if c.isupper() + ] + probable_camel_cased: bool = False + + if camel_case_dst and (len(camel_case_dst) / buffer_length <= 0.3): + probable_camel_cased = True + + if not probable_camel_cased: + self._foreign_long_count += 1 + self._is_current_word_bad = True + + if self._is_current_word_bad: + self._bad_word_count += 1 + self._bad_character_count += len(self._buffer) + self._is_current_word_bad = False + + self._foreign_long_watch = False + self._buffer = "" + self._buffer_accent_count = 0 + self._buffer_glyph_count = 0 + elif ( + character not in {"<", ">", "-", "=", "~", "|", "_"} + and character.isdigit() is False + and is_symbol(character) + ): + self._is_current_word_bad = True + self._buffer += character + + def reset(self) -> None: # Abstract + self._buffer = "" + self._is_current_word_bad = False + self._foreign_long_watch = False + self._bad_word_count = 0 + self._word_count = 0 + self._character_count = 0 + self._bad_character_count = 0 + self._foreign_long_count = 0 + + @property + def ratio(self) -> float: + if self._word_count <= 10 and self._foreign_long_count == 0: + return 0.0 + + return self._bad_character_count / self._character_count + + +class CjkInvalidStopPlugin(MessDetectorPlugin): + """ + GB(Chinese) based encoding often render the stop incorrectly when the content does not fit and + can be easily detected. Searching for the overuse of '丅' and '丄'. + """ + + def __init__(self) -> None: + self._wrong_stop_count: int = 0 + self._cjk_character_count: int = 0 + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + if character in {"丅", "丄"}: + self._wrong_stop_count += 1 + return + if is_cjk(character): + self._cjk_character_count += 1 + + def reset(self) -> None: # Abstract + self._wrong_stop_count = 0 + self._cjk_character_count = 0 + + @property + def ratio(self) -> float: + if self._cjk_character_count < 16: + return 0.0 + return self._wrong_stop_count / self._cjk_character_count + + +class ArchaicUpperLowerPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._buf: bool = False + + self._character_count_since_last_sep: int = 0 + + self._successive_upper_lower_count: int = 0 + self._successive_upper_lower_count_final: int = 0 + + self._character_count: int = 0 + + self._last_alpha_seen: str | None = None + self._current_ascii_only: bool = True + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + is_concerned = character.isalpha() and is_case_variable(character) + chunk_sep = is_concerned is False + + if chunk_sep and self._character_count_since_last_sep > 0: + if ( + self._character_count_since_last_sep <= 64 + and character.isdigit() is False + and self._current_ascii_only is False + ): + self._successive_upper_lower_count_final += ( + self._successive_upper_lower_count + ) + + self._successive_upper_lower_count = 0 + self._character_count_since_last_sep = 0 + self._last_alpha_seen = None + self._buf = False + self._character_count += 1 + self._current_ascii_only = True + + return + + if self._current_ascii_only is True and character.isascii() is False: + self._current_ascii_only = False + + if self._last_alpha_seen is not None: + if (character.isupper() and self._last_alpha_seen.islower()) or ( + character.islower() and self._last_alpha_seen.isupper() + ): + if self._buf is True: + self._successive_upper_lower_count += 2 + self._buf = False + else: + self._buf = True + else: + self._buf = False + + self._character_count += 1 + self._character_count_since_last_sep += 1 + self._last_alpha_seen = character + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._character_count_since_last_sep = 0 + self._successive_upper_lower_count = 0 + self._successive_upper_lower_count_final = 0 + self._last_alpha_seen = None + self._buf = False + self._current_ascii_only = True + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return self._successive_upper_lower_count_final / self._character_count + + +class ArabicIsolatedFormPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._character_count: int = 0 + self._isolated_form_count: int = 0 + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._isolated_form_count = 0 + + def eligible(self, character: str) -> bool: + return is_arabic(character) + + def feed(self, character: str) -> None: + self._character_count += 1 + + if is_arabic_isolated_form(character): + self._isolated_form_count += 1 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + isolated_form_usage: float = self._isolated_form_count / self._character_count + + return isolated_form_usage + + +@lru_cache(maxsize=1024) +def is_suspiciously_successive_range( + unicode_range_a: str | None, unicode_range_b: str | None +) -> bool: + """ + Determine if two Unicode range seen next to each other can be considered as suspicious. + """ + if unicode_range_a is None or unicode_range_b is None: + return True + + if unicode_range_a == unicode_range_b: + return False + + if "Latin" in unicode_range_a and "Latin" in unicode_range_b: + return False + + if "Emoticons" in unicode_range_a or "Emoticons" in unicode_range_b: + return False + + # Latin characters can be accompanied with a combining diacritical mark + # eg. Vietnamese. + if ("Latin" in unicode_range_a or "Latin" in unicode_range_b) and ( + "Combining" in unicode_range_a or "Combining" in unicode_range_b + ): + return False + + keywords_range_a, keywords_range_b = ( + unicode_range_a.split(" "), + unicode_range_b.split(" "), + ) + + for el in keywords_range_a: + if el in UNICODE_SECONDARY_RANGE_KEYWORD: + continue + if el in keywords_range_b: + return False + + # Japanese Exception + range_a_jp_chars, range_b_jp_chars = ( + unicode_range_a + in ( + "Hiragana", + "Katakana", + ), + unicode_range_b in ("Hiragana", "Katakana"), + ) + if (range_a_jp_chars or range_b_jp_chars) and ( + "CJK" in unicode_range_a or "CJK" in unicode_range_b + ): + return False + if range_a_jp_chars and range_b_jp_chars: + return False + + if "Hangul" in unicode_range_a or "Hangul" in unicode_range_b: + if "CJK" in unicode_range_a or "CJK" in unicode_range_b: + return False + if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": + return False + + # Chinese/Japanese use dedicated range for punctuation and/or separators. + if ("CJK" in unicode_range_a or "CJK" in unicode_range_b) or ( + unicode_range_a in ["Katakana", "Hiragana"] + and unicode_range_b in ["Katakana", "Hiragana"] + ): + if "Punctuation" in unicode_range_a or "Punctuation" in unicode_range_b: + return False + if "Forms" in unicode_range_a or "Forms" in unicode_range_b: + return False + if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": + return False + + return True + + +@lru_cache(maxsize=2048) +def mess_ratio( + decoded_sequence: str, maximum_threshold: float = 0.2, debug: bool = False +) -> float: + """ + Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier. + """ + + detectors: list[MessDetectorPlugin] = [ + md_class() for md_class in MessDetectorPlugin.__subclasses__() + ] + + length: int = len(decoded_sequence) + 1 + + mean_mess_ratio: float = 0.0 + + if length < 512: + intermediary_mean_mess_ratio_calc: int = 32 + elif length <= 1024: + intermediary_mean_mess_ratio_calc = 64 + else: + intermediary_mean_mess_ratio_calc = 128 + + for character, index in zip(decoded_sequence + "\n", range(length)): + for detector in detectors: + if detector.eligible(character): + detector.feed(character) + + if ( + index > 0 and index % intermediary_mean_mess_ratio_calc == 0 + ) or index == length - 1: + mean_mess_ratio = sum(dt.ratio for dt in detectors) + + if mean_mess_ratio >= maximum_threshold: + break + + if debug: + logger = getLogger("charset_normalizer") + + logger.log( + TRACE, + "Mess-detector extended-analysis start. " + f"intermediary_mean_mess_ratio_calc={intermediary_mean_mess_ratio_calc} mean_mess_ratio={mean_mess_ratio} " + f"maximum_threshold={maximum_threshold}", + ) + + if len(decoded_sequence) > 16: + logger.log(TRACE, f"Starting with: {decoded_sequence[:16]}") + logger.log(TRACE, f"Ending with: {decoded_sequence[-16::]}") + + for dt in detectors: + logger.log(TRACE, f"{dt.__class__}: {dt.ratio}") + + return round(mean_mess_ratio, 3) diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/md__mypyc.cpython-311-x86_64-linux-gnu.so b/venv/lib/python3.11/site-packages/charset_normalizer/md__mypyc.cpython-311-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..864b9aab0e46a00e25e79b19771931e3b94b2a47 GIT binary patch literal 272624 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 z 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 bool: + if not isinstance(other, CharsetMatch): + if isinstance(other, str): + return iana_name(other) == self.encoding + return False + return self.encoding == other.encoding and self.fingerprint == other.fingerprint + + def __lt__(self, other: object) -> bool: + """ + Implemented to make sorted available upon CharsetMatches items. + """ + if not isinstance(other, CharsetMatch): + raise ValueError + + chaos_difference: float = abs(self.chaos - other.chaos) + coherence_difference: float = abs(self.coherence - other.coherence) + + # Below 1% difference --> Use Coherence + if chaos_difference < 0.01 and coherence_difference > 0.02: + return self.coherence > other.coherence + elif chaos_difference < 0.01 and coherence_difference <= 0.02: + # When having a difficult decision, use the result that decoded as many multi-byte as possible. + # preserve RAM usage! + if len(self._payload) >= TOO_BIG_SEQUENCE: + return self.chaos < other.chaos + return self.multi_byte_usage > other.multi_byte_usage + + return self.chaos < other.chaos + + @property + def multi_byte_usage(self) -> float: + return 1.0 - (len(str(self)) / len(self.raw)) + + def __str__(self) -> str: + # Lazy Str Loading + if self._string is None: + self._string = str(self._payload, self._encoding, "strict") + return self._string + + def __repr__(self) -> str: + return f"" + + def add_submatch(self, other: CharsetMatch) -> None: + if not isinstance(other, CharsetMatch) or other == self: + raise ValueError( + "Unable to add instance <{}> as a submatch of a CharsetMatch".format( + other.__class__ + ) + ) + + other._string = None # Unload RAM usage; dirty trick. + self._leaves.append(other) + + @property + def encoding(self) -> str: + return self._encoding + + @property + def encoding_aliases(self) -> list[str]: + """ + Encoding name are known by many name, using this could help when searching for IBM855 when it's listed as CP855. + """ + also_known_as: list[str] = [] + for u, p in aliases.items(): + if self.encoding == u: + also_known_as.append(p) + elif self.encoding == p: + also_known_as.append(u) + return also_known_as + + @property + def bom(self) -> bool: + return self._has_sig_or_bom + + @property + def byte_order_mark(self) -> bool: + return self._has_sig_or_bom + + @property + def languages(self) -> list[str]: + """ + Return the complete list of possible languages found in decoded sequence. + Usually not really useful. Returned list may be empty even if 'language' property return something != 'Unknown'. + """ + return [e[0] for e in self._languages] + + @property + def language(self) -> str: + """ + Most probable language found in decoded sequence. If none were detected or inferred, the property will return + "Unknown". + """ + if not self._languages: + # Trying to infer the language based on the given encoding + # Its either English or we should not pronounce ourselves in certain cases. + if "ascii" in self.could_be_from_charset: + return "English" + + # doing it there to avoid circular import + from charset_normalizer.cd import encoding_languages, mb_encoding_languages + + languages = ( + mb_encoding_languages(self.encoding) + if is_multi_byte_encoding(self.encoding) + else encoding_languages(self.encoding) + ) + + if len(languages) == 0 or "Latin Based" in languages: + return "Unknown" + + return languages[0] + + return self._languages[0][0] + + @property + def chaos(self) -> float: + return self._mean_mess_ratio + + @property + def coherence(self) -> float: + if not self._languages: + return 0.0 + return self._languages[0][1] + + @property + def percent_chaos(self) -> float: + return round(self.chaos * 100, ndigits=3) + + @property + def percent_coherence(self) -> float: + return round(self.coherence * 100, ndigits=3) + + @property + def raw(self) -> bytes: + """ + Original untouched bytes. + """ + return self._payload + + @property + def submatch(self) -> list[CharsetMatch]: + return self._leaves + + @property + def has_submatch(self) -> bool: + return len(self._leaves) > 0 + + @property + def alphabets(self) -> list[str]: + if self._unicode_ranges is not None: + return self._unicode_ranges + # list detected ranges + detected_ranges: list[str | None] = [unicode_range(char) for char in str(self)] + # filter and sort + self._unicode_ranges = sorted(list({r for r in detected_ranges if r})) + return self._unicode_ranges + + @property + def could_be_from_charset(self) -> list[str]: + """ + The complete list of encoding that output the exact SAME str result and therefore could be the originating + encoding. + This list does include the encoding available in property 'encoding'. + """ + return [self._encoding] + [m.encoding for m in self._leaves] + + def output(self, encoding: str = "utf_8") -> bytes: + """ + Method to get re-encoded bytes payload using given target encoding. Default to UTF-8. + Any errors will be simply ignored by the encoder NOT replaced. + """ + if self._output_encoding is None or self._output_encoding != encoding: + self._output_encoding = encoding + decoded_string = str(self) + if ( + self._preemptive_declaration is not None + and self._preemptive_declaration.lower() + not in ["utf-8", "utf8", "utf_8"] + ): + patched_header = sub( + RE_POSSIBLE_ENCODING_INDICATION, + lambda m: m.string[m.span()[0] : m.span()[1]].replace( + m.groups()[0], + iana_name(self._output_encoding).replace("_", "-"), # type: ignore[arg-type] + ), + decoded_string[:8192], + count=1, + ) + + decoded_string = patched_header + decoded_string[8192:] + + self._output_payload = decoded_string.encode(encoding, "replace") + + return self._output_payload # type: ignore + + @property + def fingerprint(self) -> str: + """ + Retrieve the unique SHA256 computed using the transformed (re-encoded) payload. Not the original one. + """ + return sha256(self.output()).hexdigest() + + +class CharsetMatches: + """ + Container with every CharsetMatch items ordered by default from most probable to the less one. + Act like a list(iterable) but does not implements all related methods. + """ + + def __init__(self, results: list[CharsetMatch] | None = None): + self._results: list[CharsetMatch] = sorted(results) if results else [] + + def __iter__(self) -> Iterator[CharsetMatch]: + yield from self._results + + def __getitem__(self, item: int | str) -> CharsetMatch: + """ + Retrieve a single item either by its position or encoding name (alias may be used here). + Raise KeyError upon invalid index or encoding not present in results. + """ + if isinstance(item, int): + return self._results[item] + if isinstance(item, str): + item = iana_name(item, False) + for result in self._results: + if item in result.could_be_from_charset: + return result + raise KeyError + + def __len__(self) -> int: + return len(self._results) + + def __bool__(self) -> bool: + return len(self._results) > 0 + + def append(self, item: CharsetMatch) -> None: + """ + Insert a single match. Will be inserted accordingly to preserve sort. + Can be inserted as a submatch. + """ + if not isinstance(item, CharsetMatch): + raise ValueError( + "Cannot append instance '{}' to CharsetMatches".format( + str(item.__class__) + ) + ) + # We should disable the submatch factoring when the input file is too heavy (conserve RAM usage) + if len(item.raw) < TOO_BIG_SEQUENCE: + for match in self._results: + if match.fingerprint == item.fingerprint and match.chaos == item.chaos: + match.add_submatch(item) + return + self._results.append(item) + self._results = sorted(self._results) + + def best(self) -> CharsetMatch | None: + """ + Simply return the first match. Strict equivalent to matches[0]. + """ + if not self._results: + return None + return self._results[0] + + def first(self) -> CharsetMatch | None: + """ + Redundant method, call the method best(). Kept for BC reasons. + """ + return self.best() + + +CoherenceMatch = Tuple[str, float] +CoherenceMatches = List[CoherenceMatch] + + +class CliDetectionResult: + def __init__( + self, + path: str, + encoding: str | None, + encoding_aliases: list[str], + alternative_encodings: list[str], + language: str, + alphabets: list[str], + has_sig_or_bom: bool, + chaos: float, + coherence: float, + unicode_path: str | None, + is_preferred: bool, + ): + self.path: str = path + self.unicode_path: str | None = unicode_path + self.encoding: str | None = encoding + self.encoding_aliases: list[str] = encoding_aliases + self.alternative_encodings: list[str] = alternative_encodings + self.language: str = language + self.alphabets: list[str] = alphabets + self.has_sig_or_bom: bool = has_sig_or_bom + self.chaos: float = chaos + self.coherence: float = coherence + self.is_preferred: bool = is_preferred + + @property + def __dict__(self) -> dict[str, Any]: # type: ignore + return { + "path": self.path, + "encoding": self.encoding, + "encoding_aliases": self.encoding_aliases, + "alternative_encodings": self.alternative_encodings, + "language": self.language, + "alphabets": self.alphabets, + "has_sig_or_bom": self.has_sig_or_bom, + "chaos": self.chaos, + "coherence": self.coherence, + "unicode_path": self.unicode_path, + "is_preferred": self.is_preferred, + } + + def to_json(self) -> str: + return dumps(self.__dict__, ensure_ascii=True, indent=4) diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/py.typed b/venv/lib/python3.11/site-packages/charset_normalizer/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/utils.py b/venv/lib/python3.11/site-packages/charset_normalizer/utils.py new file mode 100644 index 0000000..0175e0a --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/utils.py @@ -0,0 +1,408 @@ +from __future__ import annotations + +import importlib +import logging +import unicodedata +from codecs import IncrementalDecoder +from encodings.aliases import aliases +from functools import lru_cache +from re import findall +from typing import Generator + +from _multibytecodec import ( # type: ignore[import-not-found,import] + MultibyteIncrementalDecoder, +) + +from .constant import ( + ENCODING_MARKS, + IANA_SUPPORTED_SIMILAR, + RE_POSSIBLE_ENCODING_INDICATION, + UNICODE_RANGES_COMBINED, + UNICODE_SECONDARY_RANGE_KEYWORD, + UTF8_MAXIMAL_ALLOCATION, +) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_accentuated(character: str) -> bool: + try: + description: str = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + return ( + "WITH GRAVE" in description + or "WITH ACUTE" in description + or "WITH CEDILLA" in description + or "WITH DIAERESIS" in description + or "WITH CIRCUMFLEX" in description + or "WITH TILDE" in description + or "WITH MACRON" in description + or "WITH RING ABOVE" in description + ) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def remove_accent(character: str) -> str: + decomposed: str = unicodedata.decomposition(character) + if not decomposed: + return character + + codes: list[str] = decomposed.split(" ") + + return chr(int(codes[0], 16)) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def unicode_range(character: str) -> str | None: + """ + Retrieve the Unicode range official name from a single character. + """ + character_ord: int = ord(character) + + for range_name, ord_range in UNICODE_RANGES_COMBINED.items(): + if character_ord in ord_range: + return range_name + + return None + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_latin(character: str) -> bool: + try: + description: str = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + return "LATIN" in description + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_punctuation(character: str) -> bool: + character_category: str = unicodedata.category(character) + + if "P" in character_category: + return True + + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Punctuation" in character_range + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_symbol(character: str) -> bool: + character_category: str = unicodedata.category(character) + + if "S" in character_category or "N" in character_category: + return True + + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Forms" in character_range and character_category != "Lo" + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_emoticon(character: str) -> bool: + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Emoticons" in character_range or "Pictographs" in character_range + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_separator(character: str) -> bool: + if character.isspace() or character in {"|", "+", "<", ">"}: + return True + + character_category: str = unicodedata.category(character) + + return "Z" in character_category or character_category in {"Po", "Pd", "Pc"} + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_case_variable(character: str) -> bool: + return character.islower() != character.isupper() + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_cjk(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "CJK" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_hiragana(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "HIRAGANA" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_katakana(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "KATAKANA" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_hangul(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "HANGUL" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_thai(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "THAI" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_arabic(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "ARABIC" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_arabic_isolated_form(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "ARABIC" in character_name and "ISOLATED FORM" in character_name + + +@lru_cache(maxsize=len(UNICODE_RANGES_COMBINED)) +def is_unicode_range_secondary(range_name: str) -> bool: + return any(keyword in range_name for keyword in UNICODE_SECONDARY_RANGE_KEYWORD) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_unprintable(character: str) -> bool: + return ( + character.isspace() is False # includes \n \t \r \v + and character.isprintable() is False + and character != "\x1a" # Why? Its the ASCII substitute character. + and character != "\ufeff" # bug discovered in Python, + # Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space. + ) + + +def any_specified_encoding(sequence: bytes, search_zone: int = 8192) -> str | None: + """ + Extract using ASCII-only decoder any specified encoding in the first n-bytes. + """ + if not isinstance(sequence, bytes): + raise TypeError + + seq_len: int = len(sequence) + + results: list[str] = findall( + RE_POSSIBLE_ENCODING_INDICATION, + sequence[: min(seq_len, search_zone)].decode("ascii", errors="ignore"), + ) + + if len(results) == 0: + return None + + for specified_encoding in results: + specified_encoding = specified_encoding.lower().replace("-", "_") + + encoding_alias: str + encoding_iana: str + + for encoding_alias, encoding_iana in aliases.items(): + if encoding_alias == specified_encoding: + return encoding_iana + if encoding_iana == specified_encoding: + return encoding_iana + + return None + + +@lru_cache(maxsize=128) +def is_multi_byte_encoding(name: str) -> bool: + """ + Verify is a specific encoding is a multi byte one based on it IANA name + """ + return name in { + "utf_8", + "utf_8_sig", + "utf_16", + "utf_16_be", + "utf_16_le", + "utf_32", + "utf_32_le", + "utf_32_be", + "utf_7", + } or issubclass( + importlib.import_module(f"encodings.{name}").IncrementalDecoder, + MultibyteIncrementalDecoder, + ) + + +def identify_sig_or_bom(sequence: bytes) -> tuple[str | None, bytes]: + """ + Identify and extract SIG/BOM in given sequence. + """ + + for iana_encoding in ENCODING_MARKS: + marks: bytes | list[bytes] = ENCODING_MARKS[iana_encoding] + + if isinstance(marks, bytes): + marks = [marks] + + for mark in marks: + if sequence.startswith(mark): + return iana_encoding, mark + + return None, b"" + + +def should_strip_sig_or_bom(iana_encoding: str) -> bool: + return iana_encoding not in {"utf_16", "utf_32"} + + +def iana_name(cp_name: str, strict: bool = True) -> str: + """Returns the Python normalized encoding name (Not the IANA official name).""" + cp_name = cp_name.lower().replace("-", "_") + + encoding_alias: str + encoding_iana: str + + for encoding_alias, encoding_iana in aliases.items(): + if cp_name in [encoding_alias, encoding_iana]: + return encoding_iana + + if strict: + raise ValueError(f"Unable to retrieve IANA for '{cp_name}'") + + return cp_name + + +def cp_similarity(iana_name_a: str, iana_name_b: str) -> float: + if is_multi_byte_encoding(iana_name_a) or is_multi_byte_encoding(iana_name_b): + return 0.0 + + decoder_a = importlib.import_module(f"encodings.{iana_name_a}").IncrementalDecoder + decoder_b = importlib.import_module(f"encodings.{iana_name_b}").IncrementalDecoder + + id_a: IncrementalDecoder = decoder_a(errors="ignore") + id_b: IncrementalDecoder = decoder_b(errors="ignore") + + character_match_count: int = 0 + + for i in range(255): + to_be_decoded: bytes = bytes([i]) + if id_a.decode(to_be_decoded) == id_b.decode(to_be_decoded): + character_match_count += 1 + + return character_match_count / 254 + + +def is_cp_similar(iana_name_a: str, iana_name_b: str) -> bool: + """ + Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using + the function cp_similarity. + """ + return ( + iana_name_a in IANA_SUPPORTED_SIMILAR + and iana_name_b in IANA_SUPPORTED_SIMILAR[iana_name_a] + ) + + +def set_logging_handler( + name: str = "charset_normalizer", + level: int = logging.INFO, + format_string: str = "%(asctime)s | %(levelname)s | %(message)s", +) -> None: + logger = logging.getLogger(name) + logger.setLevel(level) + + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter(format_string)) + logger.addHandler(handler) + + +def cut_sequence_chunks( + sequences: bytes, + encoding_iana: str, + offsets: range, + chunk_size: int, + bom_or_sig_available: bool, + strip_sig_or_bom: bool, + sig_payload: bytes, + is_multi_byte_decoder: bool, + decoded_payload: str | None = None, +) -> Generator[str, None, None]: + if decoded_payload and is_multi_byte_decoder is False: + for i in offsets: + chunk = decoded_payload[i : i + chunk_size] + if not chunk: + break + yield chunk + else: + for i in offsets: + chunk_end = i + chunk_size + if chunk_end > len(sequences) + 8: + continue + + cut_sequence = sequences[i : i + chunk_size] + + if bom_or_sig_available and strip_sig_or_bom is False: + cut_sequence = sig_payload + cut_sequence + + chunk = cut_sequence.decode( + encoding_iana, + errors="ignore" if is_multi_byte_decoder else "strict", + ) + + # multi-byte bad cutting detector and adjustment + # not the cleanest way to perform that fix but clever enough for now. + if is_multi_byte_decoder and i > 0: + chunk_partial_size_chk: int = min(chunk_size, 16) + + if ( + decoded_payload + and chunk[:chunk_partial_size_chk] not in decoded_payload + ): + for j in range(i, i - 4, -1): + cut_sequence = sequences[j:chunk_end] + + if bom_or_sig_available and strip_sig_or_bom is False: + cut_sequence = sig_payload + cut_sequence + + chunk = cut_sequence.decode(encoding_iana, errors="ignore") + + if chunk[:chunk_partial_size_chk] in decoded_payload: + break + + yield chunk diff --git a/venv/lib/python3.11/site-packages/charset_normalizer/version.py b/venv/lib/python3.11/site-packages/charset_normalizer/version.py new file mode 100644 index 0000000..f85e892 --- /dev/null +++ b/venv/lib/python3.11/site-packages/charset_normalizer/version.py @@ -0,0 +1,8 @@ +""" +Expose version +""" + +from __future__ import annotations + +__version__ = "3.4.1" +VERSION = __version__.split(".") diff --git a/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/METADATA b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/METADATA new file mode 100644 index 0000000..acbd21a --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/METADATA @@ -0,0 +1,140 @@ +Metadata-Version: 2.3 +Name: cryptography +Version: 44.0.2 +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Apache Software License +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: POSIX +Classifier: Operating System :: POSIX :: BSD +Classifier: Operating System :: POSIX :: Linux +Classifier: Operating System :: Microsoft :: Windows +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Security :: Cryptography +Requires-Dist: cffi >=1.12 ; platform_python_implementation != 'PyPy' +Requires-Dist: bcrypt >=3.1.5 ; extra == 'ssh' +Requires-Dist: nox >=2024.4.15 ; extra == 'nox' +Requires-Dist: nox[uv] >=2024.3.2 ; python_version >= '3.8' and extra == 'nox' +Requires-Dist: cryptography-vectors ==44.0.2 ; extra == 'test' +Requires-Dist: pytest >=7.4.0 ; extra == 'test' +Requires-Dist: pytest-benchmark >=4.0 ; extra == 'test' +Requires-Dist: pytest-cov >=2.10.1 ; extra == 'test' +Requires-Dist: pytest-xdist >=3.5.0 ; extra == 'test' +Requires-Dist: pretend >=0.7 ; extra == 'test' +Requires-Dist: certifi >=2024 ; extra == 'test' +Requires-Dist: pytest-randomly ; extra == 'test-randomorder' +Requires-Dist: sphinx >=5.3.0 ; extra == 'docs' +Requires-Dist: sphinx-rtd-theme >=3.0.0 ; python_version >= '3.8' and extra == 'docs' +Requires-Dist: pyenchant >=3 ; extra == 'docstest' +Requires-Dist: readme-renderer >=30.0 ; extra == 'docstest' +Requires-Dist: sphinxcontrib-spelling >=7.3.1 ; extra == 'docstest' +Requires-Dist: build >=1.0.0 ; extra == 'sdist' +Requires-Dist: ruff >=0.3.6 ; extra == 'pep8test' +Requires-Dist: mypy >=1.4 ; extra == 'pep8test' +Requires-Dist: check-sdist ; python_version >= '3.8' and extra == 'pep8test' +Requires-Dist: click >=8.0.1 ; extra == 'pep8test' +Provides-Extra: ssh +Provides-Extra: nox +Provides-Extra: test +Provides-Extra: test-randomorder +Provides-Extra: docs +Provides-Extra: docstest +Provides-Extra: sdist +Provides-Extra: pep8test +License-File: LICENSE +License-File: LICENSE.APACHE +License-File: LICENSE.BSD +Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers. +Author: The cryptography developers +Author-email: The Python Cryptographic Authority and individual contributors +License: Apache-2.0 OR BSD-3-Clause +Requires-Python: >=3.7, !=3.9.0, !=3.9.1 +Description-Content-Type: text/x-rst; charset=UTF-8 +Project-URL: homepage, https://github.com/pyca/cryptography +Project-URL: documentation, https://cryptography.io/ +Project-URL: source, https://github.com/pyca/cryptography/ +Project-URL: issues, https://github.com/pyca/cryptography/issues +Project-URL: changelog, https://cryptography.io/en/latest/changelog/ + +pyca/cryptography +================= + +.. image:: https://img.shields.io/pypi/v/cryptography.svg + :target: https://pypi.org/project/cryptography/ + :alt: Latest Version + +.. image:: https://readthedocs.org/projects/cryptography/badge/?version=latest + :target: https://cryptography.io + :alt: Latest Docs + +.. image:: https://github.com/pyca/cryptography/workflows/CI/badge.svg?branch=main + :target: https://github.com/pyca/cryptography/actions?query=workflow%3ACI+branch%3Amain + + +``cryptography`` is a package which provides cryptographic recipes and +primitives to Python developers. Our goal is for it to be your "cryptographic +standard library". It supports Python 3.7+ and PyPy3 7.3.11+. + +``cryptography`` includes both high level recipes and low level interfaces to +common cryptographic algorithms such as symmetric ciphers, message digests, and +key derivation functions. For example, to encrypt something with +``cryptography``'s high level symmetric encryption recipe: + +.. code-block:: pycon + + >>> from cryptography.fernet import Fernet + >>> # Put this somewhere safe! + >>> key = Fernet.generate_key() + >>> f = Fernet(key) + >>> token = f.encrypt(b"A really secret message. Not for prying eyes.") + >>> token + b'...' + >>> f.decrypt(token) + b'A really secret message. Not for prying eyes.' + +You can find more information in the `documentation`_. + +You can install ``cryptography`` with: + +.. code-block:: console + + $ pip install cryptography + +For full details see `the installation documentation`_. + +Discussion +~~~~~~~~~~ + +If you run into bugs, you can file them in our `issue tracker`_. + +We maintain a `cryptography-dev`_ mailing list for development discussion. + +You can also join ``#pyca`` on ``irc.libera.chat`` to ask questions or get +involved. + +Security +~~~~~~~~ + +Need to report a security issue? Please consult our `security reporting`_ +documentation. + + +.. _`documentation`: https://cryptography.io/ +.. _`the installation documentation`: https://cryptography.io/en/latest/installation/ +.. _`issue tracker`: https://github.com/pyca/cryptography/issues +.. _`cryptography-dev`: https://mail.python.org/mailman/listinfo/cryptography-dev +.. _`security reporting`: https://cryptography.io/en/latest/security/ + diff --git a/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/RECORD b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/RECORD new file mode 100644 index 0000000..16b8b3b --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/RECORD @@ -0,0 +1,182 @@ +cryptography-44.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +cryptography-44.0.2.dist-info/METADATA,sha256=cgphHIHoULnRY3G2C7Eh6Wp2QMwMBmNMLXtz_1ld7ho,5724 +cryptography-44.0.2.dist-info/RECORD,, +cryptography-44.0.2.dist-info/WHEEL,sha256=UpI5w5M2-qnzZdHNjisIw1dag11TStMro3kowqBDR6k,107 +cryptography-44.0.2.dist-info/licenses/LICENSE,sha256=Pgx8CRqUi4JTO6mP18u0BDLW8amsv4X1ki0vmak65rs,197 +cryptography-44.0.2.dist-info/licenses/LICENSE.APACHE,sha256=qsc7MUj20dcRHbyjIJn2jSbGRMaBOuHk8F9leaomY_4,11360 +cryptography-44.0.2.dist-info/licenses/LICENSE.BSD,sha256=YCxMdILeZHndLpeTzaJ15eY9dz2s0eymiSMqtwCPtPs,1532 +cryptography/__about__.py,sha256=LsHy-0b4kwxfAD0ryobJhitlFn7Tk8Sepunxo8YcUZs,445 +cryptography/__init__.py,sha256=XsRL_PxbU6UgoyoglAgJQSrJCP97ovBA8YIEQ2-uI68,762 +cryptography/__pycache__/__about__.cpython-311.pyc,, +cryptography/__pycache__/__init__.cpython-311.pyc,, +cryptography/__pycache__/exceptions.cpython-311.pyc,, +cryptography/__pycache__/fernet.cpython-311.pyc,, +cryptography/__pycache__/utils.cpython-311.pyc,, +cryptography/exceptions.py,sha256=835EWILc2fwxw-gyFMriciC2SqhViETB10LBSytnDIc,1087 +cryptography/fernet.py,sha256=aMU2HyDJ5oRGjg8AkFvHwE7BSmHY4fVUCaioxZcd8gA,6933 +cryptography/hazmat/__init__.py,sha256=5IwrLWrVp0AjEr_4FdWG_V057NSJGY_W4egNNsuct0g,455 +cryptography/hazmat/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/__pycache__/_oid.cpython-311.pyc,, +cryptography/hazmat/_oid.py,sha256=xcGtygUQX1p2ozVjhqKk016E5--BC7ituI1EGuoiWds,15294 +cryptography/hazmat/backends/__init__.py,sha256=O5jvKFQdZnXhKeqJ-HtulaEL9Ni7mr1mDzZY5kHlYhI,361 +cryptography/hazmat/backends/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/backends/openssl/__init__.py,sha256=p3jmJfnCag9iE5sdMrN6VvVEu55u46xaS_IjoI0SrmA,305 +cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-311.pyc,, +cryptography/hazmat/backends/openssl/backend.py,sha256=Bk_inezh7fBN3jsxMu1YIkf10zryfup6opBDLVFiNms,9413 +cryptography/hazmat/bindings/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/bindings/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/bindings/_rust.abi3.so,sha256=-fS4tbc3TKtgMDEaLqdxNdIjuJjKA2IIIkbtufR1Gd8,11514880 +cryptography/hazmat/bindings/_rust/__init__.pyi,sha256=s73-NWxZs-5r2vAzDT9Eqo9mRiWE__A4VJKyFBkjHdM,879 +cryptography/hazmat/bindings/_rust/_openssl.pyi,sha256=mpNJLuYLbCVrd5i33FBTmWwL_55Dw7JPkSLlSX9Q7oI,230 +cryptography/hazmat/bindings/_rust/asn1.pyi,sha256=BrGjC8J6nwuS-r3EVcdXJB8ndotfY9mbQYOfpbPG0HA,354 +cryptography/hazmat/bindings/_rust/exceptions.pyi,sha256=exXr2xw_0pB1kk93cYbM3MohbzoUkjOms1ZMUi0uQZE,640 +cryptography/hazmat/bindings/_rust/ocsp.pyi,sha256=mNrMO5sYEnftD_b2-NvvR6M8QdYGZ1jpTdazpgzXgl0,4004 +cryptography/hazmat/bindings/_rust/openssl/__init__.pyi,sha256=FS2gi2eALVzqTTic8an8enD431pkwKbRxeAZaNMV4Ts,1410 +cryptography/hazmat/bindings/_rust/openssl/aead.pyi,sha256=i0gA3jUQ4rkJXTGGZrq-AuY-VQLN31lyDeWuDZ0zJYw,2553 +cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi,sha256=iK0ZhQ-WyCQbjaraaFgK6q4PpD-7Rf5RDHkFD3YEW_g,1301 +cryptography/hazmat/bindings/_rust/openssl/cmac.pyi,sha256=nPH0X57RYpsAkRowVpjQiHE566ThUTx7YXrsadmrmHk,564 +cryptography/hazmat/bindings/_rust/openssl/dh.pyi,sha256=Z3TC-G04-THtSdAOPLM1h2G7ml5bda1ElZUcn5wpuhk,1564 +cryptography/hazmat/bindings/_rust/openssl/dsa.pyi,sha256=qBtkgj2albt2qFcnZ9UDrhzoNhCVO7HTby5VSf1EXMI,1299 +cryptography/hazmat/bindings/_rust/openssl/ec.pyi,sha256=zJy0pRa5n-_p2dm45PxECB_-B6SVZyNKfjxFDpPqT38,1691 +cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi,sha256=OJsrblS2nHptZctva-pAKFL5q8yPEAkhmjPZpJ6TA94,493 +cryptography/hazmat/bindings/_rust/openssl/ed448.pyi,sha256=SkPHK2HdbYN02TVQEUOgW3iTdiEY7HBE4DijpdkAzmk,475 +cryptography/hazmat/bindings/_rust/openssl/hashes.pyi,sha256=p8sdf41mPBlV_W9v_18JItuMoHE8UkBxj9Tuqi0WiTE,639 +cryptography/hazmat/bindings/_rust/openssl/hmac.pyi,sha256=ZmLJ73pmxcZFC1XosWEiXMRYtvJJor3ZLdCQOJu85Cw,662 +cryptography/hazmat/bindings/_rust/openssl/kdf.pyi,sha256=hvZSV2C3MQd9jC1Tuh5Lsb0iGBgcLVF2xFYdTo7USO4,1129 +cryptography/hazmat/bindings/_rust/openssl/keys.pyi,sha256=JSrlGNaW49ZCZ1hcb-YJdS1EAbsMwRbVEcLL0P9OApA,872 +cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi,sha256=9iogF7Q4i81IkOS-IMXp6HvxFF_3cNy_ucrAjVQnn14,540 +cryptography/hazmat/bindings/_rust/openssl/rsa.pyi,sha256=2OQCNSXkxgc-3uw1xiCCloIQTV6p9_kK79Yu0rhZgPc,1364 +cryptography/hazmat/bindings/_rust/openssl/x25519.pyi,sha256=2BKdbrddM_9SMUpdvHKGhb9MNjURCarPxccbUDzHeoA,484 +cryptography/hazmat/bindings/_rust/openssl/x448.pyi,sha256=AoRMWNvCJTiH5L-lkIkCdPlrPLUdJvvfXpIvf1GmxpM,466 +cryptography/hazmat/bindings/_rust/pkcs12.pyi,sha256=afhB_6M8xI1MIE5vxkaDF1jSxA48ib1--NiOxtf6boM,1394 +cryptography/hazmat/bindings/_rust/pkcs7.pyi,sha256=Ag9coB8kRwrUJEg1do6BJABs9DqxZiY8WJIFUVa7StE,1545 +cryptography/hazmat/bindings/_rust/test_support.pyi,sha256=FXe7t_tqI3e9ULirYcr5Zlw5szGY7TiZyb7W83ak0Nk,718 +cryptography/hazmat/bindings/_rust/x509.pyi,sha256=0p-Ak_zj-9WfyZKPo08YT6cOx1c-lhjeYd0jJ8c4oT0,8318 +cryptography/hazmat/bindings/openssl/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-311.pyc,, +cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-311.pyc,, +cryptography/hazmat/bindings/openssl/_conditional.py,sha256=dkGKGU-22uR2ZKeOOwaSxEJCGaafgUjb2romWcu03QE,5163 +cryptography/hazmat/bindings/openssl/binding.py,sha256=e1gnFAZBPrkJ3CsiZV-ug6kaPdNTAEROaUFiFrUh71M,4042 +cryptography/hazmat/decrepit/__init__.py,sha256=wHCbWfaefa-fk6THSw9th9fJUsStJo7245wfFBqmduA,216 +cryptography/hazmat/decrepit/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/decrepit/ciphers/__init__.py,sha256=wHCbWfaefa-fk6THSw9th9fJUsStJo7245wfFBqmduA,216 +cryptography/hazmat/decrepit/ciphers/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/decrepit/ciphers/__pycache__/algorithms.cpython-311.pyc,, +cryptography/hazmat/decrepit/ciphers/algorithms.py,sha256=HWA4PKDS2w4D2dQoRerpLRU7Kntt5vJeJC7j--AlZVU,2520 +cryptography/hazmat/primitives/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/primitives/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/_serialization.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/cmac.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/constant_time.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/hashes.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/hmac.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/keywrap.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/padding.cpython-311.pyc,, +cryptography/hazmat/primitives/__pycache__/poly1305.cpython-311.pyc,, +cryptography/hazmat/primitives/_asymmetric.py,sha256=RhgcouUB6HTiFDBrR1LxqkMjpUxIiNvQ1r_zJjRG6qQ,532 +cryptography/hazmat/primitives/_cipheralgorithm.py,sha256=gKa0WrLz6K4fqhnGbfBYKDSxgLxsPU0uj_EK2UT47W4,1495 +cryptography/hazmat/primitives/_serialization.py,sha256=qrozc8fw2WZSbjk3DAlSl3ResxpauwJ74ZgGoUL-mj0,5142 +cryptography/hazmat/primitives/asymmetric/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-311.pyc,, +cryptography/hazmat/primitives/asymmetric/dh.py,sha256=OOCjMClH1Bf14Sy7jAdwzEeCxFPb8XUe2qePbExvXwc,3420 +cryptography/hazmat/primitives/asymmetric/dsa.py,sha256=xBwdf0pZOgvqjUKcO7Q0L3NxwalYj0SJDUqThemhSmI,3945 +cryptography/hazmat/primitives/asymmetric/ec.py,sha256=lwZmtAwi3PM8lsY1MsNaby_bVi--49OCxwE_1yqKC-A,10428 +cryptography/hazmat/primitives/asymmetric/ed25519.py,sha256=kl63fg7myuMjNTmMoVFeH6iVr0x5FkjNmggxIRTloJk,3423 +cryptography/hazmat/primitives/asymmetric/ed448.py,sha256=2UzEDzzfkPn83UFVFlMZfIMbAixxY09WmQyrwinWTn8,3456 +cryptography/hazmat/primitives/asymmetric/padding.py,sha256=eZcvUqVLbe3u48SunLdeniaPlV4-k6pwBl67OW4jSy8,2885 +cryptography/hazmat/primitives/asymmetric/rsa.py,sha256=dvj4i2js78qpgotEKn3SU5Eh2unDSMiZpTVo2kx_NWU,7668 +cryptography/hazmat/primitives/asymmetric/types.py,sha256=LnsOJym-wmPUJ7Knu_7bCNU3kIiELCd6krOaW_JU08I,2996 +cryptography/hazmat/primitives/asymmetric/utils.py,sha256=DPTs6T4F-UhwzFQTh-1fSEpQzazH2jf2xpIro3ItF4o,790 +cryptography/hazmat/primitives/asymmetric/x25519.py,sha256=VGYuRdIYuVBtizpFdNWd2bTrT10JRa1admQdBr08xz8,3341 +cryptography/hazmat/primitives/asymmetric/x448.py,sha256=GKKJBqYLr03VewMF18bXIM941aaWcZIQ4rC02GLLEmw,3374 +cryptography/hazmat/primitives/ciphers/__init__.py,sha256=eyEXmjk6_CZXaOPYDr7vAYGXr29QvzgWL2-4CSolLFs,680 +cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-311.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-311.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-311.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-311.pyc,, +cryptography/hazmat/primitives/ciphers/aead.py,sha256=Fzlyx7w8KYQakzDp1zWgJnIr62zgZrgVh1u2h4exB54,634 +cryptography/hazmat/primitives/ciphers/algorithms.py,sha256=cPzrUizm_RfUi7DDqf3WNezkFy2IxfllsJv6s16bWS8,4493 +cryptography/hazmat/primitives/ciphers/base.py,sha256=tg-XNaKUyETBi7ounGDEL1_ICn-s4FF9LR7moV58blI,4211 +cryptography/hazmat/primitives/ciphers/modes.py,sha256=BFpxEGSaxoeZjrQ4sqpyPDvKClrqfDKIBv7kYtFURhE,8192 +cryptography/hazmat/primitives/cmac.py,sha256=sz_s6H_cYnOvx-VNWdIKhRhe3Ymp8z8J0D3CBqOX3gg,338 +cryptography/hazmat/primitives/constant_time.py,sha256=xdunWT0nf8OvKdcqUhhlFKayGp4_PgVJRU2W1wLSr_A,422 +cryptography/hazmat/primitives/hashes.py,sha256=EvDIJBhj83Z7f-oHbsA0TzZLFSDV_Yv8hQRdM4o8FD0,5091 +cryptography/hazmat/primitives/hmac.py,sha256=RpB3z9z5skirCQrm7zQbtnp9pLMnAjrlTUvKqF5aDDc,423 +cryptography/hazmat/primitives/kdf/__init__.py,sha256=4XibZnrYq4hh5xBjWiIXzaYW6FKx8hPbVaa_cB9zS64,750 +cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-311.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-311.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-311.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-311.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-311.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-311.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-311.pyc,, +cryptography/hazmat/primitives/kdf/argon2.py,sha256=UFDNXG0v-rw3DqAQTB1UQAsQC2M5Ejg0k_6OCyhLKus,460 +cryptography/hazmat/primitives/kdf/concatkdf.py,sha256=bcn4NGXse-EsFl7nlU83e5ilop7TSHcX-CJJS107W80,3686 +cryptography/hazmat/primitives/kdf/hkdf.py,sha256=uhN5L87w4JvtAqQcPh_Ji2TPSc18IDThpaYJiHOWy3A,3015 +cryptography/hazmat/primitives/kdf/kbkdf.py,sha256=eSuLK1sATkamgCAit794jLr7sDNlu5X0USdcWhwJdmk,9146 +cryptography/hazmat/primitives/kdf/pbkdf2.py,sha256=Xj3YIeX30h2BUaoJAtOo1RMXV_em0-eCG0PU_0FHJzM,1950 +cryptography/hazmat/primitives/kdf/scrypt.py,sha256=XyWUdUUmhuI9V6TqAPOvujCSMGv1XQdg0a21IWCmO-U,590 +cryptography/hazmat/primitives/kdf/x963kdf.py,sha256=wCpWmwQjZ2vAu2rlk3R_PX0nINl8WGXYBmlyMOC5iPw,1992 +cryptography/hazmat/primitives/keywrap.py,sha256=XV4Pj2fqSeD-RqZVvY2cA3j5_7RwJSFygYuLfk2ujCo,5650 +cryptography/hazmat/primitives/padding.py,sha256=Qu1VVsCiqfQMPPqU0qU6ig9Y802jZlXVOUDLIxN5KeQ,4932 +cryptography/hazmat/primitives/poly1305.py,sha256=P5EPQV-RB_FJPahpg01u0Ts4S_PnAmsroxIGXbGeRRo,355 +cryptography/hazmat/primitives/serialization/__init__.py,sha256=jyNx_7NcOEbVRBY4nP9ks0IVXBafbcYnTK27vafPLW8,1653 +cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-311.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-311.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-311.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-311.pyc,, +cryptography/hazmat/primitives/serialization/base.py,sha256=ikq5MJIwp_oUnjiaBco_PmQwOTYuGi-XkYUYHKy8Vo0,615 +cryptography/hazmat/primitives/serialization/pkcs12.py,sha256=7vVXbiP7qhhvKAHJT_M8-LBZdbpOwrpWRHWxNrNqzXE,4492 +cryptography/hazmat/primitives/serialization/pkcs7.py,sha256=n25jEw__vkZWSlumwgYnqJ0lzyPh5xljMsJDyp2QomM,12346 +cryptography/hazmat/primitives/serialization/ssh.py,sha256=VKscMrVdYK5B9PQISjjdRMglRvqa_L3sDNm5vdjVHJY,51915 +cryptography/hazmat/primitives/twofactor/__init__.py,sha256=tmMZGB-g4IU1r7lIFqASU019zr0uPp_wEBYcwdDCKCA,258 +cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-311.pyc,, +cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-311.pyc,, +cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-311.pyc,, +cryptography/hazmat/primitives/twofactor/hotp.py,sha256=rv507uNznUs22XlaqGBbZKkkGjmiTUAcwghTYMem6uM,3219 +cryptography/hazmat/primitives/twofactor/totp.py,sha256=BQ0oPTp2JW1SMZqdgv95NBG3u_ODiDtzVJENHWYhvXY,1613 +cryptography/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +cryptography/utils.py,sha256=Rp7ppg4XIBVVzNQ6XngGndwkICJoYp6FoFOOgTWLJ7g,3925 +cryptography/x509/__init__.py,sha256=Q8P-MnUGrgFxRt5423bE-gzSvgZLAdddWuPheHnuA_c,8132 +cryptography/x509/__pycache__/__init__.cpython-311.pyc,, +cryptography/x509/__pycache__/base.cpython-311.pyc,, +cryptography/x509/__pycache__/certificate_transparency.cpython-311.pyc,, +cryptography/x509/__pycache__/extensions.cpython-311.pyc,, +cryptography/x509/__pycache__/general_name.cpython-311.pyc,, +cryptography/x509/__pycache__/name.cpython-311.pyc,, +cryptography/x509/__pycache__/ocsp.cpython-311.pyc,, +cryptography/x509/__pycache__/oid.cpython-311.pyc,, +cryptography/x509/__pycache__/verification.cpython-311.pyc,, +cryptography/x509/base.py,sha256=-F5KWjxbyjSqluUSr7LRC_sqN_s-qHP5K0rW-41PI4E,26909 +cryptography/x509/certificate_transparency.py,sha256=JqoOIDhlwInrYMFW6IFn77WJ0viF-PB_rlZV3vs9MYc,797 +cryptography/x509/extensions.py,sha256=iX-3WFm4yFjstFIs1F30f3tixIp6i0WgGdc6GwJ-QiQ,76158 +cryptography/x509/general_name.py,sha256=sP_rV11Qlpsk4x3XXGJY_Mv0Q_s9dtjeLckHsjpLQoQ,7836 +cryptography/x509/name.py,sha256=MYCxCSTQTpzhjxFPZaANqJ9fGrhESH73vPkoay8HSWM,14830 +cryptography/x509/ocsp.py,sha256=vbrg3p1hBJQEEFIZ35GHcjbGwTrsxPhlot-OVpyP-C8,11390 +cryptography/x509/oid.py,sha256=X8EbhkRTLrGuv9vHZSGqPd9zpvRVsonU_joWAL5LLY8,885 +cryptography/x509/verification.py,sha256=alfx3VaTSb2bMz7_7s788oL90vzgHwBjVINssdz0Gv0,796 +rust/Cargo.toml,sha256=gaBJTn9TwBCG7U3JgETYbTmK8DNUxl4gKKS65nDWuwM,1320 +rust/cryptography-cffi/Cargo.toml,sha256=CjVBJTYW1TwzXgLgY8TZ92NP_9XSmHzSfRIzVaZh9Bk,386 +rust/cryptography-keepalive/Cargo.toml,sha256=_ABt1o-uFnxDqhb7YzNynb6YEQ2eW2QpnPD1RXBUsrI,210 +rust/cryptography-key-parsing/Cargo.toml,sha256=yLWh172kspq6BJVZA2PjFw17Rt0xTYKn_TTzp3IVhxg,455 +rust/cryptography-openssl/Cargo.toml,sha256=mI0cIDv-kQTl24C-bLvDCqiWn6QobBdqCMYSi_UWPE0,545 +rust/cryptography-x509-verification/Cargo.toml,sha256=vECbxPiNu-dQhW4baTuSPzgqaBnBgwZYnJCSaJQbIUA,426 +rust/cryptography-x509/Cargo.toml,sha256=wAuwnc1eKnSUNFjf4GpQM__FTig-hqF2ZPXJPmqb6cA,248 diff --git a/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/WHEEL b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/WHEEL new file mode 100644 index 0000000..cec5cd7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: maturin (1.7.5) +Root-Is-Purelib: false +Tag: cp39-abi3-manylinux_2_34_x86_64 + diff --git a/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE new file mode 100644 index 0000000..b11f379 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE @@ -0,0 +1,3 @@ +This software is made available under the terms of *either* of the licenses +found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made +under the terms of *both* these licenses. diff --git a/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE.APACHE b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE.APACHE new file mode 100644 index 0000000..62589ed --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE.APACHE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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 + + https://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.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE.BSD b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE.BSD new file mode 100644 index 0000000..ec1a29d --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography-44.0.2.dist-info/licenses/LICENSE.BSD @@ -0,0 +1,27 @@ +Copyright (c) Individual contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. 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. + + 3. Neither the name of PyCA Cryptography nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +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 OWNER 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. diff --git a/venv/lib/python3.11/site-packages/cryptography/__about__.py b/venv/lib/python3.11/site-packages/cryptography/__about__.py new file mode 100644 index 0000000..96075f1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/__about__.py @@ -0,0 +1,17 @@ +# 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 annotations + +__all__ = [ + "__author__", + "__copyright__", + "__version__", +] + +__version__ = "44.0.2" + + +__author__ = "The Python Cryptographic Authority and individual contributors" +__copyright__ = f"Copyright 2013-2024 {__author__}" diff --git a/venv/lib/python3.11/site-packages/cryptography/__init__.py b/venv/lib/python3.11/site-packages/cryptography/__init__.py new file mode 100644 index 0000000..f37370e --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/__init__.py @@ -0,0 +1,26 @@ +# 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 annotations + +import sys +import warnings + +from cryptography import utils +from cryptography.__about__ import __author__, __copyright__, __version__ + +__all__ = [ + "__author__", + "__copyright__", + "__version__", +] + +if sys.version_info[:2] == (3, 7): + warnings.warn( + "Python 3.7 is no longer supported by the Python core team " + "and support for it is deprecated in cryptography. A future " + "release of cryptography will remove support for Python 3.7.", + utils.CryptographyDeprecationWarning, + stacklevel=2, + ) diff --git a/venv/lib/python3.11/site-packages/cryptography/__pycache__/__about__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/__pycache__/__about__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c7d2da931c81aae6e77eec87adf46a332aff0a8 GIT binary patch literal 488 zcmYjOzf0sm6n>Lrv$E@|g>Y@Ss}|0k{Z)z}b{2A=g`^p>nK2p7X2N6=$X46?2Uv(8 zHgf-i{tuSNwpMmI?5ys^W4U|t_;?@l-hAKi9(%nGU|c`_j-Cm?YeUvy{VmA*cPwsz z11Aa0iBAYbz^w=3Tio_-?)VOG3Fj8>EWgFwQ|Pzfn$bR4b%QijCNNT^dEZ`j7z+v$ zE6v!d$5^PcO3NrVNV|-cLg(1X*utGo2gAX5ac~w3??;6bsduES%&15QSu8{E@bejI zDlbU6CsQs<$%`QILX{dVXN6HZU+f;O6}<6qG}#*u$5Zd5?>0s*3R7son6}aCs*TQ) z1euFWI}NlDe!@E}*WG}G!*geIqIUb0ybUKJTFMOxBC&S>^&but)@XfBP| z%kVykL{7th<|~R)GgaWH2U+#8u|HS5NW_8OL?K)OF j8kX&P6SluByR{2jCuG_AwKKV2yzERcm%ZlbX2E{|=1!11 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3ce8dac23d222ddc81531b07d1938ff6e020cab GIT binary patch literal 962 zcmZ`%yKmD#7(c(_JVB_aJcjC8rbrO0sssx{q96nV2*gmy%gKo^j?=TxI@_ttlmRA| zZZIPRLNM?Lu<;K>s6*tb5>qx;W$MItNew9y_xRm?_dS1~{jt@mBN(s09eF1zLO-QY z4r6gqj^D%O4RVpIFcc`ZqR6|-R9l^&nyta9F+DJBW3JO#B`|F>sM^(_X4e$tAy0bswwBikanfYK1tEEhkRFdR;d_Gw#0DWFDq?UUWF{+V zt23EoW&*tU`ZNQ#5N~yEVL!$p$Bc&_6*x|#h>L`}xSQc*K=G+zj|++u>IB#c-O>v8 zxxjuRBe*mYwC6}iKg2zeMG5zW6AiKszKi>5l7hdWj5;yJynn_5@A-^@GTLO=B4yt!P1(51!d@>2&|*X1d+O2|J$ zR3ymWV8`D93QbXzqK=en6ST3s4pDtPpHp;xJfDYXZE|)^(WA-#SE1_-wLm3|&7z5P z^FUkK-`;<=zkQ%xdVBMSwm#9;r}~BQ!RjoZxiVCWoJE&ftu3Rh{6{B*50Deg* O{s9f?8{jQgfyZx&%^Okx literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/__pycache__/exceptions.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/__pycache__/exceptions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0c447271e7e9418e6bf217a9fa82af551f8e5c9 GIT binary patch literal 2965 zcmcgu&2Jk;6rb_>WBnB;P1~e}v`!;FEU2xjClFtygc4F2L|Ta$q1DDaaW<@Xmzi}` zS2^TRi6DCD1+_;`K~b(8`6E&ksnJSEkvMU4IL54&2!x?u-#xAcb>(qDcknr*+$QJl!)L zTa=-nV)v@dm0jp19GBTbSk;aPBR_bLxQD;KvHRdbA<9?hoT{!kpPWwVOM1DPAc5H@( z*Wk7v#a^|08lW88@Y42|(D;!)CLTmWcx^#rC+v`)`k1betkW%!?{qmz)+6ggi-aQ# zvOuo~e_+sgqA8o~qM( z>h!KUy+1Lv8GV@9gu4wR3C{r(;(=Y5AJRCU##RO)3$PtSm)LrpflE@FR(Fhsh3$-{ zecRBjfRS7DvmLionPq9(Hsxnw0fD~%fS;i3aE z+&OXD9s#;9f+@sn#2>w3!QmRsk4;;*%=^qJZ!3Hf7rKCO5n!7HE6a^vLMg%oylwPb zxa$qFA5}L#3dZ7yQ|w}-vx~c~p+n-7`DK{T^9a%?sd@&x2rpq{x=W(y6uNR{$6I7x z&){Q~y@Jal$er|*q39IKQgiki_|>?h*N!*pHPnNER`eN#qEqM@?dVxBYqkz0gdMM~ zfJzXg+MZP?8qlVI0500j0}d2ERhGTPgG^u9OZwS4+hZI;XqIz_`$}EZI3|*>GS0QC zW3Z#kmMOfictdzvr_>fdgOa=@vN!1bK&R4aCKN7n3mB=UMak z_`3${afIvG=*1t33gcK+mm3(pn#M5({J7V2O}pk_>Hj7aSM>XJ-77AcwgIFlY8X@; zkHyc)`09N${Op~@&u6uppUmEzpDW+u_(#gm^amjn_0C7wPtJya2!i@7YuyaYkcB{I zsZ1W}W@*L?CF)3hC-^G7$KQr&=q&LIU`wHtwo-)7?2;?}&jHD9$oqiY-W_}nl;oZ= z(IS-2)BWhDyMxa``r=-CW>Jm5C8xG literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/__pycache__/fernet.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/__pycache__/fernet.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6835bb221649ef5120ead355ba3fcfc3f202ef08 GIT binary patch literal 12293 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 Lf3`^>-)a8=|L*Gl literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/exceptions.py b/venv/lib/python3.11/site-packages/cryptography/exceptions.py new file mode 100644 index 0000000..fe125ea --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/exceptions.py @@ -0,0 +1,52 @@ +# 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 annotations + +import typing + +from cryptography.hazmat.bindings._rust import exceptions as rust_exceptions + +if typing.TYPE_CHECKING: + from cryptography.hazmat.bindings._rust import openssl as rust_openssl + +_Reasons = rust_exceptions._Reasons + + +class UnsupportedAlgorithm(Exception): + def __init__(self, message: str, reason: _Reasons | None = None) -> None: + super().__init__(message) + self._reason = reason + + +class AlreadyFinalized(Exception): + pass + + +class AlreadyUpdated(Exception): + pass + + +class NotYetFinalized(Exception): + pass + + +class InvalidTag(Exception): + pass + + +class InvalidSignature(Exception): + pass + + +class InternalError(Exception): + def __init__( + self, msg: str, err_code: list[rust_openssl.OpenSSLError] + ) -> None: + super().__init__(msg) + self.err_code = err_code + + +class InvalidKey(Exception): + pass diff --git a/venv/lib/python3.11/site-packages/cryptography/fernet.py b/venv/lib/python3.11/site-packages/cryptography/fernet.py new file mode 100644 index 0000000..868ecb2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/fernet.py @@ -0,0 +1,223 @@ +# 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 annotations + +import base64 +import binascii +import os +import time +import typing + +from cryptography import utils +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.primitives import hashes, padding +from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes +from cryptography.hazmat.primitives.hmac import HMAC + + +class InvalidToken(Exception): + pass + + +_MAX_CLOCK_SKEW = 60 + + +class Fernet: + def __init__( + self, + key: bytes | str, + backend: typing.Any = None, + ) -> None: + try: + key = base64.urlsafe_b64decode(key) + except binascii.Error as exc: + raise ValueError( + "Fernet key must be 32 url-safe base64-encoded bytes." + ) from exc + if len(key) != 32: + raise ValueError( + "Fernet key must be 32 url-safe base64-encoded bytes." + ) + + self._signing_key = key[:16] + self._encryption_key = key[16:] + + @classmethod + def generate_key(cls) -> bytes: + return base64.urlsafe_b64encode(os.urandom(32)) + + def encrypt(self, data: bytes) -> bytes: + return self.encrypt_at_time(data, int(time.time())) + + def encrypt_at_time(self, data: bytes, current_time: int) -> bytes: + iv = os.urandom(16) + return self._encrypt_from_parts(data, current_time, iv) + + def _encrypt_from_parts( + self, data: bytes, current_time: int, iv: bytes + ) -> bytes: + utils._check_bytes("data", data) + + padder = padding.PKCS7(algorithms.AES.block_size).padder() + padded_data = padder.update(data) + padder.finalize() + encryptor = Cipher( + algorithms.AES(self._encryption_key), + modes.CBC(iv), + ).encryptor() + ciphertext = encryptor.update(padded_data) + encryptor.finalize() + + basic_parts = ( + b"\x80" + + current_time.to_bytes(length=8, byteorder="big") + + iv + + ciphertext + ) + + h = HMAC(self._signing_key, hashes.SHA256()) + h.update(basic_parts) + hmac = h.finalize() + return base64.urlsafe_b64encode(basic_parts + hmac) + + def decrypt(self, token: bytes | str, ttl: int | None = None) -> bytes: + timestamp, data = Fernet._get_unverified_token_data(token) + if ttl is None: + time_info = None + else: + time_info = (ttl, int(time.time())) + return self._decrypt_data(data, timestamp, time_info) + + def decrypt_at_time( + self, token: bytes | str, ttl: int, current_time: int + ) -> bytes: + if ttl is None: + raise ValueError( + "decrypt_at_time() can only be used with a non-None ttl" + ) + timestamp, data = Fernet._get_unverified_token_data(token) + return self._decrypt_data(data, timestamp, (ttl, current_time)) + + def extract_timestamp(self, token: bytes | str) -> int: + timestamp, data = Fernet._get_unverified_token_data(token) + # Verify the token was not tampered with. + self._verify_signature(data) + return timestamp + + @staticmethod + def _get_unverified_token_data(token: bytes | str) -> tuple[int, bytes]: + if not isinstance(token, (str, bytes)): + raise TypeError("token must be bytes or str") + + try: + data = base64.urlsafe_b64decode(token) + except (TypeError, binascii.Error): + raise InvalidToken + + if not data or data[0] != 0x80: + raise InvalidToken + + if len(data) < 9: + raise InvalidToken + + timestamp = int.from_bytes(data[1:9], byteorder="big") + return timestamp, data + + def _verify_signature(self, data: bytes) -> None: + h = HMAC(self._signing_key, hashes.SHA256()) + h.update(data[:-32]) + try: + h.verify(data[-32:]) + except InvalidSignature: + raise InvalidToken + + def _decrypt_data( + self, + data: bytes, + timestamp: int, + time_info: tuple[int, int] | None, + ) -> bytes: + if time_info is not None: + ttl, current_time = time_info + if timestamp + ttl < current_time: + raise InvalidToken + + if current_time + _MAX_CLOCK_SKEW < timestamp: + raise InvalidToken + + self._verify_signature(data) + + iv = data[9:25] + ciphertext = data[25:-32] + decryptor = Cipher( + algorithms.AES(self._encryption_key), modes.CBC(iv) + ).decryptor() + plaintext_padded = decryptor.update(ciphertext) + try: + plaintext_padded += decryptor.finalize() + except ValueError: + raise InvalidToken + unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder() + + unpadded = unpadder.update(plaintext_padded) + try: + unpadded += unpadder.finalize() + except ValueError: + raise InvalidToken + return unpadded + + +class MultiFernet: + def __init__(self, fernets: typing.Iterable[Fernet]): + fernets = list(fernets) + if not fernets: + raise ValueError( + "MultiFernet requires at least one Fernet instance" + ) + self._fernets = fernets + + def encrypt(self, msg: bytes) -> bytes: + return self.encrypt_at_time(msg, int(time.time())) + + def encrypt_at_time(self, msg: bytes, current_time: int) -> bytes: + return self._fernets[0].encrypt_at_time(msg, current_time) + + def rotate(self, msg: bytes | str) -> bytes: + timestamp, data = Fernet._get_unverified_token_data(msg) + for f in self._fernets: + try: + p = f._decrypt_data(data, timestamp, None) + break + except InvalidToken: + pass + else: + raise InvalidToken + + iv = os.urandom(16) + return self._fernets[0]._encrypt_from_parts(p, timestamp, iv) + + def decrypt(self, msg: bytes | str, ttl: int | None = None) -> bytes: + for f in self._fernets: + try: + return f.decrypt(msg, ttl) + except InvalidToken: + pass + raise InvalidToken + + def decrypt_at_time( + self, msg: bytes | str, ttl: int, current_time: int + ) -> bytes: + for f in self._fernets: + try: + return f.decrypt_at_time(msg, ttl, current_time) + except InvalidToken: + pass + raise InvalidToken + + def extract_timestamp(self, msg: bytes | str) -> int: + for f in self._fernets: + try: + return f.extract_timestamp(msg) + except InvalidToken: + pass + raise InvalidToken diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/__init__.py new file mode 100644 index 0000000..b9f1187 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/__init__.py @@ -0,0 +1,13 @@ +# 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 annotations + +""" +Hazardous Materials + +This is a "Hazardous Materials" module. You should ONLY use it if you're +100% absolutely sure that you know what you're doing because this module +is full of land mines, dragons, and dinosaurs with laser guns. +""" diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..694bcdbc92cea6ed7822eccfc1b5e073a2b1a922 GIT binary patch literal 269 zcmYk1Jx;?w5QS&#D2j~Ia0F7hAft#DaReGV3RWBMVsG&NXm@SNT!8~{1jHTaX{pmv z(HW&n#aal7r_s|J%_lw0%W_#j($m{_{f+>i)AFb6H{jtkg=Y{Tumz2`h#;~XDD$rg zC~<$njj@qOWlgv)vwgwXeHS|~8S{BUUg0p2$2)4Qmb4S(yxqwv2C}+mTV6eMj(TZ& zYSot95F2YQ)|(9l73H~0cV5dtl^u-LlKFY!egKkvO7H*x literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/__pycache__/_oid.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/__pycache__/_oid.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3557c2eafb594176623b186fffd4058d60afc1b4 GIT binary patch literal 18987 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 X3|%;QY|wdB__(SNr$+pz>G%Hvl2xw& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/_oid.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/_oid.py new file mode 100644 index 0000000..8bd240d --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/_oid.py @@ -0,0 +1,315 @@ +# 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 annotations + +from cryptography.hazmat.bindings._rust import ( + ObjectIdentifier as ObjectIdentifier, +) +from cryptography.hazmat.primitives import hashes + + +class ExtensionOID: + SUBJECT_DIRECTORY_ATTRIBUTES = ObjectIdentifier("2.5.29.9") + SUBJECT_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.14") + KEY_USAGE = ObjectIdentifier("2.5.29.15") + SUBJECT_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.17") + ISSUER_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.18") + BASIC_CONSTRAINTS = ObjectIdentifier("2.5.29.19") + NAME_CONSTRAINTS = ObjectIdentifier("2.5.29.30") + CRL_DISTRIBUTION_POINTS = ObjectIdentifier("2.5.29.31") + CERTIFICATE_POLICIES = ObjectIdentifier("2.5.29.32") + POLICY_MAPPINGS = ObjectIdentifier("2.5.29.33") + AUTHORITY_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.35") + POLICY_CONSTRAINTS = ObjectIdentifier("2.5.29.36") + EXTENDED_KEY_USAGE = ObjectIdentifier("2.5.29.37") + FRESHEST_CRL = ObjectIdentifier("2.5.29.46") + INHIBIT_ANY_POLICY = ObjectIdentifier("2.5.29.54") + ISSUING_DISTRIBUTION_POINT = ObjectIdentifier("2.5.29.28") + AUTHORITY_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.1") + SUBJECT_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.11") + OCSP_NO_CHECK = ObjectIdentifier("1.3.6.1.5.5.7.48.1.5") + TLS_FEATURE = ObjectIdentifier("1.3.6.1.5.5.7.1.24") + CRL_NUMBER = ObjectIdentifier("2.5.29.20") + DELTA_CRL_INDICATOR = ObjectIdentifier("2.5.29.27") + PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS = ObjectIdentifier( + "1.3.6.1.4.1.11129.2.4.2" + ) + PRECERT_POISON = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.3") + SIGNED_CERTIFICATE_TIMESTAMPS = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.5") + MS_CERTIFICATE_TEMPLATE = ObjectIdentifier("1.3.6.1.4.1.311.21.7") + ADMISSIONS = ObjectIdentifier("1.3.36.8.3.3") + + +class OCSPExtensionOID: + NONCE = ObjectIdentifier("1.3.6.1.5.5.7.48.1.2") + ACCEPTABLE_RESPONSES = ObjectIdentifier("1.3.6.1.5.5.7.48.1.4") + + +class CRLEntryExtensionOID: + CERTIFICATE_ISSUER = ObjectIdentifier("2.5.29.29") + CRL_REASON = ObjectIdentifier("2.5.29.21") + INVALIDITY_DATE = ObjectIdentifier("2.5.29.24") + + +class NameOID: + COMMON_NAME = ObjectIdentifier("2.5.4.3") + COUNTRY_NAME = ObjectIdentifier("2.5.4.6") + LOCALITY_NAME = ObjectIdentifier("2.5.4.7") + STATE_OR_PROVINCE_NAME = ObjectIdentifier("2.5.4.8") + STREET_ADDRESS = ObjectIdentifier("2.5.4.9") + ORGANIZATION_IDENTIFIER = ObjectIdentifier("2.5.4.97") + ORGANIZATION_NAME = ObjectIdentifier("2.5.4.10") + ORGANIZATIONAL_UNIT_NAME = ObjectIdentifier("2.5.4.11") + SERIAL_NUMBER = ObjectIdentifier("2.5.4.5") + SURNAME = ObjectIdentifier("2.5.4.4") + GIVEN_NAME = ObjectIdentifier("2.5.4.42") + TITLE = ObjectIdentifier("2.5.4.12") + INITIALS = ObjectIdentifier("2.5.4.43") + GENERATION_QUALIFIER = ObjectIdentifier("2.5.4.44") + X500_UNIQUE_IDENTIFIER = ObjectIdentifier("2.5.4.45") + DN_QUALIFIER = ObjectIdentifier("2.5.4.46") + PSEUDONYM = ObjectIdentifier("2.5.4.65") + USER_ID = ObjectIdentifier("0.9.2342.19200300.100.1.1") + DOMAIN_COMPONENT = ObjectIdentifier("0.9.2342.19200300.100.1.25") + EMAIL_ADDRESS = ObjectIdentifier("1.2.840.113549.1.9.1") + JURISDICTION_COUNTRY_NAME = ObjectIdentifier("1.3.6.1.4.1.311.60.2.1.3") + JURISDICTION_LOCALITY_NAME = ObjectIdentifier("1.3.6.1.4.1.311.60.2.1.1") + JURISDICTION_STATE_OR_PROVINCE_NAME = ObjectIdentifier( + "1.3.6.1.4.1.311.60.2.1.2" + ) + BUSINESS_CATEGORY = ObjectIdentifier("2.5.4.15") + POSTAL_ADDRESS = ObjectIdentifier("2.5.4.16") + POSTAL_CODE = ObjectIdentifier("2.5.4.17") + INN = ObjectIdentifier("1.2.643.3.131.1.1") + OGRN = ObjectIdentifier("1.2.643.100.1") + SNILS = ObjectIdentifier("1.2.643.100.3") + UNSTRUCTURED_NAME = ObjectIdentifier("1.2.840.113549.1.9.2") + + +class SignatureAlgorithmOID: + RSA_WITH_MD5 = ObjectIdentifier("1.2.840.113549.1.1.4") + RSA_WITH_SHA1 = ObjectIdentifier("1.2.840.113549.1.1.5") + # This is an alternate OID for RSA with SHA1 that is occasionally seen + _RSA_WITH_SHA1 = ObjectIdentifier("1.3.14.3.2.29") + RSA_WITH_SHA224 = ObjectIdentifier("1.2.840.113549.1.1.14") + RSA_WITH_SHA256 = ObjectIdentifier("1.2.840.113549.1.1.11") + RSA_WITH_SHA384 = ObjectIdentifier("1.2.840.113549.1.1.12") + RSA_WITH_SHA512 = ObjectIdentifier("1.2.840.113549.1.1.13") + RSA_WITH_SHA3_224 = ObjectIdentifier("2.16.840.1.101.3.4.3.13") + RSA_WITH_SHA3_256 = ObjectIdentifier("2.16.840.1.101.3.4.3.14") + RSA_WITH_SHA3_384 = ObjectIdentifier("2.16.840.1.101.3.4.3.15") + RSA_WITH_SHA3_512 = ObjectIdentifier("2.16.840.1.101.3.4.3.16") + RSASSA_PSS = ObjectIdentifier("1.2.840.113549.1.1.10") + ECDSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10045.4.1") + ECDSA_WITH_SHA224 = ObjectIdentifier("1.2.840.10045.4.3.1") + ECDSA_WITH_SHA256 = ObjectIdentifier("1.2.840.10045.4.3.2") + ECDSA_WITH_SHA384 = ObjectIdentifier("1.2.840.10045.4.3.3") + ECDSA_WITH_SHA512 = ObjectIdentifier("1.2.840.10045.4.3.4") + ECDSA_WITH_SHA3_224 = ObjectIdentifier("2.16.840.1.101.3.4.3.9") + ECDSA_WITH_SHA3_256 = ObjectIdentifier("2.16.840.1.101.3.4.3.10") + ECDSA_WITH_SHA3_384 = ObjectIdentifier("2.16.840.1.101.3.4.3.11") + ECDSA_WITH_SHA3_512 = ObjectIdentifier("2.16.840.1.101.3.4.3.12") + DSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10040.4.3") + DSA_WITH_SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.3.1") + DSA_WITH_SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.3.2") + DSA_WITH_SHA384 = ObjectIdentifier("2.16.840.1.101.3.4.3.3") + DSA_WITH_SHA512 = ObjectIdentifier("2.16.840.1.101.3.4.3.4") + ED25519 = ObjectIdentifier("1.3.101.112") + ED448 = ObjectIdentifier("1.3.101.113") + GOSTR3411_94_WITH_3410_2001 = ObjectIdentifier("1.2.643.2.2.3") + GOSTR3410_2012_WITH_3411_2012_256 = ObjectIdentifier("1.2.643.7.1.1.3.2") + GOSTR3410_2012_WITH_3411_2012_512 = ObjectIdentifier("1.2.643.7.1.1.3.3") + + +_SIG_OIDS_TO_HASH: dict[ObjectIdentifier, hashes.HashAlgorithm | None] = { + SignatureAlgorithmOID.RSA_WITH_MD5: hashes.MD5(), + SignatureAlgorithmOID.RSA_WITH_SHA1: hashes.SHA1(), + SignatureAlgorithmOID._RSA_WITH_SHA1: hashes.SHA1(), + SignatureAlgorithmOID.RSA_WITH_SHA224: hashes.SHA224(), + SignatureAlgorithmOID.RSA_WITH_SHA256: hashes.SHA256(), + SignatureAlgorithmOID.RSA_WITH_SHA384: hashes.SHA384(), + SignatureAlgorithmOID.RSA_WITH_SHA512: hashes.SHA512(), + SignatureAlgorithmOID.RSA_WITH_SHA3_224: hashes.SHA3_224(), + SignatureAlgorithmOID.RSA_WITH_SHA3_256: hashes.SHA3_256(), + SignatureAlgorithmOID.RSA_WITH_SHA3_384: hashes.SHA3_384(), + SignatureAlgorithmOID.RSA_WITH_SHA3_512: hashes.SHA3_512(), + SignatureAlgorithmOID.ECDSA_WITH_SHA1: hashes.SHA1(), + SignatureAlgorithmOID.ECDSA_WITH_SHA224: hashes.SHA224(), + SignatureAlgorithmOID.ECDSA_WITH_SHA256: hashes.SHA256(), + SignatureAlgorithmOID.ECDSA_WITH_SHA384: hashes.SHA384(), + SignatureAlgorithmOID.ECDSA_WITH_SHA512: hashes.SHA512(), + SignatureAlgorithmOID.ECDSA_WITH_SHA3_224: hashes.SHA3_224(), + SignatureAlgorithmOID.ECDSA_WITH_SHA3_256: hashes.SHA3_256(), + SignatureAlgorithmOID.ECDSA_WITH_SHA3_384: hashes.SHA3_384(), + SignatureAlgorithmOID.ECDSA_WITH_SHA3_512: hashes.SHA3_512(), + SignatureAlgorithmOID.DSA_WITH_SHA1: hashes.SHA1(), + SignatureAlgorithmOID.DSA_WITH_SHA224: hashes.SHA224(), + SignatureAlgorithmOID.DSA_WITH_SHA256: hashes.SHA256(), + SignatureAlgorithmOID.ED25519: None, + SignatureAlgorithmOID.ED448: None, + SignatureAlgorithmOID.GOSTR3411_94_WITH_3410_2001: None, + SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_256: None, + SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_512: None, +} + + +class PublicKeyAlgorithmOID: + DSA = ObjectIdentifier("1.2.840.10040.4.1") + EC_PUBLIC_KEY = ObjectIdentifier("1.2.840.10045.2.1") + RSAES_PKCS1_v1_5 = ObjectIdentifier("1.2.840.113549.1.1.1") + RSASSA_PSS = ObjectIdentifier("1.2.840.113549.1.1.10") + X25519 = ObjectIdentifier("1.3.101.110") + X448 = ObjectIdentifier("1.3.101.111") + ED25519 = ObjectIdentifier("1.3.101.112") + ED448 = ObjectIdentifier("1.3.101.113") + + +class ExtendedKeyUsageOID: + SERVER_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.1") + CLIENT_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.2") + CODE_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.3") + EMAIL_PROTECTION = ObjectIdentifier("1.3.6.1.5.5.7.3.4") + TIME_STAMPING = ObjectIdentifier("1.3.6.1.5.5.7.3.8") + OCSP_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.9") + ANY_EXTENDED_KEY_USAGE = ObjectIdentifier("2.5.29.37.0") + SMARTCARD_LOGON = ObjectIdentifier("1.3.6.1.4.1.311.20.2.2") + KERBEROS_PKINIT_KDC = ObjectIdentifier("1.3.6.1.5.2.3.5") + IPSEC_IKE = ObjectIdentifier("1.3.6.1.5.5.7.3.17") + CERTIFICATE_TRANSPARENCY = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.4") + + +class AuthorityInformationAccessOID: + CA_ISSUERS = ObjectIdentifier("1.3.6.1.5.5.7.48.2") + OCSP = ObjectIdentifier("1.3.6.1.5.5.7.48.1") + + +class SubjectInformationAccessOID: + CA_REPOSITORY = ObjectIdentifier("1.3.6.1.5.5.7.48.5") + + +class CertificatePoliciesOID: + CPS_QUALIFIER = ObjectIdentifier("1.3.6.1.5.5.7.2.1") + CPS_USER_NOTICE = ObjectIdentifier("1.3.6.1.5.5.7.2.2") + ANY_POLICY = ObjectIdentifier("2.5.29.32.0") + + +class AttributeOID: + CHALLENGE_PASSWORD = ObjectIdentifier("1.2.840.113549.1.9.7") + UNSTRUCTURED_NAME = ObjectIdentifier("1.2.840.113549.1.9.2") + + +_OID_NAMES = { + NameOID.COMMON_NAME: "commonName", + NameOID.COUNTRY_NAME: "countryName", + NameOID.LOCALITY_NAME: "localityName", + NameOID.STATE_OR_PROVINCE_NAME: "stateOrProvinceName", + NameOID.STREET_ADDRESS: "streetAddress", + NameOID.ORGANIZATION_NAME: "organizationName", + NameOID.ORGANIZATIONAL_UNIT_NAME: "organizationalUnitName", + NameOID.SERIAL_NUMBER: "serialNumber", + NameOID.SURNAME: "surname", + NameOID.GIVEN_NAME: "givenName", + NameOID.TITLE: "title", + NameOID.GENERATION_QUALIFIER: "generationQualifier", + NameOID.X500_UNIQUE_IDENTIFIER: "x500UniqueIdentifier", + NameOID.DN_QUALIFIER: "dnQualifier", + NameOID.PSEUDONYM: "pseudonym", + NameOID.USER_ID: "userID", + NameOID.DOMAIN_COMPONENT: "domainComponent", + NameOID.EMAIL_ADDRESS: "emailAddress", + NameOID.JURISDICTION_COUNTRY_NAME: "jurisdictionCountryName", + NameOID.JURISDICTION_LOCALITY_NAME: "jurisdictionLocalityName", + NameOID.JURISDICTION_STATE_OR_PROVINCE_NAME: ( + "jurisdictionStateOrProvinceName" + ), + NameOID.BUSINESS_CATEGORY: "businessCategory", + NameOID.POSTAL_ADDRESS: "postalAddress", + NameOID.POSTAL_CODE: "postalCode", + NameOID.INN: "INN", + NameOID.OGRN: "OGRN", + NameOID.SNILS: "SNILS", + NameOID.UNSTRUCTURED_NAME: "unstructuredName", + SignatureAlgorithmOID.RSA_WITH_MD5: "md5WithRSAEncryption", + SignatureAlgorithmOID.RSA_WITH_SHA1: "sha1WithRSAEncryption", + SignatureAlgorithmOID.RSA_WITH_SHA224: "sha224WithRSAEncryption", + SignatureAlgorithmOID.RSA_WITH_SHA256: "sha256WithRSAEncryption", + SignatureAlgorithmOID.RSA_WITH_SHA384: "sha384WithRSAEncryption", + SignatureAlgorithmOID.RSA_WITH_SHA512: "sha512WithRSAEncryption", + SignatureAlgorithmOID.RSASSA_PSS: "RSASSA-PSS", + SignatureAlgorithmOID.ECDSA_WITH_SHA1: "ecdsa-with-SHA1", + SignatureAlgorithmOID.ECDSA_WITH_SHA224: "ecdsa-with-SHA224", + SignatureAlgorithmOID.ECDSA_WITH_SHA256: "ecdsa-with-SHA256", + SignatureAlgorithmOID.ECDSA_WITH_SHA384: "ecdsa-with-SHA384", + SignatureAlgorithmOID.ECDSA_WITH_SHA512: "ecdsa-with-SHA512", + SignatureAlgorithmOID.DSA_WITH_SHA1: "dsa-with-sha1", + SignatureAlgorithmOID.DSA_WITH_SHA224: "dsa-with-sha224", + SignatureAlgorithmOID.DSA_WITH_SHA256: "dsa-with-sha256", + SignatureAlgorithmOID.ED25519: "ed25519", + SignatureAlgorithmOID.ED448: "ed448", + SignatureAlgorithmOID.GOSTR3411_94_WITH_3410_2001: ( + "GOST R 34.11-94 with GOST R 34.10-2001" + ), + SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_256: ( + "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" + ), + SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_512: ( + "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" + ), + PublicKeyAlgorithmOID.DSA: "dsaEncryption", + PublicKeyAlgorithmOID.EC_PUBLIC_KEY: "id-ecPublicKey", + PublicKeyAlgorithmOID.RSAES_PKCS1_v1_5: "rsaEncryption", + PublicKeyAlgorithmOID.RSASSA_PSS: "rsassaPss", + PublicKeyAlgorithmOID.X25519: "X25519", + PublicKeyAlgorithmOID.X448: "X448", + ExtendedKeyUsageOID.SERVER_AUTH: "serverAuth", + ExtendedKeyUsageOID.CLIENT_AUTH: "clientAuth", + ExtendedKeyUsageOID.CODE_SIGNING: "codeSigning", + ExtendedKeyUsageOID.EMAIL_PROTECTION: "emailProtection", + ExtendedKeyUsageOID.TIME_STAMPING: "timeStamping", + ExtendedKeyUsageOID.OCSP_SIGNING: "OCSPSigning", + ExtendedKeyUsageOID.SMARTCARD_LOGON: "msSmartcardLogin", + ExtendedKeyUsageOID.KERBEROS_PKINIT_KDC: "pkInitKDC", + ExtensionOID.SUBJECT_DIRECTORY_ATTRIBUTES: "subjectDirectoryAttributes", + ExtensionOID.SUBJECT_KEY_IDENTIFIER: "subjectKeyIdentifier", + ExtensionOID.KEY_USAGE: "keyUsage", + ExtensionOID.SUBJECT_ALTERNATIVE_NAME: "subjectAltName", + ExtensionOID.ISSUER_ALTERNATIVE_NAME: "issuerAltName", + ExtensionOID.BASIC_CONSTRAINTS: "basicConstraints", + ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS: ( + "signedCertificateTimestampList" + ), + ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS: ( + "signedCertificateTimestampList" + ), + ExtensionOID.PRECERT_POISON: "ctPoison", + ExtensionOID.MS_CERTIFICATE_TEMPLATE: "msCertificateTemplate", + ExtensionOID.ADMISSIONS: "Admissions", + CRLEntryExtensionOID.CRL_REASON: "cRLReason", + CRLEntryExtensionOID.INVALIDITY_DATE: "invalidityDate", + CRLEntryExtensionOID.CERTIFICATE_ISSUER: "certificateIssuer", + ExtensionOID.NAME_CONSTRAINTS: "nameConstraints", + ExtensionOID.CRL_DISTRIBUTION_POINTS: "cRLDistributionPoints", + ExtensionOID.CERTIFICATE_POLICIES: "certificatePolicies", + ExtensionOID.POLICY_MAPPINGS: "policyMappings", + ExtensionOID.AUTHORITY_KEY_IDENTIFIER: "authorityKeyIdentifier", + ExtensionOID.POLICY_CONSTRAINTS: "policyConstraints", + ExtensionOID.EXTENDED_KEY_USAGE: "extendedKeyUsage", + ExtensionOID.FRESHEST_CRL: "freshestCRL", + ExtensionOID.INHIBIT_ANY_POLICY: "inhibitAnyPolicy", + ExtensionOID.ISSUING_DISTRIBUTION_POINT: "issuingDistributionPoint", + ExtensionOID.AUTHORITY_INFORMATION_ACCESS: "authorityInfoAccess", + ExtensionOID.SUBJECT_INFORMATION_ACCESS: "subjectInfoAccess", + ExtensionOID.OCSP_NO_CHECK: "OCSPNoCheck", + ExtensionOID.CRL_NUMBER: "cRLNumber", + ExtensionOID.DELTA_CRL_INDICATOR: "deltaCRLIndicator", + ExtensionOID.TLS_FEATURE: "TLSFeature", + AuthorityInformationAccessOID.OCSP: "OCSP", + AuthorityInformationAccessOID.CA_ISSUERS: "caIssuers", + SubjectInformationAccessOID.CA_REPOSITORY: "caRepository", + CertificatePoliciesOID.CPS_QUALIFIER: "id-qt-cps", + CertificatePoliciesOID.CPS_USER_NOTICE: "id-qt-unotice", + OCSPExtensionOID.NONCE: "OCSPNonce", + AttributeOID.CHALLENGE_PASSWORD: "challengePassword", +} diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/__init__.py new file mode 100644 index 0000000..b4400aa --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/__init__.py @@ -0,0 +1,13 @@ +# 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 annotations + +from typing import Any + + +def default_backend() -> Any: + from cryptography.hazmat.backends.openssl.backend import backend + + return backend diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc12a8151fba6fde45280d4d73ef872794d36660 GIT binary patch literal 579 zcmZ`#y-EZz5T5MbA9sqPAlQk5u%H{nRs_Mu<{GVXyx!{nQMGxH_$xVYE_wEO3eBqacEE}5J64ajU8!2`q)lMHe) zAjDxW^KyUSBW}mdyT+gqw@xAGyt}4=RJ}+DX(O9TVKDWNL|L^ow}lqEfh9v%H#eu` z1CZGY0#qV69hGi?z%}4hzpq`%6RFx~(eRRsIPj{Sp)Qq`iH_8$3`fyb9@+4RHlb8p z7?aH}bO-x&8-u}b!p3JpM>6O1BBn~q3qG`l%6!aRf1&7@i!sg8Gpb5El43vH+oLA6 zd{-eKCEU>8;`Cdb&c!KXsYoqjp(?ATn4d>QX6w=Ta@|9Hw{)|P;TB#R$CJPQ+FQBp z&ya+E;OQow^~Qo`)n)9wz!h@FH0}$kmMv8(lA5mvKY?Cw4Nl;*bCAop$oQdN#?<}W goM4#xgpg?$$kqflfBP$}P5%0{<&)JZ{1a-aFSa?Cvj6}9 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__init__.py new file mode 100644 index 0000000..51b0447 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__init__.py @@ -0,0 +1,9 @@ +# 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 annotations + +from cryptography.hazmat.backends.openssl.backend import backend + +__all__ = ["backend"] diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a69d74bdd483ff14e933b387b4490c0ba4cc6d5 GIT binary patch literal 399 zcmY*Vu};G<5Vf0Dg;w480$_=NoGK(Hg!lp$wk{{PF-eMJTecG^OpHi;0H1*P2R@>6 zrbT!ah$is8 z`g~?8?NnlzPOB(oPdRhZj%6dIxwKZajlVT@ACU=x_(9gq)s2Ew-d}8jrzdj$dd$X9>5kuK>0Rpj7}n1%Q~z%ppd)+8kWxDlP=S pF++dfe~;KJpH=~-bTuIKWI>MiV@Ylo|6@5kdO3UUH*O9+^%nu2cJ%-N literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5190e6bab56e344176c7852a71986977c4b5e556 GIT binary patch literal 13367 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 Z(wcj_iEC+p`@jz(cO!S2@E=`>{{l(*e!Tzy literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/backend.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/backend.py new file mode 100644 index 0000000..7899684 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/backend.py @@ -0,0 +1,285 @@ +# 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 annotations + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.bindings.openssl import binding +from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives._asymmetric import AsymmetricPadding +from cryptography.hazmat.primitives.asymmetric import ec +from cryptography.hazmat.primitives.asymmetric import utils as asym_utils +from cryptography.hazmat.primitives.asymmetric.padding import ( + MGF1, + OAEP, + PSS, + PKCS1v15, +) +from cryptography.hazmat.primitives.ciphers import ( + CipherAlgorithm, +) +from cryptography.hazmat.primitives.ciphers.algorithms import ( + AES, +) +from cryptography.hazmat.primitives.ciphers.modes import ( + CBC, + Mode, +) + + +class Backend: + """ + OpenSSL API binding interfaces. + """ + + name = "openssl" + + # TripleDES encryption is disallowed/deprecated throughout 2023 in + # FIPS 140-3. To keep it simple we denylist any use of TripleDES (TDEA). + _fips_ciphers = (AES,) + # Sometimes SHA1 is still permissible. That logic is contained + # within the various *_supported methods. + _fips_hashes = ( + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, + hashes.SHA512_224, + hashes.SHA512_256, + hashes.SHA3_224, + hashes.SHA3_256, + hashes.SHA3_384, + hashes.SHA3_512, + hashes.SHAKE128, + hashes.SHAKE256, + ) + _fips_ecdh_curves = ( + ec.SECP224R1, + ec.SECP256R1, + ec.SECP384R1, + ec.SECP521R1, + ) + _fips_rsa_min_key_size = 2048 + _fips_rsa_min_public_exponent = 65537 + _fips_dsa_min_modulus = 1 << 2048 + _fips_dh_min_key_size = 2048 + _fips_dh_min_modulus = 1 << _fips_dh_min_key_size + + def __init__(self) -> None: + self._binding = binding.Binding() + self._ffi = self._binding.ffi + self._lib = self._binding.lib + self._fips_enabled = rust_openssl.is_fips_enabled() + + def __repr__(self) -> str: + return ( + f"" + ) + + def openssl_assert(self, ok: bool) -> None: + return binding._openssl_assert(ok) + + def _enable_fips(self) -> None: + # This function enables FIPS mode for OpenSSL 3.0.0 on installs that + # have the FIPS provider installed properly. + rust_openssl.enable_fips(rust_openssl._providers) + assert rust_openssl.is_fips_enabled() + self._fips_enabled = rust_openssl.is_fips_enabled() + + def openssl_version_text(self) -> str: + """ + Friendly string name of the loaded OpenSSL library. This is not + necessarily the same version as it was compiled against. + + Example: OpenSSL 3.2.1 30 Jan 2024 + """ + return rust_openssl.openssl_version_text() + + def openssl_version_number(self) -> int: + return rust_openssl.openssl_version() + + def hash_supported(self, algorithm: hashes.HashAlgorithm) -> bool: + if self._fips_enabled and not isinstance(algorithm, self._fips_hashes): + return False + + return rust_openssl.hashes.hash_supported(algorithm) + + def signature_hash_supported( + self, algorithm: hashes.HashAlgorithm + ) -> bool: + # Dedicated check for hashing algorithm use in message digest for + # signatures, e.g. RSA PKCS#1 v1.5 SHA1 (sha1WithRSAEncryption). + if self._fips_enabled and isinstance(algorithm, hashes.SHA1): + return False + return self.hash_supported(algorithm) + + def scrypt_supported(self) -> bool: + if self._fips_enabled: + return False + else: + return hasattr(rust_openssl.kdf.Scrypt, "derive") + + def argon2_supported(self) -> bool: + if self._fips_enabled: + return False + else: + return hasattr(rust_openssl.kdf.Argon2id, "derive") + + def hmac_supported(self, algorithm: hashes.HashAlgorithm) -> bool: + # FIPS mode still allows SHA1 for HMAC + if self._fips_enabled and isinstance(algorithm, hashes.SHA1): + return True + + return self.hash_supported(algorithm) + + def cipher_supported(self, cipher: CipherAlgorithm, mode: Mode) -> bool: + if self._fips_enabled: + # FIPS mode requires AES. TripleDES is disallowed/deprecated in + # FIPS 140-3. + if not isinstance(cipher, self._fips_ciphers): + return False + + return rust_openssl.ciphers.cipher_supported(cipher, mode) + + def pbkdf2_hmac_supported(self, algorithm: hashes.HashAlgorithm) -> bool: + return self.hmac_supported(algorithm) + + def _consume_errors(self) -> list[rust_openssl.OpenSSLError]: + return rust_openssl.capture_error_stack() + + def _oaep_hash_supported(self, algorithm: hashes.HashAlgorithm) -> bool: + if self._fips_enabled and isinstance(algorithm, hashes.SHA1): + return False + + return isinstance( + algorithm, + ( + hashes.SHA1, + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, + ), + ) + + def rsa_padding_supported(self, padding: AsymmetricPadding) -> bool: + if isinstance(padding, PKCS1v15): + return True + elif isinstance(padding, PSS) and isinstance(padding._mgf, MGF1): + # SHA1 is permissible in MGF1 in FIPS even when SHA1 is blocked + # as signature algorithm. + if self._fips_enabled and isinstance( + padding._mgf._algorithm, hashes.SHA1 + ): + return True + else: + return self.hash_supported(padding._mgf._algorithm) + elif isinstance(padding, OAEP) and isinstance(padding._mgf, MGF1): + return self._oaep_hash_supported( + padding._mgf._algorithm + ) and self._oaep_hash_supported(padding._algorithm) + else: + return False + + def rsa_encryption_supported(self, padding: AsymmetricPadding) -> bool: + if self._fips_enabled and isinstance(padding, PKCS1v15): + return False + else: + return self.rsa_padding_supported(padding) + + def dsa_supported(self) -> bool: + return ( + not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + and not self._fips_enabled + ) + + def dsa_hash_supported(self, algorithm: hashes.HashAlgorithm) -> bool: + if not self.dsa_supported(): + return False + return self.signature_hash_supported(algorithm) + + def cmac_algorithm_supported(self, algorithm) -> bool: + return self.cipher_supported( + algorithm, CBC(b"\x00" * algorithm.block_size) + ) + + def elliptic_curve_supported(self, curve: ec.EllipticCurve) -> bool: + if self._fips_enabled and not isinstance( + curve, self._fips_ecdh_curves + ): + return False + + return rust_openssl.ec.curve_supported(curve) + + def elliptic_curve_signature_algorithm_supported( + self, + signature_algorithm: ec.EllipticCurveSignatureAlgorithm, + curve: ec.EllipticCurve, + ) -> bool: + # We only support ECDSA right now. + if not isinstance(signature_algorithm, ec.ECDSA): + return False + + return self.elliptic_curve_supported(curve) and ( + isinstance(signature_algorithm.algorithm, asym_utils.Prehashed) + or self.hash_supported(signature_algorithm.algorithm) + ) + + def elliptic_curve_exchange_algorithm_supported( + self, algorithm: ec.ECDH, curve: ec.EllipticCurve + ) -> bool: + return self.elliptic_curve_supported(curve) and isinstance( + algorithm, ec.ECDH + ) + + def dh_supported(self) -> bool: + return not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + + def dh_x942_serialization_supported(self) -> bool: + return self._lib.Cryptography_HAS_EVP_PKEY_DHX == 1 + + def x25519_supported(self) -> bool: + if self._fips_enabled: + return False + return True + + def x448_supported(self) -> bool: + if self._fips_enabled: + return False + return ( + not rust_openssl.CRYPTOGRAPHY_IS_LIBRESSL + and not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + ) + + def ed25519_supported(self) -> bool: + if self._fips_enabled: + return False + return True + + def ed448_supported(self) -> bool: + if self._fips_enabled: + return False + return ( + not rust_openssl.CRYPTOGRAPHY_IS_LIBRESSL + and not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + ) + + def ecdsa_deterministic_supported(self) -> bool: + return ( + rust_openssl.CRYPTOGRAPHY_OPENSSL_320_OR_GREATER + and not self._fips_enabled + ) + + def poly1305_supported(self) -> bool: + if self._fips_enabled: + return False + return True + + def pkcs7_supported(self) -> bool: + return not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + + +backend = Backend() diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/__init__.py new file mode 100644 index 0000000..b509336 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/__init__.py @@ -0,0 +1,3 @@ +# 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. diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2b525c9df88ed09904e0f38426d720abceae5df GIT binary patch literal 212 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
EBl%`1m%UIkq9D&d+}1=qZ4 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

)Iw>*Mc4b;x% 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%0D-7Ch32jjU=l| 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 }W~D(E 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

6Xh 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

4w-HL3%qS+pFMh?!ZH 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 z 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

UhcPpqGI-w+#cmoJs+pV$I&mX{h-Ms#h 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 z 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

pyAwO}`G1-7b5wSB`#H$yv%ldA&$`7<=>8fzx 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 s& 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%0A-2|6e0n^uC9naCznzx$ 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⪼E?veCW9B?0aAO<3`QK>EzySV3 z!sE2gDOvczsu~`PSt<9z>6^Pmc=JXC(IN9zTrW_M%i{Ln1cuhBwpc%mn|kPNP1{j} zU)TiM1=q}SDZl`>GlJ@-*>qRm6#EA!9Jp0(cM%|;AY_Y&0bF>}tvg3a3qBc(DtIXv zwK{>u;({HeIictgulLdW!4mO#s6&4~&HE_(GiDuwArrfR7n8IOSmnUIbl>6s8r)5{ zG6UB--W!Fjk*)l|%BG_ln)z4q4K5u#=$b={tLq_%TUdn&*P5wEkcul~qS5f6901a7fW{UX?9)sQHqO>YYt{du?MvXJDw6**AqfEk6E2N-#Wf-* ziwOb}0iA&a-oQko9HQuoihzQOFyUBP7?^})97p4^>Z-eo*Dfxu%Zefdg$W=5yn-O& zy2_!8Z-__~MGhtZ@3;EBH*Y2hVSm5h-_J+#rmyO*uBxuCuC8u_F483cG4OC5qTUnu z8K&0vQ|McBFyeJ=5^sZo;2vJ+@dFGFquha?5%#V#&MxvIhpSV3Z9>Vxw3VombhtX% zm*ISKVDiM^K)llvNe=9B_*%n`l3dX_jh-8s(u-AsN+?A`0X_N%YF3hBx=UD7JK3cB z&WtCShf0A$&JP5k3I@plLDpg(ldsMdLmGM$#}z>FFNnjyOC8P?t&nz~yJ9G=&-{X@ zO!Fjhhy$t9k(!KDSa2q*)MTX2Kx!+b!h&<1N@WW^q^2Mh7My`9H3g|9NKHj5EI8d% zYARA^B9&c$1t(LbrXh6}Qd=Vx7Mx=YM7Ux|YoyLbYC2M3!TCz1rXzI@QrjRE7Mu@M zY8#~f7O8EK3JcCkmD(1m_apT*q-H=utJKqwIv1%KNQDLGL6w?;)ZZbs9a3SznW<9S zA$1;7+anbgobf8PJyPc*)hV&3js23a?JNuk>lVC_{!9W@Bs*(1h>TQTt^YCk7eTU!K@;)-^yvxw$Dq&Isi=*mY&=22 z`Q}nyVu3567Q}N8;0cM#_$REoc@fv)jfz5B3x(pRkZ1--Gy~=Zkmx>(L|c~c}RKhMW9c3cZxi`2*2ayVIfwycOVQ8 z;{SIx&FTK!AOYg0{Y#?twkW5ojdvJ>0Q&AgUw$y51lz+H4AJ zN{7F%REciG_R$c2)%2iKauc)$si$v%@Noyea*7P364KpSmW&E~I{Rct*K^hbE<1G)o4jS>*^mM2ErU9^ee0? z7+RZph{f+6L4=t7sCsuYhn1;pOwkkY5_hhUZ#M|Zl=E_4Bo_=iR(qXMvb1OfPV(DN=cuntHZh`_1?FDuC3I~|92 zUucdUnqytG8jghYbVH~W+Zhu^LQ z*4ZY~$q?v;5aJAoA62P_Kre(qZ-79b zt5OYtUI>BS0D(SHr5Xag5CXjc0=-zJ8Uno#0v(qOORrF=hCnZbKyQFR&rzv{Kre(q zZ-78=uTl+xUI>BS0D*plgI+Pj5a@*v=nW9)dsV6-&lhPFN8pEfIwfN zQVoG#2!Rg%D_tz9kmkLIvmMIIeymiSK^%_8$ z=G>w=H}SNVOuaB}wQ88{h) zi8gi~;9M~#-MM0D8wi}C(Cn^uYSnwwwKl-Q(6+J9(_)_)vCnp~&-T`5ntWC7Mk8Ci zZ6a(p8NEn1zFXP8Q*7Ul=u%zJVF*8>q3qfnDpH!F%q(4H2Rn(M(np0ZrC7 z&}4lBP1ZNiWPK}4tGYm!q_a(2*r%&Emo+SA#sbb)1XXP4cQW;1ryptXAVB%W?!)i2 zc9!uOcwTlEx)d&%;D2S96n9F z;nR*b+@hGej%b4&6mMmGArcEp2aiI}#C?&R4#wm$p{wotEZg_lw(oOn-{;!C&$E4J z#*f3B)6tkn0_4I`Y* zVC6FWG3>h|A%HU6I0};}uL#fJGQ!6j$At*YsRcu<;0_lzT$qFuT=b22OveV~=< z18)$gi2qzi=d+Qyc^?JtcVWGHSpbdfFUu!HZN-a7z?NpcJ8%Sx(GJPpqQ5#&{29&| zgg;j8l8tb2C_qx(+Y>A4;#|@jkg)9^fXZll6)Nj5s+zy>PpsyHj6v#0K7A7YBu~Mc z=O81;Nk`wiKCYu>G)Dm39XIc9h>pOwzI3b@?R=eKRVzV5w7WhH3BUXX8tw8TYwkee z+I;+@kH48ocv{0|Um#ApkKK;|xbsq%?HiWlJU#Wh29MB|ss%qmOAw~oR4r6N^fM}eyEf{^&QmWxmTo`mjqMI6%6sdv!`|3* z8k2}d5!4F7WoM-kvp$!8R*FnP=|(y^j?Be_d4XfeKDaqynjYr(Yle`1lp<6XnLU`Z z7=x%!X(ja^H|i?_C~?NlPrH12RGKzvVa^(T*!6d<}4)fa9OX zSvXeqrf`=}x5MA^Rdf9Wz6M+~c1CMu=&2;~fHv1ug+T*(?pocARa5`sJv-vW9uiJ% zcclkC=+be6brSqj>R<@O0{TaSJq`?#{EyaK`ESPMzpwHijpa|mXRQ9;RetYSe(SjW zu+jcHtNp*?Ggkj@l|Ma}KP)c4Nac5o<$qmmuOCHk?dRF~ald(DP5X@)*407jrhi@t zTG&NZM1S@ibxM1d|FBg-#N4hH;wGIpoFe0{=bnc}~9 zz!d+Exftb>nBu8pIG<}~q8;=2;>;V7MB`-^ta)1aZ9iJjOJ7|Jfx=VSZBN7S*oECt zr?L>F=Gb#)BGS zHmcG8)mt@noiqh)0*BQaLX~i&=#$WuoNoJ(lB9=5$-uT}VqkZxflYe?1A7bumh;$2 zD5d0siy|Wu{T0NDWlvRP8si@v&}CuMnCUEk4fV8O8SxiQR#gfB?<@sx0^!Y3@RA7c z0ux@EBi(>kOZJIGUxOsE;OU=@l>X+h{vy;DDHnsUuU7df%zs+7zxelPe?8#JcJ*=zyY{o@JC9%i#zO?fnDF-5M*0Cf^{U^#i%8 z$vb4^eLHRu%Gdj$s2Is3zVl(tDc16fvz!ZSWrlE6TBE;nrK)#8)%z3LCv}}T)2er2 ztlkn7@`mruMn$-b>OrG!8&&tlR~5{4s4KhEPmxZy1ZUY9_#%V(FfL&%=|?Hs(_399 z^V+jL@cN0gG)R98^L85Woxor#!E>fO7Dh8pAR!cz^wrl&J72X!JF8VYi`mY4w4ZS5 zJq_*Dtxcn&}I$?B%t_Aqd0msBxJ7_kQ$uRT3&He~DK3jPAZE=5HbS5frlJM-uZ{$da%53^h*!qy_9+BI|EyEP#<@w@}=8D*)O6^%QBSpE*!q1X|&mQda}@AU+C z@ciHK688q*k#kR?aKPn6p|f;3utO`Ye*_l54uNSvBArS4XalAc*KsR?j>0(wyKfbVSYfEgMbi9+H_;$@g&B8@I2zTpb73GO3q z7%kxcRHXQ~4G6E4u)>3OKMX!-b&c>ZrMJlk%P2B1?56w#^yR9ZXW7mi)y`9FXZ6*M zoSoC&?S`@)Yed*z=WM#A2cI-=QzI{Sz}ZE7DDZb^k`0uJrz_2;6wPH{ zpaMRMf@kL_66!w=G-Nxcsnn-7HOUqKe=kozYF?bYsyL4jI>tGmXlMWL@rtQZ`6?9dEtAGlRGSm=pYPi=$&*7pJHL< z#D2{NiF~hv*yy256w&*nPl|qUh{}ar3teBVg=b}JiVE2xT$T!et!G9mjxT!@wQ7Xr zAhP7#L!yhMM`>`i=&>2R<1)K`t?;e0)PsgpuV4vIkAB1IvGrrha5evFn19L$&i{j) z{}D3(6Om-{V>VbcdK}fcE?uVT^<=$uC}gaQ`dKQyGt>Wp^ypGlKp2GR&4gRY`-@9@ zi&P(1C9ccizPm&4gCVQwSH3AC9VF`;r2K7gB`fJJ^XAU3V)rT(!}Ut8H{$uX#*g3n z6L*7oYXZb&kjd1gZGYf1^)ol$}PmI|6waIw6-mu1pR=fm)LYlwalCyzo( z9*u-Nnvrd`-{l%Z3N4M3LeY1mD*B_}t}cC*Q5}tzA=%ImmA`C^-{>!E*GHE2O3+7c zpZd#xr;q$$;{T04@=rV`g!Qjb*ld&oY(^1H`BzT)H&ocnu8(9>v^B@K7pQhJ*p8u( zq_dq%R6BR0X;Y5w1P7b?h|(8uS%-4RJ*ps_^D*bq^eo~FoYV;6|KHQN*mXCSwg`$q zKcFDeuYkS@^{ar&+Ce>|J1<8ZGk*2ruW)KP{%GNLmP zl}&+1^+9cFGV1XX9v=Oa9nQnJ4J{(u;|;e<{ugq>sY_pz0-{tLM88Jhw?1)*3_Qaa zxCnHP-sZw$*z3^HA9lfhhu19qKswNv8opTUYYTsHn>R78$7js`)#FEZoc(GJaU#)Mvn3sd0C^*O4lJ@zyB(n2s@(W(XN2o+9lD9)nx zv4A;ZKA2Gf^TDHRL75rA*1S5gtdlYV@R*VHpw7Tpeh_}tFgSHV9n{vx8G!Gx3{H1u zvzqUB)FEhWO7~qC(;qBDm}$2@Yq0Rsh7&!K)`;0WJg9#u_~3#e!cX>nZY@~D+@H%7 z)Ge>nKXXg{Qr73FE&qR&K9%Xzvkd=#n;EeBkAga(kqg@>^u^tmc#vp0jX5#vOQ!zx zc?v5J5G&!n?aCD%zD!pw(3%5fuSTD4lzW=xKr4n8V4O>EntW~PNkf~5Z>-))_4nCd z(BHpF(}QvYzytAc_9oYr2bO&>OzmlN0>gedo~i*m5NwC+Nh^#K5PzFSx$a(BJI$FX-R?<4DuLeVhU@ zpRKirgS)ddh*5j;cTFEiC-=$X-Fo3iy`-vPsy5exq@|}|zrcR@61-AB z3~e88D8}|?*Q(3W#2WSj+u*tWZb{>!V_uOhFxLIV{jcz!;ZI+SXQR-u;Z@zFZeJJb z%4qb7?1_p?(i5>kQ+J$oK~hZ;>258_2yuzvKbr!8bQB#jS?@NSoADvjI7D@e!jzxJ zEu5l+TR5W?===O5QsfHGnYeQrxWqJZjlvoY8%o$m?}C3sj6?KsgJj+} z9L2ofDB~D3dp_p<_A49d1DOJeR}Q$Za5p;k@GuZoaGf_; zQ*yRG>z=MO|55+EL+i&RiPc`z0c`?|D{*H>ef0|^;MbA0}y%W7YxP@7FOz8?6 z5$$}aQnxfV-|o@c*8OopmFt@~bni5HjE&dtE>MHhC*XtTJsjMQ#oc2VNS-J027bx* zO~t>kxKN16wS|k8aol@sZ097d~A4D8>i80`DC*9v|Z& z>frWwFrw8A)qoKUeCRZ!_lGqG7jy5=(ud#4S>id${o`pZOx2%4w@5+i*8}*a)_(Fk z^ubT-Z2BG5JKSt5fHMjkFFWkJjFyJrPr&nQ^PqnmPf~it*_M9Q<_yuVMjQIo5Ur%6 zv=3BeT5+26_5FqK-}@1AiRUa>kFxFu-@lu0=o938b&fZiq99VYmi7-lr0PA+dYx3g z-M>Y>$IN=v$c*zpRj=HJaKzhjA>X}{|0;Vw*f42LGF6890^0kTW8_EhSryB#P0aVl z=P#4|Y$P__eq~~QB)Jm#QcQzmnG&Wv|ovQ$g^$wtn);0W*8TkEb7C0Y}}XEN2wye;}yTzxP|%i>~0|K zU8}A^@8p07rU!kkIx&G#L6*K2XFan?(``e3LWb3;gBH}u%Q62uEwsD>d8@9&KWt*I zG%*DAA|)SHjh0k7C3x(4+^akQbv`D$NPm>adh4NF9(Jv|6~$>=zXhFBr%u1T0L3C! z1M!{IeMVd^v7KkwqTc9J&Lu9KrSGCG_-0N;tiFmNQ+eTKD^kFYPs22VOHD))4>(Sj z?XGlj{1_SzRGb{@Wdm^bp_PngD@$C?vgc4AZ;H!bBYa`F&jBQgv|N8Vx3#GQ`_La} zNG|1=^1Y1h8KVtwST^qIv>YnkrTLXj|9`+N_*g@ zv*Y1Sv*7*aRN%1}3f|i5TZG5`!B3Wb7x!Oj-(`$0bAK>EI^!(e#<77p=HdRUbK&pt z3)JB(eG4COrJPE`HW{u7iAD zMgj_~$F++ukA&eE`4l@`HV&y+HvS>~2oE_@_qBet>dZy#4Bgn!nHPNM%ox>~eMmBm zTCLC-ttNstR7`xmqpDl?E$V)z>P}+auBz^*wz@UoiMnkU?D)m=YjdIpliyGoV_ut8rv%1F16L|XX{iR~0NR$ty6RDeuo0BN*uTv7`Ary>B zl#!-HVO$;(mc-{#0a0xd<-W^=VfSBp5{dG6Twzsou|8Lj^WXst)sQDyGk~0Tfr13R ze>O!AsG{j}y3{$>LZ0-*Jel(3R(v;>CmnO8d#igG^5iCzQu0L4is$dj>83oH_s3@B z2@qk)6Bm9+=nH+<$QJpV@?>@byle|z`%{J&0Z{$kQ-hbD0B_lS=J@{f?5U2=Pk0R= zk5iDBPn{8uPnQL+*QvnE1}KHkhffV&_XK#g)6DU$dFB+xC-5Qws-Jgi@K&B4Kfdu6 zysJ+co}cjkaqTJLQ%itXf3G>dFP?5@eD?Lu1yBl~SDhNXon7L`=eOY9bIR}{9N&k< zr!>CF3Ggy4cqjgF3ggSR#&^r9!8_79ete7XG4c7(DZ`WT9lWN+@loIT!nU6h$IWu| zST^>ujhb>FHj~(8>B|mbv`}PYTd6fL?joUUY%6sY1fdbh4NIddNx%ORk)tV5$kD@S z7fV_?#-j&%iX7!`$XwELDRNOAaujt-kz*Y0+4lSHReq$JCRLD;+W$D9I7MqO=l;N+ z50$`{zYO`J-#^(&5Zsi0kMjcKpnAG0bPrAn<%}BRL^R&VA^?x8{Q0$vX{W*&8adQ2 zR8Fs|r%(zz&~xv`%o0cXke#Kkuw$W+8WAqOJd58(SVoCy$#YovM~|55 z#tmm@>F@9p3oYy<)ZQLnmtI?PH_RK(nUk~yzaY;ss~1L7i>{C`Zu5pmWQ)UwSbuAA zelJQ_-2fP0)O_kwdI&xIdmrfGb+iC_I5GwFFymsOhsTj*(nEGHBv~;_KoZ=4)kb-4 z>Iv$&k40y9O`QvKuT(rjPMLyrTVgvLu4hX+$aEK1%@TNhD*#W;%9S!J62G~(iZ63h zYdJ5cH32&)_&;E1AUD#NP?i!@Pr&$YI6c_3ADJ(}>z@EG%Yyg8?=5)&c%+MOl)uGE z;IUMy?Z0IX8}2w>M;DWEi*jiNgnEk*zoNJp)21Gpi?Zu??EL- z{K9bGPIuD^)u7+NAlfJ%bGe?BDq>|uOsqU<(vPC22P}G$w!enW4$lvC*8fz_iY4WG zsv1VGuP_X?3mf$4oft+tH4JV?Oe(8_fQt4J^$hf-zuQd^Fp4z|c{P?bx1mMoeRg@} zXH9uNB}Q*e%!fUGRhE91)0hwV1rqU`55w^IAhGB?yB_Y`!5uHzPL9w6X_g400RR)?K6>!0YtBmnMl%ysCw_Q zo-q%#lTdGjs%M{vBM>R#63_DhBf5+?f3tI81E$#%Jb^=Q91_4O0((^b83c`^Abf#& zp@%F%_!xc{g%)884uOaK0Dc$ZN|*>j-)s?o5zLGdf|I##oq3zKfLlff0!K(|i%day zeo^>p2*Q8K#2##bAiP;&rfz~^uYer$gl9sIaX(8r<_WKnz6AH{6%v)#w}tXV3!n4p zL=3x6j-WBT2k7_!z`#wq3n)t1ryU@D$3*5t_LcSRSp==QXa=5!9mx9@UQ=cFt%DSCC9V%8@OadkVh8;oKy@B z_xTTgL8ctTn`yX^T!|n0>R)kN)o#Ms2#1bTjqhV2`T>fCm$O5|!*ef0705(h=?$Z_ zGzX_g*qg*V&Fd`end1#EXTL@K;I7mrHV|AY^Bpe$&2tXJ-?1?7K=e8xX=DAX%aLu~ zg!83a@1Lc*6-9(_*&pIQE6yLr6odzUEMvjbVff2aOkfDzB$5h(Ck!nmi>}ZZx^K2V z;{%{2-0t6%#7=CCORX`YmIwn5b0`a|Aui|SU??1&F)$*4av*ir5;mrm_t;ezOV*2i z7kZy?Q(q_CaJ!rFr*5IL(|1^g??{|@aIxsy>Eh3^ZoB2r@gzPCe-1eh_hZOn{05a_ zijty-f1L(rYOepW{0K74{2fi?`)&Cvtb9{HWUdJUBTtGxh9Z<7vdX(xN`3?x03rD^ zn#gA%Gk;`!J{NSe{SmeWh!56g~s`HX1Xkey{axiIV?NfZ=+rY znEL4|rH)&k#C z)la-kgFFo4Uc(**X2~;ElV@Tm&;n=zMICI;~Q#+=SQx--Pz>$m`8Xo zxldtyE(On9)tj{t&(VUn;{gkwy%au2CBP$(3F`rx(y@Ct1_}PRX2IK7ZW~_&xw`LU@TA1AT7(zDwNM$~Unea3Pufl?tW{2k|ybWznGCnDBTZ{0LOnAc;yetde6J?3`oNzLD zg7NPMv^2iTBmuwI_`6jZ*ORvF7+D+Tr;Lui#|xq{O=Xrp9OL!<6)< zJ}dgJ}LDtXd%B<6Z!0?S^vxP8^gEfuQ&6@qmt=ji%;c33oBnz zbTNv!SK0C-@%jG5d{T<7{&?iCQo2r;XRn9Kxr{33(+i<;TKBzZf9(E?%v1lWGtoZi zVj9Y>Wm$dA0*fw;_u~daF)_7DdH+m2Gh^?^(SKwFeZy8=gvJCS6y9^uqJAw82O$5? z;Tu)RRBu#?C0e~6N7}^$a`MNtrzO6R(scW4#-RQ0U~B&W)c$YS{v-bv?GxWCkH_OX z39T!9U+uTyn>fo5UvsnDl4UI|D8T=VoM+j>~#9ZSg;Lo_q5cbxQo69(I1A{gMX;@%Bq3822O^^KXPLtNze%R&pAG zDybMsGcVTfMrP1?526&=Ey3C|Z1t{sE9DZafL{0Qu3EZSn!XS0(%oCj7o3 z;dhUO-=?$t=yrbNV^!1ms0{r56nk7?i9U1W}T zksV$H)$|RrpZDW44j%I`QvE-$E+=eW8pHFO@C^IbGz;G8c6bD$k7^no^9ZlxRN!SQ zc-|_*zLjLb`%7#-4SV5s+0V0iH9qoa{QfMtG01{=d@lY@@ae5G>|2#y6QBL;@FHkh zpKvmGQsPkZB^cNHC2PuFYkI&aGX=!}LCOj7^gCAWMynQ~~_#(*F`@% zysbreNhZ9Z3SPa(9N!Z&67dO*C(eEl2QPy9`u9Cr8eiqN20k?f&u_u&W{2lzYo#ZH zCnXlP2rt`&H(bHXwBW6nZX2KAllOV-_K~>pNr{dv!drI07@uL^TCAD)9BPLb;rL#M zMW9)DQsVjUE#cE;!ZYk!xfZ+~_u0nhC%l4_!IKibTZC7O7-GT?hJ7nC%pBiDJ3PVG zSJ<&NJ3c9~?xL2)H{OJ2*td!;c!#Ii#wXbFoeZ9oxUNNb^$4vd<1_4AyN8-l*VJ7Ml3%XNTu!YkVJ|+3`tt&q2J+ zrhW%n)bN-Fx_A!S(%+~%Owz;stS@kno&IgnN6$v%mHN^o>A7zWdam@ALH+{td^tvx z5NBX~>Y)bXUcGf5Z0f@hZ`OWA^z}~d8te0Hb{0JH`^S8B-zr2Zjzpegb zE#%Ko`HbZR4aM@3^}Um2IeLm%;phPHZ34=hP@{kCM5+Qopm|dwAq@x$f=Q z++R5a7`zXdO~Bx}DYm&6{|`0)-DUpYz}0m%|BQsk`9G)8{3rJJrtD_>d&j?3e>ZQ8 z@9(M;(%}Go0$T}Yim_non3=*pU>B;T&Ur1~9^py& zeP+V%=s)AjuS)nGO!$36!tYOCi?>&J;(jx5@tYWrAu{e6Yzi^>zi$9xs8A;7ibtfr z2JZ;cSuhQZsxcydwzF)VAfxXU5D*tHtw)xBJ$B#?n1#J9L)wssSTbYed zvKn6|3|RM^_;syU^)gs5r0Qj|-n;0mbm~s4-fXECod_4UN{pJO3eEbTu%gH?uqaZ!%PZ)N2b#bA% z@dajtL{b-+&GRJl{xVf=w(yp;pzbektGY%~<#O=0J9vM29O}p4e@0&r9|f0~2e(m1 z8W-x&Nb~3*7-`tCX#Yuv;VY@+mED?4x@A@6VKf*TA@106p~dQ8c=F>dLP3afG5Qcx zG4{r|_bGYaGkcHdN!?7lOBNunC1kz*L`nd;F92a%qdx?am#ete`mW(>Dxz3WiZFU8 z9Eg+gdWoZYPiFPL^fuo)SLE`aX|1aFWwrS(_;3WhLlFN|B&AjFNw40QDcLFVZ)>B_ z22}`eW=v~qDuM{6K_TTVqtH%O=o}=SYb$g%;_si==DX_MS#352%m0l+H4Afr zEdD1PVUu5Qa7{tzoe*MBl?=N_fKMEK#I9a3v-w-Ht)91;GPe zdKi0x?-T|1;i19;gip=#1b0RMfeOk`wF+OEEBTLOKd#ej`Ritk*Lu`?Luf%c-X7Mf zcc(Gl9OwxLj{$$%Bu|fB9>*6R$LDUmt@srxJKQy;IlJ+}|L~U4RWoO4E3d+L3jWVK z;LSfW02J-Tn+er=T5w&|ggnv4t_yK2_ecCi%G0c@!Z}Kdz&b|-BPQ25e5rwBu9BVZpiC!knEMOWTq50Bb_t}oJ4P99 zv{M+Asdkn*nHMM*#6~IZaX#P)uVwp;P*UZ>2d6UK6BfqAJC)_kEK-!91y49TFapXj z1V0&;>qU@X{r!1uK}x9N4V|6i4qw+0IF{yI^th0ZF9#89qFRsdw7^k3f;nFj-~0{@ z+LK9)c$mPsXdXText;f>VMOUA;dAeOu@3P{?;xe0`bmXYLF5QIL~~Og!sS zm>D?Msw9hPf6cTqvyr(0nc3*z*@3;e1^IZ#^cxxE)*f5K_ca7gq|NLZ+<|KI9=x2; z_?6NJ)o=@7M?v4D;0J+yM;zY=_TbSk2CJ3X>678^{kqJGtHReVDLmX!kiXR#-~|fI zU8CG&>6> zlKv`Kqho>8Wvkh*KNJK!kl_vebqRVxoA`ZIiR$D0TBSa=MtxI#lo zQKjKVrSCD%QYph(c9#)M+Qc^n|c+ zL&%)2>XnZE>_+(QpYcb}8L<{`K#j)BlE3ed{U;iK9NpnC{V3Zx?dZfmpyeDu zLS2@z&(zOSIbShnt)OAh;=a(EF8CgL(?@HlI-57WYJWr{xW`~#kb%aWq<>Z~Ex*Y6 zHLCu2*8dXiqCT}_vwkJ&oADFbj!ouS_gVCiYHt+VD*uO9k-wVxe3i(Sf11kQ&ip9zFNx2uJ1FCQo%x?J zpAl_s_1{(bk2C*WgBNBZdGshWvF+%syD+{FO&5Kpq_2fP+JILxh;Lnty;SN`xS~vyHGFB zKpXl6c-&F$b&<@3zaB$*ytijDWk*rZ^<(d;g0HbNQgB0G6dV#O$k##06#9ooQK1_t zI+JZ?#TO;%>n|Eb6-o3h8?HF@z#FQc{S*(J08HV<(#|F~golG>kAh)k^QK;l5Dr~9 zY%QtT+QF-JT0iYuncv4>0Y2~J5W<5hdjp@HfaipLM1(97VH@Iu;74if?+!@)QLN9& zHsgUVSLp+pem~RyqU-?AsPr7BKY(<=%O<=R&<}yfM%3oDSm4z?B>T(TRlRSPqTUn~ ziH;;4g8o(dcBU_6`ha-)yhP={&iq9R-m*NvyUc{gOTG%;Zn9h?dKMcn^^rJ#Ke4YJ z7LTatV@FfPUqEhJ@e1w7+)B`@;tl)Um<|??wQBKzvZ?RgPVmlBK{C{yzIcOlI<{n@ zh~gIEcXILipu6FEMyHkMFtXxbA0Xas-L%UuBLtEQ^Is?P-{)_@Z!Z!d_&*o;-S!QT z8UH?kpQ6SlPo)tXZxUWJ`|*!qO>AaAo^9;+pU3kR|Kt7s8?dIf(Ei|4Yu~m%)-J{V zxDb=MrWh>E-R&2K-Tc4b9}hz_Y~fjH!Q3Bn^KD!PUOuMD{W15aJ3kUaoKV$^gca_) ztQYpD?2>-Z^^|6^KOL%e!5O$0V(fxJw?;gF@d<=%Q@h~Jz!kiwB5bTC;6giKmy{rSb{g&-#S6nbIun{6v6@|dV$DA|Y4@5JATbMpE_~aQV7OMOK$_3sO z_ScJ&QNg}nR>{Wvi*xbsFUZ>xsyu?+%PKRGFwuEib+GakkTvvM|BLv$G85gmb#f$> z-v}7ry$b2@8)i25a&XGUe-H=oFKO-nD_h6=^lKwXboNNeIXvu@WL0wyRiBhlxdt3! z|1h3Ct10*653!284BsXC;cs9!2tCFQ;C&bbg?@}92tCH01s`L7!B;TxK^|Um0AZxI z#pIWY*XACL5avfv+LReTinLnr%_eln8+wzN(1M+F4wtj12#Lh~x+id=!PkolUk^`s z48m-9^Vi{dT|!&1ffbwBztsd50}B7s!hvP@#Pg4S{E^KP7FTar3MhRq-1m=v>5-(b zybq>k$|VN4yyTvv5-8IjlAfsc*knzh-e?)&=(EvF>E5LXq|XVgYKJ1MKLYhtT?eR> z<(OmPgZHwS-A6ICf$jk1bs(In zd==%NaF$l1-y5-Ia}+s#@H&31YeV_Sgr>VpM=7(*sy!KriYd9ABQxH7IjCO*nCzu` zoCGF?@N%jMa-~^=r2_A=7JR2a0!&IUIocmo%fAG6C;R832hLJ%-%7E(oCdH6-Wgy6 z+;t|%bJ0_^PzEkU=SSbcp32a}RTKjv;OVJHVL>o4q%amkR17syzTZ`8Jipv`!izmP z-CB=z`VD9xdX1=uE_A8nL2!!fK|oU2k9?@FEMyP@XX!LBRCJiqBh7ZsjW;Uq3b69(_t@xp+?1nuyz|}w zi8MySHqyjRaZWy8jx83_DO-l0McgNLZVf6A55=N+1XhBs^2$C=JV%rF=TEvog%_xggW|{*~l<`)j3<9kd;be}F zqW*wBpq&SEI8IeKTNNvnB$UiX$rNYV7L-&4a<%ZNobght61B|Y{6_Iyk>}{u@bJLi zilp)0G-%Wl&Pc-(=31aSJGc=q(FBg9I|KCRUV_$Nf>jm^^JyDfOQg29@srV8GyQ0k z4=*!ttgx+mK)~4n*W0(~L+>I}`S{8(&P?=SLw+*oUFaNi<8c-o)|X*wY}~E*_AxN5 zou0K&3TRioK@?3v07;0F0^8JsB$R9muO(f87B)Xe(kvkD9o2&17K<=GgxKDprvjQj5oeP5yT=>q51Zx73bUfG9KfiwZq3HCOJQIGM zzz$jb`jY%g;MYndDt^`RrT7&*0bT)%l3xv8Ei`!bb&{jWt0*&#`QTGLtR;L((_xG~ z4c_cw@@S#KqxV>)OddU0nj?IPqKZEYbED%ijg%UJ-SzIn8}UB$MY!L3?g&k+nnY=O}A9Ge1rVF&zFBq!*LMmW^TzyU|T zt0GSeYmU61TorRulf3!gIRkr1Ar6{zeRxsBERw8>IHbs0Taj2RtyGa@De|nXNGq$A z6jh{^6q#cyl42D}RYg*y$QWA@oV6I;O;bfurO0KrB6x6~MO1cLGz(dAc-#T>H;cy< z3y*CK$^r^?XW0s*S_RTrKq2lJ;^mv2Oj8Az znHJrH44g4!&VsHVefme>u*WZ+@b&e1hqdtUGWCUh*K&8h02zV?oXlmDYlELe-$6|n zCS>)AsbXsX0D2R`vriFtD*_|##*#fztocn;jWt3%3&MeHq8b$|+Oz7uXdVYbn9+;y zrDRA=!R0?wgha1L5`|qP`mS&lzuG|FOhgG-ZK9VWpK^`%lw%nsd7-pmIo11MxoGx7 zQ-bA70I#vEf(J-{LX5J)5?rMW>@{v_yD#AwsTn zn4&VBrHqG;XWm4H<4Hw#;A^MXS%8C2MiwjT@e4w;HPmA7-m#H&ppxSo5l-nfJUr^x znCq{(c|v3wPjI&utab+)pej6q!R19gX`G z5&YhGSMgh-z_7#Mk%4hH<9IH`YT4W$YoWmiY7E;=GWw2_!L%dL+LMn!J_FZ#jzBMT zhf~h*^w^3ujEdC4d;r0B-be0WZD3vcHKEQ9bi|RrZu+;;b4V)Z`7ux&Di5x&NCpa^ z`ynhxLt(ICu=CA=D^E-u94xrvL=>*~4WZ%n!L|VTGa&vf>NxI02|cVp3p`2vgeR%S zGpFK3M|#i{5%dP-dV(Lw4p|FdTkj6+BNfzpdw>c)h8vwhHIRMOV@}9pFh0%WIN)&{ ziZCGoq?&6Phut|M{Pr1;u|l7kL|wrUh@r6f-*2;$)h($?1wUu)-z z&dC*>aT0j~RKEvEku+(a5yreorw7vT$lgAwvms^X_sNDD@sZ+cTtOaz00<)B?s z{P}hJihh>jwSo-o&b=q42kEWUq-15?156w(#x^dp=8NkJOT?#ix-Z$(D84D z8ix05>wd-Z2u})yHcJ#*TbW;D8AcgA&Fg!~UoP zmm=tm&cL65R8X-JI+?)^atDsG*_Yvbb71Dg;J^+zhE4`NkvS=u6)7D+<~bw6zKnW= z5ya>Xk2sNy=m!`f2dhgNB4<;HIv0P`K9&zTKoC1imF#gt9AkZ{@#Pw$GsbfiLjW08mChlJ7Gw`Lbg$% zCcPrXX$awr-owLvE;FTYDVm}bejk686u#0`kxwc70a9YSxWC|+Fg15NHl{`&$<@9& z!qGfV=~1o0M?wpnNS@gZhU9`2h{b!RreJbE&;t8@243EQG?-VAlBqfB1AAKeuB0^0 zg*0_Rnj%%H@iQ*s4v5<$Xz0Eax4XiJ+0FlMhLh=onFguuOX(<*)|emcx8tVV+2IZo zrCXqXq9~R(nJs6BlI&;)h!!>f!WU&5P{x=nVIj;l_RtxS<8Y|7i03nu0`cs@p8}{i z5$GF;#ve)dga*PWKd@8&rs*&xX0(DGGdc(mu#}?E*GGcYQm79cvHG;lKf*!-lf8~e zG!L__g|5_s`7jKJ3a&f?`pAd;odaFwYv?jZ9hBE7<3#j)B*YY4t%d^3P^odQ4yk%)(5~-> zQ;$~Ie%sEEA2>aBemvTUMbQzPm0*p&?^SgsOua~*36DWx{Zf{Km5>Ilyu*4#O8Evt z7)R?bU_rf|(GHG`N2lXuLoALp`s9en@ljYGtQScDsXPEDa)V(RNuXl%9V@Hwgq5mK7eTJ65e)?do$9hk=;2h|oR8+Xm z@lf;<2GC9Q_XN*X7Hgo|F8;0laSr0tNCS@&ycO394(eUI!xP46rtZzE9E<=H zJhxM~q^NU1+-+g5OM;KfRi7`YI#(6G28GvV@f*;hn_0`8Z>olf%3}SNV;l*)zT?{q zlJr4ODF1+t2zo6Zr`}hvy052zqoYugdIkpL);oP5^ZQm9^ZT-Z9kjC}=;kcUyPU&M zLZYIZO&@*VV7?zC^Y2I2D*l55UbY%t^e<3>njc9w;$a#^$YIgjQ3U)Icb~<`Pi6j) z=JP4!qZc%vk3~Hx+DhdMe;V;3cfTQ|5Q`Uy@vWuOpzrH%oqNJW++w`QuR-KIy5y8d zyvPnXx@1Gq&##D^(TSCI_~RA)SiDG7Q}7SxTktPg>qo2lb|AqXZ;)t3yh!FzE{v{E zO}so@iY(NjOT01O`qyQ=Uh|x{zXfkm44!d+cvJ#B&XG(Vpb1oc@4-eOK{s}IeiL3U zDuc#1Wt!tVy%D?|fk)*R6ohz~obz~i(_4g>X~OHR;ElE5{UtV^#`qow(b(^!k%r>o zCASD~@p1#7eH1+1X^yX7BY1rh;E^Wd;XV3oQ}~SYFY%+2EnZaaCm=g$jkfqrS)dCj zDHP?QC|87c1|M$-jZ6>CfEILrF`k8?sXqz~{{Nz^D6a8$QVo|C9JXt1jcH!d-IE zqO=~Z>SxENoqt^a6ub^F<9yY(BYmMq`i{O9Ue8f@rGHnIpKZ(KMHs(yhXZ~XSPaAj zgz6#5m>wf0$bZ}XtH?^m{JSvS;V$=p3~YgUE?s!iz&x^k;(flJNTv3BT`5_?@5dd(M2D{z-3)`>jFrJ^TW6P`Z1u0x5=Q$AGtI(4EYB3W_ZbQU#3L4ZkMsAHye%t(C^mpG8Jz{$q z^oTEs((s`1r-7TcZ5016Y7v(I=a!iNstLA`U@r$)m>>WW`+DC(eU@s|&o=8+n;C3# zzG{;it=VQzwu$$WOgm3LO%@40Lu zGN?l}de5cSmP3WWe9vXN^t$huw&3U^NY{P2(c1+7y5XlMiB!e*m4 z_fF71tf%&VR8Q^U`YowN-~I}R>@4Mt9=zwGMuhiVcpn4rxo{lvjKM4TZF|q&k57&>sa zdiaIzH{sPBv>rNoCinZnx_6q)9{3*-U!}a9Sogeo@A5;-_hH|+1Fr0e&?p_wD( zok#d)C37#)k%xT}e_Vg?%T$7!#%qda^No%YoS@2cK4QqmzCG^U>l65G4#<5=w7u-z zxlhq=Unh9!xe$2ir|@#5HSjV8_<|a4_Y=>mLD6RRDI=?jQCVmbOuvFH+}-2{|&yrz~Q5@4qa9)`1;u& z!`G%XjCKIeUSTKR^!WLBQ8}HOIdL#D~1QT*x+(i`7T@K@u+OQCo)6oozod*4LQ(d zEZQL4*{Z5t6kLd^@}5YOV|wyO^1QPY@p9BltucC~zHk-#5T`H5B!(*~&=LBPQ)uZ& z#(NvyxOX<7)cpwmBUzR)4Lo**CBQdB|Mv3Z@Gu$lWIq1jxGosjiMG7qrEJ-FNaS06 zGYbV*??##|fp7?82l!kF{=nmh6UP7W$tjmlkZVj%*!WMsAFV+N88t*8p99Es_6MVp zHD{JhpOF2$3r((y;2$}mRa^R2*rCaOotf^H{MS~5i)wT?_B^t<{L}%R6Z+dlr{PsB zTou7T(v({azWR0eed7&rmuJzw)UPq>OGV6Zv8qfUsQMm5iFB&?^oIN`Dp+J*6CH1tH4xRU}ko=MC_^98)m(y z*83~b4%ho(XlM=l8)biO$MX`8a@9=ReB!-nS_HJ* zdnI!=s~3#)BTpX%9_IZM%e;QmF}S?p?W0-k#|d%s@;29bPneE*SE}4IX71(hOuZL= z*X^(kko&u%KHK=B&wLtZaBOkC`RoNHpDBOEo3&=hcznVab20zmKl4Rd@d&0|j;-Dw zd?u^WZ@GGB%jyk%xrx>L2CV!zy5Z`r-w4eC!bUDsq$gge!2PBwL2=6cKrt0r$ivA= zK=BJeeZsm_OcB`3x`d+((NQFLXfj>F%C84tEi|$iJLqgsuKq|TxY!Lwq8*%I>fdl7-v0w0 z6Y!P2=H&RA09@GcH97%bw{`@+TqngB-mm7vQ^6m>Mnm4eK%^H1pFY~Jc&WW%|3|!k zVB%uVUQzI9QLr8^E>J>6CydGM=+*C-c2hmDQpWkpY>ac0qKo1a7-tCMPq>HGAKcg+ zUARStDigg;UPDqRMRPH>X7Zu%B}FrlA6pOnNV2U5h-HaA7UZ!D>Bf2xD9ccG5pPbxQBPuJo~ zQ&aexWY)LvFZCPYe||IdFK@bjb6uc@Fd&3KmYGUxOsuTDL zml-uMV!M9=ZoROHOC;^Hj*9FP#FL_mP*uPV$tToimybX+8}9}=#CRx9Xp%<6T^5Hc`p1zI0u4tJqr`zTroH27PJiCxy#Vnn)x7jPoM^_b{n!6 zeCGxV8thKn!3mbcZqj-uy!)D=8G9c;ki>;>nOcfl8EQ z-$Y0)*weIx*j$3+q7CXgi%l$8_FX&w>?#UBm_u4A3YX?Y&@Jhx>KcyGbFx90$UuQ& zeZs>AaXx25H}wU>V1_LTP>42gxzWXih@TQHQU60ds)pYnAhj!~Kmy!{$|5Kulj-bG zMkq|HMH+r`XUw0w)z96=Ps$wRa>LBrB>ctCB*5d(O!YI<_?fMKW*a|q)z4h~Bw`GI z1MEL~+;2Z$z<%Vn@xM1G{Qg72?>iHI=O_Gblkoe~IrjEppYUK*arTL2NHF?G(}Sjr z5mbGIvg{Z>s9ym=j(bKf3{MOHE?vJ^{f?;LnR-|LhMsD$ja{5_{=hGXtd*2Ucb`D| z3)h4KoJj5<5ic+lL7%+gAuu|fl)fxp+llhFPJjhL?qIHPK*k1n1%(NWb{zg|c6z3RAxzHL&F_-cKvSHisfAaOvtqPNGFp~i zv4=}B*$iHxaBw4g!FBC8>Vx=8QDAE_{}7&6tw4Tv3B0@iT_ zmK`<){1Axt(*bepjnQ?e630F+%*@f&&P6nY!$M(5lt2`rq<(Ubp~E*X_WIhU<908b zc8`Ll!p03FfS5oi$)Sprq7AX_7ft0DjO}WXGIRvir$f4?8`gV$(LUTC!}xIxB`$1< zaqYjrbeIzRgJ-s#Uh$rT{da6X5drk7j`#<`{&5&H5-tFyzB&n-rILv@eV65>sCyM_ z=^ejqq^uhBiTGU-5&@9{O@AP36*T<2^zDzSZLJr`Da!xGxsdl_JqzHa23@ecA8~j1 zoz~8>p7I3)p0hNcMZ;>~By(zWP<79Iku?T2DPCoYhlKCjJM7~7zhAqD|%rg2$F z*XMkGjCK`g>2B5mMS*5u>{!zoKa0X8>BEBsm!#{<+y2y$x7ib(l`T@$6Ix3fivDvs zZ70r$Uc?XhE}?24x{~7Eb1m4)W4g$HPp`b-UT!vb=|^up0Q(`x8-AZ(Xe)<*{(R3l z`uVA-0yif(K*?ncR4533>An3+VRLWr4)T1wx3wQ2ll0>+%Rbb17xtkNIwCwMsUG{# zR!e2SZMWAhdsX(K@ox2o-PjZO1y&tF-OIqEH#`B3pWIHsxWd8My16gDn^1OODW#r~ zf5=%n7nR`>j}Tjh*h2#eu*g+gc*vkbs!+4hHewLTaJ`Q2c{>zbdl)4U!%%_#T7Pf+ z0T@X-=P1;z!7mSV93xxJD?sZnA%o!HHVeF3@V-D}CWIggz}0x4f(-K&9WK>$VfV31 zpZ=MUf$wIcaX3^q=)Z15>w1X?OaB^n$sNAAUSE>_6M+eV=+DTHpCng*2tO3@WO8oi z<7c!#g@k1QH5<}zw>L7z-iRl@kt^h9AB=04-V5K+d^Tvx2X-j>G1$Vi{|9mRZwBPc z3{1){J)8!D5B@89H-#I|r40U}1NBX0VR(H{KTDs8ofy`I>x9_2xLEdc{h7ZCef60P z`l6dR>|cuyfWBT>V%RxIVMhFySC~|{mi9tviSZ4_sro-mLj4z1{qd}SyIFstRX=pZ$QN z=D|5)_Bl;0rDEsQm;Ob@o5Jy~R{hn#LH*?z2kcjqkz|@w$CJe(aTap=Qy!-ekRAT^ z^HKlHyJPUF_7MKPO~AiI!OtPSc-TvOBjI1x82;|RH3OefEN~^Nv|Qi_9tHsqUiRZ% zqaQsj&w@{3SH|SuLG3hMQ`ce7n}rCttNp02|8@X65%VlC=u8j1BzSsjVhm4_Ibv+Le(p^)vI8=k*pU%%}JO2x>%O;&8pIK}C%s=>3qkPhX-WokM&NSv%DWdB8*!~NX)-FaZy-lW~ zj0w4%KR$9R6=p0R5hJ_78G zvxA?1__I>|QbgDHP!#>6j;-J6G;F1-x}gDCO22@5tK!qHQp4%8 z0mauWMt=0S9qj&7t5kDcUSvL-i{2QQ&+BK_DLv0Ycmpk6|2V|C_1&k13TJzQh0t0* z11rNN_)Ug-3P+hcT^g}&%tzR-wHD=Df_ z-#ie7KoB)YAEtV9fjM`d=*HZ!bo5i;$C6ix{=PDr)@FSJw@e9Qoz67ZN!QJ6?? z@Q)j3ThF+ky~+05ef>&5I%w_i7JS3)1DL!uLeOfVTZ)xE#5r`G6QKgAqE6JD^ERTu zFx*XeJZG7VZX-5{OqW8Nki>j!=bp`3j2~!bEDTdDP|a4j^dx;9^_|P_O7-2J-%sJYu0Q3o7JN{CaqKLi z1xr;e{PyEF@8itYU?H1EThU|<|BR;whuCcQqHB|2%NdsL4b8%)az1Rlm(!TG40!-K zAqQ5+Nq{#sCxR3gQ#K(*V@fSjikY$#DPx(k8!6+Nq9bK8Q|gg2O$*JR&D0~_&;;UO zYEGpV9Ec#oIA8S!C%L?#sW~#K71#!80qk86cW4JwvptSOa_^@g=P7Rip{Sre1l;gOgLA(em(Pz+bnN zmc2S@wN||mP4+xj!`^$DH&559H^D@Zf-7Z;raX>y9*3^IJ>_lp@ui;z&MR^p^X9Gh zVw4eY-VQCVju5+RZ(nlc@e|Vz-7`?D{vcDUUZ3r$nsffVPG`Qqdz=S1a?$SAi01gb z$WecFxKF;8x8LJfU*!1C8+u(4B1YqJ)E4D^fX0i^ZuPsFo~rNqopZ|-KVI{a2Yp24 zYr+Fhr=5Hgs(bT}YFpQ7)tiBYtxT--I5wj?QG#DPJ?KV}+(#Q=IpS2cdJ2SkJnc2MoyLXz<|X6cSzD zyknY-VH3;eZA5uuR?W>1Md7orBFc_<^Y*aM-aO39P3qX8KkoElC};@Ph&>OYP@xz) zY4)&^V{?4!&3jic3pD1{6$N*BLucoBsy_qe>XVBy03Z8f(ZN425?Ox7miNlJfCYyqbz zf7LcI$HwFW8!X`}$~)O4_vhr+8}rGrW0LX9m}f&8 zsAL$zxX)OL{$zR_sDoe<29*F=wXz@2)5*OgXIyH=?5oLDtnG1p$NJqdX~NL*#a)b z9DYP(2>1WMY3GbM8f5k`{O%}B6h4K?$GFwJH{#)3^5aengMa%A0!&8s=0y>&gXzmS z(MFj~<}3>*?`&e0$;l_>VsG#$JGKO*!wH2Xk-2_K=-W#{WOB1H%P7TRqbJ~`TA6c` zn}L%50XKu6MnQr$%gvSGX6AySSrSA<`E9VUWG3O zL@;9*T=pEB@Js+G#|sa23Ugi;hE~C{m|!6vX<(1Q6YwaDtZg{W5~8390vZG~O2i;K(n=6U!8CM2 zM-l}Qgn@BzLsSM)6Ba=P6PC7V42lSf3W|u!IH-srGMES?Ac)|?A}XL5o+fOvFJk`t zKJ{$9B~j-6{{Q_yy)H@Da!#E(Tb){-DvD59dI7mdG91Sc@34WHB31Z(x^SDYMYdAo z_xNjA75t&-vzt1rBwVGxCIiy!PP^E0+K>>qX*lf#$^}Bc;&x#!J7AO1oHoZ;W6)M+ zEKqX{GZt5jO9Bzogbv731aB!Lvfi1ty3*OWH~^N8&`uv%vK=M-ogxFcE?Zruh{O;d$N(iw z(W@?0Vnr~^!sC`L%K*jzOD|fb6ysA?E5s;FH_O3eQ#O@(6)cJTfbvx`D1$>rS4gJ4 zstht;BxGY8W*4Dc2!25>akd4Wj40rP8bdMH)4>$jZCD~K(L*VNHNzLdayN+O!nf){ zEG-m~SzNUQLL{3; zO3sjYeMr{(k|r`_)C#ep+VXG@4XcKQs4-Po$H3wMb1dT~wPpln8=%DxOWY;H@^&-s zk|BJuZoJBbOYFGV8j$rdmje+*%G5jl|oA=pzN!9nc*svbF|f1pnrMeB6+-49HqUDc5X3 zUL|f{24oKhTWBS$K-3qq)+ZS7nqsYJh%&Z0Ys#IjSqADfh+mm>B=4;3nMO)-YhcWq zbusHz3xkXqLbr*TjvPdyFR)0lX>1R3HXs(gP?7y5K$J;C$YKH<4I9fDFXRkL=8(lo%rawajA>GsEu*ArTh3OtoTAUfG33H_vmKlC{LM<3 zx}OFEI6NMwtf2x6M4a$~FpO0oNi=)13MxK@nZm|FpEzvtakVmzBQoMb4+M~bx3XzY zV>zeqKmauoBh0>*S*WbfqqZ=4z_917Ou>|Fg3feECS18OdB&0gt5J_b?D< zV+0r!v#z(MDeDvBnI0!LQ!x`JPI_&0+nfq6R6^E$9zqbB1st+CUbsMA*c+tU8i-uX zK$HwqPPlli670}@b|L7sxor%UblX89*5{0KjJa|(qPDqheW;N|2yxe-+~&MHD9U9O zB*>r{dbMQ;2Cod2g?Bu_Q4J}WI8B=!0;Rg+PNC2lK&*pI#s0uqW9|fVrCbGw@fBQk zJ6(l!AVy&fY;%lt4aC*pH`hq?0IjVhW+h%_$Q-zJ56u-S50{oUi@6`<&jQniv#}YB z3^*J(b_evTl1cnU=dfx7`EbqZ05gv(p1?;yPMbuQUnD5w<(dlXi>rrSOeQ4PdJOL^ z>qa@4+d59sl(CBBTtj)%jVf~ikM@CLG{!Ph%KI`mz%3j?I7Ltub7ecrRZV7_gEIDz z?@4Zpx3oy>oXia?*fnJJ`qe)k}a4rmX;Hn>o-E0SBOu>Q+qOA5A zGP3Ej(+mq%c8e#<;6sY(8NqlgR6_s7U{~>`DCDMiNF+zNBp)s z)44vgWK{x|D1j8crGximJHMf)Jdn9zWfpourZ?Q+@Tic>iSv{{ z&~J3eELodKDF7x5#~3|c%#*IffCQ>w#MG-bun3uU6#zKXu_e>FHj6VAnNV$qe3f<` zB)|s5om;b=i1Lbo5nhf81bC^tS(SMpNc7?+|CQhdgHG1lCsjEtE*GK)fMp2Zjdk7vUca1SGfB%sTpk|Gc_^ztN1F`WZ$-3NLgY%V|* zpaqgq%&}ktI88?>Q;?ZBpONYOnw}Zu1!NRdA7B#VaRuz47&ic%U*kF{a3a%L#`bA` zGig$Ya8HS8>3=5!0F*Inj`9i>1axi|O4!Um#W|^>Wx-Y)r!yg7$Iny&k8^((Sjlb! z1i}CtDGkhZ@P3^rI9qr8OadkYlnoUEO1E$f0}v?3cKA9hBC)IJ14dY!&g38}T@+_9 z82ywwbR1yAhD;|$2@DEfVXZvdDfEH6I%}|Y?t4eJ8nT_B<>G97M+mQ@I6ExU`;Rz} z6Z)}R&%y5ILm(Vn&X@g&Z0{|JnOF}bo3p*QCke|ky*=7yIWdr{9S=Hpq?m!eWqQ+6 zI1(d>a>_zDH$U(*)9aD>cn^<*_v+)HI8W$o|h6%qD`P+CVFXa4T+T`o(IR$BxM>y;mIKW%hmUm9Q z_QSGD`Bp%_!11*H*5laLKalp`_5n>-sG!=bOx@h;^Tc? zxRIa1d-m|mUza2%aMRrW5+vF#_Y|6&GS>oiEl;7jqjGIVoX6WG&QoaaiCmkJfSd$R zp|PXkxi%vaIf{P-3;tIqkaEUCgYsbk{M0(%hn5LHU6K^N{*LKwJ?!VzLC_rWH$?ulo z-szW^%S}?-roMivaU4nn03lSSe?W_IxY$t30+iglBB%cLYin`fljM|5*v{(s&!B92 z;7%Mg>Xixm%q#QYj$XI7*yG)Zw#Gq;jCDEaC&O<@4 z?%Lo1*wu9;QPqDr}~GKs(1%Dt8Rrw9KT$bW|6dfP|N#`!#t z==$r%y^ETsdv(H*yduq}lWvIrx$!&8FYT z!Abu#n|>oF1vxhTMowGg*z_AY9gx!@fH$^+{fnzNxn_JBqrSxO;8T4_gI8C3{DbR} zRf>_GlD)N=YP$d@PYqT4T<#OM84Xl-T#IRH6ZF z%l7WkI^fQ3yk;|%Un#B;hNebrR~qr4+Ssq{)i!7la-C#&j;_=tkb@6M zbDA+twZe(jyyLZV>N5>ZK)P+((Up#zguI`B^W44CyVv8ZvpmyVXAgFeaV@RyS*3n_ zbwO*sWm)C2G&IhSf4|rU=|PlqfZC@_;LNGb@Nk~5+8+Bhh4eVnyHm^9COv-oT<|6^ z8vmH*Wjwyxpe#A>G_HmHI|@9$uFwj1a$Mf&+VKc`|p~NJh zVj|BE;JgL7BUeoSW}do$j{vjl`Tmi@Qx`aF!Ks^=ScgG4Re`c@2?%x5cot%PrnlIQ z;MMK&euXJ&vhN>P`kugPPONOAF3w0GB6oQ|btB-t4Wqtn=pu6MfspS8fUkw2xl#E_ zw=bhk?XgJ=oj1Gbt?&$$8`sc}N#4%iaVW=;VZ1+u9}V~;0Y7j(wmZ2oel+HfMEpqP zkLLK%oIjE(TB~zzz?y_UG?!ZVf%-T}k4Xnm4M>i||8;mIVY6=p@ZSg24*_dEw{HY! zcp?tdx!G>aYv%YyB%v5>3`w4cI?YkAkOd2TBhZ2SQdsZ~3X)N#1@Fo5HwJ--2wjeEA(FLj=U3hz@MHG)qdWvrQVKlp@&tt2sgCZa}UnlLd$^+ z9B*(rmZv*@A?+zH$9lJOdAf65x?=;8FDzLT=Nf;M=OXZ$G>8EC&fP3ols;0JL2g%M9IKEx;C7w_{Yape+gXZQXhoQMI2~&>WaJ9B za|g(BJHKTMJKbQ=o^;1?&aBOiq*MLth$M@;ZigfQbLauU^ zd;!sI;cqS7aROCbjy0g9kPKqY{isnd-Ej)SRVAy0V90ovf@O&zc4k5B*y$jpbJ86r z`FA0O>fDH)K!QrlddVV`fOZr@KxCD3xy}gG1g)s-_#WI6sVW(QF30yw*Q0hp5G!1c z4fwOukW*dMT{=TSI8@df}jp$rP6yKNRg`Jh^~v2qb@?`)PuWP>UiXq3fKx z$#!rEl539wsJOB`)+*E`=QxA}G7wJp%)CKaF^Vq1={sxUYVSUchE=K<3JQK;QWK^Q*u*66Az+BI-9d(PY;+LbAjnG7b>|ak2zbJpK^RFLWgw6#yPL5y@ zBn%FcM0LDO4G#SJ=qEn3FxZDG zsnNVv!BUU2uiy;*Azg~;BGdghAUK277Dqh`a2D{eKo>K%l?WtIkn! zO~>GdvK2HtTAKtfA#&5}yaU?P;ptI*9v!UXOU5tGO~@lOc!3xOL5dT4coOtWh++uN zQHe}ai%0asWbVG{kk-0}n5h4*CqZ5T};8f6@i03d^!eI`B z-)abKx64ahif6u!{`%X&|9ix$5Bz4?HWsH5^}PF6=^C1j2va^gWfynHH60T4oIg^ zP9PJ$3ldbJwM3kt6UCZ{YrQ_jFubU;$50~-6%-WuFeE-Z+Mu_{kRBBi7Gw>21yxy} z(DD^+(~L4X@q)*Pa|Wiv@GFjkOex<^i_5-wg?g-z)fmy^980V7}hJ9f-oS% zlOjgJJQMO&lC)c&5+kNdoFH+?TLb1ok7W+9JKeicpYyDPqmUWY0#2=*YxLRBDnpk0 z&|wJW5L~2Qw9}AeIf?+yA|vW7=M+^-_a0^^54cL!V)B659j2gD(j7nY?;>S=dP=Ea z1iOSBIlqMq8iG)p9u_l@A(WW%uncN~A{x$q_kd`_6usYoS1`N{N_uYZ!IDoC(($yI z+sS}D-2qnwrT)z2-AIvk#nJwB?=f+(PR#ArLBrsY=q}MVOnwbIC6e8i?)^>7mBYDA zMrX=+2}YpY?c4%jV(jA2N{w-@(r0Y&$Ot&f;5nV^UEX3>NpV6KY~;DHk%yM{xST6p zC7(BNqa~D=til|#7l0M)?GLXq1R1>mRv3^Hd@bs#x79n>yagCAS5 zbU>2bjuOr%iR>Lgveki+a&s4K*MUsPdsUosA1a|`=NiWW!lDxcu&9CUI(AT&4Cc5U zC!L#A3@N&F(m`QiePWZ_v6o)Oxev0RiB{&h9jA2dI*DRB6j5y2c(b~_G8w-7d==gu-WxB)^K9>A4? z*9gf?t3KdzZkF0J$rK1_y4!Ku4R7W6+2#C(GwjbBpku&+ArPE%t|e#Ey}M`t#i&Ts zsLbRF;-5lzG*JK|nOW%E56Q596eS%r3gg7cLHgHvcThxTKq5|<`0jMI^9Db05FP=d z!>Wz*V7iw#D%HV?PQ7#|{3+L@a*~^47tYDJXu9*D%li*3Wnp*Oxe^%-T;AJdb8NFD z6I|Yh&;$dq#_8T$8n~Q{{idgTZ^vl9o#+yw+0Nsj?@9+(-kjTA-fmb5W2YFzfDkc~ zB>eTX#<>ia*V8e#QL9y)(0U;LXhmIrEo{2X$E&dy7geTxtVrOBjmO| z?w>pkxj~y}HzmlXS(lN)J7%r0NP51pV}^|}bH}WNJ7(th=f2ofF4B2xVf8bW%WU2* zb+FKx%C$0Vj$x@Ym8)IeE)B5QnaY(tY>;8OGnI>T-Y$)?;F-z=Hf)k%$upG;X5KE% zrCs^noBLa7AX)ae+D6>pdT5xwxz&-ITX%3bDeqL;@HX7pBB;5ubz|7h*0KP1w*EQH zwypIxIP7u!eOTl@E&F~Jj(Pm5jY0Jy)e3Gq*sl!%M%m9wABLu}GX_fL26&Z{(kFdC z3v1uze%78eNXy*M>hHFsr*DLwb35`vWruwPZeDq?;lM4cG<>8Mv|q(<`MC+z5c?;e zva-2fRf1F+!K&GjI@8@Jaz(p=EBDy4kVJf$Y+0n~yHB!y?{kO(;h9mF&!tqz?q=js56>$2WFZSw;%rar5w?wjyhD`>69WZl?6Yw~5By(U4tg?}(Qv8+%8T zZOGoyedgX#iH7%Zv3bOogcO)suf`xW~`wR5h)&Y!;>ACbcM@r|$b{nh2YVG15K z>-hQD3w$@#!6TV2Z&tfH9aoNx^L2@H!SN?%clXFByr< zz;+Whj!r`1d|jI}qj_L26GDN}aK%*Xt`F)Tzu(sCWy_b%wfiqGfUasYKRa64UoKIV zdj{+Pyib4wfar7Jm5(CdC-4!TPt)%cxTWZPRLA8GkG_R($_J41OTIWF_XM{CuYS*c z0$DKItkC-bmMHX18Uy_@q7S^V;fU=%6Z3m&z9@VIy;a}uHvxsbMtFD~e9_$q2THJm zuf{(8UIpbewX0Uix9UG+mZitA-=ZxQ8!VQ{_w!}l%9_ihoNKsZHDy8Ly%ee{OTHzj}Y&Xjkk{Pm+MheVH_5Ini{4SnQ( zHpbM+nh+7-QxH3O)5Kq)6t1}~;Z(P2FY+pIkl2cPk(;FJfhYlCe-&7DWk|)Fg9=m! z=9u(I+IHW&&~ePe{zQ9E?<;MSl;?`SD60*&D89fp3-o9FCVar#xZL`E?r)&J?hlfR zu0eIszh*vogi#LU4~&+YORdbT;AU`WLBG_yP_V!6;K@K;7GPcq>fgp`YZU!HE$#~V-= z_V@N{hCa4l^rj*&gQv+LAKWUZ*n}M>qr+{-v9}y>6<#HLn`& zW&YRO+tk(8zbw^Wf3v+UrT^{z-DkEJpU)7vsHbXk*Ie{*Gk$CLsy5^EUqOm|#VM-w z_{n(>BT_y)BFX=mTbnpM&k_9QXuVJ+`G=*&D#<@VE==@gQWt}tdjI;M8g#Ut*}n-Z zg{S{Z`}c+`q<{TY|1O_n$nW(P|C{?)mKM^#fvSJqUNQQ&a{2$#{w-1NvdNg2jq&xb zP(^EeU83AulL0IrhHeKg3@%shsL2gx`ALY{2Cv*lljdgmx54Gg)SLYJ67bX114Y5* z%2b+sXO_PZT&`5D$x^fYvEXtgswT6|^1lU@M~NT4>0Gn;;a^iu)*ybE1Z)yN=wnkn zi1|ba9bSHZJz}wim8Swg8^TlkyQy41#`?NavdIr2cc03&fKdV~!vQ9ev`dDyF z5PZLC;U^jJx?hhcJcTXvH?0=Fn*p!;%`aZG!*406w*Lma?w6hpf}d3_d>K}`M1D${ zQf~=@?^hMP^8W&_<`ay+{U@Ww-%<229T*VLHmfe4ef$|qADe^0VezccbL@Kd$D}9a z_tWzsFo2$mtD~pI(-u8Rk?4ui-`)!U1=ZpI&r}OPgVf0Vtry(ikuch5>p#MuO@9sI zPv05Q>qnvgIbZ;PuC9*$?_aR!ZyS~VZo%{<{(gGuDtd0Lj-GRX+L#ZeMWQE4e_zL? zxHZwwe__^Q;E$-EQShfL{MG7Pwhez$B>I*9<4$0k{%?LZx_qU6S#bU1Rn!k!?|53l zg|2rTpCn8OUhn8xpw>IyzM#tWjy(b!eZ2$o&8Fwr=9@@+8`#pS|JMcezb}kP3shZ^U~!t&7@YhK*R=_Z-HYg`iH` zvP8{)&RxBml3eXZmxl z!hHPoWw>zUH8xSPO7sQK8loRc(R-J3 zJ@V?J?Lf0ER$404?(yOFa$nu-vt9DlS}Oi}ym@obW_-gu_7fXKTt6iKkp}*k75=s+ z{&Vg4V*q91ucPqqJxk&L27jaCPc-n)QTW$CW6=L@p^bia-NZldDWTu5|H5eof2P{;3;zxL`3nC(b^N`n!avi%zd+&dVdDRb9l!A3z@Mz} zpQGbHQm+d7I~e%iQuq%P81%1OY~zpc-@w0Ovhe3$z{@iP&qc!@co2fJtx(H7=4D`V zZ}=)%#pkW=J$YwMca+^ zI+WX3#Fg_B&DtB^WTczQTnibs-X|d7Mc2R19r;DnPs>;SuEyKL=x~=qw6Y-xEp`r zh}k!6xq|R8=cU#o(O%)zdVBAx_J*15-5lJWSdh`)`xB+T`g(hZ>eRSBk81DMqJ^rx z7_+?}J}~>&ZV6jcU96*b@kZ5TA)2Dn&ta3{{R+|t@&A93{@q&izG|<)Z}4+yPQQwMk?~8krIQ zd=Rrue3t{CzW>-)jxV6Y^+C)hLja|<{x^&SuK5q|M-0HhgaP_~guG3S`1YNr5Z@Ag z;OzH8<6C)8Aox7Ogf=oitakqP_abY4m;~%1m9X;&*8v+k)Y9nd#UMudN-YnpMt`HP zr}^tHiLuRxqyc#R^SuY~%3*Gkw49GxV*gl}Y=Hp}UN`#T+%+lE%q%J)G63X3KIxIbPQ z{(Gjc^Ms@EZrls?Bb}q`j!ODV^$0kV!SO=Tn}7q^-%YwKCh*WZ&@{_8>h^d@yRYv) z46V>u!7u%3u1r47#gOZiXZ#+H zF&@DD+%wVLn2i*5Rj-|dlvV&jS4@3dZdwG0vsl%{we@)N5 zYTRRvuDO?wd#qMW?j_Qs*7Ej!c<&3Irs>F*F$?PCHqbEuj1Q;Nr@t}+K7DJOqm`;9 zwkZX-CHGY?A^TH5Ta=6mn0j(RZx#eC071;1iND(JPy~E6VIfMa`s-OAxy4eyt-V2B zbAq?51`^%oAfV#}Lav6tu1ees1x9*tzmxExvPWNLq!rx`rjXakZ-Li%%MwYiW}H%n zy=wKl9;|d7U4g@cvw+Bx2P`r1`8)7i8^|F@2^TCmGlF{FV~4>}R&Yl%Z!=vkIwe z&C`B9s`!M}xwoO)cvemxRf~Wt-^XXb%*>jPWy%k=lI@jK~wa=NJwtDfpi$Bid&FfDk|o9b*ZIXIG6 zS>VePdeGNL&{xRU2O$Qq`eV@J>ykt)*G0e**okfx&b4q8a61dlgNj63BE&dlJKJ zA{ed>TA)ITh93VpH(j2Aa(MK~H1MF!Z|H>`et`+!$_D>dtD3?OHsQ;d>j1kOKS?R zjWhdigTJZ9@C!`%RyO#zE~#nzgH8DI*RB4aU1RtZ6Mnu8{(+>Lwy!;5_TL8o*~K-5 zUtq$wvcX?bWB9=)eEB@9|4&_1)AmzL`1v;Y-7RVguZ=bPZ-c+7#_$VF_*ORfx0=_q z{lO-D`D<4H&#p0iiU~j82LC{_nzpY!ZuZ{>|Jj8#gLWp zZ>kzzW?`MR4r*=qaiJUQ~4(TN{Cz<3vkvu7iS5#X}JsJSz(!#sg*T- z9&N0n8S4Q$c-~`)u{otiO)J8x*?jv<*9WRtpXlvG6#F?Bwi7vvi$gFMqjhVx8@aNL zHNyF&^QaRq9~X0a7^h`5-_50!fs7;LJiZRvsa!s(D?GZsOCln8qu@srbmCk#7q^j5 zAP>inOyn##x24DTc#L*UCrHfS8+T}KLr|%8y&Q95@5+ie6?Y?a1)DpQ5KQMiob!OC zX==fT@5cUD*E6E8N62bJb?ZN8ydH9<>nYW*|5Uvm^Zzn@75Z5t{{IPoX6ujt+xd5< z{_#(Er2+0gxc>bAVg5xN-|lN1b$lDrBxHPR_E41ZtriNZ8sBbhA2hx-8oD=pe7l2$ z1dVSI>HVltRC<>JL(q8q;Ls@a-im^%=zTRch~8eWMWFXx5>h?A^`g_;Ae7#Z{~3ke zS5Z(Ey$9O`(OdiC2=T*j=hcYb+gUAgyfXk@3F2@4X!IT&QZ>C@g6VB^SpzJKg~U5I z*Nomb8b+n}9bgEew?D{=7@u{ihTdnc4dU;i!6(A?_hk|iqz^bx*zagsjJf|3wx9FX zc4I$h$39F_yk#=NhwkUxdv28doT5}NH~LeT4#k3I{Ig;EE9zL9>$YqhpmXlkH%K-k z>h$<-l!In`djpr`yOReq)a8$1#*dNwq21INTajFt{v07I*Q5u7$V~4_+5OOP?+Mo9 z_q!0WmMq&{nU1ZY$@5qd3$25*{GF0PSJ6=5$@2b|<+~a$6U&>ycxNFed6;&`Ge;`5 zer>pdj&`%WyBU3#a#{N~2F*y*vhPx+c1DD#34b9>zP!@xT)ixY9Rd_yLCa50 zs7pH4bIBmpRr$4dCF#FJryq9#?Dym?k3&d}T9bhfoxX=?J!qnUKk%P+7uxsuMjyw1 z7zFRd69;Nr#O*`2C$87651B(~dz>|7d#a}ABBw79`vL~Wl`DRm|C6G1h z%d@=4ir5}_p}2R)G>H6ew9W^C*)lsJ6A$4%FTDPEMO=*5{tE6~+=e1FlH|nkJaTX0 zxuW*kWHJ!@_ZJv*lg*r)jMNs!Q}=UoICH3j-$nmcZG#MLX8~Fszk-@z?Vq^*v0Uq) zd=Tg>myIGd{w7zJr^IOYT_$@O{Fcl(3)#3emf;7;UdA|N$7r=dM4%Vf=w;u4)1HwY zKVFrDc=(BLmVch~5G*DOWCzTL7o&G+C+>$udiOh5V@DC1d}080sZtxtrV(zxmJ(va z7D1EO95@-}Pu-3x++SJ`M6&CY#%;3$NHKRi{%VJL1PNC+VXCx0%X?62;bAC2lREKS zwadjVCks9i`oRq-PR+DBb^>%br7UQ_Lmj}Qr6km};L`|?+_r?jXU`FCv#|rxsCPe6 zdx8K469Bn=39!70*<(fJQt2KAj(xxUmH7XMo%EgL$?zk~Ug{!L6v+)5F^viwVv$DvJiHbOib%u{Q;ba!Rm z@r3yNw^2vSxCBPw@AUlr`bS+*#g;#%z>X`m?w5*fj0OtW###8I9f!H3J9ic>MuKh+ zI-cu40;}4uy|iREF4!58JQ7#)#OL1!E6DQWWpr*24*>|M8$!#Vhw`UxfVOMRc0*K< zbQBAPc2f=VNmbo-U?a+Bat$M&_(#Pkyh?i=p(~8zo2#H*pU?sNU zOUbK;3&AVzuA(mhMv*wDkP}_8$}%Q-WMz-Ga9@kP|+-8(E=rH3>k}$-pYZt7IGn`izbN~c zW0Dg=>Ht2|HB4<3k3=_RpY}0SsOTGt6=<7vdDno#4SsoGin;hS!OeN`J zF%{M`OyzS}PhdSZjE(h4ZEFiP{`eH^Qow4vfD_*^*llb&0bdY6;)^lZwU%I15Hesw z7CLqmvc$IdP}C(01OEx?zi>5gWMWKw{wD%DT|BM0U3s5G*IUEB_;(H}^6x_Y)ka@< zv=Z_sL%NY6R2PUdztIF&sTk=cOarf?wF3H?C^**IYVeu%zN;KjLZDD;w3*nGYj z#1~lfP2hb&R@ZU?rg!aG)MlF%E3D!^D6UupPZ@X*9k=A&OMQP2ujx-+br094*@;rG z8V}Cp{`6V;`nD$y-?!N7&ot}Lu+{%IE~vh~zI;y#gC?~UB{_m zuCm^JGz)iI@#xBJ$#IqIkzXI|h+`Pd^H=C}WyQg~Rh0;#-Eh+xpck}fftJ9Fw-x5YV+ZZ%Y`9KBD zQ(prVpH1t_Xl>9V_}C)v_}TH3_6Q{d82zN~SVNzW`PkRvKyXI+2i%> zw}=U+$d9Y+2lVWhRQ7_;RCX^tn``)}?bEYw(6jSYb_YHCGCg~^%07HdAvssizF%cu zsMkI=ToE`xWhd#`+x6^QRQ9RW3dw3cyNk+xL&yETo}H?)pVn)?sAs3B?8$m|zMkDo zWpB`%{HLCMuF5Xev-{}T4we0~o_(X9eONK}9EIDZV)aW=C_w^Q{~RRl@n2PXCuTPs z7a$gocb_(O0*5FZF)8{|GWTg?^qhf3d@zZ19$?P+6;v^IQ0T44%^1f~l;vNPJWe3C z@hL^jjc}bFyoc8Pm17kCgcl9Pz)&pr={djTet@Us$GVtv-W$MAy!GYlfmaYmCi>Fi z0GuUfoNf~ALy~zc407+;QbilH<&>AvthT7GK73;UL=a1NM{@M|14H&4qztE+jnjvn zJ^rpKjN$QuC4-k6fS44=Y4@9`;v3dh2;v)ZV3p{;YZA2{qY8&-c(H*B{HI!oeV#BO zX+K%2_)l zxsowxOaK?MR2DJv6U;?W%b0+Zd6=KY1TN<<%xYr-E%+;zzZmNm)#ESt9d(mtpb`U6 z5kt_x5&k-xzbg2vK7Z}tuLk_JiNDU_uh04GT>e_lU-A641i#GlThOIZ&?R&I!h68^ zB^E~!5Aj4M?}rOHpZe_=hTI$e07Z|op7Gr2Bh+GJzwmdQPfgHH#Qqo0r^5exH}MeZ zI@_UGeVODqxPehX^VEiChoAQ#9m6p@e~<)mA1BZTy(<|uPFT+0`f)-PPpAlnGfv-h znG`af5IZgt!{FJ@9&*5w{|wWdh?r^FbAbs1Hzuyy(0^fuZ=6valkBPNkpkC2x`Lx# zYe3_|Q4zxV5~Ts3iU74l!8!!16*%udlaurW+Ls$$bW;aW69(Mt2}x`2V9yC2cI$%jmKje zFd2WfC&R$ioMR3OEs$cQ=!PT~dm=WdMSjqMaTxbxsd; zSNb4C!H?V65SoKLji<4pL8Hu#&WhS%dm_eEBGICGROKJ?eUzue|;!u-o) z5(IHvd2dT}|B`wlnt$o7Jh&~~124w!87by_BjYs>)wBbQp`925egwyWTHo3{4W8Q= zrbsYz6o-?95?oJh??9QSX?L`sT5w&^-yMhdaex^MiQ4gk)6fh#PH>^IWLM0VduWd@ zI1L|=+nQJABGUWIG}MHObSRpl#QIG?94$_H{77ZRlg2um98yQfK}^~?_t9Y>r9IkP zUw)6z=QAKhZ?lKIiO8!3r9iJp>NY7|7pN;eD@Hspa2~mfZ(^2KwvjcL0~sd zZH$S)fQ4|{0d~;=)%by+#_5sSIF}-{?VEMtRioZrY%38Z7O@>zAGutB(9&v&`=}#l zHj;Sbr+;ZOJ4cLM-Lv2Z5)QdN@Rth~D+9PPmHvaw@1bSX-bYuSKM|SGpMkxyuTc^R zOhb@|fI#9lX}j#|Gve~hx%@bx>4*MXmG_EQJ~v3gPU z_c~R4e^N8}>d#C3ch9Gs;rWm=-QTZbf47(SkQ|@VYCj>zrY@FaQ#t(B7VaU9=cZ0^ z%EeDx=r6F$dMZ{D%AVDHRNnXGd=!xgFQ^@E!5iubPwL^D zj0TR}ziZ=W27q7f@XSL^c!d-!mmy}>^_G8; zY`jKYaRFGN=4bx8(}0(3!4O$m^d#_e8F)HS2l@j}Z=Yxr2=1?Yr>%a)I-Bv!d=35e zcN+eJ3-S4{F)@gznU3v`^ad+EydTmfR=WIdq~EjB?f;4NTq`~QL8PZy>5Vgy9&e>% zPo~EN9=6gmjw5}im7f1A(mkzo`%_4}B<-sQ`buZHz=924E@K8}o#M;G`uReSlxO_S zRz51ce12bBdB5=TSoF`t-!Z&AV~DN1X?Xek2W;ghPKMD}`n;`tOL%!X_+hrcB)ojk zFnFP*j?i%MwP{?uAMFN+B@$vL9zvscl3V)0zx)OujN^stxZC?-*OJUX!~Esl0>+!soJ zjSgu)J+v1aK8~ivm*rz>UUw$2blgnGEO(xp>*eZvEC7TsUN-j@0I{xv7z%-#+{@7a z?}5wGd1P1h2cMY-p3BhFkT1W#6bH{sZL+*8dubz{g@2!T_H&VPaud>y{fv}dimLUIq0lqe(xMA9o9NeqxU zivz>p1xh!p_c>&SEaSTr0hb@lsAp?8CgBb__~eDm9*v8r!s8 zDCUL))7nkXa4?YQ`5H2c^W@kcRj1>pE=3iW&J^;ezi`S>CwxCPx~?$g>+jH?$q4Yl zl;WGwpFH$aXNj@L-S+H*m7)8S^y{lKv3v`18)bXjC9^Ru$W%Nh^46Lu{L_j5J%xWD z@wZg?xmal6Uw;<2I*w^GI|M2#W+;2nw$>5)+7W)Lf=?p+Prw^OUjg7Lw8Citwe`;U zlODr+z~f!#@t%ADPUDMo=jsPya8>~Ucw4NrqqIb8^^B}Sy;2NwOA!S({kI)nHqaG{ zEWaz!)kBA`Oug!r4B*s$m==Nu>*<-^N>j=4WxGpP^57HIz4w_y?5%s8%F1tePGfAk z+j}evu|k|Sr!)8r6LWiaIKPD9m1cWSWP3Gsnecz>2N_@X7oML*nZ~2BQ;VlzwOV?@>}mn7z(+)VCx*?Evn{5eZwcyt6#c6oi`+izjY{tY>@Z}N4B&q zZ!st5P{X5K(5(X%^4*G^D(`YsX%F$>c_tC>ekdm@L5UV)mZu`yoO94|%DH8))0OaA zP`?x7K`DkgLuUMB-W*??UoK(m74PZ##_>k3+0o9sAL9&KOhtT*nf_}nObfbOhMzKR zoSWx?wjmZce<}*|R>bL_31A%3@?u0UmVODnI0!$^(@&jBGocw?a2#y?-liGt>BNHJ zyDIoGggN{%TML`oFWaKb%f9nEpHkzm)Jh4ERzH`>){b^tX>d|NHqt^tTMBKgOhg z#*{GnYpeE~uS5Iy!mkVeGuZxFs(m~E7t?tK)4%*T>Hl}11DCc?1uI;Rr_}SAEgrtroXm=|8))E zZ!_RC2!B>M{fhyw=(l2F?Y$;E(YnoB>Rp+)&Y``JB-d!*QR;2N@XrX$T9r(h7tXMT*< z{j~6XMH%RBBoSw)f(%gI3;mHGs+OaH9z?~^Kgp14z2~CUSMd3SZ=v9O5WbNCZv|n+ zG^FB+Wj2?k;$L3=VRKR9a9x!fFj!(=3*kDs@~Jj{wp#m(E6Rs{GyYA-DU{{fiNQyJ zcEZ+p8Se3*2JKRN^jGOu^KU@c6H>oZA?j)vYI0u|85G z_%mIfIpgn-s$b8l`um~i-%qLa9l5JS?oPvDk7-ad9M8?3usS~fKlshN;(RxHykFs^ z%4|f$tF_aJh`CIXb20C;NQ=qo$Pvdw*{6B@k0)wJk8w_wd#Q6Pr(qqQg(A@Uf}^5w zz|Hs&0~zM+KV*4NVD_;;3j^5TEUd~7|QNzsp;^!FDd%5iSRcrl|Z zG^F1t@i)|aV;GKw30F)JxMm9O9l~8{z}-Q(OB9^_MvQeZfyc~%d}td6T4XPoV%XQedxO2Q*LX%&&2;+nDBBu6}2Nz!s5hJ6X*wp zyDimpVw-l|!|*5RSPB~JAp&}cOz%H&8z$xt*Pjr+G~R&zwT2%9SH^Wg@4BMjA(N^D zVoDX0g)g-g+;<#*)SaiDJcO$s4p&H*0Xc35X_!x?+xer`hcYy*$Go@OTrX60Er4sLi57Q1S zox$`k0gHa7cUb9GOmDE#i%D;Zm7dS^dscb|({ru#M5d=%>ETR|XFACKa9kX_A{YZ2 zQ%5)$B#P4b(i?DsS|D=&6_LL88w7#b-Y*aoDtmSL@S!Gx!bC=djb-eSqe}z1)sV>7 zbsIxh5%7BV;T2k*9_Of|{cw1kGaG1KF%^n9itw$d}0 zzSBxiWV)x7?$ZZpmzB<7+G(ZRGkuAbZpCy%D}6rG4l5nY^e^RR|Bv=YdWV%RXL^H` z-pF)`r0w(bsPp@bCqw4trhnDfm&xykE&NCGkiOGOmowedN^fM^Wu;4*c3SDhOkZN9 z=QG{VO3z^0VWlTB{maj0|A#ZZ!%7cgdV`fd+7;;%D_zd?dsccQ({rtKDbv%e^kSyR zTj}{sKWwFEFny<$p2&1hD?OZPmz5sGw9`uWVfqp)UFt%*p_N|Dw8KizXZn|&X8&g} zy~9dRWO{>@9?o=$l^(?Odsey+({rtK2Gi55bbF@9Tj^FzKWwFs-iGv@R=S+&o>qDz z(=IDr%Cyr;FJ}4@D?Oj-hE{q8(+(>=k?CK4GW$QA=^a*j5Yrp1bRVWmB(3%rcG%X> zn;Yk z&$sixX?XcWd-;j&Vf`OuFW(Ygo?$OvVlNMhAL8Udmvb>*5{QeStV{IRIEPA|~ zWMe_%__d7V$KM{d!{F+;BKMz}xcvdg!n7UVG0s;j-`@a_9_u%=V*O0U`e)??O0_l~W^}$8sv7d9E*~Oxj&p(LrBd9=%WE*9M%AGCt?}_jQOv^Y%+r zZ;#H~9zqu5jnJ8d8}s686`mEPz{B|g@Qfs$>lGgR>_9t+*}-DfzH@8f{-AhPW#&$-}YbO4uvbC#6E{#o;N&W~_LUFfL=da@KfO-Rq( zik@lhLCb3)P6#!ka0`P|)bwr>?{OiQWZ2PCPz7MxAd-V|aNv;tg|uxoLQLslEKf*0BE1x0i1TFP~^HUlLxP(cRYmtnl(y_VQ8T<+1ki ze&OZiH`(xa3@&#;$|3NLSE zFYgy#9&0b}7+zl9-roQ4@=|;GiA~}Cx0i1TFON;N;a?J7Uf#}DJ}bPu)LuR+ynMdB zykB_vM0Jcxi(nwIYJI2K9}Q9YArq!C%hB2`|%YL1N0?kfWBJ~&~HOn+H51D zQv~S)5t&;d`h?L4(XYq(4Oiaj*c`w1&5si14f+^io*t!NcqPKT@9_}<_WJBm`cu1* z6)8#|hxTJMpTg9fnDjV(eH&nUR$;Qo>1n`JvB-?m`QbeG&m6e{b9z*m{t{)r46KdrlF8bZ)mP-#Zy=O7N% z@Cuw2c^c ze5}w>Ka7sYzXKg3?U8d3{pG_1ZaLnr3-0#>!lgxlGv*_lA1&Rk;{U~OR9t^ZP8$8! z7Di7Cd`YLx#D{z}rKf?S=fe*`&n=3co}{O7I6Wm|JV1=;s5PGzdA&PS_~V-z%AaiV zC$5I{a6UWc2jS1p?}MHmik_0oK~FyD4B?M6Iz7WjEBz0n=OxkqlQrWH>DlwW(9?wU z^i=dXNzY->8A8uoG0uqmDSu4p8SM|{k3SCl(N5Hi9@^IcMNj&BpyyUa&)im^=bmtS z8b+t*w;@7L*2kcSgNW(h9;bin`#b1a`ROs^|`sCr!MK~qv*Ml z^dyJVvq4NQB7e>wDf~$aqo>mr=uhJBpl8ar!k^TCfu7qHJsVnrp6Q@7gg>t6^h_Kf z^b{0^^5-g`)FvOToq*sbpf-f6x5e;;OUC$9nR;}%(Bt!h zo}l>QbNZj-M{M*2jlYBL7r3rraL*C0I0{^N{Lo&}|H(_B|5Zi*=u1I==WzNf#4tkW zZ?EWIGdYz0PG5tL4pHc+Or1Yi=+6s-OD9}R6u5Buhi_K=e-ZS5r0Dvy38 z(+ivp`n}&D{!i8aJ?D?(^Irz>)t^Cb7k&m=YxgC1p^i0Osh>bD$vCE;KpxRM>;$rL z-Vw)FaGV)uKycGl&Uv^2Ew`@L_fDJ;*;=uZ{#UE0Cy7GcE{yZa6ZEvJkDQdjZ3^;< z3trSRPB7y`CLE?Vj#r!Kt$mL)m~b?Au$-)U1Kq{ZYB_B!N3GrR)slYHI;5KiP^kI8 zFuR#8-Q2I8Y-OC8NmwSQSnUU`)qK{w?^f)ZX$RnRxJL%%wAYdE2ZH!;sp3PAfztJP zQ%9PO=@|WWJ$)fAqZIpYY0l|7ZDkhTjvP@p;of+c)0xi}qe))$)(d zzo7NN|KsQV_I*b86m;J2<2B6E&-)Es5`5mT^GL%*uNeCK&imz?Eme2k@2UQ9R3Yd6 z&aY*h_xnHWzdv6c=D)ukVep_wVb%US3G02o$A1_6tqT9$$Z-b#`%KS^{|SF)_Wyr5 z|IYM#i$CGj7biH^^oPcuKl%43|IXyS>Ob}8%=AY=kHbvikJ;~^@c(zem-MIn|CGPJ ze)WgO|3CHTPyP8*fBqbQ|BOHWe;0q@q93_IVs&m4w|9BoPq>9@HN@;1zdav+ayw{k zK9;S#ub;tISQ~7G;V2&7|EPn_Fy~Ti<^`YC`{5Iuup7mF0r_(16QGb!{c(Ma_9L!- z)pu-eksTOb^B`|QC88SM7kC~YrGJWpg;Q4v7z^={xbJW3)`vvn)`x?&<<^JVm*W&7 z?tEAtzZjnu@5lW!aw&j(I&42*g!jo7;hhHAc*}c3}%efcVpy5+|f9kmVTH^XLbtxJ)1-d3^jnjG8*oveH z#cA=ctmL=%2X7I9B&atUpzY((3Qii-ZT%kQarZwgdE5wew3jro7s?CoM=5y#XM%U7 zi6cfkwOG13}uy2bk(7{YPXknVM2isc6+HAKWC^${xJoOq#69&Qi&%OW`olq z{LDlnRq*qsd13r~{+SSd9(p#EpDVhC^7GZ3qwsUfzsb)=cUb(qe!88X_k-WsilQj| zeEUP;=M7Ws{M`2&y80fN5Tf6Az~qDZS*`!*uJ9io3H$R%=N0(_4{m0w4h4_#2&^G)>%S(d&N7w9V{$td;EEZGX8*yN5dQuK6%O(5^%eXg!t4H{2ca7&XuJO?CiEZjAM-yDBCj5S zM*eN+d*D|z^A4I1(f596rV4%k+uSgHf8*&8eNVePRNueGwUxpCn1Kr!Q)OVKv;{o0Fy^}W|k(e&N>Hu<}} zpT*w_oa46QnKu#dXgQ0c=zIV7gui>d27ejPy?m1W2WLX~doEl+h`u*d@GA(f>-#`L zw^Yz}eP0g~_+$FMc%cwk`6wEB-_Z9HC(z7NG#{ex_oJCA^!Nx$No&Fd;-9 zV`1&TQ{Nv{_@_S%{GS^7{_b($e^}wS>-$B(A5GsceW_}Fzsna<-`8+hwCnpdXdC+8 zwOO#f-`y>mzRy}f{(jZR;_tuju=S_5Iyr>_0dY!rzPF z0z&k?je`H0@VdSaBlNWj+OF^0VFG_l-%I}`M1JuQ8d+}W`&n#eEt(I}_fcr33VnYJ z&nAY%hh^RneINMuP<=oA*HC@`GChjEpY;ai(Y3cFkBfoM(s#;BI}D*j)c39LNLPnU zFyujfzvw8sx&urIk;hb6d$7LqzGZuisP0whsO2lPpN|IG`wTTNI|8&%DYSMqzYb{i zcOyOCZzROt!`K(EQ21`dTX|ah7fc>rh?h+Hjt$QCdHkdCuJb-^@S9NG;@sxEjc%9r z7H=gDJz*E)>)IgfC?F#CwZ2}q@^C*Us&`;0l^Skd zGkZ`Q3)bs%=v;hr$D2~OYMJ0SF!9#(-<}KLVprU+1u{w7xu<`{2@>9!cU$+km_RlJ zr^oqPueU`GJM#=V$o+SR!LWW{Wr!SN;VJ?b09roZYl43ha&d$AF|7rzcE-C5I6e6S zlkfhZRaWe`OTs9b&|J$ zo}s+jFN`d&ci#$@*Sgmu$ZOVoQ(iYu50=+Oy?8c=@|u?!BCprp6o$2X(k`#^gJ9U3 zU}cEB`oL>Ml-EDo2g&QV@51CI_Y>+C)`7EHT3D^zZrY`afbNVzAB4nUw)e65D^&A# z``QGP!-K5gatHmUQrF-0_bd#1YmAi`+)pgC+BJBcOj|yKB2L&*%D(3ngMnNjyl~+^{6rTyvRy+KOV)GuJ|Q) zK%cddpb8*_%l+%?J4b1PA!6u6PUfj(ZSc~&s z+Q)B*oU_L1at51YegT`8F9?(JFc@lJI)Lz9t(GTnSABgTS=}p5{`;G(gg-=gv)7e_J};u;2K6zAQ-})|A2@X!zX2uPND6KDrN0pycu9tn#6dYXd{_ z_-GK4p9bg2JFMgL$0KRpe#pxU8&L2G+SQj^I`;wV$ciM`H6MOfK&Q@THoS782wvN} zov-0;!EHq9jpIzOM)3{mBoco_ce~f&3npd8dvRF1qAuUTk+EWIXDi52FF=_0xi5cR z$H(sNA3yEsv+&HsWZHCv_rM{z%=HCy`lkPnJ2)gr- zp&i$ONbMvD4)O1Az_nEA-{(JL=toY3@p$uGyMMp1(;4}9E)i?3UXJYFZ-(n$#v1x~ zyzi9={(Z?D)4vbJJ>~ZCcuko@;j{$OQ@e;*DDi|F6|ZG-&# zMVrF>dzARet(x}_L-WH7c}?1b=5JEX+pYN+OutHb9mP{?dJGytUMcc=k`X^WaQ&If zYxwNQ@_Kn*u)I1$u3_=hSt3MElcvK^PD(P1PwCwT70G+lq$^iY*b#&M9`TK#(8l>+$Xb#ft zK|w`5`d58?UfBWT^HPq_&E^Q(-{E>G*9$Q|4-A0qEg_B&sjr9S1o8<~{tAJvx(*eW zmDD0olShZBk+}l+0EauS%zdDlfYUwzhxBHQEcY)0tUJlc!v9Rrm#oF@%(?Tn^)G7G^HRjJ&Kz4P?1dw)* zYUV>O12LFod@xMawd+y~)Mb2-iY^4l2hX0R#|Kwg@xjHoMpUd$rY+=LR!Ju!rp>6emN&5_xhxoG*u(c}3pW#m#`W7i(STM^T zFYIo2=Ht)N=OT|k7h$}y#|z7zk1+mtp~vuOoWFOT7(D*myw`{qre7a2{yh7lFf5tj zx4CbzaVHoy3#<(BL>aKyh~v-SQ-a2yee1%;pD6J{W7YiWL1=!2A+Oun{DrD{yLTvq zE2&amrIV|Y*YW4=^7`wwXD+Xd>5=6%6mf)IUgyq;Ag?WwDe{_{A1tpsuq&tn|D7E} zj*d1wLONizI7Ne9!#;%js3KlioNxGpXz{|%XMcCR(6gYrc;Vs;EFCuDg^IT$ z#S53^Mu`{Ju8$Zmq+b;lFPs-=_=;8MhsFzi{t`7_c=0*Wrz;uun||bnAHe3hGr~0L zX4p33h5H1iMImY#>U0=lVhk`u0om25DS)(gs+kG*qZuP!NKk)VV+~E)`aM|iGN=xT z6}p4Mim~Q;o3Z{hMq(hYKV^CG_L=6!^J=`d4wu0dW9FK3JFdIN6K+_7YO9u@)@ct< zqsrxU;-Q@HNr-F;bx#KLDu48T|NoD^QJ9sOAMNOnO#LX|f=;}N?uGE9 z5Bz}64|_b6XkWj+RUzEk4+x(mSGW=R91-?a2<=>{3xomOLkyp(=C|!I@e5insXf*j zJ9u8tTrcTi?q9U^lOgf>lToaFkN^hyQZ z-_FMJ!mm8DgD1Xo?(+El*>}R;vH$plo=EHcnI5`0S7SE-&;)0=JDkI1ihM%y}7D_F}alcmkGLa*OE7{roy7H(#(|C%FgYTEN5*Y@+Wq|jTDt@FO4gP8U z{Wf`G&$r2|hy=8I!MqT8o(JCm-N5`_yBtl}MLOxk;mW``ilsoS4}8Ef`(8ty+(*87 zBiP)z8D78~*$4LaepGx7RPQQOc7F6Hs_OmsZKJB?$N0%n`7zNi{CNI;#g7p

6Qv#g>uz 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

xvLg1qUQ3f?DA9d|+lxRb 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

-CtI)C5G*fR?Rx=+sX11+3 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

c_{9fN#EKzc>jUx8VSmaAfUSP%4|*i< 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%0A}qHtI0@66RN+XZha>+RI_MzCIj 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%0DDlv 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

    OF#Bua>Sa#VwS7A`)R+Vm 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

    Thgz?YZ#9G+g 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%0Da-JTdl0a0OszqPM+;O7U5YNlRP;9SoYGw8o~JM4 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 OTC;sE&;ySW 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

    D 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

    bZ(-9{XL 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

    expa%aC?Nn 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

    go}Ohr{R;1lh=i$-@UHm4eoex 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 z

    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�g1OFbIeZx`dlft+>t=gFEj;2k4KqL4R}4t& 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

    k1Z{NDrF^*@ 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

    dccA!nO(X=Q;LIlt0+R$+PrL z9r0@a%N~Q9zHE&{s0>T~5uPUe+0a_|b8>UGEgO3YYYzz%-%-MP2vd1VZx6`ku#U_# z^K?^$kL(e?O!y?>_Pn+`e=T+@gKfg+2=|vk(RYw9V0)KAzJ5s&FLs{3?AF_!`sIH@ z>y7@V?;eKNbk=U)$SHmG;rJB{&k`jHKSOw1!EAPl_ktS|B`h3gXB4(CVp89=Ncaxn zPTy2pSOePz3(7c!ohPiQFh5K(s%#B?OIVSZT}VIm7e;HfCT15qS$XS%-|D{Eoc`Dc zwgL7S!u5!51Z+Kkod#R;#g%-S2HOM+%9kbZ(*3ipuSh)C!AiiKauK!zR_w!69>w3K zJivlwCHhLj$_ex9gF3KUuon?-%U$`?+_Qj_z#Y)E?m?qAJ_t<@G+*Z3vQur_rkbNw zY}>}1v7~hiC`Fo!>0cS*6&an^lf0gq0I!`W~3RZxgH*%&fV#^aQzmz}QJe z-=jYg_Gai*-+A-t##bF_u{1rh2^x(5V@zgCC%Hf`(Ocm)0mf9e%uus7 ze~B8~w!rhv|8!i7K+JjPnwdCoa{utYdt>)S?~j-<%o1sr7R_e=SvG&TzH5m#%3#SI z!;n}GBHdaAi{$sw50}hZ=eg4lPg-mIG(3+!z0j$h;}1LtZ8g6Z=+_Ue7q{ z<=bV-)gBHWjklPUIMk)7f8tcfXRSM!$g_XFiZ`ukB2mkfI;?B?Wr){CyiTR%)ft;1 zbIzY+2}%6R{wzcDB}IXEh96A zC!T-)__)q^XAB>W9t-y$7`s+BO+Wl9N@jh!PNTL%I#JC!aTOXp>c3~8t%cT{U2N8g z9C!Qs0%3K8`E}Z=P5*Fon$ju#XZ)4$3d%u+RTDNE5~eoQOxOfremUC#b{foYL!JN| z4`4%JV}ZD1V5fYT(s$&(4sun#7Qi#$!8|Kp>x3;4=Ct)R*bdkx*zK-6j3@5Beo%>7Ftw; zmKGX4yF++8;f{T*IK>-`_jBT~R0zA;iBm;*uP+_tCj~YN_G?OqM_4P^IG8inpzrMh zI|CN@UgY9Hj739o#@OmaGSZT9;x$gZDdIWbt9(v@&4E?$Zhc#Bc`p;b6o|6{wz@~0 zq94&72=}j_D+k*Edxp~CQGTkyVo&hOT39_;(udW7wSm=vUB|nn2b{C8?b=25AB&?- zZI!?Yn$D|9=M?eV13b@w_5PAP)ps_Df6B*GSySJM{R{RoxT!DGew&S4QTZkbnQ-Ql{h?nyjQ`?96XTk9m2{lf_HKgdE@Z#@va50 za_|7}R>G<;f_EQuwGI!Px7z6_cq)Latj>U^9Xycc0%6S;k>(b3tqu=gnnnLge+%GB zGYQ@aF1cgL8n18E5!Q8qG{vJ6x*q5}dBs^4;HLfw8{8#qjIdLL1^cDqO%pa25~ehk z2^%MDuXZE4^UzIPfKL6V;@^-D&^dirSS{F@0M-m9etxgPY@=?2=^DiSs9?fqHX&W*$yF7vMSe zv`3F;Cp^plFZEL~o1JleJA3%(#|xt`2saYzhe=@k z!XW`icikDKRk8Uac8*s4$It*x)VAvT{{#8*EbJ`z`>B0ry)Qce?eFITO!vKkJ1HFe zm~ZW`8CSv5jE`60JM`??>^TASqkAJXqv0sy8V)o6)=FL%*6IS$s{4nvYC9Iq<<=5hy zJ4ew*c-=1HO1GErcEW>m6bc(9tcNhuR*awLN_BN3mnI1t3<)#ePuMBKs-V>)Yz=J6 zhbiydU`t?Ei^%c=GtOr;iu1Y}sC0+^^upQfy$YwyymNT8L#K+cFTtl|n>Mr87Cr9`RfyuDlMzV*?&Cd-SCEjf1T}LcZ(p=y;LG zSN(JctR2kk-L`EnwULsaQ@-GJyj$OH)|&ANw>h6~)^659H+B(p9nei(fKKv$2)e}! z&?!rj8&lA(L3?M2++YF!u65AI)@&F6be`kc*f7K+v=dnb~m5H|FiH>85uEU9*s}n7) zVP*kyBk=8qZw+ZXceCgDoV{<+b!gGYNCxJA%klV4iRr@YQ7Mh~;vlWmhrinUI%%|| z&=0(`?#4E3t&i&fiv5=r{wE=Jo+pQmyG`dJ*_(*sj2sU#E!_W*t^8x{;-!*HE3qCTf)UG9C1d8WBM{D z4`>XbzO(|q3hwAD$(2p86)@xTGqTV+(?;#D=)6UL8Shrw*h*%7jlD{gJ}*V1@~nZj zpx&OZFnm~qf}yT^+LU%H;VHtMw3A?6V0B<&YgP$1Wi$*;8k!pfxP0s5x53@npF0W7 zAT)ceaFwqurp$hfT@=Szy?$tL4_)G;v}>ydQF8x3&{Fx)@c6661~ znH@4-Ana5g_5Y2$Y{1?TfBFyhG!~j_!V2#syknPemDeEQlZ2b`I)4j01-1z0_>6^} z0bB54l4EmV^I*q$XJW#vDNFLY0)8I+zl3X+jm0BmD$>q>vO7g{9-5V-yVFS4B>xBb z)rc+%ku_f5Fg6Nf(MYsc{WE_IVC-_~${zTQ9-GZB@~%4e>W^WbJ-=y=Ua%|BS+6uf zys9RzO{qLGV3lBwpILRW1XcrPbf9TNRM<_{T~~^;MR+~o>gsxg#Tcolzz!J1(mQ2f zbzpB6X4(vb;KbtTwk3)>*uQHs1t_M1A%_+^*^i`dBWEUKx zt}f@DIB9;H#4BpX2cKJ)0h`XYH(Mg_2^DA<-QrbSaG>D)WseT8L3nLlanZa^h31P! zT}!@};I)3`Z0P=WM&Bp*nR)D2=1y9h?_vI<@Ib-NFBvyY+~TVqe!A*ogTze|cYt?a zTQl+rjq(b=t#nM&tDfo9h&n)1+tVjRm#$uhUkCi2Q)uxEpG&Q0Jc-SUcPD3h*xYj- z+>FNR16Wl>4iu!Xo^{Wv^RE%WS~w}YV_-jLET$7F?wywuV9e!T9dO9pD|-SyJ@END zJS`b;mD7H;rwR#*vcWo09~y_YqSe-${GH@C1y&6<#=F~3BFGQLL*aG;uRwDKns>T7 z-PkLrX8SH~&#pMiq%zVm#Hu*Ni42lwVXG5JqmExHdZ1wWWwY5o=iRD1(m5%eJrKJR z-I8PI9*+0;wMU95{lu?tn|04>_4|IvV&t>bHZ#nQxH0GWF_UEdjZ&06n1{#6b+g%< zRo{fz`-l|%uPIN)yP@uR(=b+opL|X zo$ep3O(*SE;-xxR&l4hN^L1vSxee6xmR!@(>|+$S2HOEEbo-?7DVRR#t#P#N?3UnbDlxJy1W(8Bfxhtp(teOSS!8|FR~a^Z4W0jxCgraR zV^;4hO3FFgOl8q|0L$VI&vxkn>jgXCJ)5ny+lb$1Mc*@f_#+<MCL4U%uhn3OK=!oU@p$yfB^T?N}uq%-0-_dKW#=6rC^hUFB2Xd?=66r zzrm|p*_x|hWnjVap7`w8^k&?^K3OOIl7j~dT8R^uzWIK_Pwx@lLiqMB;cA0Dgx9~( zTX&+o41%?Qneo$AR$eN>$G|7R2YL7DHFGWc8+^8{XcwR@?wz&n6!LVSp?#x|wiViK zXnUZ2Qi$F|*w}UqQ6H;wWF&w5>*tQs{e$+A<%e&MA1J83+qUCSw6-2@lH>jsClALS zcu@K6g?225mX<0T-cQT2LY2>HXbavnn|&Sc1?>FSp-(Ey40so~sbBt1@>>Es0rocD z8TXY$m_I>cVKibHUCt;ScpI8EXv{f}#+MT&JMBI{_t@xj)ammDu^H2eUwtv<**Ba0 zg3@GwYbLo3%&dJaPaG&%fzJ34M2Cru<5vQ!N%vOrFKcnd z#PUlvLqE|!oBh1qulDfe89&-#wW}~+9{kkq$KY4_Hg9e~>7@BhfhWP=o|}#t#~S;J z`m+6>N=N6bh9r|VYvv0cbD*Gez)M5zxfHAe?1#3l@_$FbPN8|T#xvZ%YV5Zv_;tds z;H15FoEoIJS^ib}6c!5J8F^W)NA)^t(>Ln-j4ZS5&guxtz-|L(7FN2=a?B~-BJs-p zVAi^$EjON=E6%uztyQ`4VkL~HhC<`*nO+_7((ee3w`+Py@_B-I9e>DLJAI$5Y3nd5 z@ojYwl$>=-dsf zTysx`Bu_f1~f}A#9m2GuQ9c5sn_` zq(N1?w%^py92Ry$x%_0i)}!hRKhkXer4N$<+IFFJl*>CQ-lu_?&x;eb7#O#ftfX`^yUHfXG?B~e!-?!p7aP?1sj6?DF(6n z)fU)kurXm?UUkNtO2%#Y-XTZzag~2%DfK(*&3D@8d0s}&ok%9l7U(LVdxM>32mg11 zjet$tWt?{&8okavyD!DUmRc;Vz^D(`we}n2YYWCU)ugdN8k_H#wazUx^{jnSN8_@d z59R#(3R7m4#5qr#>G#fNKgWB4r+3vC|JXkvo+h~Ramb7J&1U~o4LM*l<&EjrBIZ!x ze3R*z(K#pJRr0}E_uLir(;={Oup2KtHs)M{Nc3aUIr#~=YXMf^S2fQ3J-qd(J#2#2 zf*Cu_#tI&fy$+`Kr6u3; zvp=N%D0Dp3@(l^__Ed2eo@x%YWqdGvBxb zP0fVY=JoySU@Z|jj-QUdpCW|w(XN z`s>FS1KNB!Z)k`j#=(Yr78MN_${QyG=He?UGsQ_0XYu3A<9c!M(-Q|b9>khs6SetQ z<*#z;BTm^TX0w0HyX>v8Nql~)ALQ4)IzPd`X01^N&MZ>26u)Z-G{l)N%qjjuT7;NG zbIjN$>0hV*|8h3lDOug-6f1N5vKk4|`ue>R*4eotF29Lwn&{(6zF znt;cdzqRc_*^9_f$(%XxDex@sK6}peyFYSyAJ(AVPA6^p>kjey<{o~$>fgYg|J=im z*G0VI&p*6)k_F?$TPB`={4fQ!6u=h17Qx=Ga^O+ftb(Nc;cLkGO3;PpnE zm){OT8`=pU=k8A_X|e;|Aiq<@J5RinJ#O>Q;Tj(pwjbx4Z(73GcoY=-3ZrRr?6I^C zsLesRQsei5{BwFuy0t}u-sOZrb&7l>ljQ#kv)PwOrm#NJKTl!Cj~H`ZiOQycKE9UR z*@wnri&S0~2tFFeEm>I)dh|i;o<+W#lV*=QId%09yW*g0w&|P`X&qZHL*CjR%w5Z| z1l9_sa@3XfFXQ305D#YQR!p{x+Egs|#T5V6_3P2dpN54T4n% zuv1`FU^(l5z$ydS99TsFTLw!8unn;C0Cpa%EP$0f75^lde;i%`RuaH!!HNS|Ggwgo z>i~-duoGYfVE#H90y|GT^J8ORI{|DGY&(F>gKY({6|l_!wh6WozzUv*{Sm-Q!PWv; zCDi5Z}HCyd@3QXuXDcEvH0>w&v@?Vm1emqs`S;qiLNm7qjd=G$vkHxWzx6QK3YcH^jDszMU8?kW6n6@2$%o0$w*a;X z_7xGK*l%H^d06K{;{8$h2H}0*n9Y964)5`WtKAhnlm7Efd@|Cv#(zX>=L8-|sgwHkVrEro zjKQz#yY@T+e+!!gI}yOJ>=f8>-qm;Q`DyIoyPSr_%%TFV?7iQ{_OR$V3?UqJb z*EGu5_8~@wX5d%${aNcAUh?Okr}KQW&e|0`8MXQDV@+aLlb@nzQ(o|Ty`49|ovu5@ z)$y>e?bc+~MICWgh;vABcqC6-z)IKgoeD5=u%rMZCmbK6bz%)7%FLInK{pEBn?y&N{`G}s#>x6FGncQl zN~*AjppS{3M_2{eS^%pBTMb~%U@HNv18f=0zmM>Q&CjuI^*uv2zo#it^F7Xa8P_;% z(`x_FDSw6zQnl-Ou!0}3p2Hq1`PUXj$I+a2V(9U7E|A);JK0oOOv!yO3UQfj;)5+3e3HM@^e#J!9Va!bhz0fl~NTYx6yJ zT8t!KWAK{(7kh1%;YI(;<7KaLTPuvbH?)N}#*P0EUc>)tue&$A@Fx4uL8a~4bLQqA zsZdtOSZ!RJ?B zMhy@pV2~gI0tUTp)AlyaOfxe90%YLM7$87^00qMkA=px*W@f5Z3{o%;LqXD88iH}vIL<|@;K+r1H`~Uvd+2`e+d(z3k^Zd`}llI)--fQiB_RHF9uf6u( zef)m_q(b>wCqJXbKP^#7&U-S>8B4gWiopK|eVFq8h;4cVFWZP^R>=FFuJ zXBSC*g}=4*%S2b1BJ?1kFX#UQLY`CU;`cek#^=FjqW?Z>-dl@fd^J0PS#i8JIZk*# z;U-IHfTy%qncUuC&G9hf@L_YdP`kKD+%e*6ejfR@SXsMvVe4t-ZA^3MKGC<*KjCG* zMJzzvuk&5@YGb+AXY;g<+q3xt*&O`K*&Z~<7Y4vVSog#GD!j*)jupzKhyhrRdp{|3yzY^C*X(EBSMScgK8>g+0HT*F0 z2Oegdr_JiTYK?Ji;EUjQiMP!GQkZhQwX+_=>K;2^oKcvyW4SW04kX_p1aKYjN#aZq z=QhRZ&$jC3uV!8+z_-9vM&1};`vS-_8FlMZEcaU6IpWqlZoc?GL0o_QOUblH%8Y=_ z=Op_!iMv7EUsv3)9VVAIdjYb8$Fjo*vm*y7qJ!CS<fsc`RFadD09_V^`<1nU6ny zz9>Dy%eUo)DPn)1rR%$gh}TX$e{5BB(VuqoKckJW*x1~jsPxiJ-dy8$zFB25OT5YN zK}G~~M)X(LpJMusHg}{K(uwUxMQHr4!Efd%^TjW?u`Q}Uh3ifxN4O_9{RgR}RtPUW z(i6Jd_`V;Q4{SJ%Ua&GG& zZqswH_dRpI_;KFVe%xMy*!&~)-k6qZ`)gG$1JGZ9-efGlg^hqUw9W^%o_4Saux7AT z-j&Y1De^R-`ykG+huZAUt-5Ts#PG~lD~~JCUV`?0qBWmM)78T~QeN1L-%&a_I$+{j z*5d37oYEVCD@m9He*5x1abGj^o$E<&X*dI`#eV zX=|JJe4HPi&+C);s6DN~XB0lsHg*MU3#^84J&Lyjwh0!s3stq#|6*7@*cC8eR%!my z0=5qJb7IyN^efuPI|KQAJQK(~Zo<+&LE1lbtaIT7TOs%CC_XOOxLGqhvGX-*uV?siywBf zE_%16{6UDG*GfqGCWM@RA%uDy-&ttaJLZe8SDx%#2()54rTXs*VJ$D5FaAQn7ncsV zUsbgOCwj@@jQYqfai@MP9M^A$iOQtr1&jyaKgPS{<`6?Rt4B)0=EyCCuMmE(!eQvn z!j(Y3J!k+2b(Ijrl%vurK+}|)FFs8)_}IvIy`I+*@DA`-35VAy?UZBFpYm~zu(O0c zRbjA_V=`+)mJfwrBz)>R;g<=&aGmg7!WSdqIE)A1*$Dr-AHlvz_-lEWEIlQa5oLmM zI`SZp#_V?DG#r@s{Omm)=oUE%y@=IBuI93nL|TbgAl_->sjquwX1YO%PIFNE)x9FK zHN$hzOhI$IXlQ%UIXfOtt}c(bUG7vX(Nxx}(5*mc=kvf%YsBN=o8W8UFI6A1vVI-k zW4=XvHx4%Z%X%|1)O-Jb@-KOj{2A^*J|7I_kMeyQYzoZQJ;=A(i0b(~_zd`u^6urE z9-?zf2p8QY!dD1aT(y&zIJ(Q=Yv6wSiPo>;?h?L1czCX!G+Xb<^IzQyz3>kN<6F{L z;q;>6^k`+0P=-$je+788bvk|6>XK2+?GHt%O3^nPLA>sHBy&gPS4AWAQ_xRC-^;sK z2C`hAAflIJeb2J;OB`G0X5QiLS-K@7KP#2_CgHV*-S_fa-*^?Q0qh;TM|2u=;t8#B zyFD;6fQPn9T3V;h`;MAd8zJxfQPz9l^=|Q^9_}KC$91+T?aJR*G)SCT;+$3-YlE+` z@Dv}?12j%}!;$&ow8CR;o&!aCvVCvN7V_Ca_9on#?ZNXUT52aEzeLZY@4f=hadS+qPUg+Kuw8bQQlG8JWv41D1TE5+D8(!o2d2ipW z)q&2_X8I~&ozJ|;J0-#MTd2=5zdGjTcwv4S>&Y)Bdzas%%C9%o_1aYrbe+&W$&EwN zvkSwsX)M1wK_%HJi*BfIKM$|wP1+Sr7=8L02`6Gv2 zKcv*$H()CZKJ8dWeXj8U`YCi@b#!I=huOf7WQQ>va#&7D-#9Gqg}6$BzTOJ25%~7s zIv?Dp9knS?D`Y8b;1q|^%tEvB2xuf5HlS%c;pW;lPGO&5P3+Z-Rq7)Z2U$-b-0vgJ zKy_eaV85tvYbU*I5};S>mJXo|JuYyg+unn+tF>KfI^S@aM zRUh*B`Iz$405%h$1+x6Kflq;J8m>q5c}E|``oWZ+C^ihH{6w+SVER6lsUGp01XKC= znDR3Vrt;a~y#o7I?SNN@%iuk?g>gl{4%QvRw!!i-tfG_t8o?y{>cDbfb5;DH?Brbqc30hw39ESVe6VMvY>vt7H1(3w`A0i+4TrI3K=;?Y$H$}+ z8HfYA6Ci>AeIK+}prz~Dqi-4lTL=3}Aj?g!2<=dmVz6(mC$&PkmRmbn98kZWgV$)^ zytg(_Q?Ru$=IUxMN^70)3Bv!Bcjdk8`~$ujdjQViC0<{0L@Qa$Q+sGSg8uMQ^aq!3 z=cgUo5>?ieR;olld3{X&K@Cp(c-fftR|y|48mMfscXvHUovJA9jF`fctur zupY3}V19p9-y8rt3#NB(JkiX=8zaUDJ4e`)gD`G2;=P%_^MuV1_PZ|3?Kz^|rGDBQ zrfDcx!Fvc_A#O)uKDa~Yl(z8&vzr6FAJsBDnzQ$Be2&v+xOYE-lGC>|9K-$%PrnZf zYX!R)!#cq(#IQcF*%&qiHWR^Awqsz^U{*HtW9jw6CmnqpzW}cEN&yntS>DG23Z^3Qf8TnC7DL>8N+u+f0UU&|CH-Ud2__YLl7`*DP()>%Fjf2;K z|1j@f8=;zCZ=%5D-3;L^gnvZg2%q8IlZU~1NSHpPY17UbPjducAnw3mxb`=}jz{!Zn@4D4 zERpHZ+=Lmt=XKeT2SZ=rZ&&$&$5VrGC?5e>Zb4soy_+wS zKkW-EfVY5GgAWDeX6r9@e{Z<{V)yrIpALd1VF==Elb=g0(Bm1Uah5ddhOmVMX|MuZ zwr1+)Jh{|VVj2h8-kLDV!QSjkyQHy38t)f?O)hF*qFcGfa#Xi*y7wbCKDOM7KJA*sBdf%c7ZT!Qxsc74*n4ZLTm~WKK;b4?O{B63-Vb?0JhKT>i)U($TxJ&?X%U7|y zwDY%N-+6avV^e$Y2WtjX9q7sPHw@MZ_8tLY+oVllS2>0ls%N3i+UH^RNJM@f*ESWe zbac|xAmo?eH4d*&h!=HLrkB%Zwehm~02?S^Tkmh6;HXN_t}>K{9(4yeV%96K?KR)d ze1^1sP-&5kQz`BI^lagsgzXU4;le_{!q@w)%XHr%;#H5i_Dfwv=V5{W8^&6f39J=V z{z2QBQj#szx5kc3@SB8RZ;&oUWas5-KP#DZ@_dtcYs7oJ;<=}V|F3~>fgcwZtBW`K zW;h)aL$Ksg%N^wZJ@di2+2Oo}&RWlwR9hs)>f=vhSOHTz7=W%7x@YpPNBv*~tQ*Y6 zE7FeEovklXcO#`My>_Tf1GE>R9fS5RF|)eRR$}#Fub*5de2s9wT-d+MaSqsS+2yA` zzDs!RPt6xUBzo%;p?y0X$J|`1C&f_!>JrottDAx3JDNF`G{)$Adwa1*z~5v#zYF{g zf(?P${@|oEP3Jf)zc`JZ?@b)n*d~4?v447JxvY}L_^J6|&y4!p2H0t^M+M_)sOyB^ zYW{di_w9T2a(!3Ji;%yk;l;b2I{tEConXFR%n?f_bNj%%!EG&#?~RVJ?Dg_GGW5#h zY2p@$`zGF1AJKl{)*4&=%b$ZuoF>T5F&Pp%iYJHG;B^{a-!EP~n!|2_O@Vz~0Fk4% z0QjG|fwE_8do?|eX<|^rXexJ=8Ur9#Ikdf)`h9O$&OKmxux_x2c#n@8VL1nF3cXfs ziqxZRis`w3ik!;!JUmz6>6f=yYplBnz6dT?L$Cd7MaYv0YlJNmwygPe>YEzuP@qnw z(?4Bl@}P@F=~jZS5^rdHzW5Twv--iV?)2#Nm(b>&72XDKqA1;#mmqI`*7bi|7vvNX z?oU-%p0F!~S$}4q2Yt?#XcRU;SnJQt7jwLO`5m$Rsw~F{>m|(QTl^Mw4y*uXYoiXE z0lO57cL{6->?y?2Bic2vO|XN8c(P^_tZ~BWHnH=$QmkRHnMDlL_BL_c26o&Q0JMornF?~=@>R=a0VV)7cGsH5z802&?hn^AqO_<4_^XHhe{3f|N$Zh!zsJSR+Xmq= z`t#@lL3^XHU3-Iv1YXF5Z6<3`9xMQ8{F#Nv;4jV>kMi!dS<3i~{DV$aX$i^uh69=VSZvwgy|)rmJ0#8W=nh`06# z^C3Am1l<;NHov1TT{+sB+G;328~x^kI$$C!lE5_)K58p-@Vay^Y%9_|R>9`Lc6j&7 zhdH2ILc{%0#OKz zSX(eXGHeT-C2c`@+kvhPx?kqqlSMQiKCc#I#8KOVgP#S~$^yX+{j>+-zSOl@r#pu> z*QoB?Bb!RXe3x@hn8dV~3;W}C7W5ctOi#{7?%@snR-{#VwR0$=K0Hg@b>iBZwdqW@ ze}{5CQ)T+2Iue784hPY`Vqe`=+t`A(;r;W)Mc!2>ZVaReOz1ACGrI4UF;KHP_yuF2 zT=8ukzxht=3*QF)AoLBt@~x*oqx8QG`YomZfp0zi=2wvZw?RJ$eZ%>0J^dM_|83B3 zDg6(A>*+VYlJvg~`a$R$J~Urk3ECg`csT!b*2T}<(4E-+Y&~fdni=S4q5sX&z8Lx& zmh{E+(;0(YpQF3doW0F!Cv>?*d-dfd*2+F`tlz6)qG`|w0Ax{U;MHwyD~XsbB7@9pGr)d8{?9`T>PuXOXbiQ~<E_D(7Pbr42=)}-^$4qeHS4EfQ6HNIuzU<_1?!DronVCsruN+j zHUwsOl&M`%k#Yy*UyP|s{CC3E6vl{m@nTp8qCE$80qhH!t5J$-7ow68i+h#$*YoSX zM7+V@4QcfqYhVLl{&zHkZGsJh{i*7fyrdt;=qQGV`HwdCG5(W}mFR0G!LES4$mK~lb+Byb%IEL- z;g!!6@#_9C{+l*uy1;8t=5jK zHD4MMBV2JV5~uNhW53mStiI*i%=*~8uFHG*#?^ddq})ZwlI!I&j8f? ziTaBPTpCo#vVg5?OJ;Vwj`8%f^ToFZ{Lq`?{Qg%twP;769r_$PfTJyuw>o^*8)v#A zcl%l&YlQY9v}0?|j-c=Fz)YrAR#mTO{3EX478;T)^cjCVdt7+5FK2G}S;-TvW{Ca? zO{c4q``K)bo@cs-`8q}C7zGLOgcUJn49ZgF62i6GI z1a`xX{0Q4aICqQoiD7)s+LLD2>Hm|?j+|hV+8x=E1Kh6QttX7ad;N>^#ryeEof2tNspuOr*{gAK>96|kWgb_Go7MQL}y^gU6m>doHwM6r6X{#d*gu)YYE zBmX(DUa(90qF6uCf+DJGBR$6}hl7&$;ZI*)orcF+gs;AF5^ObsY0R7jTL(L(w9I$H z%H8%XYn9feav)sCVYO@3EBh^ITfP+fCv?E#8dy8ng!qv|H*aA#jm=>}&|3~^6NA%X z@)-_$XD|eoKGE?O^d;zhU!~~Y2)07_dx)H8a9~qCmO+s(aWY2A>6<6u*Y{7MKdJh` z6xaaRlX>@Kn77uKuJPpW4tt%*|c@Cfl$_1TGr$Lb$G?eKXp(6>x~3%{5Cj2=>=tf`HSLcay= z>Q|`$U|cgBSJK#iEW1&aejCM>D9U7EV9bh*cicmnh?~x)wla8<{<%$CE0v>36b%0fa9aSXjKR6|7U9Is>J5-r&VzdLqYbBoV6D@utU>#t- zPl~V!uzVy9VN+n8VE#F3EnpYHa$rBtyVssb_e`3bK=C2M+1q`*`GZJCZxa6k@ec*@ zZLOPjbE*nMO;A?e{k2}(?;~!*+gV?RZpzW!D}6B5zbNaN4kovMmQ`rLbQjun7dygB zW)xN?Bk-=-4a?KMAFMitO@UR#u!~?7U{PIe1?(Dmjbc~8uEww(u-zC|^%K}L!_I+L7W!U+1) zH|L96yes|tbgog^xjbn9CE5qZ3UP_;&?w!H}di|~I!Fpp&A-L3iF z6}0VqMkmO4vih*?>$?iw`D>iP6O0|<+!ed3#*SQS(#u28l$rZ)0F~~g2#(A#U!IQN>!WF&?x#SI)z$x?&+gzTB0qXZ)9Zkvv!?UMulFp)$60 zb(06?7m#`vK7`#5(GzibCAgKpUE(hi|D58R+``ZLRGLofYY}kn3OA)U60P|j^oPoY z;z>ty%8YV{osHcapSp=NP8_q_*;vUsg!6IGLndgZn4o!DP) zSP0hgCL|YKn@jy}m|2x|fw;@WRbTYVn)YcviYfz7m(pGF?$zq&95l5zE)>(QZARx% z&R}42HFd!h8MDK$K(h^v$#|R3VXVg*h^mD)-HCgxd2foDfIG*=^fL4m%BiFuNq$X0HwRsGOq>E+ z278Qn@hIL!u*F!s6|hyXCs{1iWB$JawgvV=l_N@4=brS?ZN$A0^^a02~eZvxG6 zE%k?-J13-d{5Ah1^1FJ$(;<4ZjXE1hZ6OCsu_59%6E}A6 zBs!RDw>BR;nmwD66G(hU=Iv3tp!6QK;GKCu`qHhI!D_*t8T1GG-Mwl2Y8+qBw*mK> z5{cTCxhIA&=~KDYy^HY>eo5ysnGAzpa8@7(uV}HCtjAQsLmBZZz^m!e3&m#y@-STc zEVC(b2NjEF?d59U5j(eJ7GBklS@7;(L;lIvQhLfVcq4eueSdUq$@dFkRjuYx;C1zJ3&B}f zXS7Z$n_Odb-($(uZ`R(Yp&NVrLf~VhJ}?J15y2!ESHUL1Oom!psqkFYbd+`**c#Y(@vcYZln1*4_E!R|&xf{Us{^g?eUK85 z4xZYYR8r#JdfGX74c9FcKkax$<)7AUf=N<}v#C6%H&6e8?kaTEqT^9sH^6qme7lIS zU9cT6^=myn{8hgP{SoX70>b<=CWdzrN!MjS2^tKtqbv4BruT?NBY*wy9RH4m;=c*F z(|kfXj%wh+f?i+k?cE+DPVaZpz7&T?`8x+T24>?qzcu%p0c&}}g14uIwtq(V_gLGJ z_o64uj&MAuU$t6e)FXbI(B_~uA7zJK1?vX$=OmiX)ch3lZ?LEF?u}J``wY)uZ6>IV zcm?9Ux-1?p#4azgA89No5O6_okE{_B63D? zLqA2Euj_EsorvF{_DJNjJ>K=TNE2#>q#2$e)uT2x0KeMrUhvKYrnmnjq58&A@Ii2Y z>=bquY#@TEZ%u<0z`}b~L;n=?oeBAGpSjU|=gD4rvNB18!bf$t1Fy{nr&CfN6Out^ z(#JIye63e|Wd4AyPc@uI-hR(Qupe0YYXz$U({w_Q^4AGg0rn*U@N_ypb9;9_H}eDZ zv5(VNm~#epAP(KM{=~;XM5@Z)S$Ivu>zH_<$G9`5D7BY`!!$vPdx^L!#C?(C+P5V8 z4yq2ehFQm?aitvs|7c7-s-)B2e5pl|8{-vp29 zk^^8HV9|Cy;^;-ANB>WNtrJiD^$44C{QR*-*hR1%;zh9)uxns7BIHrLD_~b+>F$8- zg86$26tC*1J$^TekVjZO*f#O}?~r_K0oww5pCZwc-%OQo8#w8^s!fT{ZR z2-^Ugj$ylCQ!%W1ocVAJYXF;!VXa{2Vpu2GSuj5@k_mla`rexa(l?`ahnU`XM0Ye# zC+dBk&N~gSo+j7U+;`1^^@I8I0=2_cus*PVR+>j|PFJV@uJS<_e~Yk|A6W4AOgZct z*f`iL`K?FgRr@p8U%*~(h=(?GJ( zur=kA@x}S;CD~%TvN_J4OE9otAzAeI%JjtcS?W91N#okn!gk&QwheX_>=mv~CUBMx z=B;M~;cxR~^}&XpMV|bilXd*oBi?P`!{DQ?bF_iw!LGD2KN9cT9$j(ZRO-N)^udX$ zgZJKW@V*-l-hWf-zdqOb+0M^&u691u`QV{PBlN^;47$x{!Ao>J;&l$J=h+Lz=Tz~d zH;GsJo9P%cwYgR3`kuE?{G>W^Qkx5HT{_S9`C7UypKBbj`%CM8j``#Z7m6R%H$EJ% zvC8y+ruSe5xgLG%5Ima?EqHrr95x2l3-+V#`wQUbz{WZkihn1}+K1VY!uD}ka8UNfFU)ha?BVy=WPYYUD}R&XcgI4pJ;Q0|OOm2VPIRKO5KZx$7KJakuZ#exQ$=N-SNq;$68&nxzBaQsfg6F&W zuxX@56HC}U6x{dUhx~(IcTmQmo*I++ogAs1e)^3`Rp#-Ugx8g~EEL}#^grVjwkHe@ z!F>XS^xes2>D_6$39sD9Lh(cDPv~s!{^_K(r*vy&wiQ3imt-5!i`mB~Ph8b^GY0hY z?^p=#`ViIuwjRTJ!0PS^<24g+0IUZrycgEyZd_HK`jue9M9Wv5oF#7CJDCp#^-kQq z`X%lDa`K1U+D|9^HsIIvZggbXU)a-?Y=2Mvt*3efx_M_NeYDbv56f5cS=OuGvrzn> zg#K98wyE2h>&QcW=Lr0^#}|ql`{eiO>+nc8J^gA;uf%l%ENmv2sSX z|5H`3jLcna{Qm{y8F78PfknV;U}T*`PGFYiyQl)Pk;6%F(@7I)&DNRr~0D{#eTJI9${->y&rRB;jm4x zijOZ8kElK!b``Aq!a{LM-{7#CU!*^OqI90p2(}6K`;Jy^tqtt#+(PmDN^OEMdE$KX zhtr?ftBZ=)7`z7lV4-+x&<|MPaz1xmn%lE+(b-x#izof4n-Yca0c*Fb@EUwz!8@PX z+8Q#<$&S!&8|*W|4>7@Pi?^=YRQ)-|UwHik@189PzX!87r9KzPEToLSp_9174`SC0 z%EP`PRvvlvJ)M!3>_NcD+6%9<@Y;L`z038Ns80#=BdIWcuK{1>cU9h2k#;ay8VcLVd!@=6JTiT{45W>ZIAh11O69$sOEAKJo7SCG@q` zh2n?z;vM$!TjRX#?&)&9#pJj8+7!GmuPqec#d`(&s@qfp`0um6Ofa8 z^#idUw_6&sO4UmZ0%*W6ujbm51g+6AT-NzUs4| zgY`-Nu9DWZ&o30;?AqCNbOLlWJQov^Vr%Pv2LTjdkd%%9X)j;ZRbLtYW$aB~Sn$s2 zr;kSK)7fZp$n4k^4=2n_P7j2_vn>|jbqQYW@cM7wy|INDWx9g(JGr7^M@skzt`Y<< zU%|(7CkNZcN!lN26hyLvTUE*t|* zUUqShldUI}m)@~V`j>C=XEY}3FTpqe_X|ZQ{yq5*))~V#!E!O|Dp*GZYanYi@25P$ zZsA=r4|^B3ox{O7+AV|+67Ji~HQwaFPJ%_(EPKJmz+Qf3#A*HqXDh%)6z)GC2(8=B$Cq0ce0#Tj_X@QA(0-5j^C)juzy`tm^3j;S z12zEm{fb0B@P#uOUi~ZRPvAcj^oJz*==xrPwatW~L(X233%&4K{NjRl7D(8}5mCWf zN{=+(l16TRh9#>*Rxau@)9}k}x;e6qYoVM8+mGe#h}|TS(D(fHh#h#f{o{h?uSp%d zGWO`);t5k{`h@$zc&M^${s8{9&^?8BJu1r%uywF!3qZ!dk+N*#wHLhNOACRY`@OQU zJHIJs>&vBntyE@a-_2|}!b8gGk z3DE}l+XPz#8wf`V7*7yd% zd$z+h$QI&`fOUi2s{ZzN$(kd`&@m2Tpk5DUPTGMC#~$p#a+4D88R8H9OSn#)@l{&O~R}HrNQ5+KrxO{qrG@{wd0bm1%#r@K*0U2(~P7#)@|` zgyOakcjRB`0}m6om$-ez9sRe3U@wW&<6`3m$_q^<`Nalf2!Xc0u{wStvf* z)n)YDEbCjEMPZUJS?tGu?HSZ*$x<_8Q=WWQ{3`A7>-f#+n?l(V8=FkFpu1M3{xwnZ zdFy4}@M_;J9SaIzoiXerSPz)L2BESY2kQni9}cSr8YMdmRr*~SOfPzI`u0W9e}g$? zslFN0w_TpkR;K=kJeRAOM{Pb>F-3p*&xPRJ)ibgQo6o?H`w~#4WNoE|xHH6ks;mES ze;k{Bodc7UVzs|M;?Dk8=#L|82y6u`+9t=qmcbyiNAb>qErKNxLX$$NcnCUUMOYgFEXx2T0yR~vilac`l{SGIp64lzqq#XR({}=X) zZ-!%1)JK6G6|}(cY#Dq_*fJO{4aDg7BZ8@q%!0LpJyjn;c}4e+c^(R$Zmc%4?&wX=p+AMX6r*RCH+o8b zR(!F8+S%s^-@``iHBlHsVeBd5Gk#8+^vcBY9Ik1__%bY(M!p zN8Agm%N(pNB}^ zhQTlUcqDHsqY1*+3ENLT=7@V`ANklI-lm^kBp+A7w|zX8kGhXCe(WRI1D9gP%x=!dWz}NgpVsw~!T;$`<+t$-jB=1I{TZitn(tES!fVjEc zg{sfV%p62?j5j8OM>4|%&k(nxaZQup)U*X-GGv3V%{1zS65X{5-h;xNFHz*E| z`ppp7dJG!_y9`!kvAlTaz}CP_KXbG*j$hQyb_r}N#%~R5Glp$~ZGb(`r6IfcRj``$ zVsP$as2@@!&h&G{b`5#QcXVdh)93cwsP5W-6ZrtW=DJ>6u{ALB5!H4FudR6c;s9~S zh&$!t-mCR8&9QQr|1@u+Nyw2xHo&vQ-6igwE^hR!UR(b#U;fe3br0g^`CEmyzG|^} zOTv62)DU(+6`e|)K*r(u7cTFoD{1L;8h+s6X>tT=oPQ#w>|pk_cem;M$%Ed zHn5!-mIvF8Vf|oRF>DxYGlD7Kr@=PB;`u(GKz|`duly`K`e?q_!LCHoQM_%i^%z!h zf&Lf6>cG}wSTopa1XI2{z*fNG`R+}iAB@o}KckL5n(wn<%aL>xZyIbdhRuOpieal@ zb1`fK>|z8{zIVYcfJO721F!jnN58|n`gGKf+4>$PnNv3&VF~XO<>o2;H^id{9s{)1 zZ?(&A zc1}jlA~Ts&^-0PDnq|>gdW7?bs*8ST^U%uvme1JKx-f|aLFqmwlNh-fzqI2!3S z%g_u%6Q4sU*;@WKUHJD2;1PBeY!n(F6Q7!k=s#dTq(~%-aqJGQp>nTfwZdBnpS(_Z zH{mna2_GVSZjW%~X@c+-!u>o6n*zHW!IY1SU>kezQTS!TclHPu&t1YRYD&|o{vF1r z2qr!aVD(^ol}88R&3l9^oqodGBRqu-gLOtQrE?mrXAeFKpC-JpN4R({6FwZ_DQq2V zG=hoGHrV(cd=y^uyVUO<;cbMs5I#fr%Xs&69@bIZ{@&2fh~qtcrG{vt8-Q-@5z;9? z=b^g_T`TWukMwlh3QlBOxs*)dmk6(ZbaJ@L;0odOgh$)c4p>tJ6Q8P22wm_6X7YW53E0eDV-s(!9DmWe1hd z+#_7y(nRJ;L>U6NFc1AKCXQf6LIdLKn^7I#@>p zQ~tKW@?d-Aujcod@9Yt7?Vs>L!XHWbD}MvfosHy0*a+D92xj#UHnT_i3ZEr>?mFSC zgs%|ZO5CLWvQ7B<9^uMU&F@oxgh$J<5o|YtDIaZM6_44w9D50`-6LG(c#`l&!XHUF z+V?}3--EBhR|)UCPWU$AgVzbK`2+gj9^pCow-7!~xScy-V>3g(eByF4Z~xgb}_j3xom!CI;KuElwyOf;i(knXRkb5fPNWz z+k-^dgi<(@mRCp>XaBf)r*?v}x4HF1w*6Q(hvJAx_BP6j$1Xe?AN%d`Xurhx@@??w zBp;*jSpPP7z`}IyW%#r{Zn5|Qr|*^d46^tsy*-!uz4FCoY#q|is{fGnhQ}`!|3XYD z*D}8>Jf!014dN$qka}XRI8Z=seXt1@eei3jbMts>D^!8`Pu`QQ=gvJ=b8XH(M!a6) z**tZ5-?3PHN`fsR^zHL?=$lh_XJ>AHarVN^$NB$2cIxKTpCy{0fiH;74Xljp zyC{+1Yy;NLnf4?sx^`w%MjZ>tlkZt9j#cr4x^sSQ;Wvc5y0U9Gr~W;$zz=0o@6WDN zcpEqO@&5s0!mf|M^Y9;k(qeIycaMLP&Cjj#_Y7zIy0V2^vV(`^xZ1-xPzf2g{V;jh zU4{2Gc+Xy!x79CpD%~QNzzwOSzSFsge){Ca;wR<=vaN`s3V7vUxQvZ=6#}d1Kp= zjE+S1-mQmwa=9Nq^=;S?1G!AQh~DRF`@%WytvYpoxk1I7e^0?<6CS6P7fLVc?}PWZ z&JVDCvr#L6?+bPX+VN7iFoe@lWL)C-m?_hiBg-wJP_6S#d?Ie6S!c$lu*k}Y( zIzwRNd+-?|e1h;v!v86dP3FHJ`afHHuzMViW;d!+Kb768KAzpFzLWnC2#`mAlH+Wu z*TuZs#q{LMHPWkp{-Srrajf5l_TnS%-Uw>_7U?*B?43lZNR}_QKThA;x6Jwwyc>BB zby1AhEFvg;#DzblB%Di7T=*p6qtO3ANqASb6~{Nx&k;UBcqu*M910`ZxlZ_b!mlqc z%D(OBb-vAHr+Byh5%vXmPb+WxEVtv?zU%Qey+ORs!n^YYkC^xM>csXbsLZzEJqhom zc5eFrL(D%2cUxUp-^1?`Y#OXRXp`Z18MYA{C-B{_<`m(pw8gQTkJ$eJ#YCZnX8a;z zOBuEXZ ztY%#JlX;gsxh30Z9&RezWx_U~_16(pR_kC_!2VqEZQS5=%L&bsg7d@2D&N3ZeJG;6 zqtGACj#FM|DX&TXrYetdXft-+sE%)Kqy2x=UJm`=X&a~EwFWQ0?e&r6Nw8J0|J(9Q zWxWgU#?IujR(aO_i5DKV12luRK;vWL(*f2FmLyLU-cNXbk8q_kN_by{r?9hN0})Jo zroo2y;G^(m!pHUq7tc+?&k|nEyB=Xz!6sr@&7U$p$FN4Q(=n_KOzB1W<-tZHSTkw# zgN=ag$G2hJ(LbDT!v*3gKXE_76>xoz^f&2jr&8}Un}hPPN!a2(^HIBseSx?SmydSh zttRB72mG>+TRuX6#UaAh_nD7L;$GQDJ{F0$>8FPV>ici5gKztIEFZgs?d&rjji15( zwU2z{iFeIUFOrV}c-7(ZwHa&wgjEw3ZAWKad>`we{-(hyi1(9$9?cjWwGp86alVq= zm!mcU)5NX)L!Ubm%13MeU>#t#21*(Q{%Sr;e+BES;)m%qNn^d6#|@{p6Xib_b?y>S zzM<@}ovSfS8l7E>#pg;`hq_a2&g|y2Q!Myl(mu9IP)d!?X2{#o&x&ecw7* z3z#ocHSgO7YX%227mP5 zA@*TnpWy$4irH^3Q|UYS|9}|&m>Awd6f7~u@J>ZzID=*?eF*R%sT|495xAIsF@bgt zdi5Ip`DLM8VWvi&O+Bj6+^gAz+c^SZ+lYOaYa6VoohYmHaS7X z$}H5KU0&BJ)BUOJdgbBlM&(QRA3IQ`%zg>&K!y^@`AhI083^s@Wp+=K3m7F{n$2TG zdzq$nsz5O(_~5QU*LaA9A9oomNbF2g8BNTuy(MP2qqo18>|`3eAH~r>9R3c zVS_Hd?Mbn){vhnM;~x)GI#YxxKN87$gk5y;{V_uPR~&zn=f?k~#$Wo;ri*WSh=t(` z!mUEOX;J*DE;BxmhR;t}Jy=KN`^2XOOy#Gx=jj-%I8^swCaX3X(oOi_9^sOsLxfKf zevjyBPf_`+BX`LfUEPzplf>QLM_hgTGI4XSak{B}pLWOb4g75o)|n8darGKudBXlW z7+1|cMf;x6eZpsM@W$2q=<(6D7#mkxq3`%S>t%zB#kcV8jSEang7a2Ab6B3Od~Sp= z|Bhj3+FrYVnm$-hLo)`=*Obnl{m|qHn+V^T?d#4Kj%EiBnjLr`QH0nxG>YF}vL61r zbaj=>gb{?!chFt)wiebxO6)|ib z>>6bj&GRs_Qna# z2|M5y!Jnn{?L3FOa5nb*G-}q-&k1{j!s7kYxgVMJnk7fSuPRTS(AB>F`gu}c93oyl z@#20;&4i5;)E_kbto4g3;D7Ak@|J-Lj zI*8l8k9-UeFXyKh$;T*o-p6D4m?W%wpZQoOZqGjQu}!=_KfOpks{Rl5Z6A;2qmi(I zedeQ^xP$x1$4TN1`{_mUF#$f}yv=BOm98x8|o8$;T}Cx{t^5u|n9Dedc4AxEuS(N5kJRzWeD#^3evq zd-XXol5@1pBk=pJ@=6=yqRuMB((pz>_w7ahMp z4fK|nJ%FjB?sXeZeS~GT*cnMWOAIu2NRrK2^6;buXW%kze4KW*}>!4;UnHTS2rY2mTlcj`fkex^6d0t(e_8t?$4xrpO$w8 zx{~=Ods}8~PEdem8Jafey>h*q61~Od4EFtmZxa5!4_}_${PGG z{#^P@?^aGhnGoX_!rz>rcigXGu`d(a`Zg( zHoKV4^8)kqy=&0TJwiIkxVC?wvVO62KAZ=;1}}e(EE(4ib`|WGTz@W^@3DUDlt?ZE z4c=|7Qf*}t+WvEk#b4&VR4>=I0#6q|kfHACy~d^np!!>bZW+22rD<)H^+WG&BPsFp zc$D~q8QJX!HHBWz_#U3m;Ns<&Bg2%B#xJ7Zzi+X48}AXF7z@y;DyCLSouWO$MHZs7 z>8r_;KIn#^Gkwcb zy8!l^fn1J_3874pT>j(4ri$@W>wiRznf8v`T?6B!acwf(FDO0#JlIt*&Jeo?E?x2At&yoc_% z=!kPl_g8U0J2K<2%1z^Do;VG^!rr^mGD@`$(yKNfj%LA12WiFHn3qCl{9beAa{}7>|Fu~BGtrim ziOB*_YOubp+o?=;5lwW<&@DpuNOVcjU4w1~x*YE+muOol)j<(IgiE^h5w&d#{T#Yk zN0+R#9P-Zl?BOID*=D=UAazH!r_+-Hu^~=p;%H1h3-6{6hhtf?ePlq61i4-lC%45+ zC0!;@*5T6+AE_03)JM0$`oL@*C;VR8PT&*J%1{(D=BM6Qig@Ep`_mDW`SZTDJbP-GJW8YG zpW*juw=a|5%6AT|b8fM?%X`HMjSbe{k^5YIPeA;9fA;Wa4zC`5=5uK;#>gEc4TR442t*x4_+y#bDP z9IWA=+!zH`$KQFd5ina{;I|&pUj*L(_x<#g{}r$+U@uoBhEMJd($v=a=_X-~TZ_f< zK(_3uzo8wZ*o@nbnidn#C<(2wZv9u}$Cnq2|D|;3^KSgLu~f$+x)IdoKZ>IK4nWiT zmBrv3Qeh)tEir5YtT~2Ffi*=ied|TAMzAOI?zIE&uru*pBdm=uuh)9%Z-Oa(HB&v} zaTQGIKS_Y;ba$8?T;*Q(Z`f-I`!R)4mam{7)qY#R2f<%2+`b+ET(|#`;YjYcje+uU zjI9ab5pXs)8G?Qi`k4Qo%`Llvd%WCSe>nBpMA>Uz^4@n{g5UT*mzL`q*y$Ly2{snP zu7Zt5FqKKo4($!>Y5KlMnJBE8u!)2)m3b#&Q-t|*KgI6@I}aAFY3jyIFW)C!e7`=L z!N*3izFN_!!mhDbgA{56BMfNcm!8tbshIKK`l$nV{w54|?2Yc;@f9R9QLHy!o0 z>c6jk6bWoT;kwNUYp=@hGGUGX;@0r^Eq?3DFPQW^ua6Y`Ig81btAuwG z{uG6~Hmm=*~VMC%Zz16=@Sau&Wp5@z0{_zl6z4f31ge;NU4X9c zYwXEX+TmS3;dg}X2H6X*MA4gi2>d~0@8e^gdVs4?zAg5b%X(+7b;9K+Wi^bn6)nj9J zx;l+5u01)uH!MTDv%&nN zwdqiH>TY=O=#(iCiL)@)m10cBRvHmGZx7srWbhNv9|Mn&fo2 zo2n+cktv~8(m78$BR4O3cL;JH#C<956g!pHs+I)7L0N0{a+Hfis~`NVjU{W)^ge2- zq`z*06~O*0XfIaB%=_=HVs*^zYjCn6mwt?LRldZ+>1pTu#tJE0;<_w#PbbO$C;cn4 z>nOy3rdn>W6*WhEERvUv>(OVpUWHfJ!Q0>RNi82JqdPJ2AAPE zT)PyUy{0jG3v39iPmyfyBoi|k)8MQ{8{3iW(bxSK`W$hUB|VaZ&0y!jzS|HF>j0Yp zGk*>juLtZRShb5MJz@at0$4#9_Zlc!D(x02gyMag@EyX{ob(8r1lx{bvtU~>Y!PfT zhFu2R0P|(G_-#3Ul3#j+U32{WysDgPzv=P&gd$PF;hpiR_ps~aLCWhPmdak6S7>CiE$j8+PZq9Ay;yd@BFG$Sp zc?r5c=sqmK`kc+j>@F)NPfquz-@e#?r!5k77rHg*%=T>c7Opdwja@pRUPBQ^JvwEe zh1`-kn9U!@mY&obNki?c|G%*Zkj@i$*Q0M82CI6)Qt@^HmgjKp@-p(w^(eTa9?f)x zS+=$|16>Pr|J%{s%T6W#JS=}7tk(KU#{T1MgDU~B!9c$YuM6;6b-a?#39zvno%Ai{ ze|wwx->P|)H#>F>gZGpT*OKEZhk^gW{$C%KgRl{>h8Q*h)(j>wtw*wB3akn2J^?gQ zos5ABXxHs({9Yvd9N~YQ=7-f~IOc_OYWFQ0>GYqb_UeUR{nTPHu4`B-zDns?{e)*6 z=>&Fl6Na2)(Yd8$K_0qp=*ANA5w08icXp;{m5uU}JY;*}&cSQ!`<9CB%7e-30Y2JW zqgI(*Bz%hSHwWPigcM3Dm#x+u?lR#OjZ4LMD4cPVQ$Ou)?QQTu@XtHCGkEEH{a=pe zP5>~Hs9ftgdAQ+8$ZONCl0Ad)y8=J8 zKW~oc`wpP$xCPOp@|9(7#fW77Bj=&1fAW%NL$taG@AtMFQM}2$mU(QS#wzj0iEn+x zWVgvT4Rr5|ULLOeTqSPHQZqzR%AWEx9SWgSQi+TeIr!J7sw*xvFL`$v6Zbyu zC-H48SQ4CUJ(khz*Q5dvvc9b#&@R z@}XuLNb{qa_(IJQoh-sNbKPDyC4ST>;NADpk*=<&etM`ANe=XY)qyenxAfiFjo;F@ zoQKyWy#D|Amg=hNiffT?(OA_0R{euZ#h6Xb#@Fzyp@SKErPlnkLZG{wd=KZ^*5~X@1hx3CM6v2*+BUrUT9yJodMDFpR>2)0t&;I2 z{Q;r&_EMQxx-otnbYh)c zquwG}Cz^3+I-vQ{G8&FxMAmYi6Kx0@PaGJ{C1~=GARU$Q4m1PMR4W}G$@;1rt1Aj% zuTmM`onWJ3pkgia{jpAvm*0-cD(FUTe%=eeu^(FU*2L(8_owL3_v!r7d#mg&R?}sj zZ6K%VTzmO+3%i?*|L|&irW?!nc6=|WW(;W*oXTyH@Nw_teSP8RWL0L=@Hfdwi3fy!Ir^%`(-`xI>E%x?q0JzzMNY1 zcoYb`OjvZ@bP{YMf~gM1!M4GC8)ej2io%iajH`X5_Mr@eMD%Cs&TM-=o4d<|mF0aM zewSL80-LR=7x!?d(-zZ7g9f)CY_3BFL}0C zZpL~$rK>)7349RzOrjrq5BWpmih+soZsDXB&O62zWtuH<|x<$aAbntGOky?iZTn_!J# zuU5L`eL{CU`RgU`qnprXX;r4H+4nyRd2riOv4-e+)OMP|`oYXk&3GV-91ofe6G*iW zk5QNOmhh)UU1TN9E8`LPO~B7zGg7(}VB=uY=ky4h0y`avr~Y;kYz*ufisWR1`dgmA zHNwsj_U;5doGIMI4JLa6-xL|#6J?KdtcDEzzjvwl>%6Pn%6w6vJar>`4@=r|K63!1 zE7IUkWQI!RB<%EUqwuePQE3^R1*-#lw9@2JylJr7NW22r99Rw5vx4umIc#V*B5!AI z48HR-iQ{5ElWt5&&1sDpAiXuxh8py@mn=o@_j`lMHI4D@gk2+SgmzMzNjwG6Za}{KjGSK)W4)`o{oPB zmvtpn=7G!*ytd#q^s=SE7d6T&?0crWYYqHdwvThZd-ZRR?%gV%s!3$+5l|q#zDHMA zoPYUJu_Gbx;e61aW1Ee-JdL9n)ZT=&@k!C#@Dgc^^wUpW8cv=w-wFJg3aLNvnr9%q z>E-IrSE22`Go*F?OSB)i_tDyRYO1VpGs!Gz?(kAwX9xZav!{bQK_-nCRb>Uc%(chg$` z$D#wUty48JAb9dmYn?gr(+`j4yO)YzOysdBM~hHO9?hhmRv85jWg6iz1&_-=zEu1) z@1Crqdiy=ItrlZ)z{|uL9$?N9q!Y?!HRe~s);r3MZph_|e-`~sTWW?!buIn*RZHG| z7%}ZQaxfo(n2*7Qi3)?2=$$50UmnZb9$cLKicuL-|3xL+`* zi+G*3+?mk|zo$7LmLBBZ(LMD@US5XJ1^6Ix?9o`i1vU%zbRm&_niY>lpNrutk9zPc z;BQoX8)LjZ(34QBj;we97m&cT$8M(&IZSZCvw{PzQ`pe}`F5ZKQ1M3U$v;PO3^}1dgc;j4OGv z*8{JnH!l_Q=&n}lu78{63f>t3N~h{Osw;K~``f+JF`QLJG@V!UVuGwkNL6YFu9VVdp^m0UYK)oCa5r}zIz60>+dFN8` zg;Mq(uKfR$e%xDDX#@bKp-irWg-24;S3@RgIL;^x7Xp3g&AzoU<0!;U_Rod#=-(N2Q3fIS92 zdepXN!J5JByfv$fAyW6sc!e;f|MBa#;h=4ODzS*^cx~{jtFNw@IqnIywo9NRdwI@UC8_Qvu?_}9$`aZBVfLbsR?Wh>?By1B2lM-Us)sTux>4+k)Rpk zohM$U`ZZ(yDTxQB?5PLM4bRGdl{n+SvQ+%npzn9d9%5@Y*bnWj+|=*W&!dL)W0`wm zh?T$c+wer%+xf8l3u^^y0*kiaPOwI>M-i^az8|as%(vy*_d9<6_X`_y{G!-7$4}L+ zNAYGHzbJMIte!OfMBmHP%HJB;KMeTS}VyR-3a5lre$FgAaV#)1s=vsbt zDL8vGDG#_;mk4c4bAJUCwbp6sY~QpFztO3s;uY5xuB$T?Ja@11325H-(lj+7<38;4 zCits9+QC}DOuq74vauVi9ZWinWUhQiB~J#xbKnKxvGR3mRjru9G_4G#sY>HKbc2y} zJHRf0od)yA&}5rTO3Ou217omHWC!}XkA!_t=~R6W-xtH`!D?by3s`jw%YjwJuwJl= z7&ZuYjeJMj`6$@c7^*ZbLf^5Pz;DCx^T#m7+jab+ zSoQZ}e_@*mEtG*Z%szRDP>_jYp=txix@cc`YVr ztT+&8UN{Y}v%f|@g0{?flx%y|9_lYAu~OUFhELzGJ9$AnEVEambg<5`!eRq&;CLD@lP$4?Hj5my!t8VSA;!Pk>PbJb(iVZ z%2N|z7YO^f3p>N1m7Y$K!Vu(?3VLdu@E+o}T@1(n=(t;^1NWFaZ@F%YVNZSFJiO-M z^-QJf9@X1L@HKFMjX>qQ0=5eFI>igi0*xgV3=)F`?GUf-cb1ADx$a!d%@eq*D74o{^)Dx%TV?Ps(Ve*l1|;f)BGX01Fn@jUn|%nMHO)D==ArU-f6nowO5Sb-xiy?~NQYb{&Gt2X2sAi{GFMRK18f}Z#rjBw;As1fttrXh{y$XQh4TxF#6k^y`sVIh%!Ux zlsv6}8uk6IHWK zbxPBV&L`=0YU^j=*Zb9_;#+xlZT$_F+#x;$=mOyv2|uiS-CpX$;nM3-EtJd(F%#gk zSCX6*%K|Jao({jSg==QfbwK!?xq*g&PW8{ds z21sM=>*yY?{W+hwQoF?8K^@h6naQe;O(}o7p{^6{VzLRZEN9>@;k4erf-dVdgm=f5u% zUl5E{Np>)o=V3eSJBhdXYEQwd^FPr`O6O5wKA{ZmD=XmGG03*PUOUf=K9i7Vj0R`+ z2pFNfYg?GleiOgXAiZ!cAe3ot-d5OiUl)F+39^*588Eq$u$88TI18p&-kBW}q3A~*wj06Jo-Tszfc5h(`4~NWBV2#PCt95#NaJuu`q>V&b^jgu6i3H-XgwR*A&)dr zyE#j#v_pA)zvCI`&+vL;VDB`!np8Jk=t=2T*%ixc+QwVydlT?$Pd`wUK3YL<^Y5>p z2G4=}`kvcRd~ZR#;`50ju>_gEFZ&apNag9U}`f>U z6uSet6O#>AZ_aP0Agg0SKf)rResBq1&6x+h{kQC^a$_nj=Tw!}?7iXd0G`(M-ZsUEIE+YPOq#m#TEftpt48({u^6(Eb-1ilD@V8){Nstt$d|_Gwr8Pl);-|)pW#bD4PuA!*3y+$FX3Z^zaWsINoC{eIA^{;<(j|q zrJaJ;$?trixB*{J7Yz3t#Ku4TpBd#7mO#|WHI{C}tNIBK1hxxj|6&}T&_2jBy5H&4 zjd-`Psuy?Bz}!7=Vw*8K5UKD~d363T?E}6~=iSp;ut~8!Q)_OmKm&xY5&l{i9-bR1 ze`rrfr3H3qNu2kj{Ab7B9r z`d~9XyAu+5r9PSMJDx2ZF&)A>W_gO-yGwe#&&FQxU6iw{|1zCWPB~wU={sFI>@23W z!K;zKY4{C)_XFPfbCGlVxazL!LBezVtq|utasJb#S!UZLv*>Yu9UBzQwh6i2%TUwC zeEoYLD1QFB?bgi`dQuNqdF1WF(SzBMgUqTazV2+_t=R%7$IpjoY9_Hm9kKmRr%89Q z@qx%bk(bhbj%40S`%$}{CcNTF4-|hR(5GVk$^5$9SXW3*yDL!9$qIH!8O=JTZye7^ zeqPh}Ha$@MiVA=>=IV*Q9N1)AWuYml6$DCw=-wsJWzbL z`T$*y`=Kb~&Wz-K)pKcIPko?xtI~0g`fUUF4EQH0e$CfS&x-ELNx!|?HbVD%K1MmB z^+40s`atoBloji@=Hr|+cTGR`(N;0!mHLD~vk0^I|9`Zd4_sYYb??cAj6^8XN);=$ zS4Bmoii(OA>rFz!4Pj=O8OC88)H@?Os8~@^vGNp!Mr@fGY*C}4#WpHdw6u>ZwWt_~ zqM}19wP@2e?V~ML+NLdijTYa1-`_s_oU_llCkdJA{d_WW`0cgU-e>Q%*Is+=KW7pd zndd!l8RTrnv-8Nwww=vuKIi{ruXe$6;QrnKA~TEw+9l=jRXy8F_s=zpSA6y0z3{2d z@XrWWSSJ2dd$rs2L8TjgYLBB@0p7rkYj((5u54(xyoJN!DTcFX12D zbT+cKmj){VdobnDPxaaeRs{AXJ5EIE^&5fXY1UlTS9+kIz9p0^IjVyp@YCR}0{AuX zZvt!s?9~FO1M4f?SkZtDwY~!J9}EVG#Fo?tR^X}ZJnO8F`e%T;d@`elJJ3}__jt8s z(p@}^k*D}hJT_Y+G+R9rj5e9~`tdrxcjO+x(AeMcT-Ha);|n}rHIGc{orziCrhns` z_nR_LBd_z;v-#6OnK3*CYo9ijkkR+Z5}X&tglWIbu|p$jhmvOEc`va31%C^x23w0^ z^nNEe@80w-am_?D-}9Va9;iczw)?S#%U<6&EcG$R0MQ$_pK1Z*6XYJi6}) zb*i7N*1)>J>ZF(EJW`v^eqyF0d)nFdEqhCuC>#BsuYO)1-7U~!8X$5KDfMx$k2_qZ zo-)tFUcM+ShxEM@tP;%cGeBkx?gK9ckM9AM4v&#mPTJ!{Z1kRXHv3khdwb_>e(v60 zwbv?m4g9hf`UyJ^Rt@${gLq@qMX(mIcRmr&v`x4!5&A9G$IBMK@`*|M1Z$3e&A&|i z`_xa?CQXya?mNS}l>M0py9jn~l3o8|VAqZPNkhK{eaE}-A4PBK*4!gg{GkKJgcN0f zOP|mF&|g2Be~KE-)JxJF!PHCfj}9gKE$zryoqXUj$l3T2lgOF-@Y!J9-o_hZb5(nn zK!55kx=*2tOMp6yybH)$`RyN%tojW8==9nA-L~G{I7m1rGv(69Cz2%#Ax&A)3uvieisOO(Y-NPVXAF!7l)VZ2N7Yr)cB zN#9g3?`_5n+h_VyUr&^emm&H6$lCg7sLzr=3U&d^+;L(2Y{oBpKb?ue6EJ1&X1$ES z0&)5wYPKY6UFHASStouQv%S%>{vffe)P?-rnj`qnGiSXuFQ(=uXY2B6tZTOE@8(&3 zrocDy=O^wCHSWd4lA_B_bQN~h%{cN-lb=E~`Ze=!8f+45L;x`^8?Pk_;mm=0qVAV5 z-;mew?*jZ=@c)bW&A#u{do*pv46p^9DUeyE@b=l4A7#GtiL?3VB{;(y3bd2;*O=#yljsHh%W|;wBBT6MXY=<<24k}ucSpxZ4pNim_7Has=y)0H zIT6pAPd-Ga~un!3^y305_ zu6GK){n?P}FUZ~KRO7MIqM}b*f8Nw5W3@dC>wU&hr;a^eIR|YOv@15BaeNJE`KCH+ z-fZEO8%w1VS@iUE0{VIAZx?+;N4WdH-5zHrNjkC!?KZUQ#r#1zTzed|p{?w%_=@~2 zx_>Mda@@oKN{=%i`NMEdtk_*6V$ByR?J-A&XLKZ?)la;SH@?j--`JFs=dwaF!BOp@*FYGr=>$H}%cP5R&!(n&UYI|WS^ z8Gal>?J)<|3HAupgYjj8wRhJ02uWyCWa8>}g2WqlK)S8`J{QKMFB2csqM6%y+scZc z!Fxt9bJDH>nax?&9~RGg_hLuO!dkEm=C*{F=!mBuo=JH6c#f7|`@6jOFP~@eAI%#3 z8F<#=`7805{>D4odzUrDycqKptZ}rIvCUe#=yj|kL=i*V=B?Z9A}{y(ACJ6Aiqvuf ze-wF-wYr{Mx4NF>Q-$V{wfVP$qQlfXI?ekTd%(^z-8n|T3I_b6WvuF``?_Fj8G*dG z&Gpt(&r`0kFGknZE`m*h`TKn9D1S*C_8qKK^&4r&mj!L2jw4&z0PPC2^`hmM=3fig z1+b?HFnc9%RZv3C#vEA&QXaj~>_Kzb(wveV94T&N|7ygp$u>_yn_fDb7q8dej?Fww zk-VlgXO`@}g$A2`@7 z{#j^epsf%sKVeH?XTTn75U)Kpz?Q(y2&1k>wEu{72%3yFn9;6KJQC--ohpbK&Rq|nF zO+FRV%fZ+9HP%kWr#;?;d?ZuvJVe?IX)m$1d<4G=nSbJmYSD%o$u#!15Bgc?H@|*1 zf2$p{E^lX+3QfWZor8+kJzppGC|!$U@>5@`xdHwE=2>sAk*Q-7E1=KbqixYg`|?nTzx{bz&oP^$AGuuZTQp1nG~6AitA`=r<_3^YZ0>H69Hhm}tL z?w+v}=M`<=H}ibOP}ZOygx>gn#*P^qb3;YC)6i0v#un{DHv!!%CD+iIcmQ?4I-(te zR0-1g^o_(Lp*<;D;=j6kMrCgTFaJ~8Lb&N;x0~KIVAH!uZ@)tNAnD^*NIy;b+7;3l zl>eV4=db>|sr*Tos_56iza6kF*axj`wDSNu;|SloZz#TvKB9ebybeRqQPXbe4(#c- zLLWr38^M+wO!brnTLUxo!G#~HC(-7>t2RP@(GGy6!Cu94(LhK$4nFA6s-CC8M#0Q| znWmlxspnR+wk-Keq_4zyHo(@ez_Uww<)4RTGX4K1?N_~gK6Rvb$9S5-dauCKP5MlX zryp$oGCb;Y6Qu8we%bGc;qV0abhFpwpXhUiK7F=Kw&y&uE`2+Ui;tvUL8~yIE|%FVNp`+H}=YQTJbR@*OvRfGBCk+5~Jsu;Fq<&~4JpXe@umB;AH zZ^7O;n0bG&60pAu-k&u+cbqZpVfX%Yn47Z;XE9hP<=KaHfS&*bLYdnBUftvj}z?>;|4a8_e`_SV8DU!NsVHQdD__8PN4h)S39kb$|GPpw1KtwDRnJ}EL*RaU$>#Kd z4T70Hf~Nm7Ycp#cZ20GIjnCcCO+q&T-9H6=&e$B|cNpI;Y!96~DL!z3lP7oJTXpdN z!yqZVu>}2>qoDWRMSgnA-8Y9{W9O50m67r9NZAYVzgr#uyZ$!DPxv&=(@*c20c(k2 zonV<5)(h6`V5-w0uqH6ojp9`=v3ffR-T_W=&ClpRSUZ^dkbc4z!QArHfvtn7JOd&! zb?nCnUh6qbRI(;Z;@^YzG_-yj39Ia4eh4P@)lXP0*aVoro+YdaY&?dwgN?DHKFow;64aBe&u>Kgf3D)Oen$PWk^@91|zH{%;W>VtCvNkYsZoHbg zpx(FccHZ|N!n%?kHG_?TneU>Sx;FPI>$}go^}~9S$K=P`=e9EO4Zv5loy>=gwX`Q3 zz9YsLn}u)idtn)*LrY)-V9(}RI`lepsDZ~#@F{RJ?=WTa*Aq3TXM%+uupOH~uJ^2d zSN=l$1$drl;~4kpF3sez4nuS(^(Pf$hmKcF9C|7LKP+H8vD*c6^FHLSe*bK~D6oyD zUnlJiYOPp5#OA<+2p;QN{gib9SwsJd|Dq0I>}--OJ2&BcRVq37$@!`$=`>Y~4C+b$ zfYndwQim*1M{vNZlWgkmpuhds+58uIR-SGgock5*SqUwDVMXHKT|ZjJnzx5uy)D5qaxjJ?d1yix5p zTyGQJS$K;zhPJu)ilpA*sel;>QaSAlfuxat|MWh6i&T+3w#&hd!G0r@BT{Pn3*_kA9SVveK!Af(eXZZ4alsyuxRAj-@cfWd0h9s zMchvF4Iol!J9j%$OiN^BIJ*YNhjdmG@@hL_-7gV)zD>2>)_uuouN z9P@T_xk{R}I?{GXlO6E-n>O;9p;UGg^MEWL;XDx z3fD5R-0Ew!Ir_ta<@~>0E|1V3Gxz#@LOv}RV=Co9XK8EN!JJ1_e;h#GMDcR|V^*FU z$3hQI9i)ip^$)yu5BN=-N8{8y{6zuGG~!sOWv zSBO&|t-2HYcHMIR9XvbwOh0Htsl4NjI8I*#r*fd%R$U~5SB);BCvg(C+$f6X5t$hFGHadw1l&tIxJH7X4x|3 zJxAW7Wy|@>{nTqm>W>ohFdr6A$l_QT6Uc-z5z|-R^)F>?{HcAv_irW2I`+WcdxpHH zDwgwy_V?bONzD6*!oAn_-Wm^Ud*~09%ig|Jd;vU3`n7l7MfR}8riW)KO`O8mATwVJ zV}dDP@s}UI?Dz%#9E6CF6K79DI|gkx zv>)Kv8(&|;NN1M#%)p^Bdls5aX#6p|32X^$1FXvS3wMp6xDBgntyycCHd}ZOfnxh< zc=zC4c*Ju4Gd#=3)kXK1y_cGdfs|+ZZr0m>j(#T^e!?2TI$~HBtQ|~4zkZ_Y2Frr^ z>wPM3KUfRc63=nl%Z=~0v@8k}xUqkjaZ~j<3-2nt;ocB4-()YztDp_{hA8h%X!oFX z&qeNll|C|x74_ne#;_`|bPTHltB+yLU`;Ws1FR*6^?-GNxpg=Q)(%##df=xrkAr1n z*tC`B(#?ZqVsxuu%`xmen9Aq!UIc55VI{A?zQwR=Fuku^=6bL?FgFIB0jmXb+r1M^ z_2=uU-mMp`2FxwX5Lh*s{0RM;`8Q$Z{eb}EOB)}Y{$^)xY%MaYcGd^y*>}fH9j?QF z2AO`lHzH;WY!2*WSC#3-0;F&%bImJx-VGuZd7Z7J~a z7!&aExW_~0CGhdg+M{&+H2gb1zwCXR!T2cHj#I^E&l+0qb!6yNcPr3dgch$P_^Djy z!MDNv{#Oll5o`;rMU>_&-CK+=o#xN-SJ57iTFyU7Wi~!H8{=^CQ;eE8-6pQm08Q;L zEazVciPt{9O=Bro#bR2;78L){jAK3UbinicAimrd>`927)xN3XVy1Xf&S2pxg0TY` zvYkg><}u6pciOtOHqX?}oq^e4TRSr+nORhZ3kUz+JS)zty19gm@yCXBCak=V`BV%` zgN??pMzCQpWv`!jvtUDDIts6!ux_xy7}gIq0Osqw{y%EvNpEC_xevwouv6eO(3UTO;jL;z2*$JqOG?g0rkkrTW;2rXsGIu}ohOpz-F-m9M6KYnQ#b zzv+L3$V`lyL$N{o(&o%J{TM~1#gF*jew|uN( z2tGv+b31|8p7p;%{N-`W-u;f`p*GHdodNr4p7rbFUnkfcSfeV0wz)IK{ceUlJ;$-#pX%urLn^^m(!4(g?6Z(IqAOq^WsjuPvIN~ zTf=^$#1|zGm1$1peF{Dy&)$0BE&5J;yS{}>FGttC9nI=j=b^28YS_ocqBh$FPdj)P zthAr;3G8A}{>!d4N?-pnv6OZXeJ8S(p0*sU7f60D*do}o0{P*5I9$^)@mhT|n`vl5 zEf9-uN7g*D=AN;f|Ls7xWBcXJ*uqkDWTPC{04>BIMw>M9N?u!9RP@Z{e4b~oPOmq^ zt!K-T@o4f6deWN|>ckDv@)}|YbGq;*KYicz1c5V9X3|0?D1TdrT zM(#!Ac0PMKuRYV!X?IR#VsIG7TM*cw4WDHSsR%F)hI$p>6D)QfO zxpp>lL3{TB`xjo%J#1O-VY`F>vxacsGB-t-Ih^Wn4*6Tp3H!Rm7L~ zbB(&*i6uy{cF>Q6cTyYGzMk>>m!kbhI^7JO1^-O&u8a%zY+k6-<~#7(qyI=PK@|3R zFU~TCti|TgS7}846xagTyLk5OkMV)<1xHHW7TBK_E+Mj}2r`vx1HQ`V5hIb~!^_$A zZ2SXv-}^Aw@m7PCEA)3 zWxrx_qEom*Ox17W8#qsZ{9my4=N_%EjB8K7{WdCnQm25_`GPLfLfpI#k^u19Y8Y7q zt;_jT;2VZ^H@1hrjSZA6!z8E>yBJljHDoolE$3esjJrmbY4`BGjg8fLfKiP>g>{)N zldS4DvVPjJoc}1#s>6aimOTIcsMoCm|2@lgYxT1LP`mdaYaLncTxt+(&B5f4kAtm( zz24TV-3v=Ca#mu~^JOt(x0JnsXD^^{RtKd0__*y%TRi&$-o*nnpmM{0Y$B0#G^Bz;= z-E`}6e$CcL@^_led1Z~s=g7Qp)<6tjZLp23#TSHgQnm3O*aFyRqVi*LJKIk>jF~8u z&loCM*+Kl>uI2oP0$Ui4?=d~rM))sWuBM5k@vpsS6Pu-iplfUa@9 zdv#_}4!#TU&BM1Flq+1*FKCyXcMPY{&sOJ1usg_Cy|w%*iw8?xOK_61rjN?hsv%w?9<)Ecj{+S6(aNl`mP&KU(zsgl&S= zJDB))z_MT+BI3@H*WhajFL?|3f%gh$KdNxW3TnVN!6${|o3RLLHe*ZQn@H=uL)C-_b_YqSs z+&XXBFF5Vq>qgtNA*(2za7#pk@f_hm4|!QB>t_j>bDX9P6IM|6vh%FzX0?&Gm?43Jhy+J4G04Q&;)S1ZRVbTxi{ zwj6rr3*fc;%&Yuu_^12Gs}Z_}SYCSPcJL-2kG*p*Y0djA$0W3weUxJnx~!j{Q}-L- z9X=i_$3@aQ_gRjbVb;s`QH~bqa(;fc92yh5!F$19^br0qIvw_pg0W}%K=D(P9a8QZ zXJKZBJFw>t+~t3_O!d7e`L8e3b@k0n()vjI0?*3(Uis+mnPqQ}f%O6dceRznCv|L; z3IN%X+P5>mM3(xIe!`l-&d0EJuuTV({^h_n!1kl-VWnY2s$EJrW2d;2KI1au_>h2@w5FZXe$94h+?X_bDO zQ}*-V)jsaE zV`-vnGhoeNXLy!AyX%}f#b_PCqh)sl&qT|-HKi?h=it3Xyev`JZ%h$Ku*4YiWBR6L zu!z{E{orO_SO%8bQT$!_uagg%dUJ3%4*}*PCcEnfMPWl=3t;AKIe!bA0Q=`Jy)#&2YXmz3b`iQ8dDgqTcL$i56&~apqO&D?xD<9>ct?-V<|2tEn^%Yn}ldneS zPMr05K1Jpf<$3e|%H9X<7_?U_`y_M|(8X=hEcj_3clwORf>qL{NHcwg_tpIc`l)TV zNSh{2{Xsurmn^+IXDELs`smQrK$ixa2b&b5$y3_{Sf77YMQH<2hV;f?CGH=jw-Bb% z-az$$wzAiG4}?%FDvweo$sB-Z0v^-e;LP9Xf8P0+H0hJ1Pm^x;Q_^2q_kyBL6o;2d zSH26-EJE{Do<0AJvDLeSU(pe-1Kt=e4$DsNz|-}XFyFfhG;l zyO9CwbTHYCPOuIzvp>=JJz*a!h{JW5k8vjCd9qBlVH#PJZ(Gjic=qhR*~^U|PE3s0 zHR{2<--{QmLAweq%Oi&Nim|E-TGdXdXW~Ueuvh;&{=hqz^S1@{9D4`TmL`^{*wbEO zwc)vy%YGCF6uisb3WMQhja#~Un*7(^RcHg|z&Cu{u>s;)BW=@9Lqq+!$QJkoA9r|U z4~u>S|A@4%g!eQ)s4Jfw0~}c|pBtovYBgveQ*% zn?hFh9`=?*%Vy%(G5`65j1D2v1YxF1O+Vj3Ug>>dKUd!`8pq!PJE&)V!m7ZEz+_kT z6IKUS9;0gpi_7askk^wSZ!jiLIyY|ReNKhBY`-xvG|qihvekBzqxKgn@8OlTi0;yBIJ;uQWvD(agUA@@aTqxUOv159rf&{os16>d;=O1QlXUT|d?BEb_YEAGW*7zXa9^_CXPm zzr9!G7F_e!`TJF*AKTEaLAReasG2~(puJifG()!uovR-;px)2=9EEgxl3AupJsJO z?N$D6;y2)b7TE49#49?ya|MOQ+v}(~~|Y|uZT z5L+n9lE)HxjDCo9hrni;@h0@S%=l&fpz;hP_9HRIH|1+=SQ7g|K zXcuOd^JZ@;e+w&`WPS4!%igyQ`BVL)3ase&mh+ESdWYvniMAfR8rt1*;~6lE0InFZz=Di=1vUE6$>H`zqr zk7%z|P(6}D$ib7 zUmc{4lD2f2v}w{dNPA4c#~xUoC3BIqZPLscU6UUc%cgCTwny5N13vHW7xC?qR{6QY zH0fI9Y5W<|%-L5XldY+koh*{mq&JY>a+!3J&Ag=(njADwwf!<#S5otyhs$_Ho1=Fe zE%^$NyHEE>Sq7PBke6BHESoxu(GT>~p7X>7DA5j{G!Vr_OiLMO@54W7&>U>r$mm-l zmdCSXTxLJZVG4j=1Z6s0#-t*$iSBTjXxu`Yy=l^!_V?5NfjmT-}T@`d*=m zXOyOR>wp(r%|bQ|&(>MS75i?kj~LE5f;||?^F{XP=8(09tlqCI=ihDh{ED(N`gU!? zzKQG0aBPysblCLl4 zhobKg`ZGqBUmwK>lVuUjM%H;`HLWe@zsa-O+`ZSu_+PH9ObSzzP%LlyZ0v0P2eHq{ zQyQ7TZtQ}$uB@@9g|r-LzP}}`%hJ2!U>{f)bdsl^ z=!U_1z+AdXD^JUY`qlAo#>yKNK>ooRMgwk9wHJ=mR4GI92DD4aH0L;C_Cg1gbt*KC zd*RuOHm!U_27oSPRDTG2egAU)FL;*jjO(fld&h5hPODAEz{+Va)9GMO=E*Xh7Vw^L zjO@wLI}aecVLe)3V_@}QZaqwa)q%P7H3!xhqg%1^e7#g2n^vBWb%X6#c~`#Q+Qz1G zsc)c>NpAc=l66oUwSSm+(4X#49|xf=hxTgvI1ODDba8!L0I%_JD%#!Wut8dSpXDg} zZN|HOl%o#1dOtrW-jD%r^l_&gS?Z&kv?kK-=2<%Au3KRM%$?WV4HMay%vUO7D_LG_ zcLrJA$og12K7OjhCa`X>ip#Z!Yxi@-zjV2AstH-6$V&eOKY1`N{^^u!9NLd+dM@g8T2$qlDjK|1sF%;611l_xm#DJ^XLt6le7wg>!zc zBlu{dwJ^~uwNo$obbn`mwqX+59JE)n4U5qALg(5B`LG+{{XXvWNxg0Z|8{M<(SM^e z)T+03CKK)rCT6n9BnX#HZB+NW%zuz+&WJ>Kq&XgockQgBdwq|~W>w)_fxE{o`?@d$!(HNv~B zxm&2+?uLL)b|MGuB(&>1JAIq^gY*3g?Lxw01$|qGdQ}y)s%L#Yzh)L$)mzKn{W+Y6 z9M`s4I}ajfv_mI7nX#Ljo=z2yr}RYyDFz0d7+*a_xQL81$ngDZcMqVyb;G0f=5pze z5zqSj<@}%9^4}}_T5tyu`$$yYKu4%voeUs)6F_#3(vQ5+e^}1{OVqy)V~oZpw>p?f zeIQZOj+U7NlZDPnOIeO`ZjeXi_D?pCrjHXJ_+EI2jn&E68I#~W-k$g#D7_ATCcTI3 z!4!FH|5Nn5kpNS=+*jWNEVf=7IN@XcH!Uq-w$=>HCJ zO0}VzUqfm#Fot}oBX~A<)LSFTT`J0Z5E*;_yc~SPyTC@UUtS-wM61GX0pA>awg1As zI#z#NKFG}-QpLZ3<%%qxVY6Nym8E{Xhpe%GT@LPa3S&I(bltmWsqPcR>!2M9#!2P_ z_v(8g_mmX)Umd9*CRz|8YadTkgkxnY&p3H({+m6UZu}E7=P>7AxCNb>re{JY-B^Hj z4_bfR*BG@1b_wi&>gHy}IOu%^ebs){BA_gHAA}JUZEbU_(ao;;k7*YsqJZd}eoTY}DwSS*N4^i8Ff| zUZgr)hi(J9m+&lm8;Nmx*MOT!>?L^*+S32D@d2|w6WdD?u|>=?o33B3XlVN~Q}Hz{ z+c&Vz-=t0M*SU+qq;70JPV>$CJISl}lZ^M|wV-m5m-Tb8d+r_igPi59Yxy!qLe}`& z=Qj}kO$B<{+~%56Ppqd0OUT_o?jt0ZpYqxOy8yN)fI4u;%UDc_b6}~lL|r|`S(L#J z#>CqyF0C=+`w~&G2o&S9EDP|6-owIzSQW0O53> zFE%@|0B_8$`V{^+{JWO_KF$4Ioi=)5V^F!&$EZKV#zH#m2+6^pL)Heeid1J|yW>#V zcE|X04xjz}e2(H~<92ZKOSHL7#L*pIbuWN-XPNn4?h1MI|G@513)?%iO?*A`6yNpc zyOugz{emP_l}#!CH0v42@naBKur$~T*z0&!UAp$x_;S3t`7)VnsE<-U?V=7Wx94~F zA?p&do+VkP4>K1WkquR}1c%0iM{#;Qx7&;p)9{r1(4Kd9#~QPD)gz4FhvJQGoA3=? zBVP-}s{DP%SNLwUIv&|)YeWAS5Uy0F$eu;!3OV-Y**|2kq`O_n+52yMUOZB6%@@2y z1CFR^)2-*YGcLBnHv!+7y|66{>RY?oUXF&)V}j~!^`q1QV){@6@-FCokZ0CCBjv!! z4Tj|K4jGl9YL0mOkBD2?v96$>qyHn<@g5O1r5b+Zl`9xpnEeeSuLpU#JnL71-N4S; zv+O8}y{m&sE^&O#He6$nEyIP4gDi<2D?~ZCS_rB=R1e#fp{8iXyF1j>LsFao%#J0h zhnhcNz68%d@hsg>u7?!4Mv9EHA;|5pt!1*yeaPEH-kCsNtR9RlpdPSnGAC|5w3NM| z5M+f?@3w;6h6C63ZkOO`hbQ*U7Be1^wY|%h28omcjm;FinwjTh|B(4H^30st*r3>0 zik%3)t((CFCzwnrt=?x6Sq-WEzmIrU;c34Ho=SN3;OT|up*-tX#lOn`&3qf|qyYQ9 z58-v-voT!$Mh1Kfd_eR@uZ&G&kkiT~05(k*mP()cplvE%$=@SdqfcS`n>weCMy_N1 zUiT6NbHDcZk!o?9v1Ji?gUB;$|BNlxR-AP1>}OXXev8^LFb&=Z81W|pDoP z96VJrUVM+beujVPdE$E|D}gUz`+yn0LOoG{ijZTxpVIlNkAV~*No609nF@z&s|Slb}Sy%(ld zbYQ`>P3a#opM$T_+Nc7%t8vbDhoIt^htew}wX1-a^r8!Snq@UML^1@FN0^Zs$#_*QFzLZ z>1y8rWTi`2g7eeD#=vS~*c4c`gEc@m2UZ0(p>j}H<0-ydV%KHRLI$PKw^P59>@9fu z;qlj#gk1vbb1=y+|19E8cl%!;9UB#)li;7UNVo&cm05&$n;FE`oJB zSQ@Nkf$UC6A_`TFL)C`DuRZ)}fjE>xPijyJ9`k zY&DNW12oRmBVrGEo5+i;UC1ny(AA~A#?@1HvfuT8%z9kKN^qx_8#~KY)Uj)q|H3_3 zQP)<{aI@*1hXXmR75cF_WT`ENkT-)oUw7nxPJo>Odp*z2_ipLQ!FO01Ud%+aB6EYO z!1k#5QS|Q{lD&zX^NwuUq#dwLuv;XX{ustP-s1QCBRce@a#Vi~d;5?T?;B0HtM1yB zt!tH|?K0&spWszFa>!{!j{lAgU;|(cV7K$^*dPp~t#yAM;CaTTu4drrhDY0v^posG zur4s!HvNRHgLTHREwGLlb_uLKhL!&b{UwH_!CGQiBUlE^e<$Ue1#6CB-C#{ItRKv+ z5AlwIsXknJr@`uD*eqCG3|j)LbujrV8(?X$NAj%x%$3xpZgvv*ix#8&Do+)d_}%i< zfz`yYX0YlQ)&W-KU@A`!SS47zJVOcm6ES|3=Zxid%d-F`{dBQ4u+kWI0jwm3?Sd7> zu+q;nzB&Cx<*os{1QsuMBY2!Y8{=2GyDh)j^T^-wh5EtNUd9({t(ZQj8{1gvP}(?Y zy`-Jw+4C6~hOx04KW0dqBJI^mGh+ZTiE(|?;ZzAWz{EY7Hbj;YcDou9_x`Ax@NG_$|%+WRtu&$jDE_$2do3k zj6=8rIFCA-V`L1I)=Ank47G<%f(?UFeDhP8X26EPOk41`utl)37`6^J8N;@~romj> zaS3b+%#U?QUilZ@7F<1gV8c>d%Brrnz@GN5RDXot4+XI8v@zQ!Ln zZDedW1D$E3TVtaWkfF8K( z<;EX3`=|9~>Bz**oKMm_UWC8rp)0|eSYahg?3V`fV~E14!KPwZJ=hFbG3olLk7U5k zfIUe7wed0vU&~_`_#*f-g-86%m;1Hmt^Y%}0i7A|!ZE3h@4`~O-T-ito!Gu-y8LA= zZpmx+>SGE1s;URZulFqa68Z=KgY?X=hJRIH9bkG7uOD(F9ve#Ku@3?@lAcqZcCK)R z_$prnV5Kv`qhW{k-;U)m7dwv#QO=Y9LZ=_6F9#_Hpz;nW5KB5_~ zabOiTLK%bUi(;P<#|T!{N!3~UAF}+up?**YHUu`xv)7)8G4lrPhVr_BluZ4g6WR;V z{!p~0Eck-s#dt=}n&)_|Fo(-(g;d`$T%CPRL_S&$zMOF%e| zww7Vabcz)?!#Y*lG;Rfvv=_0kEYQHU_pB!=}I%V%Qwmd<R}z-Kk__8z_QeHXs;W8GK= zhgLX^q*#U-|G&!nlHMJZ#k=#tPj4iB`U>ftq+hs9y7Xay^mHx$MKHcFdfX#l-mVF< zxM|MPq<&a1W~e>p;jesL=+COmt6=3|No5w#HtFr8yY00HmId?mMRb*4W4;UK`-1X; zYQZ|d9>=pc_M4a?^Ys__ewopocIdiddE~%49ZWWUz{)dm2=3wYzZE?Wei~YTE|7+H z8f*pZxjZXo;opUUG8|h5O7m|8nhRH;QJ>z1W)B(@e>3q6Sh&ekMbNBk@2CzwH3}< z+xzajqZSs@M*fw2gR&#?}4)Q5wLHQ!DOD%O;v8NSjdhV#@0*gL>V zz@&4YEXpxbd}BpATz+VE;^DFfqwu8Rd4+h)9LVOM#=i_U6h_acc6mpLigK{5z~2G? z>A;?Z?{4OV#$Qc+5cPJqk#M#|>y$2JzPA%YygIM@Ci?iK@Lkmo&0u3OtOINm%#XE8 zS9-vP!Q$shhrmyR`~6*ZYyxZr>;%t6oD*e#TyRb_12jkaF6li=H#Q$zWaIxb`5e3A ztl%*%h+CWAF7wZ@(N>|pq&C_`M*7Js-nY?Adz-ajDxxE3?iS~)X%?Qk`x)=xIcw`U z`7U1L6C7uS{@3sblET|&4mW_T3-v3({Xch6GS%le_$6@P7ZElMwhQL>Th-@0*hMgZ z9u8#Wu7PiZr~QLC7T*&6)2*#yn}zzS-f0iK^cgEZmc1R>b>g4Mx|Y2iL-1tbIjR>h zdT-WFvB~Dl?=nOEmoAIHSd%bVBHxV zGe|9ZyAYcx*?4*1<}iz2emk-+PXJoreGrn zSy_tLeVYObk-BI94V&o%1rZctM(QtH$j>wp&yaj$@2vlpNf9!(!JEKjn#C7mA8Iz3 zFTr7_abYynQ>8-X=G791?Noco;ubCb)Qb50p%U( ziiruupI4}%kcEBcon*O9{zK1S$+u{XXYDXDSNLc!ShVO<9%7GJmbvby4YC=Ff?r9A3#+1@Fb!d%5@O&>SzJjI`4rvc{2>ZCTmRcUJX{k=>Xwm1yl{Xqi3%WflL*Av|#-BSD>aV+Rmfbql-u&r!WZRq8HodAkT$V;g zJ2I+|uQ=cE!-XPOP2qHyLw%|rnn`HGHthPbS9`xX9|>gNbcUq@fzo zYveO_>q_3l^{B3q)GM)0`0D)ICT)te-?jCX97FB%>LO4M@7}xGP5hItFh-t{Ot5mW zNuCSatbqx2*k;+Xa9f5>sHhs`9}gj;7a4zT>o~CuKNM>*b46dIRn6Ll$EnDPuL_%Ybz^$YO3P& zffrRwbA$0|K5{d0;4c1ulD}VJ|4wl?gQk|>y#Kg%U_I#6b>j!`DY>`!zLe=RXDCO} z%fk9M`VY3(!&-je^V4VrdxrFpV2ub)gR-k5;^1TD-WjDaI$Ql+8xr35)d50g*HAoF88#<+Vr%$k|{@gI6`ff1lpF~-bX z;&XMrv7zrg$3{eA7v!-;9v9xSlK(ZHHU5q0ItI);_Dh$YbgGkRY%l*y?C+4>XLDyo z<(o;!g4cpifS-^Po}^c9UF3@2pWJ;t->4s1lW&i%w~k7F3_A@r4(6{*$#%|yjm5Af zu+bQ{0X7`Nw!wzL)HU>zygjhN7*=_n@hpbbg7t%$xxVFX0*lLQ2aC(gCCD4F^87iC z$}$Gl7t41FtQX9uQy-rL>j8UHU^CE5cP|tpqS+tqZg50jY)1%GNDCm!x9G2Ek9S1p zwN+pf4kr6q2R07&7V)41_v%c5y-(c47tqs@>lo}J{+;)Ix*mAf;dNtggJ5f5ex24J zb{uRI%=gpyW;gRlo!ldT{>_r!HDc$+X1-+3z%XBWQ5YtGPVcn|?GUtXo;zTJF|6pX zX>YJ{c=Qu*6<9x*t9x}|ePDiDh^`r|7tGbE4zQjWT@P5!!PF-Q!MedrOn^Qa?nS!I z4E4ASrYzG5^5$dmRF+jM&n@41Fx8ifT?FflVI_Y<{3M1|gSE%7da!H^%Ye1SuuiZ{ z4C@7Jj$uP!O)+c&tTBe20c!wr>v;jJK8CG<)y1$2V6|XwTke9T9jt-+E4_ff17>3B zrajPav(JG^g`Fa_l@0kbaWj55!=v{9PwV>@*lx^z@q@93F{{jqaRgCclunEzulk*# z|8gqj>-X&uotTF%4V~Yv;$2nw!O}cO<~V7tDCT{nPZ^RfLRSUdk3>g59#&W04XzXqLTlzCHZjbt&;e1VF)+b{x*{Yk__1eMgjBU9w8Y)7%JSq9_ z3fnsaHUqW>_VMU=AI2`s8j^wlf5$>IBd0s+;~`1z4llP%Iu_NW=G3+(LzBK9anCvLa#8*gmwg?15I6CYyU{94*WGKRsoz>i3VX%D{B zX}|M(mr*>%dy-VvS!hegS0dl}SpusC^XC(y+W|MbglGMP?SWN;xi+%$ z|DYc+tQM>?hBbke$Kt21KXn>T6y+-6wJC^{$hG) z`r9ltb@2VCXsD~C{-#|5?v#fav!WgDXc)v)_K>%UJpcVQzE*A#{|CD#LC?%y1fyrn z2qOx{K434Cz|mADS>)xAS9R}7{%|l}Lt@8k6Wc(Zcv072Y;M(=pGc8C-)R6Agh*tpufGx zu3wn3gSs_)gSdRb8s8I6JYDvB5T0&$evxO-UK<`P=bb)_ssCx{dZ2Ur)I3-&hOJt8 zKArrj^I%=jh4%web!=?s3IlUb#vbVlq{r7Ks{RrC3;t}Cji2mP9oQb2>e=g`<|Zk^ zs~TE#7o!yJIiSnGnLUTCq6HTBBCD`Mh;e8rsv)PC;wd zMhvayEXTA5&8&M$Hy5EnCg-Yy-^qD^=H9U>Cq{5>e=DVH3FN2HC!^RlZIC zdS7%MG7VM>hQ%^J<$x%F51J@0*eJrZv%nBLc~Q(;YD^-ftde{2V<1M_`pAfpdG zmfz$qqd*Yme7hX+-byWRqlSkkCSN44lwhNw`@6*5F`3s&sdm7F) z&Dh0UQ|l}4*v0lgmP_2>)@&Mx7|kKX4I;bw1MayxWV`Vj-=E`1M10?1wv6_PpPIky znb-n$vnFtf{1?f;P48xO&%7H2xA9Z*e|1#zjLtUfU|-;yvV6(wp!U9~E1dJxm^_56 zx({Ak88jE4hc5%)s4auLmSo0X+GXUrSI5-vsJZ9jBD|B=n5X)C-9NK_0pCNFCqH4$ zU<(eWvUPy1fDQBP`5E*cduM^Ri&{tHxcY*gkJ+^Z)yFuzrBf?;$#HmzX^)gJOjy=q zTF<7pdVaC&&I){$@cA}N?847md1k!n3HRCTf_Fgg+OyJsVLW!Q4)|-pdcoc-f#^s< zzck-k$?9GK&H=rmBAcz~ctJ(>a7BjwpZGx70(Ygsti$vpa}t>*#u1Zg;_B$#sq6fE zb8fH5o~Y=!*^`+VUM0kC+F}*C=aK8%{0v1t54H)`ZOd={W#YHto}W7_nojr^FQ7Ya zS2q15{jaRYBICJH84;hV!x&`RIqS8GY)2P-d+>eB@?FM8-e$7D(NrBb-Vl+DxpuEL zeK2sVjV+r;_V9;R@}H3Gh`*)Pv1)cyF`{1|I$UbYZIuU}Q$cxR_Qv?EeDa!=rK1(u zBNZJ-D!PtT!OWaPe0wZ#^EOYnWr@+G&$E6r)P_KGa` zv?esgQN(H>4x7TXMdsh|KYlxDTw%Ij&0%MnLf3iO5wu8cF#t~oJU_0s$RKkSnd8Vb z^G9RPWAiLL>$b=nMs;2OY5Bji9|svvUhZs=<7D!Y+W-#^`pz8e(*%|AjvuqpJbS#^@TrI%9M#V7VAw7g%46t`BT5MmG#L z8l#&8n~2fPfKA2d7Qtp>bn9UAF}f|Vr5N2Mur-HH<7@dP{3WpG^X%DwTO`cz%y%f}$gA;pR`NF#du4RT za^w4(aYq*c6dxdn6`wk_nrn1CM=u!3wSiz5apgb29)6Vg_?`}(K`Gd{3>+2Mp= z4PW&S8PBefPyMX}zAgCNKG*|x5zOtYgJ63xx^b}5k45RG!K%PqdGlcD7~LvZeT?or zSW}GdB3Mg|uH?V*#~eEOLe*g1VCMWP?O^YJ#{nEEd70l8pwm0IK-=%|3+n zHWs5B2Aho0O@d9wuo1X}>xPZ_tNU32(V#yzl2Cm-octBaJRD)}DgLti_wllqd4KX&B-{1aT52>s8`i7zwF#`o!Bj8pVAWvez6ath+Pf{< z9`Fpf)_?Rqtj!1kjzEtdakdeaBp3^L<-GYUTE<1xLNCT%_;O=Vmp zZDF5f+=g}$+N+hZ^1z{@6+b^mx9h;yeB3Fc%F#mF`aa9i5ADW2%5fUH^L~C#Ip)B( zeB3FA`q&z2+X-nZ<2GqKr2RV2nrEA}Czh1F(=xgwo|Pq%qz_f8Lq#2*j>ZS;z`7kQ z3tclB5{-By0^>?C7C?OkTry?he;McWBLHbideyX1u(zZ!+ z>!-oe`3@OeBKq;Ic1#!q-+||#aDK{f98CF@8^pV#Y})d_LYUD< z1~0o`iJhzdIA-)wb+itB?H{qHTJ-4Sc*^Xj;gaK#5_TtA`V(cM-Gg=$+WoX^-F4I_ zv{$N6y>AC}ThO`fs(DQ>_zw7MO1yGiv7hjrZEfaF(0g;HK8uJ2DtSg*N zA)foXL}BVgYQK^Pv1+hr%k1c!+9XX{32A^SuSFk6irYBf=4lu4Zti|Gil%)9Immk8X@KYLfvbEyMB|e_LN0yLA%fnL)&4?Q*ho& z{-%}>-DOJ2FfX#xr{c;U#25dk5@{;AhTE9$}F}@t_m40ONfqV&0j(!R$$@q3l`G_DD1Fc9W+4N=MAivl-HRNpJodYt**S-J4>4$L@E)m$T>d zwSRTKFlxu4FWLNAWR!lLK5k{WHa|R*WnyF4d~NwpFmXg2q(7ICRlXMP!Bl@J|0(2y zO$TM94;6erLuKR^w+2p`xxI{yADo_wqx3yi?i(nbOUs@Vz0VN&HGL!8D{zm_6xh9y zwta{)dQBV5dt0>shrWzTF}!0R&_!geBC8Ks@8?-MXWJU3aL&Ez><>sFivdvOD5+rn z0`GgHyk;+mnTztu+N$ibwi3dO0Pw0D9muNv<^wCoIJ{%tn&;<`HGnMto!oIrn$$zQfu^L#(3E_()cqKR>T??Y4fr2OyPk)) zX`S=#$Z>Qc(yn%sR-h8cFH@g&m4}MPk@Y~z(F5;Ac!z^>Ja9dqLsspdKCp7^z&i%7 z-xjuyMCxO|`qlK)=+^@*#{j&UKl|~NV+mQ4$a)~{vIp;_A5%H9KXa(4{ae>w4vnRw z@Xo>e2P$GI(X-wWYC^+i0_*0MhTkxP*~78{WGOkv2oxe*BdgXlJ3ln!mCR-8^)0e`Ond(Z@|4hu`llsls0& z%`dmgS`8-p{gkc6@?WiNebBA?WpL&=qu}d4?vzdSH%;0`LYm^$i==Immgd=;i=Z3k z%u;yfNA0p@%0$YREtS!XjJZyud7#L()e$8vEx}U{g`16(gugEtb(cTfH znF3$BvpQq%Tj+$gIZZHH;F9}-ayOE)fu zpJ?@~)tv$u8#V!7)pw$EoikvS4wfa41+a3kb3Dr~+IR|g$k{sz!?~Nj7{oT^1Yeki zZ^`)<66BZPjnJ?Gw`uRSG9^3Z+hNe8mFz8jtU_JCagGchn|L^lYw16Izn ze(KNTVB27i7hvk%@6X|xP}$#k=q^I%_Y;vz=9=aA@j9>zU@FgkbhP{tUjA3p(MIT$ zf4u*+gJ1G-M@Ln*UefkR^Y5?GJaNdd+e|EloqDc@*w1n(5@6@i^YBgo<%;(` zSu-YHolj-hfiHVLdS0aH=ddphran^zHVpQ=ZnNJp_&}N8g@4k>DW$L#>@b$uH_8VTWvGGosTr+N-CT*Ow=co)O?WHW& zEt__pCvA>2y_0_W|0>ul*iRe8!_I>(fGISupXe@v&4WG2Aa?)LBRzSq6h>i3Qg`Se z4!e0rG^f)tpy92D?vf)RKolF zaGCn}HZm6fmc2cC@z7onTX63*wfjmYQaVdPR4x`CL;*WtZ>*udwpa2iisdqP7OeYV zdq&v9&Br)yHZt6~uZGlbeA9es=(5aa*#hLd@#nEyTAc( z%Q(vaQL2ub<`1ry_?qmnmt@Y@sf{;~Gx6`C&nIjfYzoZR1?l-7*lDm&@*MQP@cV+P z_dB)N1WEnR6QB7H&JaqV>o=NOxlY!E^cdsltuEnb=||D~$Q_t!c&Q3$HRdR#yB0-K9}@ zsE6CH5W7eogJtLPx7xM-E5w8JJ?kGO*9##UVqgiGn0o0TpW0u*U#d8l{}|6#f0tBO zMep&7{@W^g4{M`)f?%o7ATrmG`B=&1XY?Oz8>~L=W2RFhfzDH026L-ytz~caA3ZU~ zPHiA({UPUq@zLnN@&jwPbc)&Sft6OC%P$I}4{_hb9OkZ7hYV%gYSPS4NH_PAnsjqj zit!nmNSh_?AH{3**~H3d-|-T*2ib4>=_>R{PV) z@VxP$`O(A^9vUro2iPds(^Y7GDt8aq9N6XRd6e{ys={)sPfnB8Nm>}giS5Ut+^Hj8 z8G|6sv9kElEu$AZ$eKY`sS3tVbzk(DLq%u67{Sd?<*fpn21_ch{I5pRGe3JSm{W^U zvf9D3;HqN%gyq0mz}tNBWR^abcutJJ25ftu{8?yspw;{7SIfU{uuEX3kJEonrTp`i#J)LA!3bvF zdlb5&hljkXm(yV7V8+KZeJ`A^&y!Z^(Cb}S!D_(ttp4cEH@b|C;AjjcO)6n`c z5%d1Fhl=VQ%=CY-Ca}jyrYS=%kkLe1J8Ay=ioPAJ3+z78w{kN&H%lo`rS+1wM%ovZ zW@M#4uf#_F93`#4`dn~#wY>|5Ft5BvZ>Tpr7`#VGFng#L;X4iA-2!;$ds3`B#_kq~ zpU*TKCm`4Ou?PPu{3RMc_*US3+Td|-@tyLCZqd4=8Sl*bw$xXN;&ZUmT`a{oyxoiV zyJ$;U@v{#2*Lit+wR#@M`#tiU_q{7q&ae;rchz;#g$e!!UHAx|U}UwCA~x`E4q2nf zI?A)^F}ybi3HH0PE%4d_!r1C9c&6cbiFk~yCjWx7ruK%(z|b8pyFO|RP5up!r$1gp z{%ZRkc-G-D{m`_%z7pfT&oF6Qq}`>mMc#*luYqI79tI{3>Mvc8&BK$fIhXI3oiO(t zg!O6GO>V*_>S|;B&Y(hZez!*G3@W>DFbUAz{vj&5mzdQOyrY@G?n}pA-WnV*G3`Oh0 zd{R7K7d3T^Z;y)BMFZFcz@mm^j$^g}yRgB4vTD{}1>U56_=X!Qg~60alC!(#?pM}8$w#QxTv%fFN7 zB6h;r`4#quJzq|cS+ot%_CVVyTHe*Qv+k^2deaTO{<@TK0fJO@Qng@?bxmfHl#j4A9EMuvdQ1@sYPBd^17dV&fCjp`Z@dR zOsuw_tAf0~Jq+Chbd%71L^j#z68*sLX^H6)K7H!6+pbW;!P~Tyam7@EhOyoEtrfi; z75yiTb6$M%Kt(UN7iKF4Z(?W64HY@shit2!jDPVId?HOu!!nq;vMED24^nI``9|6k zWo*AoEW?{Cx+r?KqW5G)|Me9ep06-Qp4|=Sg8P50UB~l$qdx?C_8+=Y=)OnM;`%37 zkfVOGdDJlVzP!OR)yTf9APYV&UJ z>ZhOc?%XkL?)yI}Z|gY*UAA--x*T**=2>IFNa}VoKIHgwnzRAZwv-mO1@&@I340>! z7;WPg8Lk~|YAe`AnJwcYrG%!CE3a~v{38AT8Rxuj)|qlLewy#ncL#N!gRUOBYUn=7 z^VQ439StfAlOfkVXum>Pnh-ld9zEpodgT%B_cOK#rB=h@$lb&g&9h%GG3?8j5oZ%_!P*s^2Afsz<7R*JXv@auaRd6 zo=fnUxNAb$ZcixN96XKBx;CCIc>1rAr}}BcH?EPV9iHuLR(+N-J8hOUx z8M;QEMR*pjk>?^jyVuB5+lYPnB^wtG`{_*;X`Sb@GqWR{$FlQJ`5ayFjKgDmYQ`e# zCo>}(DPhl%9lTm2cXh}%PQbSXpF2LB0lOH(7Qpsm*cw>rbECW$z^Y={E?C;ZG0*`do^F3MMEbTDgdR2Ow^npk^zGUgGCS7B1hV)6&%^Idz zJG^OGgRj!MNn1!rQ&|T|J5QR~mk{XY?0cJ#}5Hcdyjk zLyDhJmgv3*_i3&m@8WIeyz^f8G2Jvk7SZRyOS{f_-(w~pcTcPzQ@JY^CSn`!Jr#9r zPTtW`kW{*Z|#rlEb<>VL(_jo?*V8!Nv zK1FAb@o*U8Iz*QK67k%Zoy+g>?AbqNkt4-j*!VR%G#W}TV?|8w(g&IhsCQvq zJNRB&S^;h^P}dTCs5x~H{H&$J&)T5$Zvg(vyU*pH%5%|e6_vuq!0N&Dte;e43ak!H zzO4UKY+_#dgManm{9*Jbj1jbHPUz~-bY=0l^oRP1t!A5h)s;`lbBT|>wNQU*z!$*( zR+;|~^`{qE-EVXC$E=sd^{2%uKrlH|Aywxy@UIO&aQ)eaf9LJz^8XRlpV*jT^yhkg z8{;7wGYVsLthj&rx{6B&UR^PqVz>Gw^yi|{pKLSsW1RH>>4dRoMt|fZ>;(ElXVAM0 zKs$WTx%~6?r$1AH{&3lw^kZK9_lEi-Te}K21!ne%;)&3MgYP?N({J{#XPY0T!i z^;M^Cl|Dv#`xVk>NFTaPx_N)nXGu@WdyBLS327>(`hLkT(;p|!vv%b(AFq${M?lRk5qbd{r> z^lj3wR1VP%K$rf_E7Rqmn}Ti(x(5YuNX&w}@57BlW>Pq+2|boA0v^tYM{f@d3$|G8 zS(ITuJ!$>)NZUL6T8Sg7-1X3&hV}*Gi_pH--x+E4F?2$=4&ApzHz41iX0ZFmh*9Eo zhP#zo^rgn|&*RqjH0SiDkkk8~bNTn{{kdS-Jr9K~KXvd16VI|YS_f~|!UdU;F<2+) zwB?8aI@oa}{oF(T%=>I?B!wf*wlCF5)nWYW)93O-Jj?F8`>j&1@x5Db?J@&xC$z%> zExPBQ&t=s?J%UIqU$-}pW)W8Xbr8NO_?pCrit5|K`l)|RlD0&ehj`cw*rJ0qLbnLE z0QTOf%|$D;ZOsnE>=)7I5nNLS;N#{F)Lr<}A0XZu@R|N1Tdn=?KB*%lTc&c=A0htv z!DzqDfYrvZPOt_C%fZ_V)(lpuJY!>aK}bu*}jzfDF&oLVryrbwUTi9=Z6}lXBP0-bR_$Sw%>LXL+u}U7{9tiJTNS3q(($+{b z-|RK|6xzmc4s8A5{^HjpyTe|8C^^RdoauAkS%4edHT64#?$BCxi{GPIEA{3v&G2o* z_pZRFN-BeGV|?=W$fqjQYV)0U*`smf)qOJT_dsSIc?LWUUar1_w&^>M`YKS4KbJ_W znmw0)ez0DKt+iu>sRwtA=r4Xpay{^AxzPhj8fffM?QzD}PlxgTH2F4x?SYx^M0jH< zhfuL|sc-SW>&x^$-O%*To%7D)Fi(FK+9=)u@Coqm@hn}$PvRJywsx`yfqlZ_Jq=Cw zAJ{dS&Wg&r;gt=V10MzVeF|YKk{81^!KPx^4%kc#D{3X)AH%A^mSR{P*jfy02HONv zAJb1|=>Xesuokc$uywFEY8*5BMy zPbbZO-&ttuzVMUN0aaU$e^n>Zck=mx08@{lUFWR&_(9gq?7axwd#-QjCR8N-`Ep~o z`qUtKjDPW5{u7tWBedIhkOzmz6Z`}8RpbdOSEP(YLxkCVl#yX&$@7N1p`Ppb} zeh92OhE0IgI+*f21J(d$?i`^#TpjuU%$*NhWLJ6jVFnYrgCkL_s8mNwl`6KhVx<=A z?C$LDEX!^t2}Tl0GKm;55=A8mDlx>x6_rG^Ska&ctizAou2M_VVj{4RkcXfhikJ^-n)MNB4?Uyv}<=M22YA>2>%3x;fv5oALF>RyR zpFwo(q05aW-=yr1^rs1ERS!Iv?vQj;9jS5`AC<#V)*M&zvjSf`eD4)L%F6G)Ps*%@ z!#U0faiyI3X4|s^AS$}5&N07u2y{vQJJ3}&e{lY5;2VOk`4p}m!Hua8b?c?8c92Vb_o90S-S^+H_9${I@T|fU5gvYmZGvqW*dExnft4j_e+Cu-D_QjFs|PDLusB$i zfwh6v7+4ory@B9qjS)vZ@TNy+gJ9xel!Z+S`Su>;^47 zGdI7|vTPU*6$chwWmn-3!T;;RuXI`aD3bhH18p1HIlCPkVoL_G8QK0vb8cHAePmG5 zPw8VT6IG58aTO3=d#%cbeyav3L$^5uiySIT7>zScbWcHtY#gRklu=68AU#o(*^+Tr=@gs&$L zzG3+0^5C0=uk`DOr@IMXA`iZ@7VPOEd}2@P;oE=@Q>A`lx8q>zV1FzKtyT6QMevNQ z`y~ki66iktfMt)m;Z1zQYf}cm+B8i1<0x1MnAx}Mpv^$*gf=MY(O0!KC~*m_0r7Z< zMK}`u^s@^xc=JD~hhV zYw>r!Nxai3C(0sguX5mjjB=9C^r)Y-pKf&QtlDQ)_*?Qg09N)bJH}!7+*xsqMBtOY z?`!*HtLR!m*I!GDN|%}|(je`#u2^P!eOdPJ-i|K6iI5sQBQIcl`CHewR_!0G3(T|s z5vo3CBVdyTHVHOkU~^#e2DS>eVqjZf>jt(Dwq;=Dt+Y=A zs|G9jwl~iWU}Xl@3|6UO(%zF`)nKx2YxUEN-|F4NH~?QWd}iO2zCI2u39XPljBCh@ z7ARA89pi6-GErnI)(YDn){RV}K$!_-1`Cu~Me5>$nWYY7L^Q%4OyboXH zMs_(@BS`Cx-+zZwKc9?HC4qp;JKi_Z;S~s*pe8XL2 zrV5m)c@goS0%h8esrf7N2aepnGs}W3zS(#X0Je*qFeC?eppx;)FabX zpiBoclLg9*BC}PX%nCBqKPv2fN?w9}LFQiipEgI8{ZQ^QmT|tN0hw833O(P_gb6_z8TLnvKn8dfXz}mn*;Jl;Xd5YZUTWUJ!Ul%DaNy@m; ziH?RXcf1sP*9R5@`?4^3eHF*AIL#&68OK8OOe3>_OvXPHECsf1VC!IO2DSsXYG5TV zC0=4+m0-&nCVoXNSW3fy)O*Fi=QLdM(+W1LVX_|42{r?Ejl|9}G134bacgTHflB=J zlMl$nVSxr%M&aN3#|P6%o~^Y!_VyU}n{acMXX%a*nA$6{hHTkC6)qbgsfye1SCRdo zq)VN!Kj#{z5wXy#`LBJ?V*@<1@MQcPS*L9VOM$t4LR)WNhx=J zg6)CLZrf+h`8&?PvX{|bz)qI%hZ{F^_jtH#@^YWpjk1?2J8*bf?Uigr*ZPjPjdqHD z4QnHrKCo4=JA(Y7?(ZO;Iv8XH(f&sHxo|W%EPHyqONd<1=lS%+=}?b#Xe%C$W-c_5 zI@v(~?oYX=MAm>*|8myrWnaFv*YlLD@z^skdmXW|6MyGF-1?RBsRi2udoj;edsKO4 z5z_shy0k|YrJbeZxP4u{10dSXzaDf|{ihzIMVEfhgI?B&fUM1D@2BCubl)nFOW}Q% z?4?ibkZwQeCV4KjPu1Rze|{0NQV$)-E+bn=-%#xzx$6I-eMo*)U$oX0=tBHutt-g9 zJOy7beD2->s}HI64{Z#ZTAP74!oNMR+CA>)W@9o>2+j z8~s7;gK_JqiSr=#K6B%g&1q|0x&vMN!G-j5Bt3qTuU@d4k_GE76&o7@>juL#sGqFw zjDvN7g{2Lvdz##~lD#&-xeA}UXDjWP-yxvmYH#>A;^BmT&QWyma=Z#{nZ$T`Ww`Lq z$wK`rm@hqSA$^ndS(P8PzM$-cyBE#gd)ikVc(Y%IPGu7Ip0ErKh*j}Bcyps~p5%a- zlx2!M&6X}$cWCf;gn#Q`YhZWrY}K*!BQ}9s+Z)s#`=T!Vzh7BM|C!jl=X=kR8tR;>jTTwv0wvWy&5KcW)!Rk?7w-I z{M&b;h+jrSwQbjFSv!_}KkgogRpg@K1<&1NTVTy#=2~I}s!LvpzXVOih8UR6F>*+s zsse8XSMz(-_vDL?*50B9Xl>A@_*?56?){c--#EqoEx9u}yHd}D@GpHDt8IfvNn?UE zu8=hNRq<~MY#L0BbL5p)QF_jf??s@mKwpL4$+K1GvZLi>NIze&3s2+`_Itr5;YJ2JQu7AtiizQz+wg#150R_*sWHuHn79y_I>d6!{;}*AB8pot&q9>3Now66mq9T z$*YNXl@}({fJ}1%GSZ$qkr^mJ1`$;^(q}1IS^s+1LHf_sn zgH?i=v0KP0K3mpJd=>gR0aSlu)IJ|A%7*X*Pp*fJX%2C;3c*b%W)~ zXCL%w=z3gs7;Fygpm=Bvx@Y0rgYO-Z7=3|AWNC9qzB`oJ!6iM}dbcfjJ0GdH$IQFA zF;RJk@;g|cg)j4Nf>nbJfo0-+@?H&KqhK%K+3IJnBi&f&T2d65R_N=7o=&he1M34@ zHLzi@6$6_9TQ;y+u#|?$9AgD+9_+E=>#9A>m`jR8?Z3eBmMKP)HN{Z*EV`5Of0SEi zV)rV*=DL@KiTcpMdd(CVRO_EqKBckx!W!;T~2 z7*QF-JeSJKCX6<8Eu*X9(F^G%$(!r1)NdK+WG4Gjm|2BohJx>hPd_LGNGx>fKlM2U|$!y4w zwp!9dejl@7-5tu`QZJQY`(U5pSu0CsUi$Y1)ERvl-#ED8JHDy)oOX0|Rl0pjR7$$N z;2q%lm@@>{4Hgk5ep2q^V0~cfPF+>*-1A9`UV9>fW`5_GiAdy=0`jt{&4O=Uq^OA(x$Ct_ z?vY>w`)+H39W7{AdU5&it6JfmR42G#;L2Bx>`4zNjsuNQ2_z=pu) zHB7aCuobX_+O_a4!?%?O-!6PbRfp@V>ZLvA!54$C4!*+jQ1=Zt={=gDIYg@ZFr=(iSJ;(i2omz zuN_=PlgbVV9pyUSk>X|;ueKRUtDAqlq&MPJTCh?Bi-MIHSPNK@fpviGlgEs0mw9I|*q(+-_9Z{V;5*avy#Zz}$ufSJN+ON!2_HLUx8}7m}^eyMWyTU!kDCmUsvEW<7JttJL_Z$s( z;pdZuhCb#$PhPO@rB^W!?##SDNVw#_l5=uKisSb787Xx~s$V+Rx%_XacOF3BDEjpB z83h~BFnM(;pK0(R@Qi(x@=4k92ic%@_;%o%M)q|QyE)89&Y>DNM za_o`eU*`HkUxz-CgD(AMAA0Fi7t*VaytwfkE|y6`Tw=oFTpd++2GqQP_!7KoUak5V z^C$aG2i*^Oy%v|0d?%6HMJ^M=5Ud-FgDegvbB+P9GO%|zc?k@OV<)t6XhYB%9olP^ z&nLR(piM)|%pV0?1)I~bRjTs4p#!WJOs|JtupThKdKiH==tGlwn1(h6ZJlTN$vdUMI&WG?e^r3P>p`6V zYzKprc@e}b-o*HeuGeYxkO=HpwZQDE0iFhUnr~i62XfazBJgvg3eYe1pc~o9ix#x+ zYG6UR9PKo%P~LACdL8tP&6IXI0oDk13(r>D2&j*72>(2^A!r#JDEV6h8wFFb3d+OJ z-f=yR=cuCGRVVqY7{Goa>lb5|^y;B+KriK4e$sa1VC!IK1yF7GcJ)rj)re$$^HgNJ z;45kOzFR+7IoOON8~ChrNZ}uYHVsXGw`s6Bu#0)O9b`9=^?SD((kp*6`FpXuX5xNd z14p~k3O7hklDsv-+X}D#ZJPvG3z*8Uy_O(l+5z4M{sf+_^0DgttX<~=HXYUKCv`q* z>wl&os!U(0?3AQE1Fbic4u4A;%U}awe(xsqZRiuwpUktKhfKRGdkgjxy58<0VDn&p z?XD48<*nYjNq|*@T}<5!A{$56FaPq+lh8Y$>+Nn1tR3vIcDDuJAbeu-}z-`%bQq~>NnqTI& z6~TJJS`BOntlhxI!MY4=2CUb>mca%LYy)iAz;?mLG^~NVl-@^t2JB+mZ4B8JWc}K$ z^t*QGI|tDFp_g~&mLG>+cL04Jdg1{3CiJcY=q2|vejGrrhCX!wJqCRRx}RNP~DQRePkOhLRRXu;ceLS9QhJ@EA-ABbV<7hdhbQ1J&o+x z0lHVAPhEs=$yfOh_Ua;Kn~~kS2w5qw0c5LQ?qAPBpMYMQgD&HC3VI{-yLc8GdC<7M z3-1uTnQ=sHQR&+mA2dwTtO6SVQ{OFC12$=3 zgJ3gYnekWB7z3L(uxYRrLpBAru3?qPu7hoXHS%nY8}7V$4_etPTzedcrR*Jy=U@lT z5t+bvd`3R2)oe_ORgAF}U7hIqPf6Rjquh;c+Vi4B;BH@c+}c)>@b1mA#=RNzmvt?q zZxsEiZrCGgkBO_$5;+8_z-Og|_8GlX@S4 zR{JV%_S256+6Tzq zJvMdP0YvJOB{gd+ja+gkZ74E~Kl^Hb-=h)QL=IXjw0&qVlJuCiDpMsvT z3sNsLV6$MRPbmDWlK!1;-<@Xi+B>oJ(yK#q z0dx$g1Nu7jTO=rAq)!?b9!Biz{AEqysX*{2L~iQ%E@aknz0~^@dP;g1((-JjW8DiQ ze=kETh33Y<`H%y+(6*q}=Ae~~&>wTqBG9^X&>EqQ>V%Kr4E^|2uR+tIk0igci?1n}F7t zgEkLsCB@SPohzw2mCK0ce9cXyeePa?s|W zt>&PuL)*(i+k;ls=l>2Be}cWsL92t-o`cp5Z6F7&1KK1szkb^fZ7K(C4BB)K+AOpg zADZ}kYtUw)b@ObELBxpFdZD}3|CGe{ovpK61I$>3*Pv`%NmJ)2sRFuFt8c0 zUISYOn=r5quvG)w1uHu5O{4U^*hd4a0&6v}I4`@)y;Z^X}N0GkEV{S4tv zfbW85e1jxdJ6O@17t;S0;=NaqD|GLq~!~i^C&Fj)upM91BkzIT@Zh z^5XE&k$_y!mVFJS?Ee>=k|K@KLH1YiZ21MZsIg!2v^UktApcQN#?Dxcxci&m!SgJhY7*v<+yx&`i54KHEODJ!pTxa}nEQSrlTC zO?|RMy;s!-Xut1p-%E7VfmMT<q46Om$W4!NdoC~q%yhFj@ivqsytnL((dK*Pw z>AT!^C)gBN3D_femY=l6d9Wfdy)DY~y5tA^Qhi?0Rr9C#^XOU%@Q12Tzx$Wfo*r>x z)rWbrtMiOH8`q7ljdy#?bpUJ|%+GfnhgSX`f7%?hdT3_-N?EN#Yk*eDv;3s2c5HsV ztQx>eKZt(?Z@>M1_sKUa^s|<1^a^sBisv3z=5Ufu4B5F+@B6fZErXfuMEJX*Z9vQ9 zORxd3bufLr9R(|WuNRvFs|VA^(Rr|h!M6t1Yhc@86B?%SHqQ76_8jtH*$qMo1QGZu z2fIpHbq1EUT?5}XeBYNfQMW%EZQDNcG*uk@761OM7NO;Rd(b!dezzS9HV8IgU}IqY z1~v`WXJ9F?UISYP>oKq$uxFnM1c8wVRQuobzqxd zkFeW;zV}>>8)_aaTf#S(#WJ(iXR#+a3~J77(J6g*0KKDQ_W3ns->rLGg*Fat%0pAj zUrKHc+B`HB&rxzWsy17P+&Z*1Xv)4ryAa6uz#M0`o!us~l<|ATZ!Z5Z?}yBfdCom9 z$_7Qxo2hY1`bh%$;SVgNZ}*lDSm=p^q?h3b_ z3@5Kvd)@golFxuFgOj{x!vy{9gZ7>!^xFFisO<|SY7a_Nc&?PtaH{llc!f=GYo*7+ z8>LqRvcJq@M308V77w7WY<$7Iv(ax)KKYbQYCf669!Jr&imowqeT3)Sbr_?K68kjU zBVXgFN38NAfW9D79r)wZZC-G9QL_8adin9i_%zM&^-Roh-Uy&^MqD30?I;zP=VX zWo;jnv)FR@2$I;rE_h=T-Z8BotjoYgz(x&h5-eq4b6~p~CT)HdEb?+ZJ>sKIX044zOke>jjG&*brFEz{bI%1~voMXkg1=4F62xjWIkwM5wKkYs|VZBFd2vAVB28N=2^yJeVi8E9nj7E_kx-E9|AM;KMrQ* ze+JCV|1y}F{|zuR|GQv%{w05n^Gd<0z_zsa6s!(x)4*b28wS=2wr*gZU~2}} z2exWp!(b~0HUYM5V6$K;16u)`H?U2xIRo1Rn>DbqKhL(m5wK~4uO4j5z~W$&2G#~< z+TSiP)Bg5@nf7-CY}C*<2{vM2b6~>;whA_6U|V2=2DT4o+TZd|W!v9sFw_1vfb|;s zn!$PuED6?aVBKI{1~vfJX<(yZ9R@Z9)^1?)U`Yd818W1*=TY0XJ{>Fiw3R;{s{oVt z)v+2dDL)-+1e5yEu>_dZua32YNqf<;9x!QtIyML%SyfmMR78(1yamVrgVb`7irtmqToGUxy+Gq7H;N&_1Lt2VH4usQ>q0c$j{Ww5w` zZGg2H*e+Poz)C-d{V}jAupR@e1M4@i7}$`3wStWrSSQ$of%Sn+8`v<|oPkY%EgRS@ z*qVW@fNdJsCfJUF?SbtZSlJBz$S1w^76Gd;uzIkFfyKdU4Xh2U!N9t}Vg}X^mN2jp zur>pm1nV%cIk0X6TLtSgur07b1KS51F|hK_V;>Bx8f?nI8o*`^tQjn2U`eo51M3Fc zFt7ozZ37zx+cU5!u#zcn9nFK48`v6Hm4R)8)fiaO7qH(3Rsj|@uo|#t18W3pHLwI& zyMeWXbs1O>Sg(N%f(;nh7}&6e$yhQCHU@TOeq+fS)mYMEjU~jjeJA@-^p<^*_VDKm z>Cf|w4__`bctYWL^Bm_&IAaN*1P8pJ1UN)T0v#2fx_BKjMh&B52p#wGtnzV`B)Kcf zC&?n=pND^^0RCP06Q9msfAuWwzX1Lg_{*pB*WV9+R{{Lf@UIlWzX^ZcXY$Wa#a~eV z1@On<-zk8<8~(&+^Uu#X{8M@IM`;hM@Rxt?;@hC;sQeQ4@)C8lp`&!>((*Bej{Zy3 zv5AhN&tFZ2v#}kl^p|%8Q3&fmw~0gMh$EoEM;IjV7mrZ@@4#)zwoA83D#_2 zwO~C476ltOuokct4U_m{2iQK?rN$Sf9;eZ@@ugpEJyw2&{{NTWGN}cdF|a7urh&D9 zmCt!)JHQ$ZtQV}qz=ptv4Qw22&cJ5Cwhe3uJ$&l`z&Sf{wrsJ`b_9-IDR&q zh=p5^g_DVJlt`MkUM+fxQrO3@U7DUY)Wp#<`gJ$HXWvuDet`2OEE#iGRs%PgH;3cL zB&=7*`hDcM+IYb-bDV58oDD~DFrX&5S`I4P%XlrQv5@GWK>y%3elhx`97>mH-z%41 z4hi(E{`D^|pHt|c|C>wC=N@{hR)2B%Z2c@=4O4*RJs-4X)s-0d%sBx9dm0JuS5L90d&-UhkLS}{guWZVfStvxijq;VGO#J zvA2NTb)st(T|3|9{;+&>C4+IV{Tls!^Wxu4%BLS4(H~vB4k@1$IwpVo(3DTb z*J;oHcLrPM^}jBp7wz}Y+WW8f>qIc(-`1=>a+Bzq*vV5@G+5!U>sUz2 zbq`&&|9)}rCGrg`%ttOkz6bf`pI&_WGsutbUYxwt%O3Kb|B+`|9#Su{zsBDFXP&wa zsh1&ib?;r=dr7^lARqg`7cXD_H_U&2cJcBF^F&&8KZ2l9jIiZdo0)YqvIXf=c(4R{#PD)y(#oIhaP&pk-x?Ne)vPLw+Fqwk9cVHCaJd-^bTLKnEqDwy!e~Waga$@@KaG5xIE>DBq97id)AM5{)_~PRhomjr^(+0Tk z&<4nQmT_up+e8ysWIIp?&!EuaHbT!m1rti;3 zS0cAADa$Q%_5SW+y2jS!V{fbv%jkCo*>}BG|2^wP^%p0bM7I6+7Sp>0rYq~kqsZ3$ z{-Wm|-6^nYFfn8D6TW${2-vd~Vqt4w&0zX|?rpHRfffB9<_lmInrsDFLc_!#ssU>Q z`;PE&UMQEJ73Di5W|#~=>#i&iHInx}^lqXzlXppL7_9s`4}DtO=p8|CDQU=0(l7cR z{sI^)6zV5f1=tXnUUoHLg9g?JHUOrVT>?z>Ww1*0wS$d;nfJH~tqg<$t zSFX@Tp{+rCxxS0Mv&$-(R_tkrjQPNV( zla==OW+%`$i$1+hX2E6*Yz1r@EK~kcpPOKF8kPXt16u}rDDo$-DCsnRpYidz-u{{d zYX>V9CVp-F>jq1Ll?tfpj;&o;_isCQ<9)%m?qZ?qRnScBagI21nkXt)(O>?Di|LPx zetm5y5*Wlg;R^(D`DozF9Dn#|DA3~k!KHDCRsH~b`MkySNAj_~$>10KV@=#B_v&!R znQ&J;+;KFVL~lL+y3xIIbTNIslRw^H?u?1Z-83{hE}@BqXnFR*T)CH8WG9i^JBA;e zPoAQIpHXhvcYO0P>02RWAIyuZ{VV1FfWLIY+s>-Nx(uuVtkb}n!8!~q3D$04-C#)r z8vtuFuu-s91DgVCF|c{Cgn_MrH5=GASR7368%3LzJ{_w7ll&z#Y>i>>3*z6S) zbt|9ftNbDHlIF#9`+@rG@1LRX75@6vx43H1*MYv~s~6L+H zv+!=^$-4z_;|uc3L&cA2uX*xD;oZ!GSH_1SfV&FMb6-$YMswYLmd+&a*p6)7bzZ-#2dq}ZqVNrZ)qtt*Yj9_*-A6b|dA^z3?&XPJr5fr2pKo=-ip4e`o4N*7(VOg_9xcyM#QFAGu?t9l0*# z-0#?O!Q}a1Q#f*WxRP%tNg3D6`@=T_--A3$ed==*hWYak<7<_HPpGUp_nfxCI*(l9 z#>Mm_ZGXbwH2>mG2mQQTSeF zr*GFAl4Z!?}A!rV_31pCQ+iTufi?wJ}EfweO}#2L8s^$i(HU8u^arDesLM zXXRqzj?>|;li{A@e7x#f<$kF4xJ$a_w|LuQ=}*|NpkcC>QUz8Dru-D6JqGxAhTS0X zp2p;wU9BbJ|03Upe9enoA1ZfS3{FX_%ewP3z^j>UvB~;Y%nZ7FU%Y7D=c;@>_VTLx z{klDEY6HG$_&UgsHSSP{_II1Ogrw5?e&o?mGV?aD$-7r>V-JvfTCO(5*vU6Wx#Y#@ zK*&nlX+?hh*2Q#!XUhl8w4HlAZKn^ul9w!|pX0P0l|Qv_D6r&|@rh92Mkj|-wlm0; zbu6ZDF5wSl`~1E!XZz4euHE(V_)dm`uPP3A@Ex?X;hq?6!cD953%!kfH((fa1HvLlp@ewP)!g*davR-Xtx-+L_! zdL-S*zu*s}>#%giFKmW)4c-Qx<=l#VhfMHx@S>M{@mla+@EY*Lbc;Hvmr3{s;MeEs zb71`%CiSuk)(7?#5%ja8QZMaBy_}Q}M@taSsTP@bsCudXS5kaMcD+biQD_y=GT+Iy zZLhJX-Y#utmUcRX$CTA^WDFQWUqAZZ!?V?2X*qU(4RA-0ZF5fWp=tZknp35a+eYr3 zBd7Y2vcdY;bj}r1vGk%H`d`;#TE-ErpCTvs+*n5b1owbt?0p?<^~lr}DAR#VTY)m8 z$P5%Hvx3ZYfiflk#{T01WTc)NkSTj*Vf7^aq6@k10_701+CQ>u$d(GgPx{0h*s6w! zFSiP|0;cYCqYC-18#ndHSAML!A9tbeK!1dEBxO7OzW-&sey{yXLU z+QoFpw%_;39b5W3j`%D)UZ16gWP6YseBEOD-*~p}vd@fPfv?io9>AV0NQR}X$Kg%( zE?VEmBflR1;*Xp@aWwQQw{eTyI&!6VFQ&gHX_#^n3BhV&ezW8%e#-m{xm7>89O*^j zZALEs`bF!T2c+kJM(0#`t~l@>26kLJ-S>>Ed$5MkQF6~>`lVi<$ZsBt6DwhxhU`!V zd#BpT&pNtl?p;h1HnG3K;C^q|Ea@_Ez)_qi^S}#IKxtG_hs( z%Q+?c+v94_ls&c&JvR7yxkocwpR(T-=-WhJ;_Zvp_d@9pd=x>=Y4*We!M87m$?)%* z!gaxSqBny1wVDau!c!h*`FXH6{0II2-HU0aV0IsJ{STvTo5FqSzOwB2s~y|yN7vM! zdi(VV*rb6?f=w9M9N4&qNxNSK8v{Ec^`YKNjRlrZbzkOv;vSDx%DwDA@y9>7n0}Mp z_OkpLrVzpFs61)6nnOd>&V$IjPx8@*zL^i{QKmiF8EwCA2AN7c|Lf^CoGn~#%}WS54%t@7`!i_+SU%bt3OP=Ic-(d zn=$9G`@~#vaNNJGs{8)r9i#t6{C;9F{WtQC^m#k4OiC}5&#x{;wgy7Ao3we{>=q$fEaun7aTJ$9}Ap=8nda#pq_(j`CKD= z^skRErhk+C7V&-K^MU3EGULHCv9gK4bK8w>lctKV_pOp+p}-y=)NEk{I1^6swd)l=WxdAp22+oz;Tu0jwdsS`P=OcmG1k$$hu%AEy|&+=0!D#b zGj@S(Adb9_dfyKh8h1ev#sj5~f<`d|3~ zVhiMES@mnNubuFheulN6T=rGwCI4g;66N+KARKbd;#&1Qi@wxnz4g2THm_k7q`L_= z2lo4t&r{)Y`HEze$9?cE@DJH-TKB6?@tya;PxSHcxO^=j!c4##4moQeb}YJ2{PGKn z=~Fygb_^SUA&c{88?*sv9WuUBF$dZi>;`>?5+Ed}-zMNIo zAIxORN_Q3B=vP>;ciN|#|I)7QyGf;-|1qmj+q|vQY8R28GhRHfXx&R{*6}C2bu3wv z{?~%c3NjRf`U%znwya^&=6bEp2mHZF>HMF1ctd*^rJMz6RyYI7>_Ytcr5O{48n}AtXeNAj@ z9352;x_!ZS9K4BqJwQWVAo8({@Yk$w^YkOzhit_`_4Nj$z6b+%7!@XMZUtQ}3ybL& z<HSN!fAA6T#~$=vZ#UkH^~oEI_llCn z1iCuE?q5eS>8oF+bK>S%os&yT^uEeMjP#*xbkuxfG5s2zWlX&w=l{lp8x`+cX11K%O@dP_SI5r7z4cmJe57bn z!(<*^1vUZZH;*y-|yTj{S%D6Oe zq^J$veW$Hvjp=prbu7KMmLHo$*X|G9HI(xKmL*E9GU|m^ z^P|Odk5lG8KVD3KK;BJ#8_;<-S#)vwb`>_1zRWKPwCSVPH?qV<1TOixhX*4VE4q+7p?v342p$(2bcn!VhV7S3BpmP0PS!G-+UQp0`!=V)|d5_sOzzzA+9}|CiIAic(qiFR`{bv|4EI zwd-H^b=@&a*$gJU#Y`&v`@=2%@dgly;b@bxQ@933$40mGi?Y%qMe$%N{eGU!et}nh{$Xrp5A=D3#dnP%H-+4|&t93V zwo30VEAh4Vtnszl(Sj!aPr!n*lzJXVf60R`(_257cM zo0q;^@hjN>P%8cITx~?=58Sd~w)tTo-J_AQuoZpn=<6y=rGGB^jJ!DWW!VC*Z=S%v z{gPMRDY3oGc%68b=$=D&MfjoDE&a9X2>t63DbGBn4s2e-#LmXR=D>72TLaz(z6Gwv zTkNc7{;jQFNtqA8TU(w=e>}JSOa@+Vlu=VCIO^koi2Ync-{2!tx%V%+;}fG#v6_5l zJ0Pb*UFfO~9VyzWNTpwRxGg>vPF|U-ao?b}BU~Tu;4Y3=hCAZnt{19Zk-_(}2+bbJ zlbJn|Vrxc7bNw;dwx$-^G_<11lyyHK^LbCX-t3)|O4)A0pM?K+4{Fcvr)+f_eujOL z-u8zkYy7P*!@qy5w_U`+nl((-KUf@WSOhW0c1%U=vs^@C8E9hQ^1cJ`&cd7dR?GRo zYs5`bHhUb}2DBeJ`Omg_EQENB8b^hcP1`_r`0=Uq42P0(#5~{gRha(nyiU zb9uJEoIprKV$rZ;epFpN4z{99^wCEm($QL#{^$~O}Ov!z)K*u zKs;j;`2ynQEFUPMS{s=nALGwRrQhPshdb}k=Vm*_!MpwaDN6pX@E#HNKBi-PMB8_0 zZ{o|8Ux7dR+w^T8TkraDnYEE%@JFJbK5G;ji-kcJIjE~K+S&*)^`W5J3)6-E&EHK~ z`!rg@3w;8C>1IFeGq*q^c`e-gl`(YqTfH*E=ZqUhp!U8%YE81KCm6fP;L2CcqJH26o=P> zw}v-@$HH5**d6}A7d#d2D>(;MHcW}BG8#G^X%MNakvgYI9kZoW+itI*ef~iz{m10V zY@cEo?Z(|4A{uKyW4*1he+=1@##DODPuATOd^U94k!6RZ6*pW*wgcIJwPpR*l>#rZ z#tp490`!@z`Vreu`)KBW&rPM@;Iw1LpR98`whde<4j!RAi%+n)cP0Nn%3|LOeH*V# z6N>uyH;Dd*=cUqJ_SkoT9cP3t4%`%;D83Enl^_Y~=lFk$^}`j`6319KoS-{Q7002) zZJMk%o`WWXk)O#*l85qNJyKL1O{G8Y(`H=zXTKxs<0Zu;8b|Tf{9iH=c%Sb}vdvum zWWLZ%8hyu8);`D6;qvEW17*H32tEQXTPoxy*cjL_nD~P76Koo6NW;Y6Pk{}BskJ!O z7pWV4O;UO^?aSlip5i+Z0$^$pQEM5M=&E=O<0-nH%(INU=OysPqx8KxXuHtVK0DYVaQv8Kp;ue&(Lqjzq&e!oj%weM#w=;H zo=Bx{@oA4)<9=6QJx2$o2l$+mV$Zw8R3nwd8&0LtFW}iK3!=an!CNVjI-n@@ap;Re zH^v^>`o$4`F?81OMI(?nLpL(fc>Xe?TIzigxi#b>0`L=T4r~)lZy&2*8wR!owr*hi zwmx09{IQJx8lSvlHP{MRW^Ur{V-bU84G||o_-4GNtka21D>9OvJWIJ<2pkvR4YMzM zUo08fv0{%ZYMo;c8F{~h_mZ-;z|$O9AjYm3kctVfqc471pMSeP1zPM%IUSNbmOhUD z1Mg`kzp7o6Us(aPUQB%})5^NaZzD1j$Yk!}*L`(7TKgN)uP`zf3&}nJy+O-dP4X}( z`kGSdL2n-DTLC$%Xl25_dS41!+UFcHC1+CUGq%imG3eYV$(A+C|A$@=J#*)^zQ!H+ zs8a|kzE+No^2g&3HK)=N`j?-K^VMMGU`K45sPF4zIJEDW34TpN5qf7n6C&*GLE`Fr ziQVX1IhRU*R1#2aL&YuCp_KP!-V;&_|Hj~LxiXdh6R{&k?1;40{vupWt3;ha%sSBN zi6_NEY@Cy#NtCEK#yzTHF zb@IT-Zl6a}Hd3{F@(^HhCeF2|=$ z+hODjw{hqR=;P4$cosXS`|z%9Qs0P`xKIzqDccoiK$P+wMOW)hZvU0?m;!4DJIr2* zpS2F}1iV+y~AQD4}ArrYdWuDt~#|0c=+iP=Lyv&EBz4ReFjcjHQfZkq|53k}`YAnM@ z$To@W<|1R6=vqeC)-9=Yr(NH=E~D*nC&(?n(oy*>sEp23g^hQZfwKQ|~Jdd>}kfd=J zcP-D}aZR5lTXX6Sc)QUrX?c15;}Fu1DxQY@LPq8!-hOmTrW+MSAvMA`0^eK3_84OGfk&G7K);(6}{W&RdF-) z>ho(<+4Ji&5(|;%%$91RD=G}BY|01hyRqekH{}$OxY5$@pfu4%NOS222X9PXV_g$JE=|dan>3`d$=|PS12Wo$Z z@%!zry{rb0g4KgvDNL9Mdu@P#-|I7un3C;)uMNJ;{6_3_FIX#>+E2{if(?Q7YkV>W zj)V1q$+M(!KET*rdMtDX|663{ZF+^!`3bfLHi(RlZG(+~>ElAt?_%!_tO9Jvz-qum zpDx=7HlSfr9tkkXzto{s9vL6}ddGLDgVY1xBz##h@QCacw--oGgkGCjAd#_p5}BHJ zq?|kObB@&#&od%-43e{cW3~7=CC?d|oA&5&RIR}bA~%BEQIS(^DYIr| zFLbNz2i6HZS!a^8=8&02=6NFH`WfW(e2M6{+=4S9PX43O^)2?0n?>##kyCMR&N!$$ zsigQ}RcVoLX7iaCxTIHCkH3c82Sv`^FCp`g9!Kz~ENqc7I^rDamVVfQT-!TS>5qvV z`Sg!XWMcL?_Ng)FlKPrP*BrY3&DN#I1(eTb#RcxMsz)1RWjRJ4WH}clZL#E8_`82> z?*YM&9b_Y%a}L&?-BWT+_%h0Im3H2MOzpc;X?Ztqzo*Gs#i#cBB;jj;?=iy1%u)Jm z1&=-8ZQzfy@pE>44uQ9W-z&JP7wTKB8(!@c?`i24&2GJj?N1>$i`)ymShdV6@BuK-g1`mu-e!uZ5=fZ+p3-3_e92MYwo(ZJ+F-V$H652Ea^v{ z&HU-zsr2=ti(+%ve)ai%yJPE$~w}4lDg| zhBT_)gUymO+O!3vgP6--pA>_a>Q00 zpHT6px(56;NwZI9CDC&1Rh zGW$aHwKtTjbT{`k|_vyrLR~2KKA^5 zsdN+1R#~I(yqpJf*FS}?8NN7t?mB6P&%N`k4Zd#py5ReF(MK8j+b;}{$5@?G0XjOg z7P7MkCC$WDqH-1e7P5$>Y-)&thDix=McXD%k1&+Z{s&RZCu(> z12Ub+gvH*ttELRHVzJ!Z8+fZxdnZEX(O5Me z%%f}NA<#v(lntx+1NJL^z-z;5z}hrS%B>Ns6|7qX-99K~(BzcCN!K_@`F9~Rj?AM) zhM&||KiCwQl&k1D&(|`=1`2Hq+A6e6d?>RoJ^^hO+8(q|Nncds7VXXUGh}^-9_>z+ z&V+)O(-|Yq0e(CpYdDigyt+VB>`Hkfr|dxl8OdiHxlZJi zFRR*It7>!7ciW*2LHnvbHtB1EnZAo|k9$QZ^K(E=THjUk94W(T^p*daw|-J!Wf~^+ zvkq1YR!IGnKbP?u8NGh0!IEGz=(OsGcrq0v?;V9!@?rn_X@gb+?V+rnDRd5hr11LL zLT(f}zxpZpL;NXd4^{oNpfCC{Z~b(DHELK3W!DSV0QOsUyU4PG3>@b#V;GSbk{M>B zUjZ5ywVqPr$0~ZuC*8F`Y1dm|Wnj1QEH+nAdgqhD|$=n?!C8xy-yG zYyPABUdoG%ne!iZ1Th^j3z6>%sxoA{z-y5eH9=^QcZgD7A5WS08ZrFX=L}^|^e)3b z+v_zg$ZjAjHcWofXFI^wHLMD(7i}@rIL4i9p>(-9QI`Si*u=fsg&#t|1OU2@t*V+5FqiQc!2~6AvC_vl@XZ$`BlD0F9zOJe4wj=d21#KAGU-2wu zqK})TW!*RBQ!kRwZDecyJeB^2Ba16x+zV=NHf12OS_7HHRg+BOCsIdh4uQP1tFW-@g;M!)k?2Arh8V zV~GRESg?hz=1-;4qoT_ltC_dDb8EKdw`JlDHLz73XMYPa{UW2y0lS!lrtV)1kI-{G@z;yEPt8UL&6<^Uy87nQwC!l}xA7*GXDx{*bx1@nxPlskFB? zcpKpTs591Rr-!8Cj zu%|g?qTa!^t7493tg3N3Arp1+4JVQ9_*^ReQ?INVHc8JxStHbZ_o%Y7WUWUOQdADfG(BBl41mx|774&`~5lr|$RH1%Hj2w6`;xj(?q+ zK}w(QLcaTp>~Z#)Ke}^s`%KE1y4N6ka?Iph?Bp!Ew*G>%lsrpYJRi8z@j2I^)qW|J zKJJuNcH0Yl#b{`_#6(9tb4ZDiNWImZLf>De(*G=Jxwb&952=$vv;zu^B|+R0+nbP% zEoIh@?8ZgNN>b8}#*rVI^R~+wut5#0f^QjY0L*VZ6??V~eFD0gOQ?5nZPe|VOv6{f zzsflABzS+D=c2Z7`PDeQl9xL0Rq!hW=O^_L1KR+TceVUucm9%uR`O*#Pik&s-E%1U z?S)nYt=o|!gh&y}u3@nsqtFMSXZ9)h%^Q5itM_?5CsA&d<2L##zv3;&qSLHbXqb#^ z6=3CHpA$i|u1B5fRd--n{lr@PYesGaIb|D>)AxzfKQBD&g!r?v6AXXL8J*&xChz7P zRsJLBnnc%AB@dhv%#{BW_&m5?{_|ifVCRKbm2u$S%=}~nTI_-B@|XAAht>h@TInO6 zzHD0n;6Kg#s#GsJSGj_aFfkMpVY|2Tas%MQz~YZ*NpBV=zcRO4JX@`(j|AGNZd zc+V1h<{bWetm0MC=fImX*3{~QlgM=}rqZvIbd?aCtZ*N0jB^ROse#`IUBm>O;2WtL~bT^s!;E1ej!1eu7PaHG`=*GJi{d zo&{?Kdp^%rJ5_OObthiC(@bN^r`&>f5ME^)l&!o{*~&IVOPYy4KwFl@DcY@lmKi_U z=WH*#wVuhzR`za<6<^2yW3qqiX_)?oY&%V*OWxbjA6ZGI@rN&?yO!qe)`$>1hiO! z-~U}I{Y}ZJ>cg}XeZRJvW69RtGvWBTaDx9H4M&O9Nr;p7;&f}yPl>OPL|^}R+`CK8 z%jrVe0=J}=o_K&yah(sS@)&@x>btBXddJ0FZ+XmYM8@6qLK3@sYIqhLv*^CbOtF9!!-%q6fa*CuXN1)F`FLrDL8P7WN zn(3zjtfo&lWzW~!1Gy}OWy=Ogr}M{I>zK;F!Uv_Ls?db$E7S1y!TUDJ|6#TxahGqF zWIR&ue--bCt|8H-Y`5GC!JY8O!=+M=5$N?>cAHiG#VN<0Ol(`qDGuK#e9snpMl9BU zeN*j$6^j}8ci-aRLYupat<7;?{|5JJ6nidP7oTW~bh>|neUb*E-rcW0GUsyx!M_Ol zCZyIu`cYAIHU8OtD&6LDU#7cOWv|O(>CcJnXJ8&Hem)P!#Q5JGLAqHtFM=@D=^alCO;uddc${FQLE6 z*25i*of#Vt2djqO2R(D&kKVUk|HAHbiC6fxeyKds)rGF{BTMN&b=n>0hVPei!TR0q zc7IC-_H!xgMb|94N*})D#Pbd)%NX8mJlx97Q^(}~sV+Ph20Wk6ah!9^t$YV57VbEq z*vLwDUuMon`iyDHqkU6KUsUM_x0-LY`P3H2v7)VAnS zkNxNwLyx*E)l-k$>QQN}A2z}_3Ev)kKjztN_sSn3Mb3kmi=ryNCbn}M`HApSy4vwM zbJ|WRuhYH-WKU$IFE_q`{(XhFe<#5DHB9Qf9jp)RcH5758&@V}#!%IMSnG6sUE+~G zB`)npY{eA1#vi%l++BH?53>P($)lFi&pgzJVKU^m*tnvGb0txH)4hgGBBL6nBqMS3;YbKa(scI4PC zBR%qK-}lP+EDLr%2{JYRS-9sc!}jwJ7`D|rO8*)q&G_S%(q&SX{CfB|1r`Gvao*eQ zONPI~_z}3zHyVF^%}!A0j2sA%S+j$vn2Nmb2>LpI4S$el`AOfK z1nU877l1sTmkS|r)g@ji^WJ6XDd=iX<5fcEU<8FN`nI5zJ;5z!sn30|QVj!AycIX# zUx8=#0Em1ISe3>rSR+^^m|mX=unGffxAp0D+yf^0d6Xo|PwHUM);BMJw+;r3I- zT1tP?rn`5g$l9KrZ)WAfI|c7Byf+K4T7SyyFMf$<{V4`{9o{u~@3-5e?w`orGZeWFiS+CEB4lKOtyQu-}g1Y#mJAOMX%wlVDp0-yGN`n3RqDgl`pW2kh|* zv9K+$eFNJED}B0`ul#2EuZBrGss@XIseY;A>+!e?M;(Fv{5la z)#&L&&jfm8{I<#^vvw+m+xif27o=hMcHsL*;q!}cxMMA2+-s=|zghKd>WbM@)|XAM zVMP}{98Du)D8a5)k}16fdt1BYd<)2)Q@ZEiRIKk5LwA4$4AFww#swgIbQWtfj6#SvwRS|6v5%I#dFLgTSgi6cLSu99agIp=irxtQCAowLS_ zFFt+nFKYZBTY(TgE#c61jEcMhcXZa;kVS<5B%my2aZpFLa&xOI6wGy{oi_MTwxM4DQ_uI0-llHwUeZ}s!E9Q%&H9=aFq?OlPa7^8= zPp=|PeR+g5U&g(N%`7yYm&b z9f!C45A)+)fw$s$`SI?6O;?-smmSLMfB@iOM~SLeqYg}42h{CGRz?P$r5 zcLd(f=jX>e4{z7C`SI?++x>$4c&j>@Z@1>h8;7^|y8L*%;qALVKi)BT`(KzJ?=rjt zZTa!;!8>@v;k@EsRo{+(b)$EF(f~GSV9j6y29^Zt2dhMn{6t^3txuny41kTor(>gF z69zT~HmzZC^v#3Kfdw3&L-`5TK2=V=%7D++1+2?we5EGFS+z~%LQn;enWW%B$sDEp z<>dD!JEo7E{f#);&~i&=jw17y2Kct&d!y}}WbGNzeP{OPe4cSvK71qNE}s+NTc=~i z?DlHN9;D-;Tj0GC-fQ{)QTXH?CrGdC=1ZSLMA5a2t|YoX!n3)K;PqSZi%q|U-ITqE zHN1lJ>FD5E_XE~@?Qf_vcle<1+<|={FYui^5RE7bWEO(s#zJs2NzRb|dizrP+fMl# za~FM%I2H^}$do<1u$@?IX&3h9R&V>O0_y=2-$s6o{Hp^S2KxsA+&yE=Ap%FOmd0$C zZ4NwVVpP^KBiJS1UC75?vXuUg$m7e~aTDb2a|LP_*!%IW^|0WH&?yiC;k00D${_x> z%uD9bw~D^Z`oGFDGKjyXW@C0KGchB>C2bW zAM>_hzd0pw4*6tOb^|7gczd|xc)06?73g5;@)j7+X8HbHPIpVV<4P6iC!jw{`un8c z@QS7MXKcIqHqL=$*5!;?Ld=@F`DB1O+q{o$V=Cms%nnNKmHb8=ZTilRs||xk-lWb( zUyXm$b$C4pZwlVFSLVmN3vcpO`SC`&@o!$8A8#|f9o_ly_Q2bDM}EBH@OIsqAMXmh z-FM~3yAN+qPky{Lci`W=CO_U5c>7+PA8#ML{jbZ9cM{%#-u!si;2pd>Ki-l%@o!$A zA8#GJ!}sLJ+XnAQUw*s;@Q&V_AMZ50V{gchcLUz>^ZD_X-G#r^pC4}nypwOtkGCD( zsSEk>4#7M9ru=wk;hh=Ck9P~+**E9MThW6*`Ih{6qwvnZH9y`?cvFM<@s7Z|d|!UN z^YE_RpC9iIysK}^kGJYItRD^K#~X)t{q2YI)?%x>;oW%0;k>Y_`NFvH|B-k8F(c_2 z*fQ9ffo*`T8rUw_iiX8Vr}VXyH`qP0uB7{QT>&`^z)V2-b!tJ*TGAkxHYOe_-?6jr zhmbi=0zD;vj6cA$tZ}dg8<$1GKK|^4)&T7z_L`X<2Y1&2PRSa>H*mbOmJ{SQhdK^! z>MIXtLM*|UtgLWngH385{0@0&A6d%!w#Oj(D|;Q|0kjA6@kfS={XKX5f!o;+sbakh z>+%hjGj^=;bk4nzr$VQZkt{X)U8OPTMl;SMii?XXxCccSG!pM)z59@mA?|-tCKE<=OhDFR*-G$-q z^OJaOD}3AVWxnUA&kx-_bM{&z^CKy<6C`trYue>wBa-_<{dF+Paj(!0WL;fBL`MUZjr|-GjaQ(EmSu ztdA@Wlc(|zFQuJ;OGU02rPQM3V)fbkWvy*;j zi)BNK_u>G&R6Phu5|WSD8(BX@S0;Af0@e!F2=?o?KjEjJYo263{23J~VmrP^H-W92 zm0@>wNvM2Jp||3TOX;7Gh7~_mdlMJ{w0l|Ji7q@ICs=wc^a}5(cKkTR_t7rz3@ivgD!s)7MgOy~Xm@4YiS zJ3F%1kawO(_U!+jbME)K=brm9+IDBph;^jcUu$0tPt#8JTU{bgKRjy>Us^nq@U&h6 zPcvC4z%u|(>>2$J*jbFR{azcGex^*T|BUtOFa73ank5Z6WF31LWXV^)2U!DO{>{^c zDAP{QBCqBvrSnKWyk1oewoXJmYR`3GYa?`xV6|YHxgEG7e35n#(uY#I8wbyZ!zVw0%d4>rZ8KNnFL81<`g( z`bMyYY*Wm&Csl1kSMxUfPk-(8~BIPRRGS@%Ju zj9zv%U+qr(SFG2Z<)tI5ipxt!5@Bz&S*NN0bM{Lff5@A41@ z!6Hg$Do;`ekk>u)koSqwy>{_)*&N^Si_7<9I!4Xgng4-(o%fJlr2#s<${xJ9Jzr|K?eOO3i~V$^{Z^tKgtlR!GTJ@R zo~e-bIJEn}R+-#$&<_67#cA6~Z)S}BE?aIFS-ToyVbe|IH>R%fU(LM? zi|`G6^U~{7eYt)&`tDnUT-^qAWA#Dq^`+ruM+f4?sI{d1Z1Jq3umoMqBe9{6V#q(KbVSszTa4w0p0pOzs%81L?|W4?(;B z%F1X@L%UQV?b=E9AFQoRZY#9IkF1P#0NU0^RYp4jZPlYMPCJY_dIZ{I(Ecn~w=?@7 zH zizvzu=5csd^NK0r*zvgO;M-Qt&q4meci?tu&72K#(Y2sXj(SHIeVB_QcNw|0zcU?t z-}O?@?!2Zfu8py0ceKy1|GnsY;+hWXC{j-0y~1s}wmxS6UbpVwYoSCVa~sY;gWnK? z6SMVGohJUJb<-v1OP9gUMzGrVVgG>neq7B*GhpW;STk7F<4ftXV6`Ev5#BzqdN8vu z+xV2sTDkU8zd3L!F+*;Hb{Dkgp}kXO6yAT)l=#1x zX#Cx2>%%ZIf^(|xhR=F&JLS+NF`D0TznXmJ)qBvt@ZHC|ofigk^BaAqc^^URp=-=c zhrU~TfqKlXwAJ>-ajo5y!5H!fkpCg2;{xaWuCaxOE4M4ffkHRY+?;BKZ2=i4ka540 zaliI-?oOIJqc`i$HvBmF1z8M@oHd2Mm%p{|$6kKow3l~nHSAZU<+(e<+tuIRTi)MT zW@Yzjw8!ZnsM^vtWH&x(+J1|Z-^jIK-=cMFnJ? zdGfUP5hrUb!P>{pWViM{Bp+AwlW1O_hyFbD16NIZ>qKwP?-94V>#&&Dd#q#9E<t{)vJd1C87xlQ%d{!DX<|h{|;u+odX*LQ^Kq~j3!r<9YGXbg5R?lyBHyDeOs0)C zL3a?k@3}Gy`=YoBF!?%)Ib(Ym?Nj=>wWsP_Xfpl`d4vp42~n$ zk2aWnH1$)=@1XsxXpQc2z9KFJ^HmVeUK)qfM>O&rq&fJSo2I@03j9^*l9j#%y*-gk z%Mn)Yu`+2^)T*z&$Xxj2X|GxUkFY~v1u(x3vtR|V<6t`z{D_oSu`jvtcq);28&Q`J zD4j-+)PE3t{>*9b7T0dW>v!y;&^`N0tCEi)^(Cuz=I%(Pr5FD7e>&~mUSV3;#TJ_u zlYeBjJH+Ph9=&m-&V?aK3B+6VY+^?u>DpgYlSi;F^O%_3(Ha;~Z*tqh+3vO;2W$eKXb z_UosupE@p0#$Gi2nByLtv>3Q8J!tQ+x+N}sYI|ppc@~*9yz3Em9_&m6Tl*3Gy&+6x z*8p}Zg!%lf;3vVu?LO!DGa}+qJpEux&}9Vh2pa}FAHvk`$G~cCh;R4%2wP8BT)RI; zSQ}xN((aex8G+|g+Wq>E;xE2Lo;*C~E`djFX#$?6o`h=Av7* zpEAY*!{FBZY#VXZ^ty2zz2?@w*q<<3{VH?m@=g8-MS*E&vb+BTzP4Y3ZxOy>_>4^( z8=twQQ}?h0@u}SFK7qdzz6|ergf)U44q?hqE7!A^taz%rykkM#AjllLbA=>4O*J{~WLy-5gVEu2T`Zum6)2mZ$y#O_0C0UH4` z-wrW0TBI(DHk$4Ook|aHqyp@1-TFjMOo46Uv$MmSq3Sf3gW7rd6!8qbaN2vW;wGIt zWdobSvp>=0Po zyd+E5B4N=ns0qG)!j=g0?~E;(mvBdCp!GxZl1X^h=U1@l;JL*gDMCC2cm^(!r|JOf z6PLgvozo1@DR_R_9%MG%Iqkhbd5W9Ag!NS0o8tO{wSSP4MNYU)9{_8QV8_7PBG^f= z)(CbMtR;d~eFpm|gh|iVfhqmJE1v;=!SLOd?7WljBgf5>C614cspO_rrJIb+f^EZr>t|@6dVlXVvlr}PSuEmN zfM@6uc+{V(KhJy?p1A&;A#5*Uas9cKutS91=F&Hspg+@3Z;JHOe(07iLMJ^n23_MT zO3Qi*tRaN8L3a==1NJ%T=i*u+Uky%PsZ}0p7O|H!n0aSY!=c4O&E1xfvFBCO-YYfk^yAe zLMwO+xZh`0M>()|u&{mI50;By!(e?OO!*rF8vu*zhx-T{BP`kv)&7nVHbvN_*w@SO zEW#7(GhM;HUjIeL+c#VqPadA0OW@I%FaggvJin=Zt-3p<_}}R4A?mu)ec-?8 z_|mOL#a>tzgSw&kJ})f;f5!TlePDJZ%GO1p9UJv=82H zc;oWaNc_hM-$wX*Tw2^58(X2&|E#>8gZ31(E7f1!R~Qcn59hTJ>^#`sAg_rJ`SsUM z*!WvY^V$ox2kh6$>jb<<;El_x>f#{brwI4!PuOv=#So@^E`pr|d$!U{J78-HUvyS0 zwPWXb!j}nuhQdvq+i&wWEBpxcH#%+4vK4K2W-B|Z8PhZ-HsLZVX@6Pxa`5%Q_n2TT zHSN}%Pc>sHHmJU^S8_g;gI#x&&K>RjXUJ;Y;dB&6jk}AIdo2^}OWJT0tM5T&rjK}! zLpuWPu^?V{r-Z*XPI_M$nX_(AC4XBB_$1EmZZSJHa88wc0os0JwDIq0|8Jf4K9L}@ zh;3aQ1RH!dq!KSIyO-Yh zjN877etjGJFO>$ zytk&EyI~TaVsA~bSg}F(z!ZOSATzY_#>iVlUd!93y|D|l33jQKB!s4THqro${iXD+ zKg#$t##ratKzL7x^NX}G5|sEwI#SwZQWAxc*NVImQ znAp2G55qtCz^}*OMEvLBKRNDn6#c*W-4$}-=2zO<<#rC*^WVofuk(&e*}z_SaUHzxTJcQ)3{f8Cv|`FP)wf2)`1m(?2lZn3xXkjt#Hj z(dkucG-ssTYA0WKYp!Ehw(EcJ*8jz{*U4|&SB#Eg#<;WE`9qrck2uS{iETy#_34im?j_Y~t5wg7fI zf}I9C6~UIl79&{gKhhsUSO$3+uoGaLd6$kIO|biv`W?{rSs>Xy500mH1E#p zt+IEv;9Yr|tcCEIe6;%nQ20&|GAiBPi@e1TPkY}|xs~{65}uz=ZiD44f-cW1akCiy zN%%)TGVT2>>~?H7{u!*8qHgX?G0t0O51-0*q99i}pM?KB{BIV&(d}mcrmU|`fpXuJ zy4x3!hpcv*@#v$|-ZNcYU*LP9`slUJOpqR0LHI2G1=h(G#~^Vue~dXpWpQkejbmlC zVCO%?v38$pV~hjbLHGh=^b)^x_&LJ!gx|os^zi)&+SBf2?2Vcd3@ z>4eM1n}X&TH2ZnCHhO{vK)6<&nV)TS8Osw~fHwPyY40UTeiYYj%pC@%uU?0yeWKcM zX@fPs!NP1d-R3XV=-5k1LpN538UG6C|4&VOzo$4TnXpga*g*0^?pGXPqoqBi^lgJT zdtlmIU0L1hvn=Huc7r*q6W8vHu2>+BbN`>?Xr9I2^f%Mq&tvp%WdCeC{e=E@Nkf~R z{}V^+!D;&qHOe`BPTpw%YiG#lpnvnj+~uxvJ^}AIynh#@?*jTVXSP9K%Ft`tbITm< z`E%3WQ;1KG{3YFBHJ^9>K-%;5v`yjt;A_EuON1eO1iT*ncN~5L^qPB4fM>wX_n0Gj zzbD9UXUfg&Ig_x}+zC^FZvejCk_VsLFOR~Gu{m;gQ!VArR{2o$Wcgb+&w3d0zA4~( zwRPhc#y%_F31akrcu3Gk$4mN`oof#utM$;dw@I?hT-$z|Qe)2!!UhRzU#U+?YxhTb zWP8du`%9u?ez^^KCnWES%-yT`fgXsT>q&)wfvH}n>8gRA<9G*W0m_fCBnJ}i!kA9< z#G0L}$EtTH?@#23qJ4q*zCyiM)~`9k6fvbmq2n<2AklVp^qpzB*HQJ_69{;l1!S%}jeI zR2D_OZpywm&vEB^a*21vrWD1lbSxq37_zi(Cs}2>(S9?T={QO~P>MDW>;D;l>94`7 z_A>zQ`oeFX2h;wMbp%&+Az4!92vLDmgO!sZX>+HCWyCj=p zS28DWUae80?OOl*93j$g2aqv=jK2%ovC(gF{V;ha3OYJH=}K*|qg!~+f;+ODQZqy5 zar`y>3;u(zh0jXUFv`wJzUlI#jHD0JY6{F5W--a;(lwh?>Nv86gSNCG^-4F8O7?bS z@AxO@FQ;F)d*>KwdV*;hr%H=+w#_MK32t`L$)}Q9FzRnK#g3A6IHSQhvKNt^{ra@` z`k<^x#7gy-qs#YhP3JeI2RhP&8|{A04RqozI`al|EBO>Rbn7y3-OiocZ0j0hCtQ-; zS{Z+Ln~c+X(lmII@#)00_Z;4>?t87#`znhu!g>k&Z`m!TpI@N8Ev(Y~puDwpq+XCd z$+g?3*hYGi#4fBd@t#5U`IFP0>`NOjwZLl=f7SoW`1P;&iCvhR(=l%vp-AlnyFGQE zU%JLdZGmS5o_{Ij!8W`l#FN0ttfyAlok9V$K|2Uv!#9d&;hm403E3zao?vHgfA9M^+_w$vBFu9n!UyzhTMy_vzsK;;M%+ zutQ+C@UA-ADZOUymgm^Bb3%6)kFOhjegvM=@H7UxkTx@xH0xAbi;+V zt^e2geaY7-dN0GgP0gZ zFMyl1NwcoTnvL#(%e>Mr=1uZjXbi|K;_v?sXV!!AMTbPz)e@+xlIeb@J}Xdym}!;j zeGqx4k=Mq%9$`Dc)}AiKCc#?4%>Hy}TKL-!HUQS;(h^=DN*t$&_|A833RQFQ=ftXm zGw_alciMYC@3w9Ec^>fdZ2H#PZ!*4IgibbW3v~OTyIS&yi|HBt^A@916y8ht;swHo z39tQLJbxSflZ3Yt{v+OPdVN0=Uvh9NWlM?`P1i3>3v{|l&LfrAA~Mb(<71LR{|~os z{6X$6gT#AE+p^U$_20sO|NV=%**55QR6sWX-TsTvDb3^1oq+CA>sV!8fcMOq_%hu_ z_*ug1|AVtK(qYB*p@<*ZpWh{Zga#}3i*R8Jp1zn#69MCHV4t_+O5eYeo*xv?(2wFP z%%IBFV#}CM=}_LbA+!F653kH4$lUud%G9`7 z_ig4IKbrQ^!5n%;yGet?Nty#i67hpG-nSwvkF0Y`)83bO5A|ajg6unM8f-{0Uv%$U zIrQK2uuQ=}^xxCoQSq(IDY#c-vD%r>5&VoJLt!ahZVX}k4UFk)^Y7(J-n}z=T&!)Y1@NRw2#XXc+jl-N(=hReV*HIem zgBZvK*k|n?#U1eGe?IM9CSD$;X%egt%wM-un)ZYBg1uctk-nj2IhQ2k3z3XP=np}^ zOY}U#mcW{q-JTMDOK((v2Y)WuGkKRT=hA5MC2xhDw=@ubgz(#yn1~+5d*@D?W&DbgRx~7h^M-G z#(O=#ZF^%c>S*!?yJysH_``ChY zLYbRUN{0B(R2%F$WSu}(qs!-*OwygnoV9P;5_na@3X1I)a?#kfbS;^XeLjJVBWq^7 zjK+C_b|&KTkl@M;H~2B&^+8&IZ{KAz-dlNBKHU11S#xHq(%5QdmF_GgGfTYaF$LL` z;);Xv-fZNr|1S38|0nrsn`6kYubJ^4rS$U%n*wV93$ODZ1Z#?5$H7`dywYQfU|Fyq zR`bJ@$BKGPx0x^w#SCjqI+Tva@1YNBXRQC4-?A@T!5Xia@vh=s{YHyy8D4w9+rZ6! zaIG=0#hkLgkW9s}zI`@Nv;6vv$8?xN1=rkzN}VbNbXQ*w9x z0$6_t>xS+$*dSQ56pSec<`wrR&ALEjy@tu|>g12t#5N7HZzqF@=I^7g9y=4-3wRCp zPuNjh^IYk}UTDrjhb5`EOMKAKM3Cxe16-J{NrGIBG@9>WC&ARSOS{>GwbRUdbn(v z)R{9$X00V$YMpWhm;25XZ`*&MZy!J7)$*=KSPxhgSa@Ij09Y+pcrVQeSbYdn*^YxX zfECZ>Y6q_Mo$MzpOPKMeqZdcHjzwW6|AciDb_Kun2wQaYX@gj739KEuaM@M=fc^?5 zHK9km^qx;XQ=E%eCeEwT9+=XT>?Tu4YWU zseJ6DO*2A7M^sI$RhNg6J(-#DUKjKeV{=e*!MCK3ta?$T2W&_smr*4py@JtGd9M9W z{GCrO)@2SX19lATLxE1h@8RrVv$atk8@iVr!SL9yq7wd%H>mg%%Va$=hme{1JvT<0 zGTVwWpov+BK*FgKW@BDvTN_{q4q>a9Sckf2Ld+mHbu#+0;aNiHSUV+S8Vus6X>V+^}4b!d0H8`aq zJIi11S=##_%y{2b`pBd6siAZ4PB-4fE*4V*Ojq2TwIhZ5vauT{O6pGYf6fq?eC$Qm z0c0&*iLA&tX8ixyL+&0V^mj7(6&2t3x4T#z@F z+?q;0X|;RLIkq06%lwf3`0N>Pzwz(Z zc->BJ*&Y<+THn(*<2nEisqS>H(>SCk#OQKuHYGi~NE`#LGv1FB$91K1$u2GOoTqWp zWo+BsfW^CO)eU%iJNbVD;fyfFwu@(Xmzh9VpLolUu=k%k<9$c6uZ_xPcw)0`SrDBag@f$gkcsV|}_Y<&ITb zEcT75TfJd)%vmxpTD>zlmPkyHiw^Ro`q>0rO}gurDF5~u?~59&On)o-dW-hb zChIpowdw`2MV;k9cy;>Bs$MM1F8-HCKKZ+e5VBFo+k|vOljHv^2qyu~kfNnkH}U@l z0XOjCOA(O#dtXYYPeQJ(6b6j{<<;jmk$x;pF62fidWhj>pZ!O?_%SF|WV@Zeb^pzH zd-IIpPr;&#!V*Z9A6sBj-r(jJd`UNoK4W20IM)#{zhy z=f}X#fc=p{EH(vJcgu|T+YXa%JqVTodsa;Ui0H#k_9>XXwdLxsGo?7IevJIvoDI*< zM*ix+n!ps7>VJ$+_%i0%_sW+K4;6x*SrS}+odHBp)x#43<>C*c;-&Y1*1Aj}< z?tpd^@1b#tIPURhlh*$EiSC0bwUgF^?E?$jdTn5PLzwK^9=U#-bh2*LI-mi6}-N`M% zo!NGcf1^zyV+%A)zKjn=_F3IesXzG5-Jkf}T>B?~+@ssF>L|_cK{yI(fGXd1=ojvs z3H)cWi+jNq!OR@k*my6YHu-`WOyU_P{5;{lf2$2_3~U+fsLIu}W7>^t$8t1&H>}KY z6uu*@>uD(cuq_~C$BSpYr^uK`hO<{9ekOB|5#RkuRwq&3<$IW@EF8@--fy#(uk^S4 zjQPghGu{T?^$6<*+ZDm`V8_7x_9(l32Tq4m(5`Wq8#O*ZIAbT_5%EOf)rJyG%U2&?)z^Fc7VIrRvu0~?QEjbLM7k1&j+4e{Ax%Sr|()*%q zfp!Gi&7w8-J+wy0F=3OYrpz^g5p6%TQ_wz5w2^jwXGpHnIu7k#Xv6c^y^cRzM~A@n zKo`aeV3S~GT^w1ek5gdhz|0z`>4*KMMike1!fNg*m9h30*jEv(0jvsajrt{z%BKbF zJlLxRm^>B79IeXPL9#vNHUJn;x#Apzul?TA`q=^21{TiCBv@+*)7Z5itOe}%6{jh4 z;vChujEjVQYZSSu?-Nd5xD3xYc|KN$i1SXK-ybAaX{`Gn^e6F1HR}=92-Y3JTEVgr zEC;6ig?anIl)p9!6mR`6nP0!WG#~51>LXYiSX~6`0b3iwT97vYRtt87 zccpDNiy^*05VK$V6q@t}hZ6rC{x;S7UUbC>3FajooDV6PsMtQ$e4hFE;EZ>j;xYce`;5~;<(4Dt z9ASRFYAoyrTLOE!=o!eEFyN@L=h2n69fViCg1Mx^3glktFtk?_7L%4#S3LfALM z7;4VJkV2$~cS1Q^B#*3f$ohbj72e0M!40oRalW=8b#rJ|Z2SaM@b|omvX<^4KV@kl z=HL$K@m1zPbIiEiiQy45&Rd(f`hUsq&`jw24^FS-5-&5F48OI&e zmD8CN=g3h^PXGJgm*|IY3BDnfL0E5*eP4b*L1WNmUp?bJB)a1Ie4JfCxwFM2X6DXG zn8<8T zB!+nD1;9^afaL$I;;kE`$0zx!14Ob>Jd?cK3`JLZlD{dmA0YQ~8n!@ChcC$IOJ1hf zCEAZY`G-*&?Nv4;*YUp+cn|;M10o(9`MoaO|NS!e+mBZCio%a{Tj;khPvKGim436` z%nIz#1|9p#UY(Fs6-j^OH?A6=3(ukd8s%c2nGNFji+juQzmmxW!;cFS(!SyWa&Iae zQxhG2SO<QvRh0l$WL?;&4yG1@HS|&?=7yC70-^|bFQA-?y`cvY$ZGd??iRg=C==EilL$J(*P zu#Yu>o0WAnH_V$gWwn8BJ;os}7HKsJGCTWmQ=6j;y0#-+UB)f=04Fq5>| zmo*^G2}a^5Y!~)!N{P;5`d(X#LOF;Idy&5VrOs z%z4#8Df7Vp*pzsGx`kuD*P4vs1q;3kWoGLM%oSI`+G=j*TA3Q!#`E5aHNj&KtDAaj z0bkrV<7qyo$J9UA88B1!4$FhpeSF6ILqlchhQJ<+OyBpVdfNrI4!S3c4wsEx*=C;2 z&%K1T5w_jc+Zg5uehKy`;g36p;i7_~QDZXgv^k)pXq9Szr{LYO-}%%{-OzAru1;yL ztg@qJrrp!=&|4W65p3hf`SrGR_O^8HI@1j? ztuiPl8h;>&|IfW1uoLpDC~4}*_@ z)7;G?Yz%BTf=z)9fi;Eb4uXw?t#_E(z;UqsVBgV#8s!_lyCSj<)s;SwP7bAM1C)7W z)~+UHbXols*dISArmq=%Jy;g(FL<~5nojHXf+W~I=bGgvEG-RGlvg>boi8p?eO-)8y+(!z{bJMnCs~FfsKVQ>6F7@yTD%O%JBkr zBF+MiIJT54z0Fib6S8X7rm7DA*Nk^3?{-}A&&SBMWBvJ^Dg2FgImPg_!m|v|4Hx8j zaS6{LJPk{g^QesW!jpsNKIM}~={=m>vo zF~(HU?@KP1#>Bea@E6yY8y=ae%KX^*@Q}Pyd}giV^+8k`Jfw$m&`v4s-p{x06*}6IFW~0^N^04jJmWSjwKZ^2z&-8s$9>!m2*U)Xr8^3iQbS=v}Tec%J&e=b=jEyTQ2`>sc;wMJ&gNKP#wji^imlRlk*?+AQGuUvvYRb4N@dm7$$ z=?as6HY;j)Y=QjJM!%X^S@ysF^c>(UiI?@3!GNyROM8&j_hHEersXA%Bo_~Xt$R#G-f zL*};_pH~&UH^!&oj&K^bM$#buJp6m%|8?^)1^)^7f0I0%Mn+rW*UN+2XG1;u6aH)5 zm{w`qHu;BlqWag%zZw7FKL-C-RsLapr0NgslEeeP(iP7Mc=D?&=V^nd=C@N-=ixDX zw&@f%ry&PlKhOcf4-)=$g|qj{=`7B>yF0GXP{Cg4HpY&a{>7TrLt~=t{=JqrN^WfGk~R4YkpyK%9g<)Vf8zPDhxsc4tq_yn|wvg%sA69j=TIzqSuU+gd@`=!-DajNds4#-mWf~F!riEjzN=u zY{AROiEPGktmyEXY`9PG)$Y|R)idmpSNC{q?{x+58>Q_AyLfjs=N7_uT^N5-QzEv6 zRZLZF{PiR6$P)_QKgfT1=M_~OMiU!$CO3{%Z`{3lK=zN}Yq-6qk;ipN@Z8 zLpr)*($Vw;#-sJLm70}g-0I8t`eiXP)ZT`WaiF%<@wz_3gD1q&@mnlh-bplyyI}6^^DwOrBwehl)*39qX zzqq;JJ=Qq{gf)XT^%d+~ncr>vWx@7<{Yp-rY+TvC=E^nqEmx_M$FHoduIUb?ol2IB zF=X^^D|pXUx-TMQfiy>DjKQ{mjGi~3j~};^jMoS0s9lAOEmYSqsk)c{Tll}7|CP!P zhbKQK`okemBNBx?Nyn5o{0GaWJ#* z$ksa0ELGR{vK8J0Ed$RZqk|iC}eLYo`j{ze*U7!?}tjUez2(z7rYmQ+R!lA*?k4?jN!DrV_?TWUhwX4@?;N8 zfi--x;9aZ5k_4W_4LcLb@76phy`b zMpLk|De9k$fAe1o*6)q=!m*T^dhjOjhLZ*FcGV?#@_}kBGn?;j!Y032@U{qWSRSnU zdj;=*Lf8=4(vJ#WuS<6p+Ff9+O9k(Pnv1?LShI`Qf7@4Wx?)YTr&@L5tC6GarqU(r z1hS^i6}&Eu6`Zwg!L^+=5wak4TE)bG!+Z%q5CNY*E$_oK4fNy;{4wRi<@tIFcy z=}OkulnYY(I*6RM%VxcNsNRo*jn&NB`wgKH-6B~1<+FAlzr&Wm`ctzddkCtpN>vSl zeHj`(;;jc;S37I>EIVvHSPR%MM8qSyHn4^(X6^oBhxLH9frWj#17O?0)Q0qkcLZ!W zf{lai0DHTkvi9v>u&VTIa4tweZTuYuZv_9T+M=<0;`VrL(LTlG$<<|R9p;Qv)$idi zdGxHuad0OC^Zx#%nNLJ)$>gUmw{ssFQsBAVK+@Favd9^G!mQV?z8sepGw%=10d*we zR$pLMxlADIKxQ`Z!OJGw2eu#VDNcTP4r=BM$WJ)8YT%OSNR2R!VAh2Xj5OhLG3z@@ z@3PYSq*?Ez+E842!!~0+@dGS8Vj!k)=8?7y_V%ZsUm9k;=SUW7wP8OJ=fvE;0`m>- z&Di4)AgkOEHh1~Nn88fenEM6$HB>$aiEoMcwA7_X*m1CRSIq|J>y^hvumP}-mio8I zLD^ifT}K*O&5oHZcBGn+)!2wW{QcRGzny#5iKJ5!^Kkv3Zm^nn`+>DtkYEH$fQ%rkkXY7H!2U%;MT9hx5dH%M6*MOTj zRk6)6VcuPB`kLt@=KCakt3AO~E2f=vt^6Sa2IaR=%hvD3_NYtJ1D@Ex2e;jZlf0ld#7`{_By8jQ5GuK z#;0QcA*<-4MOOIERdSPM~c4#WEt z0X)KTU=v_^*Q5XY!N$SVH}nV_2HOLssg53vi(_E>z%l}i&*64sTPbWGVf$mkG&UR~ z>;PeRyY}M72IIdD&Q`GWTXK|v)nX~0u#ZWKNAl|a5P$qLNJlL{iv6^>E@1kQSr_Q! zn0&HEhv?8nk}#50yQAILL_1~Yqw!x=Jq`Qrd9&V6L}&K*F#fwU&g93P zmrynnqjcg(huxZ@Se5UvmSrR>yO6+q3tZ=NRK7#R+4THb?@h8#i~TY(E;$`V`F`Od z{+eUR%Ws_ZHU|D5V+Wb~;w~HKuQ9gAmh|>y^0gO`r@mhIbmV1cy+z(b=_`%}W}l#M z%V@i8jNa(LCV)MUtaHfv9m!&tG?j%tf*sM+P3u-)*a6KFG#dBx2%7{u3+ASb2HOvI z2JDH3%F-PHtKK|YvWMXWSXBsXg#HZJd3gV?cun8pN-$kCvPtVucUnJf7xpB&*tP@{2+5i>gSY z<0g?ig4{i>Pls))GT&lOn=NB{Aax*}a~fF-TW9ULIi-_F^?V-u4EVcCZPsEvn||)v z;b3Apww^cI@ge&R=5N=`dhZNut>Rb{NiTabk{LC@a-U~=s+Dw2AZz^kS$iIbG7Z~J z=H3C?-{=~10aSRi7`12j+@64c0ex1zOBR*b*Jgu<_&AEq&q3+i0;Ia zvbtglc?~a|wf9t!R<~c#>`|Z??g|h6rX4GNcA(m9KYCr@=0SVeMISPkkaq%kU*SEZ zYpHX$KZ8oK`|!f579$)*5-#iwM%Nl*|0+e(rgDGGdTf5y``iWRWKMVF6aO6B4470& zhwnkwz8BAi)>fzxOkJ&%x3h6w|2IK*47w%go})aG_h7$oo<(032HjQWmU}h2WEr0G z@MOfpqxfo@u}@zz>vah*a;}z*zeTH7^{j2E*Go4wL)QeI;?^T93)UUNTEP0i2Ecq< z)a_F=<1%f@?l1dCYyAhUioC0DPQu%F7kVw||E531_supPql;-pjKCUiP9rNbFzb1| zt4+FjgsF3?)s1o5c~-JKz9H3b(?-mkuEq30pGaQwpU}UMcQ$7HGUJVzI~u*gH9L<; zeldQ$G4_GtoNFj_FB|iuD#-Sze4iL`zu<|+Hg7K4ZUvGp4X+xu}NFkPMdPu zM%XZ6$4d3B(G78FABs=ATnquqwYQLLQUJ_ev8|g(>_Zw%up9S^Ap0WG&jj`R;Mh}{?#oWW7 z%g>TeuclnfZAe-iYY_bHL*DtFvv!RxY)2qRnq9iB0L?Nqf9?8AxSbbmIkvxM5}z(N z+c@CC4j(Dvu;w#`gY5PCYoTxMnzj3K=n-Q&7wh)FzR}mZQjE}Q9P5LA7oJHX{u1R+3aqx@h=ME5nzY@#N-|C% zqvvh2-iLXYz7Ovq(N^sjhh<1fMr8EE*6=LsA!PhZpo@%s8P{&xxl`jg@y(XQ)GJr9 z(RpLU)AIIN>m#Rcm)TO(^{Z&S;bFNeMQaL=%A{9q`6ROXko7U%Lw$p)-Kl+urf)F6 zD`DNFBSR%fXG-={!?VdhvTl?t6+D;wDUMd~nz7l?Iq3_OOHQ|5#h5%j%q&`8IOcpOFvd)tggphZ+M-yS`FVPd7(*c9^@|_90^t8UKMiJ2umo z%pO!M>Uu8PWN^kxxrQJ1h!&qjvm!7Ox=Y`UWMGMsjac2v_%lB1H3~5Mn{}gt9oI92 z?I6q$gNddYY&)2l_tQ?pXWI2)ZZlRwCz~Sg_^;xD{j?n>Y%-Fz1xH^=+Ri)vi>0mMxy;}FG=$RD3ck>`JMh??TquzjS^>RGU9xRoGs_P7(IoyrUarQ<}-F+QAXRP7_w6Fdo@KCmj7R z1r+lb8Lypvp3^l8G2>Df-w{%eG_INq8AA}7xd)NWi~-x<8@30Gk3AwknB#4Z?R8YyvDF!ZM_3A6Orlnd4)n4(NLi#`3ob zUdMk0Xq4V(2r~UXhoiU4>>ZW;ewOe_!Uq&i`G@TgbAt;!#`qvu{cart#7XFl&NA{i zFTsIkg|!fNmN0Wx&4gWR#$|=|5VjN(CY>=z*g3-9!@JT@X5-@2(X<;wHE;=JQ#VDB zcGI2?BP;u{3(LahF0q$8V`QmKXl}m;S-u|8xVR2%GK49~qHP8r2lvm?HG*Xw{~aPS zb9i)uvCm#!GKX&>cnI24@ZViV%U<7L!p}ri>%P!P{yuot?VAmq`!(N0V9n^|*383@ zqFI~toq%>bw0>U1e+Fy>tdjAk4$p-6FE;+PLbnUL==jqEKJMeDZ4_;`LBb{oQ#;Y4 za^3+p6~ct8ocDn50}top0N7rzO7gMj_%D`^Y9_e{kQvR#I`Bh29?3@wVTU7W>vr^& zq;1&oUo34?&>i#B5VAiGffsx{lC~3sEkx3G#?e=jwmQZN@n0-$t|9ile!JZ%h`I?oeT^t0j`uJ?gIpgDC=b`;w(c<~K ztjGFBPk~oMYvyUB#huf_e{9YP+PP9!iphvQ<0$!co7ukxkCDZ1VU1vYU>chBD4(rh zy?Pl4P!6XnT=}_`U3PPM9-7u zZ$H@N7iPURf$er7e~bMDWBD3WXG-J2GP3#(&)PlAB|hgjn6%J5Sl_YnHguz(p?x5z zhYQ4;w^z{79dI*I^?~JV?Y2Q=o&Hj>jT-$Ab_&e&6WX8756XA22mB1U-*$J(-)P3v z*Z65P=Shx1xAx2I^Mgla8}@r*zVFnxr$*P%=u7;J8;uQ7bv5fX@a7$F+1>%{5l(wI zGSD*f=x_!SQo~L-c$@j_MphPCTbwLsUzxQkWXPYxRUw_+Jt7|swGEx>bq9QT_-=E2 zW$DLJIlAT!Qo(1Gg7Vyi969R(z{pxa*3d;|DMw*h8_Q&=ZLhnA{*0`!o^Ar00P}4h z(Y1q3fhj+FTKMY)+XFTtz_jP^q_jUSfVD@k(_n32W_*WFZEhK?8|=xvYu~fK7Qgmd?C}u4XdA%tV1E9@ zqWD|Ed%^vFE-dHx{k>(4VEvB&WxU(74RrgPjBf2ZsxMiCJXT~&6ohE$k-^Yh5&DA-|hj49$ z)+4MQtTlqI2WyF7ZD7q2tOu+qf(?MJ4`J=ZF#^^IX1;-8?h$9)37-Q?d=~G#aR%6V z2^Y?3R^WP}R$$G3v15wwtFvCS+DqJhiZR^*@!i)ni~)5$q(`dE#|NZFtXu zEr+ly@~Up2KEV>fm>Ti97#~*PEBXc&OZm`-jb-#dvJQQH)_axmYWgmX)r?n(H`p?! z^JY`J5`<9R;oAo34*076ne}9)hq`iOP{~?Nf~kBXrdu#6?()Cz7$6zjcCIj776(=*|3nVG@}0~b`kZBaDOtOB zhNhO<&rCedcg_BoCG_6suVj5whU(cBk&q~ z<3{=)yc_s!*FIiu+O^u+I>LG*a+|<GGj^5npPKb%Qx48vZc84D_n#V*(bQi7c{QhJy?2z#E85@K zGQr-P?W?pLxh361Okp#P44E%t3UM2BdAU|J?kB8ZSji>r%bjy#h0V|2;0{JoXnG57+8}Zcqc-HHz zB%bk=%WW_|KX}7ze>g!rOFu2zD{9MUz|Kan^I&Hp*xFv~^9a@eb}EF)zH0$n1l!BI zbls@7r(&7h%fDFG{F^O#XPcoYjg2}4Z|-Na-v7pwLvbIxoAs_BU6Mo@eUtc5nc%n4Yu9IoUDi4P87v z=3M)xRq=9~`_PwNbKZZGoC?yDI9e{ojN2o~IgXqkOAe3p)Hv9|?40-S2C>*)uEr^~$(}jyW0&z`#k3}OToz6&q|$*kw=*B^oAdrj>17Ue zfws!o)7Nq&ylKsoTatGqY7=qC@Qweb51Gri&)NId%-LdgFR`};cNZfC_kwJ&bE+NC zHN9}IWF9>U)*8ZOFYN~#275UCr47hCkG#qJTxi~0>KlcmD#KsH3)%k!U8C$(%5|r% z;le*!hksPtXe28OP2tWt?;`{ z_U1XSPGgz)uDm?ptGWY!(c9;|r%RB+{@}78Y#m_(@0{~+soAh>DhO*KZ2$Y`yk_M| zd{0jXVLgN`OwD=Sep4mmK`=N1erC! z{e%x3ob#UN^tW5fkcIQDU{1-bNV?`Ev?G5zS8}iRS+HR+4VilK`sYRX3&GwenMGUP z%t6Z6AmoROF~!HwZ|@i8Lf^H<#tQqCR9adT4lgiwrP#Jm;?ZShZqt{!lm7a} zId7ETvJ=B|bAJyzD>Eh2?kxVf5@}nEi^=zh57rmK)`RtiFr~2# ztOu-5X*Bu4&t!ZaFAegOO|b>WxjZ_w)CL_Y(df= zL94hAgH3|{t#~<=6!x1ltKGR8J;gbhk)xbXdyqS&3+&^c#Sbz^+_D4C!(acUIlHIg z8ulGHyza&53-I5PT-qyF9-Ddodhjf`xyzpV2=684n?}kOJ{E3iyv3jM+xG!`~Tb#-Mox@0Nypl<*dA)lKMKM@?U>#UMWeO?o9=P}KW613gWj zr#D5Gc{{=*FKCLZ`OrK{pcDw)+l+Z1QP0x zn+@*-VtproHc;<~SbrD!LEcT$>kx@=gzcJ_C8l=zoicOsr z>%X$~dW}^h$g5eL^ZqOCr?Dt6vL9WawNAb$K8>5y?qz2ckhkv#b6%4wC(=G6@{%7- z*|Q!bKHSWWoVu5?f9HSaykRYDT}00JvHhY|kR?Hlu=XM6_#@}-{Yb_3hi+%h`%w~6<# z4~l(XX5DTN;gf{_p~4wlwD&!8yB#}~?!$!dBm7Lz9=U(RoiQqwgY!=f>H|nIEnKpB zB(HWG<9lX4*dGyp<~ES`*bB*%p6Ekf_KEX$&l=+%>uD^cS=(fou)~Czxg503{EdOt zKY8A}nRm52cU}-}@6M&N*1)G4OIF@9kRF4t4ZfuGvavxZ2j*u#U1iHkZSf2=>#w5C z@GjZmu^V&HslpDkH=^zy$%VdqmK`4uXrd|k~l~KGFC9; zZ%Gvkvm?bY>~M~;FwF>lgacR$x4cHb944OSr_FnRqj*fcJ6pO*ht*Y0bTl-06TxSo z9cyxJD@>cwsT+H^wL5f1wg;YdFK7IO=dxhDzrYxh^Y>jx#v{&6|03PXwIzJ)Z$mn# zc0PpM!9SWWztc9OyDgP&O2@7f+D&PUY0?+_;j8)Md3#0*D*BV0)*Dhd*H!KX!n1_` zFlZ-n={0q$??&OOk6C?T|JpyNd#_ICuQTaoD_HN=be?Yyl6c}!du$$Le%n0n{fc+n zPq%1}W%?NsOAb~+bwKJccr4o+&W?q_O?gNZ{ky5&b)&D{mgl<^Fnd5ZMTHGJ;fBa1Tl7m zr2cbKYRu;Sc&FaC8P<%a*K4C9@GAjdEnWUL7=Zqza@nUcO1_2TXlTfhdY^z z!n+^7)3Rx@n5*4$4LHhoOHu6-5y1o>l1=*8scv>&tF zByT69L$LQEtM$3GYgcaJxhdu5=BAoPy(pdSPUmhjw`1@Dt|n?NJRRAj9Z~`@n*vL% zlaEG432lE`Al?(i>)Ywl8>hiefth=$t={0;7OOYZr>lps*Pk~Z_)JRlwKNhsmpbGU zYWr@q6UD3AF?Acpk=LsHBeQ_akMmxln=^?Ga9X|A;qU%J;Nk1^?VM@|^&{yG_GYmzXxlkoMkqt7@}y+|`D1PKcCQn(_iK-B{2f2xie~h< z)kYfBeY-Z0l(YsptJJRw#4)^qF-~ocx^eeFAg^RRq~W@Lg~ghIwE8ua-^O{nzGB)3 zVVh?_SIn8#68n!9VB7t174i8B0nsqft%-Fr?dN9fHbz6lQ(W2s_)_^uevOD?ugd1^7@gNzk1&L z^9#yzcL5-;F}-jw7SJyo;^i}O6A2d_&XNhI%xmnT(ae8ttntQX&g zox^WE>-nn(I}6q!!1Ntjz5DLeHQ0kMGv#I#Ko*iL^tFA+aQf~6eIuvL<~3>32VoP_ zzKM#bIcVCF!`}q57LfJkY8$uH^TsD#%%8D$d(sDz$s4QV4N}QEg{-5sN=1iTFHI+<0J{d1d?PC3F*}vC6?_K?PKV7T?-LE~|PF9Ise_8U%$I~uoD-nw@ zXtN`d_vZP)Z=>{%gEfFvC;d3$>eku%3#*gg9^_3vFmLau!S{Zn^B*1rp91&iT#%YQ#|20Kj{@ko zW&K^lt@g-;?L)i(D)*Y#qu<8ogZmQVeS4<;N(!_2mhveUDQ`no53c9c6}a*2Cz`XUD8~J>Kw%7VGR8I#8-%I!xUE6vor^SU?U4UiCzdOn1#k$v-?@?q0% zYg&5m1Yz3=`(;o@#xG|4wEp-px+Xb=;=A40Zh2EErthwO6ZQLvdGAp{zbof;dnl9N zPWT1Oeth(utjR{=??Fc9Q}f;_7yoX3GR53Wl>8v|QO{NgNUt{Mn72cF;?u=3K;=FG zwg6TelzUt`8C_)jM}MG7E*}JfappAg#t+PU-*D|r<+lvh_Zj+vFw@SGuUJL;+xS_x zo%lbC-!6#1Snq!M`DJh~WkAm@n@jZ~W8LTG?Y-w_EHHcLO6njuyEVBg`ENCGS+MQ0*i0*y=@vfll6+VE*ko)bwXv2rGd@nw zdvAATv|DGB#?%jYR$BzK=qj63V@FItbKn&99n@8v zE$M8aBgy19;_GUIZ!e!l-r)D=y{(TTPLuaY-J7x0$lH>hT9f<{Ya=W5C+V@~QRMxC zF{ow*c}2Zw?i*dVLfe+C?a1n1wcu?GY+W<%8vE4T9bS~BaX$H&6>QxmWEGG#uzJD! z67R~V^KqNi(k(0?B|cngvnl?n9h`rF=cPLA8do+Zexqv;u{v>>qAB-!Y%upkbt9|( zss+22e=`x@j2jcN{orljx9T9TiKE!|B7U1K>7~cMjws4)D<-*;bpTmCn-;t`sQn;o zx8~8|dHQu2r^#oi^Muz4^u@xGsibt^d1UQsUkKfAps#aTTeAMG=nKNG2;!m5gyT`o zCVp1hz2Q|Fd*B`HSnxhosy~aiTd_>L(u0ZZu|y6*hCUjcJu`KhtDGG(AEXd9AI6su1!B^*S*FkG_I6aHXh;$0>}hbMOe|w$(K|9 zcd`b1?SiK`wXPM`6Gi*iZNi~gNebg(m(CzkX8~ZZ*hGZJ_R?y@ahN>@M+x_%)z|9=Z{ zDZdB7$H5fZUh%JOKxFHl~q+(SP`ESQTCZQ7lZ-kTzh_7^R9J-l1}bDPn7uc9vu105lJ2jPET znjbUPl&1lm+p;CygkcfZ+w53-Yivfj>pM1S*VwXb9mC&q=R$C&fjfJHGb6Z1x=Bk< zbj-kIz9IE`U#YlRwQZNXkX75i5cqHV$lD&U8ZiIfff6064+#6~5?Bm+XBD9{r4Luz zceYxDXcAlbVU_Mi>aP*`=aJv?VmGE3onU;Nq@VpMp^FTqKN@#4{y_T<*N4k|OIim* z+m@L7jJuk9^uxPw_k#B{S4ZJ}Xdyj_)4gQ;+bUgDq8ZUBdysb!c?Vv);QeuFofq41 zxIg4sWRDrdIRxFE9=JX|xH&zn!G3c(&r!vgLA@)57rv$Zl;;*Lq?OwM?WC{ge#ZZo zxiO4#y5B2IHYLihQuRM{6Z8eto3U+nAaCtG z3*NIOk0$D$-`ANrqyGqRBK%iDeE6NmbSHqDYf|5deYW)k!Z$}PUZ?+&bsAZ+jr2%< z^*H(!thfg}&OUeLd?1m0)vCDR$<9S{$ZCH1f;}gW#bNXe8oaxG)>U>_a-O} zyTDq(?hD$qNkhCIYtv!Fm`bI8NY)8t4GtFTC*1xb{tNkXxfrCSTrV@)YV6OvgY|<~ zEO_7KU1!zYx*cQBST*MheH(^_+masz+TV0wGA0Jb|(`r zo9!rYe5gt^lhD+@a>1^j8r@`R{xU>!7@B?17=L$&=JO$%Q_%FkY9aLfYAfg75KZ+v z@kc=OhDdtu3DGn{vu_(x*muYDKuqc>nzRlxu4Nc?Ko z-SAItUkL87Ql9c)d%@nqyL`?UD3iq1rCBoVXA1u6H!pa9s50S^%!6P}qYL(Km5a#i zijjE^{z3RZsJ_OdwAV~fzi*}PTs*?oferlGf?Yr2cZRi;9YhiW0MI(iSypbm-WOlewtb7AGn?T(gQwTfpez49z9UHk_G57dLcl-{1Rl zzUTYre(#rnTYmTTBDwc-p7Wf4&w0*sp7ZYyXj_B0*Z^4R`(~ZzhOiN^Ent5c!j6LF z!0r!W6JW=NXPtixVKZPy?wNJ>M}aHd9M}c0))3t#u=;yvotK5M(huPu1H0B@8po=@ z#=#!9zC5$Uk7keV z1U!3=%sPGYiLS?UtR(r|O@(<={S9$|j}SF_F+;j4ZhtZ5w7IH-KICT=hr2lfCMSlLHe?*cRDe)z4nt_JG@Gj{>PZYbgU2xUJu64p)F@2PD9 zd6FMO``BE+%XYm~ZZm>sqaM;e;?4f`taCI!Ufejly;(I8+Yo@C@ss0%A={c zyH!N?Q^o&ff5?7}ug$t|;nAyGHt!7R zGT0@s-ym6il>d@Z`sUxxI(r1LPs%G-6?j7oz6HEDf~&4uz{kNoyIxo)*og?%2R0SK z4uQ>tunyvmf}I9?yT6a#_*a5DGV@$-UQ&|0RsQNiOP>2Oe!n<9QF3j1s^ne#zcqcl z#O#+_h5yR*tozQlkw@knI=k4LV9%wz2q+KUa18g~E#zy<$MKha6JG$|T^oprj@=uD z6HuMqxOUx}6!{97#)cl^m40j1y~E4sP|6eD^CoS#J2EzGO&PaBc(~A5qq?1h-xB;h zpQ~hU7VHApQ~B=RXQW%;NSnWlgsl*k%w=PTn2>&pcOapz?&Q)NwVBVR@__5{A zg0ZEIc)cNBO0yfRCxm6e2Ee+(o+Mi-&;fCNP3eGZ!nZjX-vg~WA`lXPcIiIe>a|4b83HjrMNvkn0OWcZ-X*1X@Tqcf2)8u@CBPI@oEd0 zI?s-=UvM6Kjl5`Gmq(VciFW#J(oOg(;i^}SJwqBIS@RKvbkHHftG-jHgT}zyV(NY!z$;%|egrdf1EUkz!*0$q_j;qa@l7>AS9WUF zUB?dEj(to8Z!4R-REmq!r;A^KUEj+8TXowD8>?fwl$`vkqa*Mi{jMErSVIfHwIt=_ z>X_}Ro9^dO^8+ZH8Fz2hEb&ef&+L!F0vSrY+CAorGl?q3c*UhSvnV%)G zy1y&0k0~kXx=HAlpnsYGBU3jUc~ibl6Shj&sKSEwiO*M)M$y8719Q!^Ma?JiXa2pF z%|LHs=lT06>tAmam2r4U`J1}wAYM1|%sn}rPmlLQ*?l}sJ+bnjMI@DV99~tY?OYk1 zH^j49(s%Xzog}QDu#fXyWgXU<_`&2p`LQK@i8tr3`%Cs$h%-tYPxghC9c6wL!K%Ry zN3bnmBO$DnxLL4auz&LPPh_kPf_w3`{o+I^-(=-0UraG z+SW%{7HkykF$QtR`wp;iu!)%cuz~;DwEr&cpZltEQ)uKht4?b9I|jeXf3<$~y#B%K zYc2OlW9+!=_Z5Fiia(xpenqw^ z=Qi)vJ9zf2LTEj3E0#)laAqZ|J9a&=2{zsEocy<0=ePa&3w>oM$$Gy$>kBga zf{T18v-(%*r&+5ZEX#LSm$0FWuzG&h5H?7dY$$i$Wb#h`GB+8!cH(vn5Nk4uUpsLo ziDTAdOXVtgU>EaOF%%(P+{-nz3b)kIR`@VaLXB^yy0eyr~wf zE`+I#8^LP9%=lyOv11Qv%l)RF+6ikU>@(20c6hhOVG`@q|5>-Uxw_*3v{TTkX!b0C**{?8VBTHcDpUDqTz*>>*Vqp|X3na9 zP)FDj^k#gf{(`+Jy?(ddmb$^zyOfE_(Mg<&pXZmY53D?b9Re!@le{8ox)b9dyb_^(?3WiW2ikA_M(`((wZMO$=SNg_$r!9iAUS#P^`yXRJ z0hrl$PyUCb(=B}+VMhr2oejs+v(@?07=4k_9(_kOgn1DWF zTa-C(rf}2#glC;uN8j}^?GKg#d!OP2?H^~?ak}Lx$-7yrEF4nZ@p%Fk)|ME|OcL zHMO=}C^A{>VA81nJbvfL%sGE*$Dzyk)RhKPwOC&96OMhU1e@VvOjQ&CE|M5drtBKq zrpZ^!W9R(6tOsSYnYk0qge)@sGjg>IT^n?&a((LgD>=^m2F^a!9WaXN?-BNuE= zaOGl~m5VND$DmdH703nKnMBT<$@C-X%EQo?SIjvze!pCEE@AEqY>QX&Qk7xh%sJ;H z%9|U0Z?O%p1v*A}_p|2QvB~HcV|(Hn9V+34dRK~|(>Qh-+8$_&#cQ9^O8g6E*ZtD1 zmk8^8_FUdx$nA%|r*fQ9p3TxU4 z(+78!l#CwB;2U$NovCi>z7yI5&zW=XysVD5XTAoDx%4hZ#<-JSJNjcn*v2-RK7>1R zge$NQ74Oit_1_MLX}THR4N*b8n9ByN%b^f2RQSz0XCIqn7QE1%z)|R;F*G-sr zE+Tu}%$+x}31}x?As_q|Me!pb9)b> zcLFhyXJGegihZJaL_5sBx4OTk|Gi+&`LyMKUt+h`Z6o%Q)g5Dryt-ViBw?F9PgmyDMs zy-woQ{LY*+&-YON^V(5Y&*aNr;`aRPyLmqbuL*b!SYF}0U#`tA5U=RPzkIx^FERi4 zU&L!8-pDT*Pjxj+ywk)xx^`U+7E{o?%A&EaiBy(&orYKAOXmFjgH~?B^&ZRXh8SKo zU&emBLcDt6RnmB6@-+#s?kmKr^ef2s72?$fulko>nKF*S>+luerM`a=UMukWW%`d~ zsb-S%doP=FPOK%DT4cCAB9|BfH^#_PFT75`>r1~RuUEzJnuJ&F?_L>RrC&uqUm;#? z@G5V*GWi;V*MTd<>ms~Xt`M(=uVF85{lAy76FE2luN=I7?%NfS`JS1dSsSs_Ooa-~ zFXmyBvG&?-bKmX~X$)+ibA9H)I2!1~HDvgv7`fZ>H`u@MGWPE;!RzK2UW4%J%3K*< zGw?bMuPf2FDyQ%#G+!BBUGSQ^LcET{Ys-!+ldn~Hjb8y?veU9(XO6pb&iR?I*O*tE zJ0F5IVmWv6#_k>Fp1|E9bG1cwnsn|F_|3rYb@_cF&Tk-}1==@eN`iN&8eSLRwVa)E z-Y#C)*&HjA#8Id z?)Awj-)H&Zo*0r-u7Nys5I5U4=RD8)vBG6C^D$PQ*`ASKBqA&SM~K_<@;U!4x4g4& zoOH6;Bwb8>`(s~pWjg1a*ZOs2`VG^8;LhK~2P1W~jj@Nglf>=6bk^w&$usOhsK@CQUc}C7z8D3WUw4vT-QQtvcF#HYuPvkXiI0)j@MH#` z?oWWi`}f$=_izL<{jiBNMo8n-Yv-H;wm!o0#xSUh{4}|Br)e#zWQHzL%`$@v>@aJk zr{Gb2*Z-b}^g-nV)bZ=*oWE9C^YsC%R7wsNfbRgmq}2!Ry?(94yYxnUj<$~OU*%9e!L(iYt? zxSMWZ{BcY0se8+u|K_E9bgN*sAxwI={2RBo-r`D`V~*IZ52(?+E;_svfoF8Sn}4 zMF9~z&FEizNVh~dBGUKdKeX!V(b{j~V|ypO`JtI^|#Sy z@cN1lg#_)6%~o*#3hiE=yf41p8L`}U?}cC2m*$+$$F#c{k8wl~ZH{mE-Kpf$W7-`X z;13Ji9YMYX8q@5i-B-xR@K;%@j%oK`9muRpp{I-41K&{SBHx}${`w|%0k^TE4?XYh z4|erj`waH$H|9cn-DBGQhmm&QfhW3ifjS)!YS zZe<<140IQutN$iz5PWyrFtP?`#w5G`*OXwQS-2%oV`ANd?3aMgNy{fZHk<1OT=S3B zx>p(P&3y#sKAbM%EfepX`RNB^3Tp%YU1*(&*QLAnq_1da&LkGx0UOk_&RDdj`?KWa?dkrl>E3JNveRrX7kOBD7>9S+ zOnx3F!Ae6|D|EA9C16*wu4^7<{~tU*s&W|}5GOz0n&}(T?fcW6*P7)}CVVm7#@s<3 zV>DF4euT76kk<2*7USzs;%>77+R4vjgqu+w0T5$qyZ zLj)`OF7{~zs{pHyV6|X%5v&ocHiET+)kLr^u<8ib4^|byhQTT$*cezv1Ums%9>J!; z$|Bequ+j*&3|11sO1_8YiC~prtH@C)ZLLoQe|2ChAxwBRe;M#)@Vf+P!nr>*+9X;%^na0X%rm(a1=o{AS(B+=uxB zjpv1Z#+b` zq%%W0r9YZ;zQ=dTX`at`+Du7wG|kle3bd2ZdiAb+mi+_r0QNRtwjzBdU$)+z?&m01 zaksJG6WY;QSU20)NYcL-s&+#~Um~48(wV(D=j>BH!#<>HcH6j%3r63JLbn2)mq(GS zoF~AS!LL<5O?>MI!v|%(@Ms=(;1isKw&urk&P!rwxvtG7hr@yWYxc)B^Ue)?4HI}s zCTo9yzW%qs$0V!~tQIW1_q`QtON6cqtSN-44El zD71sitc}=q37-Wu5xx+13hzvH^3y;4vNMGy4t~l3C7vtr9R5kLz7#%BV|ac#%#*!s z+rz(i6)c2<9 zrog=YmBKsun*^T*|3SXIqIbe)aBctXOeWQR3a4Gn#$rXc+3caMUO=DxEZ8erMY>zS zTEXJ>*{cj~g!dADHQ)6S)(zGJ7T!xb0M-xYof&L|ZUpQA*fagM4))Nu;wobfqxlfE zOIJp0M?&6zja9S6@B5EA_f8%&cR<(JvC7*w*KO9JSu`MA3PE%C(nr|;K)myOFX9YZ z{G3YHYjRy$)bqGC)l+a(-@JMKka@SQ3*PnrNjdGBh8+hZde+RRI0spr_%}R=`*9`i zOfQ)u=+^?$J!9Gq)%y{Mbz}QA{I7G>WM6G`nl#V+-0tUP%@a+=*sl|GR{z;>{nkfv zR(6*8HF2IPfH=26ExZPN8Qjdt6~;$()(Bqti#g{HeEH)%;#&8A;u-xG<=KlfP3783 zmN}spGivNK`xB4AyXC*;*13D2tKi({Eb$H#Pco-ZmcI*NBVdp7@6m|N>AAku`k!

    EFl}BR^IdHD>C~l{Hfr^*Q{P#q)W0pj0Xy@MGZSE-zFW3mP5XSkpz=6k%STB&Ypg zlVGpsyL+z0tb;I54vvHFN)?vxIPppn^Lc06PJ$JIh4(U_23v){hp8Pef~|nPKxuN^ zWhQQnwe$1V#Gk~r1xB^ckg!~z`MUe=Socb6JAHSsax~b>nqK^Rq>%sZ5hl{0mnQOgdpjV+6&D0H_tmSv~pW; z*Y9p#vQ2y+rxbHP-(kmUIuE(*K`rm+|E-Wz!>bQotyj&v?>HJ+x}M`*_`PNF5U%ffbd`J0Dcsb=&xz>GqxJ&i$s&uZz=s z#$Q?ckLY7~zS8o{v#rDXN&LZCgzi4~F5>nQH|{L>AYpxkJzd164Xhm)It#A)7>8~E zI<;Gmp%?Hjq}uKQUg!rPUOqrMho~?g(^hGkt`$f*lTF zrvF=hvE{e)mn*+?_c(N;@HIRbn>CV~_6I*2N>BB33TzC_^!q>u;yf7Q5-4A-nffaF zXE%Oa-l_;2htGO>%RqNLk~ihK1AHQsHz1Q{Uzpy=e{eUz2w^8Skmdw*laVx4AG6>m zLuso1FMv&Xw2}0RmR$Pv%2*5CjK?EX|4rbhLg^_FZD6xtQWg4S`Rlgv=Suhy^hx87 zDOhhDDM@gXL5$YQxc5K7tMlr4?~N}Rb}UtMU3Qe2e7l*YobVlS#%|^SUh=t`-^6(#>fyBn zub#)u`}3OO+TRp*%Waj-r26WGXIsU5-n}yiz*<9?+U5vY3)tiN?zT;vX&aU0grzt4 zf0?$i^Z#nQ$B@Qh*RQV^mF^O8I^efS{P;*utb((2pIpEtcD!N2y9qaQqPv55N5N;;h^KlyNqA8;Z7k&$=vLDv z?Ee_v6!;g-M!9FkJ3@A;CdIGf$MnaiTp4~H@aux#*i+}7fA{le?xr)kKag*u$Ml|E z;umX(VB*6Vk-Rime6uws;Vu3r;onp0Yi)DiG+f`84w zG5>!$a%%H`uilZqNAKNRJxKlP9>ZKQ8*`)kOzAn2&2D&9J##+vCe&qQy)_Yk4i;Hg z`<#H+;IrnPgr6UH6}~0?dl4Os6OY}R5w$FRTCz<2J$v5yI^X5{3Fa~hT_V(SKf@h2 zOSPohb-k18D`_Ck8RG0woY0-2t>6{UDa5yx+C?xXfCO zZs}yZWz0}ZTQ|U~4PMK?HSc`X%42x_9AUx8*xX7+x9#=ucThR zdKw2G27i+-1c}%bK_9Yucd$6QR1%v*qb*h575Ggy%{zDVUHt5ROX|sgyQN90l0iI_ z#Wxv%8459ssx;$h=BMa8c$v4-j2$IG<6bf5McnDd$^ie8jK-*5Xisjnc09j3`8xnM z3s&m;r-Hs=_Ew^|?V6Sr99&0kp@)iHh#xIx+fp;zoOY#;;5r;D-Uq#D-zCx**olni z+for7*Oy;a(1Nlj2kS;<=Pla2LXW}_TSBCMw^ z7n`~60r*w#op*Ln7a^HtuG{ZTb&Ey_ItE=9y07Ms<-yn+*7NAmk6U%N4cBM}?bMEP zZ2@aW#bv>yu`>7~Gi0Qnu$No<-GpTcyAdq;YcdE5E1Pa(*0!21F@L>g-qBfq$&sBG zV|6b!s#n0%!gzr(A%>8$Pe&y*T z|DDUJ(!|li6=-(%-(KJ$&zPNTu#?W~gMY4l-g&5$AEqou-sAk?=6%;ECS&`unxLqU zzmxFmym{Wa=#PJw;n#U{x_fuJcc=U8&pzf2hvLlvP6*M98w%I-=mqY1?8g7V-nw<( zxrg7Ownv8ym9Pe78+&_-6$ATyk6DxJBVK*iyi>6eUE7&hiIYF+l1ccK-WJ%q!e+rL zz|_t4kxsn;Rt{EX5ceP1W2-iP+&Yfhsp>!R_Y%+Sg){ee#@Q8CXS617S3M%t5y$y% zRhJnTdf+#H`@Hja0%-T}xM26ZHF5b+p3ap~RuB0&aT~kmoqw}&!+TF@BCdLpo_4zz zVs6qqL!1@joLMWq9qA?_=B1~&s^AtXq5Y@=LeWF&oK9Ykn!jtlfGMhaP5Ebz^OpF9`RH4^i5&Q7=bW=E! zB&Uz^b(lPqPtQBgG6+64{vQXc1N#fVZ>=fI$&YO+P{PK}ya%}wq^42PBEcEJj z-5=;)C1}>jJBd?4oX@H3%x4O8exQSPVz09yJ7x&QvhOVRY8^g&viwcLyZav)i(+(A z#Q(+xQHkWHL>zNh=1N)BZ8>At5#gjhbr;_jVt}|UWNC7c<0sSEwq5U2})y>Wa=oigA2^nN<{41kP~1R7w4UA&j2uY z&mtoSbr(~?TWguCHz#YJarIS5&BJuzhoE_og3OTW1GL!v#wIN-Dl1yO>O0PpHNdRT zuejzi{90kr4!@b_e8>5hXV78Se|jb%(0-G%=S>-Kvp;>!)nJQ8)3vqj<(XEs%Hf%4VLyh}KeH%o4ZkoeRz*8?osJi}%GA!1~G#!)xqa z3r^Ge^{o3J*W{)4&B5#NyBG5Ii(CR50rPAJ(Um64ibg|NC0G^MIM|!{uJr-#5WK~^ zL$HCcviB_bcL+*8TEHs7zW*qG1oJx6o(1xeD@ndbQ|rPB!*-g(*ruaO|9uOw^Hk~i zNy4Ys2v?cT5WYmX+$#D=?<|8|0DFc%7NM{0SoAi3DB6{h8mKBE{_sL*kAqnQW2WBa znbF1`%|KUv&-!#d&^173_NExQ^!VN3^HUxVL)QtNxsQ}%f5Ba*FZbwn$q%VAPC?rT zt;_;_gq;HGjbKY)Js~Uu-6~i&*v}Qwv=?<@eF}l!d`G%r=ql}tnu=?z4x(l@l@(Rr zyWpI&e8TfO=4*7uowA#-jpHECxVB*H2K(g!xICuIeofxZ#q|cE&sD2uoUKeq~9)*#-Wca zICuN9Z^le_ZA@|Q?{m`Q5k8iQT` zhgZ|b7MyphtgX!7zLzGq<)&^%2s<&l;JlC^eU$c5upHRce)|S%F5WIl6#8NsV9~=X+TV{yUaDwvjT|S!| zu=j;u0B?%HSHZI}c*U<^|3vV5_|$>7gWoRxCQtZ6?ASrI>w2T$DiZRfIGw~foEHaq zSSt>WlxpG}CeAEz%w98QAi71H>C4;s*Z2=4#}m+8{KA6s!TkOhv7M|f#^$o0#mX6P zXQjtkC^*jF1h>ad72n1rL^`T6RaR8@#RY#Jr!?!pYQg@0r8x}$?uj7HPSP9$>jL|u zm~xsvV9t(vy1h7ADzPf;o!cnr5uEyC6m*<|9_KBp5wTQROUkgfz7(XZv9S_t6zr3H zS6f>@AG*@64`tF#*BZzDj&ycwx(VAMZ&_WwD%nt-@G1H7g1hgX;gt?zHeojsHb7V@ zVM$xI@OkFo9B%^qPQxNPk9-*YOx#-jCW(KV_`j<7ft?GjUeT*`*Y_CJwh+7o?aWse z+&5c;{$zB&UTt9OF05OORqW1xx1~CXSA8}0Ke^z%!`B&s4l2}VytLH4FWtM>80p-E z(Y-C*+irfamKLMu_L%)l2S{V^Yt|m6ju2v+mL5e-b(4pqHvH>+S6dX!p^YB2GSI}H z)$F!(tJ^G@HKd_0Zgi3?l&7%|$%{-_eT3D3<-l}Rgg&wj8^F$hsczl6H$Dp1tZwsa z-i*1O&|QMA&bG1jTf1ZKNBnViXNp#~<1e!ScOEuM+@-%+aGs+yXw6%#K05(kG_~OF zg`~ATdDLVSU<9uM?*Kmp?$uG) zx2*61!p8|Wd(0>wGk^9ind>b~y^j(;O}J;Q9G z>vMp=WgGu_zB~uEL}ZSV(OIN7pcnU|7x%I@s9Rljnqw9@)(Vdocg2Khol#+Cg}l%J z(iF9*n!ou_f+KcXO-6KDX;V65HLFSt;#H z@GW{EXh)-2s^RE%xgyQwDj&o6`*#b@RleNfEA+>$rW=jw{F(#-879VG`^-oHau<*PhnXxa;0aoI#f5vVs|HNt1;>Y zV?uIv0p3N^@o8rXFZoqB{7LJ}#7^DWRfHd{uxVW%Nh`cgeRILN2w!*HKwswj%$n{> zXZNOCcc$BEwM@FZIo*3*x?tgp0YrLc41RszT5#WA4(mpmy*b@vDp2h;4P6g(S1R4g z$1=bF_T|%6e{6!TWF0!l%s!6tOMdszkgaAv{zuAjd^H$=ud-QU7N?HHM(hj)^E zJG{<3h>o^0Wyf~PI?MyStf6D0uy^zmm@69G5fXQBZ`R$AdBgqI)Ib5^jzN>8G5&Cz zE~Kwge%xF}hAu#Nd>uOJ=(5LAf6(2*cUN{PfB1b~{Jrl=*X|8nqh)N14DptK$#_Qp z6R&nQeqOKn>L}q^!Y6Hh?AS?lah3-cpxne5EzEhh`;Du~j^y$*ac7A83dKba4e?x0 zwT>2-vsSQ`K}P=*q`p(~__Cs+xdrF5w%x=23v*@=xioK6F>3qH2{y8*rNWTbK~;}! z@avpka9+)KcZ{Mv%)VL;@(3OcW7=68sTuC}+B^>v?-21u{dnG)u-CZdBc949oizdN zDztABEus_7vt3KCm)tP%^s~&YGT%rgs@kFC*RT)16W6DXuW7%Txr+9##5;E>cs0C^!z*)YA@n{MmL;{~jwJ5bdP@0)=4onA+Wug|_}P-1 zi`_mU`B;IbH6$2roCKd(tUpd=gOCQ>lsBYus)j(xhg;I#Yv z%w3n}PQW<-MBN(ePvWO?4#RKd{DM;@_NjOR?Q?0td5gl0Y?yo)n>{>?C|LE7 zfj$R)SIoE(*pzmD!j`fZ(?&5vn2`_hI}E>~|5$Kd>HAh9M65fM5B4EjY3#D6gGgu^e_|y43Xl-@t!MxcY^{QLv~GH(dFtA-taOGpgdC{~BLU zP(HhFg?CSWsQeU)j+xgey*~I&B_D~kebw}b37;kWwB(A9@-PlIy7>|JjwPed*OZMt z?rnSxmtF5$f!_@L9#R79@f%AdKAT>fUp*|cRp^te9&v6FKO-}=nc0(kZ%Klw39F9f ztU8uHsBk`Y{0$IioH(C-Ha~8@x@ao`Ka{-T(VO2glGyyT(&X*W#y^mGAanortFNkt zus`Suym;PWfS+UtAF+69XX=`}I+4~e|ZuMvao{6WxbEg}j36i2GmK7bi z@e${`r}5qAxs65Cdp2#mck{OUu2S5w66L4-X^Q)B=Aq1knHig}MxtflF*fjs^FB3R z;*DOSJ`-`6DiVjqN0*h9=EYZ(1H>=7=Mm>kw!KxKN5FdSd&GHZnjhP*PN{BC1zx_A zPfUk%VfVifr~l)RIESu|kJEj1VVt5TVXuGY5$EZ@9v^4Zujj{6yKNy({mDn1^ExPR z+wEYe-9G-z{C4Ytp3AeGkE#Fob(|b74Yk`LXa+7l;{3Q8nwWO`WOaVKO+erBxUsvR zzwX0De7#r1#NU){D&76)O>gN(RA0sa4g8os>wL+ef_Bmbm=*@37)s`vD z75U(!`X8W8$KQF@$!b!ZXe;P9RMHz^d8Alf=VS5p-$c}t@X3vwb>5}D@v&tL*gRQ1 zFj7zAQHoxu8awOUCs|mB$8(jH2#-;swZP-ZUz~ORTMNsvJl^3K=kdj%%6>cWifXx_ zw%a$Y8Fa^^J!XklQQfANb{1xgtmq>-y-5C6zH!!H4;EJRRQz*bCHl@sSOwTJ*qsJ( zv0AW}>9fvXS*(-)8^Knx zf(}7f_u$#f?F}~8ao&U`TR5TVgx4u}9f#L%$%HoTV(i?ApTV@t?(|q9nMkI`nIatL zIkyQeUY_ELbS~!| z2rK*zCOV-v^T<)sSUGprd8|K=!R9gVoF}IIiR2C*dbe{*a$@F&r-+w3f7W@9gxcgS zupa|^&DxK>$(Jc>n3R!O1N+~IUj20Zt^a)1Y1P~#;1#j`OgXiOHW6P;cRjNQUeo__ zHncxDGXJ1+*!4{9g-gC6K4Zp?Y#}?7@M~W_>%7Yrmd{@$oh`}6CaQ@08dq|>MEb{mj_fHz zMvep73;KkW^4weo;7>{lX{VIZ~YS&tw$b-9Drz5bGh6DbnzK_?1QYJ zLf%H)`ee>|j^-hO&Wx*fqvsalm8S6rD1S%cS6-g;$9G{9U}X_(2COuK<-kfJ*d;J7 zP|f34`W*V_qXSIkr~+F7d$jL|z#a(ui^B4QetoOv{e`{8ltcQp2YwS3v=iS|FJXUf z)FwFs?Ig78*(6iYorErGlbi;h@$isMqI_H;Y<7eBsIJ3)*+4$B(4FzpW2lfnQvI_N z{DOx^@-aZz(gyP}4(-Jajd3apV_QEQ`L|@8xeT3D4 ztwgXUFr^o!YXe)3VBKKK|5oWtKB}7mu-ad6I5So;5<#{QuaHtEQ#&*0sX+Ugo#c+bpTPpJ_ggD%oxP^ zD0AOKVQ<==qJS}WDaWR&nGd)pV78|_BWFug9~Vi#wCc*%M<;wU&&A$^?@?RN@#V61 z7<-XsVhh0W{G)N|!(GoACylx%ZA^EZg0>#o^>oK7bPdo&bw@=#UZ~HGg138kC?8q!F+o@dVY~b_iO3v>;rSqUGO#C7cNfP$#DH<6 zGL<}!^{SeU)onerUC^#qx9!mNKo_msUhqB-50y#z7$&TLgZY?%c3=bf$U%3&OV8G= z>Td;n82s0LnKk<~gE89J)K+F&6D+{R7)R8f^kU}u)Zf#suHttWf9+tyU`Ku1E7CrO zzu8+&`y_v_IJQr)OL`{(g<3$SitkU_l(PlfP~2vgqWU{Rcv)S}c~J8Ob5<>w+ZlU3XrEnd&(V{H zF%t$BXrjQmkQt`tmsAbp9od~HXFfe!Dd33?3YHcX)vSX zLb^<0?Up_ornc>~{Quh5J#jK;*3)!fPx7Ytwl(Kuy5V;ceodL2QQR6xVr3*V+Bd`z*^F(|83?I*^P}A9nh9SyWUuF0J?JMqGQD< zc%_Gj>R0)gAgpSG`M3aW^#<}$)_^_grDw+qrBwr7zrnOxq2029wECfIj7e(*JhQ>H zCZWx4Agv3~wMNpCjIM&Wdw8gR)h{Z4hyF>JL`t6;{_4O)Z|($!-s%wgtb19mY;whI zgHGvfQbazA+YQzNRxKbeF8eO{?Zq8|PUR2BJqp&efw(i!H9!~6a}G@Hv0k1_UyOYj zNw*42@?hqxd3kQn%X0=g$wxTdcFS+QbO)iUiKKfNO!B&3T}?u#{t>RLS+EMQ_42#| zo%&BWZrMv*e(R;X1-f$LhRd4;D+61vyuHv#e}vOL09FLHUY?IZCw&r*J7xK;7k3Fd zL&U!ylPr=&daPl6F*nAbMRI@_Z>6WHjgC7Smn)}V6-!E<-6l$_)AF3 zd(%6dR`iYHr$C-3~xo z3+;M!dlb5Q=%RHy3Etr0p)#p%PZQR-!F-f#WqjR0KI)*$dg+DgHUr-3;h}sqkdIEn z+6em~-;3Cj9Qg6N{Jy&+k#nB7k#p~z$rr@S&$iSJv3j}L?f;}P)0K06P>@&dfwXmp@!k>2 zo$fYH9@M^8FZaZiykCM>=WRLXz3a=n#*3Et{O&OC!!&K@yz3n~=ef!kpA3I(U{hd! zD!{ZkmFC_n{AxA2t;^l=u-dHaqWtjG)A$HR;ZytCoPRIiP@>1U2=<~uJ zdgDK|W6-YG&xfHKhc4RBkAfff@KFC!TTT&ng0NjNbIIVYZ8I*&52$s`!l9paW{ulr z&Gd)Y<=00w*a@)p>LUx?8R#}rAAQi~pk1#%Mxk4RE?OTaz?VHdR3A;0VV1By>|ueqPCg<>xp19VBHZc2i6tBw2$W! zSSQ%aRN#(u`L*;X$x_)){8!**e!k6qrfvE6t=oJzp?4Yztrcb4_&?y)a<^@}P#YQ@9)ijs`V_oQ!OQH+g4exl-l4ts`@YP*@=xv8 zfZc?*m0>&a%KWBx*LzE|J%M;D+gdSiY+k{@anycGOyyN{v3w?}Oa zZ8qnR!yer2sl-{gBK+>toKl;&>_T6^sj$rz)=gMlOjs>p2MDVtY$LkkIJ8@!U9Zfi zp=>o6)(z%k8QQiD&qKK+&1zq)vqQ$VGd}Ja;!F_d-HJortbb~E+C2}y z*LazB$_WWLA(p5@+M=)Aj`EMuw z8R8pXwXqKvGVK1#9h_O!30Z#-fnM!6Oq|Mrjmgslv{lfqCr>%(YM_hC(+YTc=@}7b`drW zRu;j|fR#qDWw4S6R?g~`dTjjl+TbvB%1^Wn zj)AK@1`oA?MP1`6}-~JL;Mt{@*4Du7Z%q4;58l|iPJ(@trr%G z(*<7d;gL9lgl+M{LUE3OH+py|j%k0wnh1L``P9d>KUhl$li&0VSUcEniHPpFCtZD= zIoHPKEQPNU-n~Y+`gzs0%nu3QrT7s$)ts@#PGyg8xMLdmZ6n?Y@x((qY{*SAP1y>cO5WBHH1Vw1Dbx7(5HE zyt({eYucuXpW}pe5cUm)8G9Io=Do8jvxEHX)0-ohR(!=qkf%#7K=-YA>7tA9Sc1m^ z@rd}#-r_}L=SL`-DMQW6(YGJU`ELqT6TJbf5zHIQhV%eB`yAPBBko2Ic0iMbCQjZ| zHv@!s6Ml_};nvp(*a@)T2w_LTrohbIG2rskO@PgS9Ty!1wzmE?*!myvJc&vp2VL8T zgSO9tT>|R_`*}>CH1^6K|GkwAo0xPTL7}_f?)_?NXT9}E&b_k%-b%9#Y%GM;f^~z{ zeH1^M(lq(SPcf9-M}C+5PQY#*#Xk&f>&NIXqU9rO9PHR1=A4`WKH@nE)<2qa+AL4@ zP%Z*{!60$}UarJrS+zpi@2uL)650^b+-8TW-_Vd z*7&;=Oc~=_#r5Z$CjHe<=bT=Z*UZ1L(GMoMuadh%7DIj8svtUy@d2u?DsG~G{#nj> zKi^&dwebO~tvJce4f@>x9}8h?c3%pv^{hzaSZRC;{1YoB!P7^jjSef|qkv=_h8Tyq7 zy?B&$xctRaAJuy`SRZ_i4QblPt_M`Ju43H?YV#~~O21wajl4l;=leH#x|JaD?1Of2 z9iE~ah3?P>=uSd60-ZN**fonCY30$~&u8TFB6LSKkjF04u6!l(p|nf*Vfrug(zWh9 z87WSliMLx=j{6Mivv32e4)JASJxDrTf0=VK{@gK=j?ojw=d8DS#^dLX+s#_k47`q< z$mPAKkpnv%!7hP~M6l9Vv0pcWRe>D>Qx)hV8L0<50Or}>O<)-?@q5tMHD+vPePM`q zLYtD$Cey*8zO5;QTt6B4%~am_Jr2R6>aTPD9XaVI}IzZc}$F z(DvM)bMN;vw2~R_z!8aE53IVG`SZ#A`DZ;?TLjC1wSsx$O9RQbgY|&j&Ueir4|2HL zT?6*_3huf80ju3_^t@(nA3IFku@JvTSd4>Bf<0{O$+jbRkqzs-t$mZs$V=YBo+?^4 z_Y(129p~W@&O*~(~px!+n&A2PsP`Nv(Y~-@H+j?{JB{t*r^bv@u3fF z7VI{qZ_W<|w)}owU`eN-2hz*<9?aM70CioFi*t>p`=2I~U*u88;u+X7bq?ZDm>mIbSeU>#t!5v&)i z1}v;o4}euiup?kqU{@(oK1$;lSS8rw4dSlVPFa4&R>qDA&lS!4Mf9KKvx<4Xh=ZE! z;P4M>!o#$G7xgof^WUZ^uv1O{v+duMcrV=#B+~utzPA>5bw8MM?z8#RoUs$^0$8!% zC-r8YtAkq!A0+(LL%Gnq)J7JNfT5CC`erIiZoH~uC4&3zm}}V|*%Svv?Du`hy6Wi^ zJf|Mc_m3@s&48IXCp5MEt%5CqHS^uISpqqHqc=Vgq?MBwjgOj%O;~SxYukyFBw6T%*_FB@E+wI_Tz{uN>?%dP8i0+w>y`gmz zjU!{ksUVJ7-;eq|-a|C(TQheW)(kf`&qKgYl*YUX6DkUuW&w2V+w3P6>UB zxe>Oe>5pB|bwXE49DO94{a_tnPZ5Bn+ySk4j)3=pzgW2839ljEIjz6NUr$r~3Fw9+ z@oT|n!H=#JU#wLZtI$qB`!fM?bDXd(+G>ui7OEk9HsY0iE&3&wbGF6wAMBIx8|1QU zbxmVT#k%vD!|>`oAJmu1H7@>O8(C*MW#d0x`Wa&ib-CME45kfMq3efdbX}<8 zb<9sa+}IlKo?YqDdcqD6)}_Va_3EtmrgT5I@p13|A_A?<AgRU*qL4{A+(^_j4M#)4k%ZqfveA7~$Q7FWT~5cJA1;#v91Y zL_6WN0M5&5`c_DqDy-#;VW`rtup3}?q( z~MwV%hgPYvFh`jEh>h@=!XndTKc@P&}sr>M(UClWQe0TF4;pgW0 zx=3W~#ar{)5xt4ORrpQ7?^}Ei?Xh7!bErf+pxvPr+w<+-Fp|Hfpf+i`8-L?}=bR<+ zh{$!sUfIn|`xUX`%jhJVVHjRZ@KP7iN8|Ar*afgQ0f8=~wu8ME+jLG8ZwfOZ(?3rU zr~H57`=@M*ON7@GK5pe`m`lGrUtO|}#Cl;MiD}z>^nH1ks608kco2xU~Qv$C-qjX2AlYC9X zYjyLY^Te2O-L!)l*R6iRsrzSAFon#vrux$jENe&d%RGiO>Ryk$lrB1%{Qehb=V-67 zeENmsRj{ZuE*@Hz#rXKP{|^jE_x zkU1;AJY&J>@E9?1&m=Xz5qWsrqI1yCm#JSPzk$qI`EBZt<)rl~pO=}R ztyM-ggT<5)znyrUg4f97uS|Va_pyHaYgZ;;J@A^o0=%RbC*ajlx#(zI4(UaP_C8k_ zQHH!W@B9BH!xxEjh&aaYMBCdvjkH(z-Uq5SuP1Fax~ld~_}_@D`Hm|$rmao;nETs| ze(~B`%~Pmcq(du--UqK`czr{S9sP|(_il+qKY`8nmNwsWRrB!X z=7XD>S-czf@BGeMeSeZTl9^Ut$@RB#<54%iw4dK0) z3C|Eda+&Zh!jG>Ju68*<_$=Xv_|9CYoZAL5Ay^k%^WUwhJ(OLtK1JM`CoM+rXEgrk zNPpJZHFK$Dp;Bg3EWFCzf_?FnMfa>$L^lLuxo4v$?ut|6s?Rp~48kYQK2~@i;bWHx zKTP=48sV~oP7t0W{CU1!H@brDU3T0IkHLqElQ+Z5RMi%zL z8-7N%lY5KP_0$FPW#3*i?U02>*)tZMXZm9~cS41E1pOnE?oVzmiK{&FqWU=uujOa0 zU4JJCFMoD?xZ3d);q`>)=u`3c@ZQ4Jxnt&9;lrh6ao0K1`u7dWMym%q z1@<()>mw`!wj7~r2U`X6_Hn3OJz%9TSoGIYhji}*GOoM(#b=oCO2Wgu$H2CLJ(h5N zM0WzLDS}OdwM4KpVC`VuTAku9gLQ$Gi5VZ|tK@C?C&0Wl-XR?Dt*jBqo>U*JA-tFH zyA&bNo9I5PH(fh^8;Uc0P9np`pgch7_rmKiyu7_g;(q{a4D4#(b_;ZCFpkZYxb3{lPsIEE@WOo*_XolaBY3sl4uogr$4~s zqIeje8w3ZFm{+J@xtm>LR+P-%doALaO-Ag=vg~)8^{5W`^uNfC8OCf@ zFF>eatfU%}IRxztv^ObDLu>X_GoHQ6qcm-Q9J-R^i8e;~mX|EL z=P>fxBk||H4DB{AIuT0lcc$2*<4y+Ew{yfVY0Tr#h6K&f-SwlQccRY-zn|av?X3lL zE2Fqq{O?;+yFLD$L}?;^*Gm_jPx*R(&Gyv^viQAZY^u69w%xPl9qOZ`aeOOsB^h$- zh#3bZW%-Y_>O_-mvl-})Y+H0*Vd;W>mWi+X`QMi6^uO$LGWvum01v19dIuVSmTh|w-Yk71j=wRaC3;&uOi~jn5xUZT$)tWi}dxROAJ0l1_ z4eZ=J_WM#>;6JPU?_6}g>eqqozpcr~lSkX2J5w}-{l3H8%~(3fe#Tvk&X0VXg1!|V zzXO|sc0_r`^iulT`PcyNX8Z|>$IMua91f80L!^JK1vy`h+CZ_j}5+eW>K#0+PY{2^@{bEwIgg9~jf>7V!|`|7Hv5XpM|7v5>$qvr z-7Decb2s538K@VJ_p<*1xfgO=wGmsaIE z4Q@FwWNRUb>xwcNJod_GJU z&c|?mKE%7~_pmo#v*@m4c`|gZrL*-RU6p~Z`u0Wto(@xQ;3`WeVQqv(>*{vcsCm`Q z5=o^u4DAtU&AQnd>51nF=tiJ>Ki~a66fVmt7orCs5_o6er7VRB210gx6IK=$& zjz#y}mzNLf|ILmw~PxI&(h5<1L*U(g)IwJ(i!@U*^$KueU;~b{!_X0X`q#yI=lrx!&cbsq#!f zdkos2uSNR}Xq8XZA2iD6MdI||$r?#s9Kw~)Ou)P1518*m_sKlEkWL(gRze$+nJjTG z66a~*I4_4zd9ZEQNLVj)m!LZ=I@aQi%(OxGKnB8tiG=jc1B!Gou`Bqh+I~P~I8OYw zyB3`%hsQbF-;<9ihRp4Er=e@Po4S-8@6~m)J5D4A6VNFQw_Zx#hrjLhi_V~Uw%R4wiViwZ(4NzGF+Z8?I#1;0chLbyncSG;WZBJMQF`=mc++xrSe>0 z;vvJ(*niM8^e;MZ)*K?HOv#&*(7Nre{v zM>24f@UcH&PPdsKUb$L>{+Jx!46Q3Kv(RpN|DyA^Yteo-pk0Ob^han{t%b$${c%8B zdoSxBpICJMb1lB-0@^lcM?SUae0D9`BQCA#Xb{@Ivy1M%US1v&uc16rN(ohhsiSe| z>T-+D=5QZP{M6Ku=DpK|S1m3&-6f&2><#Lu%W_OUql9l#UhY~<(S2n_e>ySbpK0{Q zFpY0jgnc2#=d_or=i^!<_qoHL!{z)7`nj~ z{Lx{3W9Mbb5^3Z>cTYjv_QfH$?|A8Zb2uYCZkd*#>-f1{zxL=nJ5hSkW$Bjx{n($s zSaco?=hLHA_YcuFL31bA_9V0$soxoByNk|k zs2*0JEh|2^ZrLQaH6Nt^ePJly-gL+P&w3?OKW%~T5IoI$Y+gHrbWrj&f!!hc0qCc% zI_Er1PIQmnwL9h?Wf}L`|3!aH^p82`Eb`r_5AjcEPG{R%^khL`Vjx*%PNS#J{W=CDcxTCzxO-CZ&&Yhen{(u=iK|Yym|`P=~HBrxa&^C&@R33oYP5t`E}|QRmQNA zk|iAeUwU1?rEiJW&fh8c6us!2^N*@)&&Ce5ji$wH5`XZahqFZFO^Af&?cm8lg(=9G zs^Ktqt*QRQ=-XS)IX@2T=ER@cO!y6ETmj0KrU?2!;Z?1jGi1ox0K8UiJ?DH_7k99x zX2#x7KIOS`^ZBkwJ`-Mpx#$1j(|YGQ_pU6jjuUdoC}pn#HL=id&A43|UM1c%@$ziz z#34)P)75C)NL6lX(BD>L8bnJw*Jfd(S!7 zh0{w`c!_9!W$NWPbZz&Yb6ynIBVk)8xydHxws8*nqYs~Ro=_6XSBO6G-#)qFU;a_- zneUu)UK-YcA^PO-WBmxKrzYr+{_{EKGvR!P>*>W_5nO*vFZ4A(Jm>5tu3t|oo$5z@ zSpRS3f0@6K$X+{2oF?Mr`4O9klHHKWPCZHZ$X^WQ`wzh-b2-BL{^gu&-+FyaYW0DA zBtVbTSLl>Z*~iL?mQv^4dxbn1a=VMEn>xb#)90O{undLk=2<~m#jgYUZ25Wj4i=A} z%0`&-HbD6J2HPdFQ9$w8Qm$EPrf04SiYl`TRL+h(0k+K2+E67XQ*e z#NLAb%Y66SB|L9^Z$PiSH$Z>p8SCd=?b8Kq?=#Q4XQRA&09PFi64phS+Q2<0ir+r* zQ4)K=>=hd$yrTBJvsdz!Y$&!`(&TxPuY`#4d3)}8XD~dE4%eMGK0~Xz$Ur~x{PXVJ>>l5cTzDE$ynCTN^}_ScC&KL* zqD{UxKhI;(ANZZ~&i9Gy=h?HxzwOGB_)bID_~P@&BvJ!HJx|Phx>S#_d}9@tc;qbEVi*HLJvpw*rQKi^i5DD9JkA1D0N;qaioZndf3C62YwT!OxS|9NLP zOz+zBH(Od63nuOAKVtrI{rUX)W#aV;E~+Me6X7*CoOiNeUYh^f{3-uk&DK)?G-afd=evbo{7(|L{POee9V(t5-i#@(-|_sezrKNVg_c$V-uzk$MA2yY-Rxr;`N>*7vNr_tCzW>` z`qi%U&ToeEB+0h?rU@^*?Y#4~aJXBy-XtpFx#Pue1^Q9wUl^vBX5qKOEB^$4AK`gx zoUSQs>Zrknn|Hjua)-vt+lcWq-W-gqbtp%$%9o*$gb~5*FAcCqYHUcu`R?qab3qUeonrxZbO-lB1wV&XN(y z0um*Ih~(r-+93%DN>q^ff9p&-yY6!J`QH0~-sk6jJ_9{nRUN9UtE;Q4dv+lmAD25! zANx8kka;%;I5VCr3O`^i&#I4WaNP;H4gr7v--?Q#<2(`RE8pc%K88Qy?V{p-bCxwO zB4(5Q`G48`z?kryYB>()mv0r7y7oN_SZ}~qSl3%~T;;oBD>KVoKj76bD2l{~#^lPf z7R%M>ef^K3e9EGTu$pEox)M>a@~aj*F8i`}KjJ)x9X( z#ac&VAIBw|!pHq-2i%T*ii-P}Eq=)Yz*kQ06uw|BE3tMpx0dw@a0gH6RNOx2*$rBr z7aIUy`$?zpbnCpZ^h16wF)tYZGVpJMJ+jkUH?LhBQo}rYGgf<4|4)EFuy;}9y@VK_ zByM8FzG(?~YTu%GoSwO#kF2W$Va2x!t<;)-irx;7G8&mRb!4*A@JYG35Dl?Hh!)r4FgW`b2u(rn+W|`ITU`4c^5mg zv+lPa;<6*25!Pvqf#0S|D7*pbxSUzqVw&&(aoHV!yDTphK5w_+TJ@EZ*t0eR$^hW^ zYY+-AMLO=kd6b*o8iRr}(#I2B;N$3MZ_Fgm0XO`9t!mp=Kbu4ADE-&)5#i8`2P<3Mv;y~r87 zGR#5~k&*bk;r46-?kB*V%I*1=1vj=1TlQm(fkW(%tbf4VM=5PB_?9&(9-k6(?SPE= z)eN+RxaAwTFV|aWEq##&qyN!8In%rhn#{%r!e@|Hnp$WgYwi}lrX3C1Mb{iK?Gt5C8MI8pdZz?!A!wT;2AbnN zl-J9k}lT>p5k?kH}^#V4EG`el!Mdi`x!_pJUvu7ToB(e=*u1cGYo% zn1=nBt=fPFeg|c$g~qDWswZ@sIsTwIfjF%fc#d_m(6mYDZz<*|kmf{dMf*@+A!xG@ zhsAN-N?Qxr)|UvML=6FR22W zk1aG-dHAw8jR9ZZ@aGSP`|}*Nw$Vy6EwRVswzU9__R7Iq{Ul}xS%lRbTnNRoOzXE)2#AkHmBX^dN=$TJ{jpqLY|38DzB7E-1rw;h< zE_@!%rw8-tv3znS;{W;mdlne)IvYKvhVfWgu^#PiWp>^5Iye zr_2P>_vBMcGmXZgCZx@A90#A{{6Po95Am1;%HUP21b=x2@3`?3o(olhM!-?>(XS!m*YkvJ;S zY#G;~!MCTJ29LQf?^y7ya_=o(M>F;Z{%|lnpJ|@7(A*XC&B`e;3U1T$z~BGl!SK6` ze`~4ujbr%Srs2SEeimnWNSDdqWwBnMeBf;YP3DDz;Umne3`-qRzsWV-El6VE7fTZ^g$6 zoffU{RS>Z{lc&de#)o@1A}6xPDFA)T%Ll_9n0}arK0Z!ze8<5&nF0LXR}O~DF%L&s z@U1$uFu@bH<=Bt;MmQ=9?^tLe`-g%UHkWU}zjqn9HMu=cT5v5gEk70OOT=z!0h)^< z;>%P1VxhrVn-nvEP&UiJ%fS7&y(ltgZnEIU`zx)BwTJOXGrktZZ~C9{H!;2=ieK;Q z_}pI_1AJ#uIE189!-8++=e$^pB6GMtXd2_ZZ!6QdEHoA#No-C<=RJ?Xv!H41j`)(5 z<6{$Y615j&E(2aC2LQKw`J!+m9^03Bkd2tD zus-m*1Fz#pox+QeR&KK3CFJ6@Xpdv3;O5?78R#y9Za&jhu+YWY6Pth*IplG_2)YpZ z@ea%Rr7?-|u~5f zGnc!!p@<&OH{OcM4)hY#&r8U>1xq3Ec+Eh0C+ZZ1>v0|qy<09PsXVaobC;yICuXVhk5l7a4I({3Qy;L zH?`nc`FkqCE2ilUn$bA3Jiu+ORR+z_1P%9Z8E9HID+*U<8n1;W(Z5Zx{_#9K&GLbw%MVNGm&wdCGn74xF<%i#y8wSYyGl=oEQCqVG(z2sAIZE{g2$rdw#NdSZ91_YvK7 z8Z^UkE;oej=us9LYdv#|*OLQ(poa6OTpSuH6D>5Be#)DR??WB}O$g@^$#76Amn<~a zdQKF#b9#fO-z!DogKS6dD}$zIaXW7rXbPcUvUv=SmqDWx@6TD#JUb++YreM7unfea ziDJqLd}jSr4Zg(=uj34l$7iaACN5`x1*2IZOYg=w&hpj{bS?i`6mH9O-7IwG+KXpF zqR1>yy@9*w%_8$Yl=2S?F8jSLHsl=OT?C$u%WP}GvyOW_!ZI@MM?tggUpNP=2b!i9 z8tWL|qQ@&@`O2Jx_Iz3t{+M~&)-t!OH1^_q$yT6gIkPC-|3=VQb%T}W?K<&#c)jZk zn)zpn!W(cTPY<@-vnL++kv7mt7IC6Isk z>F-54?t3=((}_(4w`UH@ezro${2f8XYU4z036Az;PQ{iy?(I@s2_G6q zoHLoZ&ZJI(yrV7S8UKi7U5)v*+2>?p6J-JCHsFVVpUU_75%?G z{*RQq2<3LK6pFkD8Ec1hXB6+hR&W-Yn6%7IU%?hBb_bW^Kul?kob@yYP7cmiT-H8C zcrYb~$+FN6c;j(SQh;>4?-6_b?ie2Hmt|AkG$K0`ZiKY*jAf3RWil@!gTy-Q1aN1g z?vboF9<<;szv+zm!B7)ZmX~MJ2<~bH$ zHF^a&_~9C+Zw#D^C~G$3w6x%G+{KF3_n<`n@p%)s190E35sLrTfLWeJCz#h*Pz;yb z54aE14TbNv^3{SXoAHE^b}j;L8qSHBC-MHoVlI)Dh0lKA2A6N+|H0AZ{3%<3E7mBYZlR)!y%~1GX+^$At(A<}37q1hA zpqYmA(~p=YP&$odIiqJ9V}_d^s~rlDW}5Jb#5h>n_E_f+l7#~}36S8qBM!@rO_$t`jjY8pX ztmoa4n2Ge*ip%A$1fJ0}6nPsvCU2}=V|p$2KX7>-oQ>kMEXU=O&)lN$q}7q~n2&Mz z(+PNez_U=_oeYoNmu0<&uUvj>z*_-cTI?0WJ4WHfVmhU5W&sQz!1Xr^6~8+djYDI; z%!$H_-9d=hp*gV;<*_LQ-mYsy;f_eh`(Yi+$Wm&ySz7~tz;$J}xmpx{i?uB22D8mP z2Dbs;2J~N9$I4Qd+#xn%5nb~J@GsvGio6dO8#6X^EMvvxjt1UY;QiLP{Y}8%c2g+) zH+SiMmggt-H|Dyr7V*WcLSdDaW~?37IdT_slp7^CjGY!RZyST|#Qh=jJTFcc-@7OF z1B}}NxV0Y)ndhEyT#hs8iK2OWMB~c1zx{wa2e=E6j^oDm4HBP5G6CC25q-N1_$?j^ zg%4WsB@P&3Jafh7ggMgOmeasj9u7rfC1ZDb*#=mBH_*D87fV(Hk9m{14*oIVegl0F zZwt43L9F;ru|%w4rk&9mbo(C(6~7Z{$|p}EZcb#a|2ObbAB8@*mLIW=crq~4rS(W~ zyC(s6c$?pbyA8NmkB3<6CE6V+cWtcP6-b!#dp+(uv_)I3xK_EX7MoFQ07m#yA2iF_ zg^IsDV4;a~{jq3mXhvgvo(Em`Cqm(tSTExIwC?qI1>=)xX?K)RI?I)EJ12p5_>-Y< z6YKo4(8}+}<@6&?G0zG?GwJD2cofp5*4K|qkBo)(CH(Ergu+A1!tIs7tq(GU0oo+~j|Ed7)|ij>Xrxd^zae+z{J*0`eh zS|V#IP)#AS_7td+1ga1 z4ZuJ8HriGe{?joTk=~1T%xs_X738@f6z*o#feAh~<`FXaXt~GA{BH)j)NYsu*12OD zE4fL$zW%ZLnt`q(==OIHh4+`$&Q@_c){I;=|8EKj^JNa`3wpus$1ujnz{<~ZJn|8l z$^uFV`27Z9Pl0qCpM69(0}WZcrfM4zp97p4RveBw<6@$CS%B3B-b&!@E#7Cmfgyj* ztv1(x;1mogeJy31qhl0)Bi9v+S4Waz{Q#Q-T29CJUPyAkKLKn$V7!;7r=xba6x;By z0mF?ouSJ;ng}`q-G!*{Msxz#7nw(gZxqSE6*wc*&g{La`5?c$cbM=YDT;;jY4ES%1 zEwMf%Zn1KNKMQp%n$px`FM}p$Tqu0HqNNUNo3>Vn_5*PIal6KWX8)>Cc%!u+*4V^l z+z%7ov}LvdzhGV2_S4xY{A&9g9>>g0=pV`{%Z_Vy6*!Myn<$+3^l^S7$-4Osz=osj zVmdUYN8U-WfMs(Wa8GyX6dCu}xJ1@7J{2(qo$)qseO<5q767;FEbvwXF9m69yBKC{ zcGDMt1xkU{1Z*(c%xc0)$NjktF!zR#89Nq-#rDvwJ|ol79G{NBZ3o=Pt>u^x-$162 zHvsU_n?m8`41X>v=TY9UcXmbWcCOl0GT*A>DX?PoM!v7W^0E!|wKs>#etRiqPet*S zEzl3ZFLr;%qQ?^2GBS4cfp2UHS>9ep{BC?t&c|Dk&N5%x0k;KkD_iwNlrMNSGmgu= z?+x7BwnqGc^mbxj&2w%4V%XCC@iNbtp0v=! zravII0gr6fxU6NsJ&Up`SaBoEwW&|{1Fm%L6u!?2M>-3i z%Yf|yZ6)hEWX>x&nKd1^C2Je@tlO|pv5p`6!mdPl9We{dezgSduI-^Pw=3Rm*cJB! zmB;sahIi^z{Ejm68P*-JLcktHI!+sfjRPzTeaI>WwhXY2fbqO3NmmHiV8G0ECZ;!l z#`RqUYy)67mqM4c-A(5JYf}oWHed~)i;_x#wFE4$4A`@PRR)Y@xnwJuW=r94JLdEBD$>vgE`OkrS5Nn!p`= zFcfZKwc{=Pm-lf$IVMOpBmbE&Vn5)Afd8OkX|J`8 zF|j(Nu}s8$TnQTEM5y>%pL}EhSQb8^D7@JHc~hT0XCg7rwcS`>P{uT*<9xEzYhD`x zh;i!!cLs3Rl!ZGtQa9ta18(b+@R62<%Nu;a7`HcYweLfbcjIFE%Gw6LgAv7@58OiF z`pS?IDICGg0)7a%n@)v_zvmcTgZV^`$4T1*e-v=qlu@2_t!Dhjz_0m3iG6^jt=2Ps zZo{*{FZ>bfH_~zb#@DpSy4V{y7lBhuR-@y{^YxP`yjU4*W%CXxipOo+20Y_TDEzK< zK3dyWz4&}ozCrxK`A~6tkdM(&7T22-g@1r_yzOy4VOmF#^$&PQQI7d$Q=6#HF(289 z$l>#V555p8{&ubD&y_ys+IWuj15S&J*t1ycikt;}2^>~$w@3dsXEDpoO3=_xp>Rd( z*u`wm@1oeitg!K&*A$}=^R?jDZ%Ht$CSbb&Ll}304@ffXHo!KN z0qX$RvNB)=(fUg65xC6Z(fUf-;yfnv0ec>O)~tFf_P*nlh<;?e{lIH|DHPsf)mibi zO&!##TiEa7P~;tk*x3;K&{y9CmgCOV6i!F_S|7OW(4UfRX4z{6*Z`Dsi?u$h z?0p&YqDI!<0^rZF9SSd0KpdO%*8O0w1U~m?2JlE@6z*B9Jze7M*#vk}+M)1? zV(=qz_-VjHfQO60e~!bA1K@Z1AMyEWE=|TSlbC-S|p-A!qe8k zS(bSyoNmRDgYhytGQ8X&^PDk0CR|2^h~DCU4hGJK@`s9_fw4XUjN$X6a0BUh8GP&! zh3^7<5$F->mVmcNz%K&+3E(`J;`EVirKvws4@Th6Sm8)Betp2G!lB~t_C#T=0Bc+1bbO-D*U@1t)+Y>z(s)npdQTP+ZcK=1RzU2)rPA!2KGvM}_zvAZ*anlZOcUhi8zWcLnSB-+|{h z=>r1=z3jnN+_#yW>C4LhEp5_j`0uA{Q4-2YB5c^&28IjjBlOvVhKh#K{J#4HztkB)I$qGGT`$(Y|ZSN}dPaA%Vv?{iYd=Q2%|^(`{Zm(5dOrgsw_8@u2C z4m}g&2Y(NIAgGhj(Yb!ne(R<5CoR>nPEf@L7;t}tU@8;b73*&jL1Did#40;p=xYVd z5^#){QfEq*4KZSMY#850c$%fPAJXH6wk~8~R_M$93!o|7Izt9#K6hB&Y$(dEOrx@Gp44 z`v`X8W{2#pH#5cH-# zT2MD04$e=@w(SrIN+NpPKU7dJQ+Nkk+uRR^Nk66hHwtY~^ivA$R$^^VqIOtQ0yx?1 zD|C#`u;>`4*R%DKs0p;yXc62eXp_((Io}G5fLUjSirmyDHbi7y--bYz`mLaiLjOU~ zH-h67(XM3L3}bS$lrd1IZn6#@43J~>Cew%L`-dX9MbHYNALbfju(S%cO@b<4Q(`j4 zWywd^5nbnhm7dmnLzl$IFFo6K8hik^x{Kf%LGy)x; zF;yx3yXLgzkP*>^)^s4r{UzFE%oFqs58ywaitx{E%9HnDx)GcKKixj}->F=%HPwZL z;JX3ABz*kf)_hi`f9CzkgFofq&$;k_S|1F{6_u$8Q4?c}M7P75qF$1*SfUY<{)t4( zBK_U{!C&EkgYrdaEiC7kcC=$gnqe6zsRIVdW?ka?kXwcs3i86Mju9V zI^v8#@5Eb4k7)M;wZ4udnznX6KB{x;trUpgpY5Y9Y)Fv z*epw)xprD2!E~q372jw(4N+|)?ev-IdEZVWY|cJ*nrYLKv&7b#=mUGkbi0^lFCUi* zlb6Br-ghO+TZKY?6#5v6!U8r4{#ceXuB*{qqQA0rbXho&>?LW#B=KRSYbM%%KVDem z!dQomD0Cbdj}TkzM5na+GqJ69_;6A1ki$R5O&1)ez$b2JSY#2V&`o+D8~rosoQe(8 z2>6DlDEb+d<|*HyD7HoJGjM{lK{EDAR4Bn_LtZlNh9hscYT!prkE_NnDqT`B*SPPu zi<@aF4ArHIvCU2g6yI(;?NKZD)2N#*fS(@TYO8k9P6hVBc#Q_zgVXIa%?_cvWY>FY z;zP|jN)scrhhwY`54%&`QuXB}HX0>VG;^Hb%BD+Ik+VbM2 z3!eAT9&H_p``F#?2M=}94**(PdF7(z1&-Kgv2+FHEmYbaw9zotbSRZd(~*{HF-Adf14laBHR7&uh^fQoJ_;C?@@UV_gn$!5NbkG3dtf0{?nU)7Xi}6Bn`{R6vzNl5*_MI%6 z1rNz`KjAv0h#8{0bV`<2%C3E~xFkFFDWbFT004)Sw9YC>#aldv{0AA;&Hc5fi=ZdW z8wpp>t1wW|D^Wa_0c%^rqA?$M%PLuRY2U5#H>|SAqQ4XU{YU9*g(fOCc*LhESa`N5+CfF^ zQ4*3J9+oDOg6dzWy!tR@*CM(%`z`UR6^=E_rC&>_xWRP0{9uMPO+Fp6D_}r-h%2O_g2><;@%SNuclr{d4S#EDlt~*+tpz8z_Z4n`xVbXm#?>_ zrWpVBu2;niCF;9cTmC0tdFoA67wx>oRb0;5&&SL8DxqGGXgy3IRwWU=aXm!W2H)S! z*tAFTwCeh;)CfiabWK@wZh~P|L%)|A*Jr*%cKAfQntl&8fb2YBdr3S~f*1MfBUBH* z*T-Bhi)Tx~y!y?Q2^-@c{b})d37D?kLc!*kANq5meF>OXuTPm3h??rH#BC*DWzv-s zDM9Tu%GLi)4G|&RMO2wB#8m5~H|4ZUdi2$+x1uW0M>Wvb2a|t2?m@i?Rf0pWnNdQ{ zAjfr6VV1Vi-iKCJ;RBp0)cHbuCg75ZuFT9&=p`?7QkMPz<$*8lv-=3q#oENkT&jk4 zG^m6&=+BD|*8W5Hc=d;%*Y2ZwXk***C3Fw#J?#mqsJ=v1Zp2}I_J>0B`gQqb@_^<3 zD&tvZyFiz%-$1n?qb*zyio30C{vU$XR&SvOsPA^yuXL!lx%xWB-@8nR0V1(A0&jok z9>UadP{%M5c}t|x)XcCfkK-g#7GNPw2o$!g0<&1{V{QW30~XP`sBvi za+6+skB2#5M|+c+U|Kz-VGG(0^1*t6*CVH1i&6k+sQ*RW^c%}#SvIuCDMx>p>R=Ig zp~^5JKD4wnT6S6O;XOx&?NMrAdw`mvy|2LcF5c0H3enrD{7oI?#5$jWbtns~MvLV3 z;*k<d!akO?~^mlIWV)37I^r1Z7$aJiAMOQal+yqB5pvQh``7kCnLNW-m02(NnXb2o@_vjOqpyEuR=%Tysm1vT ze|`fEHf9SA`s!ZRSC7EtN4r5^C%2nKkKl0t`bB6+4v_T8k{FZdIpe{;yS@fC!2e4B zRHCtx6Uk4cG~Nqq+a>Xp1=(ER^K!9gf1o8E_7NIV(}lKFh%T!Pqbdv04A|_j`UglvFQSX-AJ~B4G#zl!v3oRt!#j17)_mG^(J|a1Ol*A>; z*-aMxWPQAhZEiw@O!~UDbAOQNpMLCdmkDi&L~F(KxKSc$$XzWNyCiWy(vC~wtfY08 z#bwK={N6EaBI?%3?J3ji>98?&<7`8s!vZ3+S<;YuP||;p#Ls3eePnHfEIzU})s(B> zHnxA1C%mvMM-XPc_C7I{kCW#G}&iy|9@_X9SK-8w@M9p*Y(?fr~ zg`kN7-%7Mx;7E?PN*Z$aOU@ILI49{nW$|7y8TdW*V7~mX%}wZ|n{)dsG)4HY$T+vv z7RxkD(&x)GNrH2fK9w~!pYRigSV@MwZY=zo&nuoct!8o{^V3R-y;k zmp)k1ken{*D)|fBn=r0By9x?l2#~*ZNDnNF6+uS z(xEH2nF_Ly=lZWT<8NQDpsVWUo|kaA?k|#PgD}>@)hOB%e6$*}zm$w`C2?5NPD|n^ zN$UaTTf`~S=eoJ;p}*5-N;FZ@ken`IXZDq(fpEK}1E&6IlnXWWW;%}M2MDa%v{2HJ z@s(uklf)UxD50{<@+;QKohjo$IejD_e``n&m(l4tvbItdixREjwWw}hZeJNZy(H0Q zq3@GuuXvqkyQCrau%w@p#1%>FE{p!MHbxdh62wuv;kW7c-y>tdt(!YrMxRH^G*H%% z9Ldf9Ox9M*Vu_^%zfWKM(Ybl8Xk0fJ&gB==&q_Fe)Zq*8keNQXwn2UeI&KbVPeJ=0gZ$r4U~U4M#NFt;QJh z9k|;V7x5c!VmGl!7#oGyDYPR(>?@9ov$YJPK%%z5pnvEH*(nfk&TbdkKMT=G(ms?# zuY}O^J}oE3_)*ZK2HYDj>B|KD8Z>0)#5a9FL1P$#2@!5TQfQwFF`?M{0v}Pj zfsniE|KRXjZJH3{e+@@KYW24fF)j4PLd>+ZAb;KG>RNn>NB%8yGIKW~Xk^3~^zd86%dZZH0cbvcWYnFZ9 zP}VtwPB18Lv>`a)wo=Y7hVfnwXP?&wPOH=k&aQWbzE?#k>3noxwX7o4^hO_9Fek7z^pth92eLSNT2~PPgMIrsMsP7mu%P^j^#*#$PTf$ zY}+J@d9rK0ESAggK}S9O;bAw6>w+q5z;r~V(gmTuC)0RI{Y9cRl75VLAE@kv%frxT}LR=+qr~zan~G< zn{oWW2AdNsIA(Rdf)4)1yR>KM0TlL}tHjxC15t;tO?X{JP{}x4Rw2O+<5mh(AR7r7ap0l6fneWuU=B^t8}`Kg6C zbmCa_OA0NMb%a*!k@X)GIxA~)RhqA;g$i|5t4>$NG?jy5VgqBI)3?E$s3iDMUj`HL zhdey+2EV%hEqV?|hWPGkT8MtrASpQl*X*`(q{AJ|u&P(YNeP01$R6{1jne{MA11+p z7x{ix;O7EHCBB~%MpKv?NZ_ zcnq4UZ{m&z!0n;)xZgOdsjvQnnqV9_-55te*K!*B+xpOGc=&?C%E%&#a0Rdmrs*};!Y)3|{>Yq8T8(r8Tw9dT2 zZV?-+GS7=}R%KT)U2noU6aA$!f($hT;k*G)`bzXfhz(YC#eMcS)*uJXE8tvE!`yfV z8kGBAPW-vEejj!>%^LZ}2j2f}%`3hUKX*q6`k{ z{D3dJM0y{gGg?%Ha>m2t$AtJo_Aj=HJ8lvL!VGm_p#rvmvW zJ4_O%e$q`{U3_U}sheN%+2+>g=;E|n54*)EoztJ_7P$eB^XaI97o`>F05>A{oQGU= zKy!ZJrsEpaCT(>YzqqKt?d7_Ahz%plf-7&lv`wNdF+E-J7B7^4OuQPH4V!wdfZO zN_D%#f2J0VcHW4LgHAR=-*YqYW4Hf@S`>DBkRGcWr)tqGeJF-tgSR|bIFC6sCl8Uy)Va1kq_*f^8@eJUlo-3I;;*jGna~Wb_c9SG{J9PCq4`c^&_?YX zh*r3KyE15-3zjL(^f=~a&{EHhfWGU6HFnYKn4LjgjhBIP-slIEt^vo~4B8oR0_Bq= z9r;_69N(o=VG(0&KP!a6w}A)U@R^o%iU<$;yLjOiV~2-65P`KGToL>jglm-+OFT4Mbs=bVs`@OX(w1^TM`X448=Vf= zTJ6_qrhSkKM7KWDL)+a@{+)CmN*SW3fo6_gd4-22d-VAp@fin|4)yBOy<(y_uCy@5 zRjcU3RjRiMeCs5+`eN@Q4MGRTE9H=VSuv2)TV?G5+@`J5mpc(AKS(Tb!d4C7%T{xD zb4hKExXpz&O!bfKT?Nv^G;A7avEv=!EONrb%JjEZX^zYC6NPt`3x^brDK0F(Z7#X! zwB#G^qFst_7@o_vB_DLrd}j(UH#?0rE-G?XMt)BhKO`{JwFkw5-z8#=Ii7}~l<;wM zb-rwX z9Y45m@i7KK$|U2W4n5lXjE?PT-}TUv*UrZa}DTNQu3h&bSjv%vjOc- zPFvG}W~P?=qybG%OYYWy)@JyBs!#pPC0(pX1?BbK_2{Px`hxnjHmlNv`t)AKz~K7y zQANzXUn=?z)T4K^gTK_HX*t1x_33m@5)da;P6A@6vVTiG`k|_GX+64B6^72ZYW`{U z=v;MQzk2jz4IRL64SicZ8d_67Q;+)QIg!6HFQsoiI+VxIAM+U6C!e81^RWW;uEnH3 z*D80ZE)~>CLQ_Z9@t>?qGwR^uDS6iBP=)fiI!@KLZdEp~p@|S4sHtKZ6(QcMbd!0|QZZ9_)C@#cP4R>b^(`k_# zS4sJ=l(KIi1PS1?UQ9DEfghP<&?fsM6AYT7@h^$Y_XIi_^sOglzn7+X4d5*D8Uqa4 z=ry_+wAahKPcC;YyB=!UE;Yeb*tBI$aM{FNa1AaD*MvzWxn?z?({l2(CbUe+C~89I zl+-m%=u=f+)dWTetE??{AE135&Ph#Zu;VCNTj25!X+oP_fp?qGx9$!|_x9)m8`BWa zUtuVC{itbx_a34{UMF&A8Cl5KVqn8Sv;Dpcjp*Y*U}R(ZEC99EFUfzU5sgjaBjivp z3$1%UB`~@%jZL{3D{qSbawGaF1ron5)z-5Soyc&WY(!@>ol6_hx8>B~ji__^Bve15 zyc_Au<<)VGXh??{MctFr!%a^9_E{M3*pWZ!?PA??md z-qMgxCeHuBD?A+Mdud(=|aRa2!H^y;VT#1z;Cn>ZQdT^`q zzyb#ivOO@=K__kSFO(uv!_La$q>NKmK50!^`wWd#k{3LKt3^pepP|wAv|i890{dae z)+i6>tn;Mxc!mypQ<2_i=)<0-3BHgx@)QiaGpO;G6n*wn6i!V({3KmW3l4vhwqzvt ze-Z{>cfBQKhkBb9*{cx$=p2G^NS` z_0uP*S4|F$nUq)MSX(-he|z^QX=APA@$Kp3+Q#-L=;J!ZiYMrsI>xCd>2jSP#Ly?{ zWIgz#=vaf)<4@4>M!|49+Hg(q=XTVysSm`HoAwc(x2455=pVJE-8bkn+tREXm#WD6 z;nw#+cjmUYN4BM1cj(ADbO+nz{aZROKTgA1LeH#h89eqljkz;v@#8f2E=CF6rLS#A zSMJi$sa|*MOWV=lyY?_vB=_cH#1dl`TAy^O#0UdI3M z{v@zy+5JA?e{+AiA&=972a+y5Mspv^Jn|TgeK@%5F`D-ST?FV`M5sqDN)c?f4{95+jgCbFULC|QsHWH zW6)wYJ#7ZIHDB3MN|6`#-IRt?Y|Uh!6Jj&VIqFb-qort(un7KFeO0CTw!)$jA@mEM zK?26n2*tO|MZMI(EEkm-CGMWrAb>JTS45*l7@@vxGAOtrr4-J zRfpTCiwgG%kn|k#3-h=uR-*O+W#GSO# z?v4G)uRr+}-F^L^oNrEVMzOu(pWpxFhgF{cl!yO!Y*!%$lODu9!Iw86#6ZBkK2HiD`L*Oa z$TtTPCSVj7C&hxXfy zBRO>1b`<-lUAk{`4)ygW&(ERtUgw}3`r7bq&7omFrKPO_eOET^ z55QZpF3I>Tn?4PCfVe0KFX7Z=rrD5e?8v6UDV#ka1u;V7QaO87sxc><3epUu`=xEb zF1|4HQKW~KPhOWzSIYYrW>dck@D(nrFhxRs*GfL*52_SI6n!NFOM5|(?IW>)IU*T&oZ*5r2zB+f`H(%)W-PGLJX@PM z?hIQT_XEboeu0*#K4kAyjbkbuQBB;EzGaRX!mDohG@WTfl>ZQLmCG!NSK9agWLH}K zpkdJ)K{}{tyf`7gzk!Y^fekm%X4SK&IrXzWak@G6bhMvx15I$Y|GqhOckxk2Z?|Vd zb2vuzkDAjro!?x^(fMx*LDIruTJvr z>u7P^;L7W0OWkIuq+TNcXVvF+9IhW&d>t)oz=($$Z~+4vrYygXzHaD5y09_luV@lL zy6ZJQq!(PnP57|s9Y}xQGzU!^)Xez2Ijw8Pv4qaOX z`F*Z4j$TKjuG4|}>2*5lU3eXftU1QZB=I>vamb$jmqyj4A7s~-Iy6_Y^{-1|h0{0z z{i+U)vAJf{p|M(f;H-0Ol96>ucTK88M?5~H`*{Ns>d-{rIDs#F{Yg`5)A>O1kUG>q z7(mVk$$_Cb<4ks5sRh3xmv<=DwZ1m3NOSG1Lxt(iP;FYB;h$ccc4f4KLp3uQD2Frs z-`1jO<$mBYzpm&-TYBdhIL92GgSb1ITDg}5K$mLXuWHeeYC#k! zlX}{mCu-2=HviTdbjItSUV~N{2GZa9{U~Qo!2dxF`Yg%2q&lriYKO@gO#Y}k6(k$) zR>vgs?#ZQ5$?z7wm*OwXrQIpUXSsAN#psy}cd)lhE_F`@&Cyi<`?<6<&A+i4ZB8>r zSEB=I#;|JiLz;JBH7ZC4%Kmi!_-gcdhX1Rov?0U4wkqw-FjiEh?=y@gRq0BGw@+2- zlZlE>XZk;=N}J0CCsv`u<@{r-(8Y585ml&XdE;1RC|Kh_WtvjnTUePEl*ckWxq|=u z%2bdQyp%&9Wd+aY(3C9y4^XgK{u4R0F^iXly;;V=9Qr;B;d6AVQZjnIC0hsg4rJ@# zUf-O`Cu-8%939+SnWKYyTXS@9?@G=R^{X0UQT6sXU#*dc3T}b5RfFX&g8f+R80=(ND00Xs%sH_IB-_i7p%#-!tAtW1X?LEryMj z1Y%k_!17!1Qoq`CSa$u0*{8Tp*1|Jdu0yqGpzSH-Z?OB2gOCJ3Pv~BxzxTL`YSC9- z&Y$f|{-ze~_OB86G9$_NNiA9!Ox{?FzDW)s=V(guC>;5xIy)oOAeDq0H8sHx}ksb`M!vwRwmgE%hQSowVk z;K|keWAf?q+$5wsRZs1aPoGqGB4=y$BvjwI#?8pzStAEU6x3{n{CzcZk<&BJK+lHf z8R)_4Jf_{3XM_;@kZ(h}cfNC2z8IL#zX%_h{21@Ms0g(diI?^SaH#EC6QD2Er;uK3 zcWn<)*gj1x56~jV{h}f4@FtoQT`?QM| zxQs%VSm$DAe7sLSTsTJ5f>iwr4M92Ua0<_|&GL7P^ZsIc@sjda@_R8GVK_&L(PT`U z$#Ui|e!3zXQ+(7{2^RS1W5u{+&}_wj-k^)hqnE%A+oL-IwB2r;_tB5`%q~7!qZv57 z-Khn4dl4sNZ1d7(&G_0&y&eAbUi!xI=qf**b{fYF9F7?W44m^lddY{MYzb~N=%m|N zW6&>d<8y=h=m%sTI2vj0*Q>X*_A_+3){hpNzo)Ekigq)O$jRcLb+ zjv41M;P@&&U}Alw!|nK{gPV7JU%-fu$-eIXwb{5L`a=}x1q?d+!Z;SSs58u{_aRTqSos0>nsQ7?$Oo9d+Vs)6(mHqSICh0SxDp_;zXN#AQuH_JI&L0@ij5b}Tik($Q~~ELO^kcQ?Uu3R7*IUV z=f=sjdB&Bj-$dCM_B-_AvCsdlXFO<6a}}o8a9l_gVhkeOV@3hTQ(yfZl>dhFp)A|~ zf9E^=*5)mEa>u|Oiw7o}3Mo8nu;8oxmoXzR%Uag}jkVQ0>_>>DufR{s?Ea&EI;S=0 z9zYyg?Joj&1J60aPotc8(t;-INgMq%!(%H9&}SZ8o1k;v{F8nvH2lE--oS`=_vuXJ z!zOv0nVjtlhWxbNS08wt{Qg0H@sa;g*p2?jcLc=7KwX4IB-y$r#g-`6mqBXIq00+Y z+$UYezbV%Zh~1>B@40BH>_6kA z&GLFXmtC@LrP-#%*8Wn?sfyS28*H8z#Itk^96Kid{k~3%WoJ*F!gB5p_?-*|4xab(@~rAXd0cj z`=+KN6wVL)kQ=@~+VAxsXRYDCl177k#7a0}vm-R}R-{izXCwgLvsa!B|C0Tw zm<&}U_()!Jj8G9!ZxpC_D)(D~FH4o|kU|HQxUBi82(FnTr80glsk?fNrNo?Lj=#A- z!*%fcBH#b0-2Aq^wvVQxEz^~%6I`@I3B~tj4P$%oC3gB!xQ5#CVuokCjV?>BJvJID zS3=G9+`d3Nxp$~T-mihd1 zlc=ZP7?(st{kUt?IlzVd5~w@^FRCW#?bli=q*m-Gyhg~8cqUBqgS&dHMY`R|*9 zId~ZdemCJdX~X3m4_u6kB^RF5JtTcDA#0R+5a95zr^MrUTaw?!Lch zdtr}mLH+@oANl92$6=eUIY~_ z>j!jfru_pw*o8lZnAyRubfmlJDxf`a6(-iElH*ydP0*>uzOxPfo7z|%qKi$U6G6U>ikx`DW|MT@NvE}^b~thU0Ix{=m)h}9@haj}I94TPNPxaoo zxh-X$AJMwcW2g4BX7u-C2LQkLD2Hb+^Px@tvQ(^XTsfuor-rl4kl0 zKv(!uf%&b^IOU@O{(tlchzWuE2LobHAZ{2!W-{n4qPP5GHF{t2yszOUm-khCS#SS) zS^X(FPpo_m!+MY zC)-u@OEr$DbVx;~|4VDAwO!^sEJQO3#fu|cxMk@a?4o0G)t)Z=9L%kVSyhtY*%^Sl z#K`~1hK()W)OK}o(L&9M@jdQvAiuXW2S~G=2F87*(*U%OtJYqZSmdf!d>&>JA8R?g zD|lckfJ=N^VE5rmk;KAk+EOnPy?EbG5`8BeSa;8ep#U&1%JP+!W-}D)UkRIm?X|1b z5%F16U82Fj`6E7ytF@uD^~;JMMyUQ_Nb6zgor!qJTzv}CH`?w;`WL$~M58`hzR45p zNwV>jEar%Kwlf}-m-|Ziq4X^_1B=xWoAHxPT(DJ13;=kT0=F;j6N%U7*Bm+kPlLfx~kgjjY zq`?_n>dXuSrLM>@Q0Mjx1GN1!Zy!`n?8(gOUrt=%_iCf7!>{HK?@w4hoUjq!=xGWc z_!jw{G8?YB!Ym38gAM;B|B@FjjEDnbMR{7PmOEaKrrHdo_u7I;Pjgo4R*t@Q;`-bW zmx1KZF58|=TI|+7EJx?uf&TbcFSj<6PI_7+eaNd{&Y+=&J`GoY4E?=ww7}4R&Y**a z{#6F`3+f{?X;o0af{Q*uhK7RrKJ+kI?Ny$BN!}!(-tFlI>OGPk=v|I3r)Qzikr_HF zn46)m$q-#L^}(59Ou5?@mltQs8C}YY8RgY^<;C3cbz;mYl^5`kzwA7WSAz-?ym%PT zbK2gfwk9u*3IX3G9)`wep9o=@RLdPs;lo9w3vGU+`#UR5N~YP&i(i}ul3%-Q{gY{i zyZpgqI_h@JN~Ry&j_r67Ue|jk(`UNAG)QZ8{o`cXuIsRKW_xV!rqWo$_$diN=*FNR zEjJkRJ3}88#62~}?BUb*1!=#}wlD>E)>d*$wj>#-J(LufmQ0tEjQ&9}F{m#HiZwxf zcTfyS*7v50#mUCk$>L=4?MUxRvF%S0IGnhYB1Wd#cBP7ysea_|;77hA0`n^#nRoy3 z8X(@5G++kfiqlLxt~i~B{2#aJxDj~K<|pcDH-_7BRl_;eF6P+v6?U<~o_X3Xj@mu3 zl1&}g8oNh4WG|hS2RFga1473fjP4s?_e_#`uTh+-qwe{tVsef%g{hwba z4LMWm`42ay#r5`JB^lH>6FIXRV+}KPXBXJgUF<6KT2DKhS3Kugr%u53Z-S`N0;8})(hkRe?8M|#S#QCH!J_-|G`DR& zp5OvYCkuWv>$B*aB1sR~7UJmzSUoY- z7+H_u7i;A|t>EQN9aj^MN(cdtwkJDk|IL^7Ih-hS^b<7c0lDqC+&2$WuCCV z0YNbMERlY3;+8RPwNltoeSnLWJ6)HYxLsxZ;wy5V=kBelj)P`-?V`js5hHAe~{xj}N_wa1;mj$QiQ z@n7BLSp3(uNcNIlBV{o#F{-S4Ij)S2>faD6hPP#EP-Fa%yblic5yFLKeSvTwy2mQSN<0W%1mDDfyJ)VE=L*NilGrU&+|t9Zs+c1b z`3Jfp;%B`E&s+2nnFx=VjK>2_AYeCa5P{(u^^<~^G&~~eKdC_-dG={EO-|XU(Mq`? zyqa=g7VKl?7?$7jb_40|nlThMG(V%xe<;UW(=i=C8|KCV?ENP>7kN#;7SC>V@MEBh z98h(;kv&IoAw5L>%WwyU)W5(JWLqGRKCA_Rc}c4P=uih#Z?w!A65Zh*0H=1W%m!1$ zbbcuSuYOL4e@uqgd!3xq&yHKLycS(lT*zLo>d3ibW0byjE{(_ZG4a5Cj!QbV`52lr zEG6yG=?nGAy|{U3OB%1!x0(;>-j2V|hDX534$M(bzPq^0orL^tZtM$>xed@?a_h)A ztn24=aYip@r-wxwx(7e^kOF7#j{lFm_kfS9xZ1|g+_rb`-Pyg{wJWWvWen~V8+RLQ zzzz^Xcu7b?2sI>x5K2fefw)_)a&L0)UG7!xz01A#io1}$5; z(54V5T)ATPh<*v2{CC>%xKZ~iuv1lkTYKK^V2=&E8#b4B+4+7`DU2l zOYlOZ*F(xjlXX|Mt|s+W#X|9F1)v`=Xn(Dz-7_MC*0O=7;QCZ$Q< zQzkf(z=lp^)k@hWZBs9zO_u9n*kT>f7b85_v=Bep#5lTcTHPJ2gQIwRCPN~EZ6&iq zcsxvs!Lf9%BzCbqZ5-TYLv47hL_2)i!3lq1ahEvk!G_?qeKp?-PFFN*B&T6|7~%QR z*WNTD%Y`TgW}eUtqbB(*p>v(GTLR!BH#4VHalCK$ z?!fI3weUK3Lo?ycl-7i(U!eBV5N!#7*qNq;tVv;791>J11>g14yYESlzUM?3^SO|Y zF42P1!nDK|=oY3{_AtT&?SkQC5)VQT($5*V7^3!;bA1S!kpWUx2==VCXNG9GSKw*J z_+LTHO+Q$Ds6~v0tVaM_7N+S1Z@%{|_kI1o)O{h-6TBVWU{{!92e(Wt3<&qj0$n;u z4{x{Q%e;r6-HV%x?Y}Op>w~s^b+Hlu_n+s0pg~T+!ZTJD;?T>gg&4?tJ7M|JvBkcw zTU`W)13(T1ZCRlZCIy%nJh;a_4E9#~Bzz}gs zvj%e-jLyetj=lh`l4C>`aOxq(`FYdAL!G%b8N%^<#`%9FzaQF8rPCMhH_TW-!v&)dp_Oj1pQ##TqjLa%H6^uqd>PjRrL*W0{?C0 zaaw8%BfQVn7ALa94of8GR##|P_$PP1*PZY1pIOIBw}ZI;E}8lF-Oq<(?gAc6a}wZj zayMzd7wc+Y4Jt(QEeQJa90p>xa#vq39pOTy($VtW^w3~SAk~Jt6M+Dj;&~Wp_IfO2 zamLeJjG?GZN36Up*oT)iICs#NX*lnR)r0shnzllN#l402B^rcbS2Vqi zjom8l5HfmB3%tD${P7SjjEB#8;jU8~FM&_18m2c%hu?@bMJI(QFJ)BmFptgGAxP37 z@9iZU2v3&FP0}&EJP04LX?=BSt6PZa4GJ^RQ|KFYwo<>ls7C7n&KKVl`M3gd0By4( z+-4%YNeKxCEdNt&h4^{myPnhZ+ZxOHY2OvTMuQm=Oz`0!eVjZvG`|<`9?aXxu9%k7N4CKx> z3o(Oj)@C8vx0c!fpuuDkwNW3)!n-A;1J(vCr^552U^` z%$yrFaK%3>n2$VLHR>%1O?HNCB6_sE0^u`?eVRsB6nyY;Y8;ZR5XgzsYU&7$x@(qr zTr*Z{?4ZW4XzXn1^1BG5qWWa%u!NBXWA7igCVl5OFTKVI{U+?L@aG?|&|yjJx27rf zWrB{iX!Hm^z$%3fP7_+|Fu)QA$PKc;r4HuFnn#8AS<&IYwP`nP?7FRlo(r6CkI`hj zW3rTR)lS*+?+)2%q5|=8cF^|-hqxQ;+IBnJYDXL2Y5e>Q_%5I{yf2OY z>ySeGC2hSzw2h71B4m!>1Vvk`&{PGV?Wm%EtFSXA$`AR_51M!Cv08=i+{8MA zXHM2~70fvt;rZgF*P_9liU$7G{oZnG)jx3Pm5enKTT-+ziLnWy!F%{`OY_}+A3yH*-7lG6u=*A@ zOolO_4!XB>l8NvRNeBwdEK4aa-iJ;>1_$Lm#@)T??<;4%pZxi!={PKlKS2>p=XLo# z_|r$h2G|H9yaN2Q*qO9qDx^ptVLinFE>c%YY>-q8BMLe4%!>3V;REb_cRr|bQF=G9Xn zi2AvTl_nnE2cegLXiOPd9)zr}I4 zhg-{yr&gZ%tbZc)^JydFVKDO5rg$0@Fxth_(f~)&K0%K7%|Z17UL5r7NTAG^2=D{L zLn4b)Ve!=Ya6@ccVnxD}vFhXm>J}#wZiq`f7oqfs4<%m_@uAEIA{=iV6K||5#}36C z+mqPMc#iOz1T{N>wMzUD;a*7%5Wh7E!l*9E>Vy;bh4awN)tWQx_lw&z5BBF5P z1AL^!`bht9_5drJq=Dh^qU0JlilAk91A32dE&N!of_@|DNwybV+5 z9zA)-<1pm;3_?V^XV&Ae+6nZ3oHja~Yim+_9+_Q}MslGVy5)2url;i__Bf5P#EEc| z$A@>Md3|`t60Z;MxZ(BT9b1Eo*q+B=d#KH>fyUuWK~@;<32k{=O7k8FmuuefF}hg3 z`88OCR%kx_Q9Aap0I(mbtPQC}Cn}4*!kB8>fX8ST^z}en& z9t*at%{J7~`qyOFYH)a)WD+Gx3+bW;55FQeHiXfHQczp)Ic}JGyj15O3100Hy1`y0=q)zB`-{(TFMyU zr)BRIH(D9N6N>k;8(>rfkEq^@Zg6WMctG=>hlRI>;2xXztQ(yaK?rwFyCK{WM&eUU z?Wa_M%K4d?_ z=fmCIzGispgueyv3C}X{ERjdyTw{F_mosR&b)(CVIn8O+hxx#&VoN@rQdykaE znNVArN-J&Rkg*YD(d7WmN=_?B{R|OaWq8|_gKEdUFomXa@9Y%%#_8-=4wh7r!zpyb z@*zCM?L*GX-2&^I?Qvd7q48d8SqiQ4IkQq|nBPiIp@jiwmlPTrw2mj!!m#sbGR=tf zA^*d%qExqHt<}lYIS#-IS{Cn_o=o4yHyWHw8xo#HnpufHGN}_!pf??#`Uh2S(=pe>lCr{KNwr+(u(J%Aa zBZaa{=PWyokepNP;Np00KF(#b8{s_poD4nV8QZ|<14#dV;TUr4a{#XV@J0u4I^c6? zFE?%Ppec%bpab~jid_*_$DvVnYtObsjBd7dP&fTGsN{4H5~dkuYX|i-h9Jo_(^wDX znaS5WD8~fpIpv$!+~$LK{VDJq6aMzGIVMDd7R+r|D=vUCd#Jxac$zjzf~oC6U7W#3 z8g3-oXw=4yE~YiaWP{9??sSUi7~CgTWdJ<{*dv@*hYrZjVRdP{vP!;MhuYh{%W7k- zQRmmD6Q*~1ZOU}`JJkjP&pWy{wXnQBYtwbh)3+|oa(l)lw3 zrU7A9i`Mzqvu|p{w%a=#Jf1OA*p6D%JN%cKwWww6PRxwE;(ckg=xjVzL+Y61!+RDd z`S6CTNj~H;G1-U5jwJi=)Yar;ZcH_g`%uV5HTZUn;obP zZ;5wyN}|n9DGZ0=DVTJoDBh(b7|zcIS>5JNj)_Xrzs zxKGB?di(A?GU{?oq2NbbnEWSc@e+eyTitu zR(5Cp^SJt^C*vpZd$lKYu*VO@xi@LVXfWVKIW)zhAQU>#hVvZTee4<$M2QsnOYBiXxkg`TFwrVKm1iCa7 zDrj+eeK_C<)O7@_B(CO-fB>Laf5SP!4O=dX`v;b6=F3913{n!z6K2JdXIQgh@pGxz zmj~??@8x|&e3?F4z6*==UH9&Hj=kS|?vq~N%MPN61^*?OFZ(E7h$msuj40GK6~ZYP z_ej;~?CdFV+EYAC} zUI8q;gE0jBZK7$fe}`H`0IqP7WCTBbSP$9GZkCGnM_@R{>gx@ zZ6m2Ts&yzPwTZUv{m$P4qw!DJF2d;<#Nw~q{Z9Au)gs#WuD=v~v#RH~-PTQiQECnC%6-y|LU0Zg^uiEIn-l zu;%S^8t0wtgtMsBg=6JzdQQ8Loco~mghy|4j+nkqKHAAfIzPcC+Qlch*ob0&95SGP!OU-bR33|%)k^JrKd7m!?LO+D#VqpCHJdrp4|?H)sQY2l-Ngr_RLVpjjdmvF zd%^mic*9F=t@s>pR#=g9Uh3zLobrMcB67k@8$FT3UYhFVo&6yA;H!MJ$!j6EgI+;R zpPw;NI4z_}2v3rnLxM0>La)LGNSho4d5AhD2roNtPYl9ogned^mY7dY4}#IciSP-B zfX}qGOr+`Sb}kIUdhjwE6r_D#|K6Z5gkBcJ5y_4lQ+*zUSNlR)c+BURjR*WDV#fF% z#@+3Hj_?tG3_y5(FUpV+_!-`QCQuCt4+KLeV%W9d-|u#Cu};>RBm-)7N`_<;b@-6| zk#Kzf%(uV-uf1;$Z2x3_*#ZEj9S+?iO}+y%iqtUJub{b zd9E1vV92oaQNrbdKGF?m3w)c!_FMd{#nRmzF$3MjIzGx!Ini9D(`)8fo!&WwhJd*> zf?E_p4sjxCYm;lUItmnFFTA+mo4*DyoB+gmy7{TUEpW+4nYMNqDl;81_%JyR>$;cD zIz_mR3-Tx0=JBub(|M1-ho9PdA42?OuZ5VcUJEhDz1B4^<#K1_lN%n{zqGyq2V5EKh-)Zc(~p|$qm zIGE*W`%$KXwI@Xb9G#6EEUG|+E|sg$R31`3FS~f z#X_*Xs*P4rdMJk$srn|BttuMY`B7e+wkShekX~nk0!RL+uLH-W-(WkcYB;{N(mcCO z8mW~#fMb~^Y@PZW9wZ!QYCBC@0Y@yLL^5B;3D2P~b+CDkyDb{^5uftWU=_P1*nQG) zg~O>+rt(YdLsbjWqt!a!sO)f2X`=JY!z4HbcCu%7!GKnBLeDxt?!#~~Md^-Futc*E zwOK=LqTjZ3n||MQ6YOI4;|2TKn=m+SE58M#+->=-D*%5g?;Yf{Pd$$|Uu*n!EmjBf zw}apY$RYfIrSWlWu9HnIT2B7=w|^OJQ9^(GI(xaQHcV%YJcDg=Ix{b5@J1idUX>5SvGtpw| z!rAtK;oO8IyPSTJV`?`Wjh<%y=h;`J@YJ~_>YJK!Vo4aK=`i64_g zmq4HmlFbOZPa~s?!GCu}ifJMLOk5oead9;+?CXcCrD0X%yDBUohL>ZV-BFqraRL*V z6KQf5ub&q$R?;I0z7EK6d!kPiXZJ~XX5&Qt-YM$-N^6YcQGj_Tk`wK+={n=6` zF8gIL!N3L)3|}*nu~9=HO#(~S$sy3+i2GfKL!306v9=?b-UA5+jbv6Pe&>xWcwpHm z_L)dGdo)}DV~QEWv}w4UG?ul9K7Z%vTQI*B-!J6DOnDI=S;Rh=#DQ%6d<2I&D0LX1 zW*T&}U2PoEll0eHz;BrGJA@aQuiu1QG{;;#R5)K2&o3j5iCsL5LGbst%@G)CTtN7; z8lH==&D9xB_-yvuVH&49&&ASa-LVDk`t)C2hy@!_XgR1;>=Us08|jKU9Hu_jJHulk zAQwpZ_CCkTFx>dL;IwaNi1!TBElhu58Xx8h!)$g~%=zhYd|iYMjDv8t@U(v~7G^PH zD0)AXsh{*g_f(V*CXBROO=yz}Q%(m&=*Ml&5y^B+4?_Gt*zOpcLd)!YG>D3g)YU1p z!{D7$;HA^*2zFvKa4VUvn(mBbxO=jCC($vda}xZ*x!%~5Omi%OxSr{Cv`7Z4rzAi zaL00D>ALeFqxCAj&I%mRY$TY?B5Clp&0dJ^b2wom^h?1b_N2QZhjDfP`|96j+OWmn62oX{rTYf-`EQCz9A=^RRog z1uueIOlS*_=@I0()E+@zYYq1ygZ3JGQI>-D!8I4c*{tqzi8_n@F3M2h4#)Ot6+2;b zo(k(SA^BRYM6iwQrCNv?sXiS|n+&TZVTY+f=$**|FcDb+2eN_*F)~wzeGLvl(R7X| z9XLGCy#81j*QM8W*r3BXH^ke+qV5w>rhDa##pRAd2J>CMr5*eos%ie5UXJ{OeROww zit%v@PctZmfxa2 z2wUUI>L-NBc!BT}4D4aiJ;-EC{e5~wZ$^(od(sLMmvCiW)HI?W6#0ve%D8wf3gYzo zjQv;a=S2ylvd90I{6UMhxSxzs+`B(kr%0YCWQ*z@*)6{3W4@ijMo|TQ`*8NQfOI%k zNUXaAx#`_+Cguro(f1*lGjyb*mm@bpvdWQ>VDXvu?8 zD#C5#Ky;3RZE4cSPfeB~3I~R6s1(7P-%3tJ#5@`9*xAw|2o3V7NjUPq|I}W=u9x$ZMvuRmjYNOX1E!N`z%z94h=pk$Eu`|MS+};E@dm|BR?^*+@ z@#BW~0%+C@XqYCM5pX#jG$T{OaC{tpBn;Ry?fjg;=Qg+>efAfS2m{!{*0B99kUhNvm78o%anUlx z%yZH%)g0@BRc2CO7q!tIMvXLgx(n`ZD+{uT*o#hTXPX5fZra#&!!3*NIu%qB_1oW&yQ0=QemtdvE}Q8}>M1rkpYvp^9s zdw^haVbv2cGgJ|?Sq&_AQ728rOwdHkYAvwT1;bVmGuW1dm_@e03>ORnFs^B$UBu6~ z&qFxJFsC6OQ`B>jxdHvNv&%xvV3&oM$*va*>+rJ=ob7B_m)+xRP;|Iq#?)J^{h5-p ziw&p}QQ76Pbsm-)(H+uw&C>~-IGXVHovm>^3Jf~#p49*^!?+X}?R9APb&{vA4Js_L z2b-#R=76z7i3Mw0nwEH01Nt7)fGw&6UVTw*M}MwN&v889WC1vH@vlyf^|u?A)$ z5CO^NJQJek5DXy4DoKb|++(507r~oKEVd?nR6&HW#^8Bimow0vzBN)1>|+8_Aj&6f zt5zbvl}sC@!eo_0?$=qu)*X_c0C*_VmB53)8O^3L&6?*lIaD5x^bK#6%jZ zX)6=yg4R#of(t`imq?e5Uk^cx9nNb`+iEYyQ@!fDZ#Aa{ z^}{!s)6V*xk>}B;;&Pi){!^O`s{i7bnrm%YW&iW(QJT>V(_sK6P_k-|}FX)>Ohf4dupi6&qquSR$ z_H6xv(mxGv{DO{t=3f5=b^d$&+Ak>c?{2(c@!uDs5P6>mmwiDO{t?Xhg4+Fa1*#|7 zQtTy5_<8)H*T6pi!G)goQHsE%@F@(I)CubtTULB~g!eRI_32rnXDcq(ur+Q3e~Hkc zTvutZYDdggmG=^U2}HQHX78%8!J2)X#-?e;LXBl<#g_JhGM6}~HDR@qwaW^7+<#q` zmq8XL%h`Axh(#;}7s}>wg{_wb<@7Dteo$d;mH$G_aV4g;T2lO0M&4z}1WUZT5qqMl zHlIT#xYhw)Yx`u*Zpy|mhdf`+mPb3}mJV~dgKcow$8xsA@d9p7=CPajJ@5S!d!wp0 z#?Bh~huh_zEHu$BuVPkbyS$UN!Pna>xe;?!3gqeXI>mcHm-7^kyJOXs5^hY=!JW(& z>gGT@gRDJQXLIcKQ3hLLe*^IojL=%6#2Yb(0EdS@a6*1_g$gy7fE0=T01gC#P0)MK zjT2rb#9A%l;xMZU6>^}TiX99j<1)33ogY+*8tK$URG3{&WE~A^+#h2^Ga139_+@MNrExR{| zpi_6fFSnv%Z0oN4;(1PCVI>>h92rf1#sR&*R`0lW6mp3WiWn7-EI=4Dmu9haxNkZ7wj>4vk!U=eLwT31z!yBK5;i{#jR16aHbn6~dto6(tx^?xsh&|WE&<3VlJ z);?^Z4x<2LR0Ay4lWgi-IBU@TD?Kz_$BMU6H+p+$u3=8}f;JJ1ptRIgeYcNtU3{dM zhFDh^E_!;fUuos#gS{->Yi#hb6<)_}FWc;G4B)@dvDL?x_(b$cpK;yCE){b`ke~4y z`{i#cVq?~ptwiSQR4>AyROkY4_BPKV7dZVgF+ChM`bnd)x8qJkPl!eP8B7@}v|tPM8spcFqJm!5A= z$?S*>hIkSz@pGQV>fjsyEVZ`<20jZqhrq^XXtoZ9U2F{FmpntOEd9zeaLI*D#5qgP zdxml>@DkA~Z(!~-wBNf44L;Ey==Tiu5BS?YL-T`y3r(vzpM* z*ubDBbTH0;t}z{q`0%PDaK6=;4k!4!G^WvsfwaanBxxfX(U|t9M6Nzf`^s^IJEi)N z_10AX&ZlWWdHBv+mebR>FJ7md1Ja(k>d?*D)Cc|se7f5 z@i8m=P?SBD`RS+VWMv?!v#W^I`Bi)(zLEBN|#=+}%{&htgiG zo;tG;U3-*wXhee_<82y&^Gz_3FR9@_+mQO#^r8HdYGMvPRWoI2L%RB;50&UxO9)KY z)V6vxq}{a_Al#>}b+Q4itjmuypzU=zQl{18cyxTd3fCLZ>3SljPkmANQT0XPXVe#k zUs4|#->NTKa6$tg%D23MDB0Eq92uW(&{NHRmfdcQZ2}E`h9f-T8KD-L|EvhFezy4c z7x)x`bx)VR$c1WKv5rE$r5cx2c2o8B)mVB-J5eD+_#fl``oZ$A2l3SqQ;3rr$Y2-S zN%0Pb4T&OvuviDa|M`rs*ykj08bjpaEW-m@POFbcoVftdhtKb=Zs29~S#H{FcK z#(f(dLibE|Q%@YQkY6A-^dsuG7kFXj*IBAK9&TcnuE_Z*j z-os{jO5q)Uygvx>{qE;~;Rnn5AXhYa6W|CNQiXCv&&Pkl{#?9o{ZxF}6YP;h4dxV& z*m^PfZ)OhY%0hxV+I|6Q4E7SPb6ISL#CjH>?9jvS{EKp|{Zwq)Px74|tvl>Yex&d2 zeBg$$sxm2|IS^ft75(RhnMNr1nH zkLk2nZyJq*eP9E!Am_kyMPb;Q#?T*#{$N73^FdV{X_+|*TBKs939)ymM>rAGwkF8* zZwrq9(wPPGPbiYEN#H88u-CgDjhQN0qh;9TqB9(qx-gh|6*KL^dz}O!Q{4be%wHDv zJ}3*${!hGWjTAnQtQHOs37H6=l>ET%Z?*HICWJ^F;U30%h8t&0e#2zBg1V?+OH#0| z+B;$}G3Pipj{NoDduXlf&a+?-?mlYKK;2kv0S{v#W(V)XkZ6D_R@`=32)DH?JUq-w z#bYNdE7xLIEwtC24G+o;I|{VwD&|;>V-pL(#6CkYF=?DqT!^`*pz#aayg)`^L7TLL zJrs?r6y^2eCm}BYxt2;xnL`Mnl+>9j!E6!XeM)L;6~yDsqv`$hBGHTHDVbWb)zUiH z&B=H7qvhc09lH|A1PjF>$#KgDiy`}Y8{|W|(jm|cXkr#ed7;ZeU^XaF;oMa6Bd+vb zs`RyxZ(Knwt}xFgsOO~WOB|qc;}c*BAqh0qP20P3VP~O(9Xk5W%6dmxareIGS)2w0 zy|pXf2{}sekP~M8&Mi(Ls;s3>oCcoHbb^E18iugKhd4od4OR$R4?vHTI+z~BXP7Wc zETc}~q$8Y#@%Irz_)~Li-C41|oa0(<~z%>}Sqp5s23U=Yej~--61ur(NvX zju;8EB7he;TSQ<7^M|$(;O7FD<7kW3k>O&1r|H%>I_dSU1CO*9@@twJ^dP&fF|pv6 zZXK!zuIC*g4^rlb5|Q<;un4z_bt612wh6*8I6}Bj%BGhFOZQu4ttaK}$YMlZ%tOHt7-%!Gfj3Cuggiveh2+m1=;s)wdZ zO-_K9UiR(qfIfk*_JFQGILAXXbx%JJ&~bi*TbUj_yU*ci=b9BJeUeePN2|K$};TmU-+nVNKtKE$Nj_^E$;1rJ#qTXq6)S+yjf)CQCiua+? zee8aHDj&E2fNb!0hV_WSuIBGIg49zLv^?W%&bC2XrhDfFF`VA+8Kg{eJCe5H@wowT zuwm!h$?4o3plMDEjxd%wv+z;#+#X~z-CGec`M#A5&#nqs$Y*CjNNDpj{>0ub?87Fo zz@wQr+X=ojb1_^bFsrANCP?)`@^o8r!JZ!9(6>&Nav=A!TY1`q6e;c1Ayh3MON(1YWq zXRQbGa&VLf#?BT_lsn}>TMuUZNi4?=2AiSs9^7%fi!OK4^&X-&Si-VK%-bF~A;Hmr zjboQp`1R>8rn!Q-y9B1J^m(m}>(cX4iR+KqpTY4D$*N=mvwd8CZ>S4Yhyd}^aNB#E zoY<{ez3>%vp(a0Xx2`)W&u(1-PnB^UY1;EIfbnkSwD4?Sr#0Wj7C5aXF1E#)i100E zGQuNVB7VBdcjv^OYlatLrQq2G6)Q2 zsy7`hpqdlm^O_gDY76yd2&dVr6yz5SbY~!GY%6>FLoy>ji*PR`dQW`Y(rs3v4NA3{ zkhcj<$WF-rY``+KK^HxvS+_O18I_@x?kl2y{l|SjyvbfC0h_wXKHu(uFwC{uL8BG# zdk~Rj%-6f_UcW;^xAw1GyAwJh(PUNgL z$G-0F82az=`|w@!Rq6H<*CoD(z`Pc$N{88a6GqSf{yJx0H;6f0!HvQC9qI~43l@%;1e2(Dq5rQT^ie= zl{jOTHHJ#I2`6;R*Sy&D{^hTt`UP`U$uy3Nml@b321!5>iE`e1-Ad{t!%`x8KYBLh ze=fknSnsg6AlEKjOry3__r=NlcgQ3}o~ifY9sjZSzC)f-roG{P(qkPg6Xzq&by^a+ zar#1Amk8hGJ%?QI0sRB~c&_yC!kPSF83W`~KLo#n^X&Ixhs2q;vIo}kO+Zrd0#18< zm_C}Z!Nt$KXydYd1H8_D^`VZ@HiGFF0o-8vCQIFaMq|z~9sbytOZqX;^ucui zSi>b9qTLhGm@AS#Nv4j9K0skT6sVdr6?K!sW(Z|;VOJO5ju*IEm;qM{P!2`M7W&-% zYyrQky^&XC4`hE$^ncO|Zx-d1%%7#I2{>%>x7lx9ks<&_*k8G=+{?V=(P@@>+m? z?)SQ`BvYPGWHG|;T9iyVe(_XBz?zp#mjfccZ_qU+nWhEJ<;fsEna$QD)3p$vm`uH6 zUqrZn+}lXhJJJy0?GdquAD{3AViqU*P?W2QKD=g3QWL~nO0rP+*2xx-r@fOc6meAY zL=**eyjMm5-t|{aIFC5M%q0e-2gBsE20$)-u>xJtpGWw*-CAZ)C&NObL578xOv6Ib zMaIty`h|-=CHnLVdMn%ybuZ%k+9L-I@bP>B&AeeDxX7@OWRuYZZ!4^q zFi0AyShEz6#s?8s*50G^nq2z2#2Vd{HNL}BIWEdmc~b=&^mw%U1=)?-wNRb`GDNX( zbA_tiR_PnnLiBYNf}4q&o~5xF#U$v0Pogmi=tx)g@6{SShH4NfU658FW`+_#%vz-$ zw%IC2@VKhY5a1VUfJXfU`Qb2$CGvZd{iaaB@ab_-l1lGy&;i$a5eg|qo2x@s zbr4zKP?H8BtUUn*ho&Lj4nb#`qj3a}+q4XL*wQVe=&$2rp3-&bvoDt7FNOXvw1Rcg z;Fg?kQ~}WDaLLtI@gSz3s$ElQwrU}~UFDZlc0>gpr>mw9)>xlnrTtHQk5YU0XnVFm z6~Pa?(I)s|huZLc#0h7tY9VHfrVWR4NX-p2);?jC)zxMpIM{~v+-%bi+t}_B`Y^%! zUHE-)Hn|~v4F4%-M0?IvwAJWxicqAj1*P&tbWR-&x=+`T@Q9u)Hl-ZFD|T(X0s0mT zDaMM?am~=%n=IeBJIjc65VmpcQ0{i@Q}8lxle7am?U4j_X0GNz43Kq)bQnH=nmLRRpv+G?A)~;AVqxjjt4K`9n*V3>oqxaZW_O&iAa7+s&Ov&>R+gOCFi^yS5DwhMhv8|I>6%2EjzTWs10 z7oKw>d|mhUbkR-2i*Q#H*6)BC8VD~mjXh2{BdCb*42QniNf-GW2yb$J0PvejU+ZE^ zUB&wSe|ior-ABeU207X}jLvh+Ga4RYCG(P>E+}vH2+)4bTI`3Ck6-aow(Zpmek}id zlb;3~94TiSfw6w-Wf~(8V_riJy}8xPPkXtDxxu|VeYC~-$rc|icR`s#7d(k;eRLic ze100@^C9INpM`hr@fn>1?3Ryr^|QYI8VK+4^Kbm@wjaLMSjPb7ojcpbGS;{(#;|o1 zNVu~ghXL)rWNwQA1?nGrhcIKm>+TeXZ zJ4iEqAm^af{&a>{UJ3Y+>8PL&Nf!n!6lhnlH%kw(8!@~?h_w$vqkaE62|bK}ZyaVO zIF-*bE5`;?f2cS>mhj?X8^oL)(41wo#oyUSfHuJ#jD0rLK-YY@GyGi1_KpUGa`ruT z;Nc!dI7hYbf=RVzUxNuz%SHNOx{j2S^;F#5uJdbx*I!4tr#%%Z=h-=?&W(1xjlp)< z%VC9$23r|LN7n!4WkH|+zIn35{XenSAJrxs?B#Se-H->$F_-M}47o9!=g1Z!(v+5H zv<|8Wx76M|YnS`k-aKuWuiJ!RcY)nG$z&Vs=2(O6vSYtD%dn3z*&^d@L{Bn9>&;RC zp#OV#-!aDq{|=PpWmY`{4BS$C2^XM)n4-bOw1seIjpN2(%^0t-v0_`cO4E00Y}38_ zrV`(y^qf`tx)!TaNjsvlI<8ZS+<}?f0q9`bHbtJTm`4ObwH=oBSCm%~zg>;JS_+tn z{dg#f1LVUb*xvvoIGu^$VgX1Kq1d*l;R4d#9}ieI?(VyAZ9fzT zcLygqnH>XuT;L@4$Q;40>Kl7Nn-2FW@Q7U?;}!d8hy?KGnFGJZ(jd0n3lZF8M0HXB zh^TJ5xztM;`Ygn3wog)VyN}Dr_0R@a;2^~tS|Z*c94wkg^MjFq={?Q2!MhoRbd>t$fhE^+_oAo#=Q0m z_Uz-@8XXwGWxBusF0=^@;9^@8131AZuT;GKZ1QB)IZJ0p)zBcDd|s=7+skbBDLUM3 zzJd5zdeZ)q#`yP~)xHz+2M(EE2jH)3n8b552trL*7|aDR7I5gYcdrIsbQfZVXnct9 z{cb^3e?T)XXuu?zZEdWlEn&5dO|#u2^DJ=|{IM81P&nfhJQ8Yzk*cqA6Bvm2t~I8! zw!p;3V4Zmr$`{=UFxVyiFixvmcyjB;Fn3vt@IsG1yfLlx#KSPsqwmHu9>H)q&mYKp znzH?{f}~zCp;J#m$C^6+DQXqV4?IN!WBKN%Xh>Y3S0kDk@%L{;S0aHfjp$8`0Y273@SK$}8vJ+=zOng2|o^KJ4q!hz33)9=`EN%JzoTs){eSAwL+Kc)4o7~+#qW^-ApCF-lJ{~IP<}N6_r?W7E`xrmN zSRRYODPBeaq$oN@aHav=4`1`5YPI!K3k_!{y6IB4`9R5-k8hIi;nRH7*(mX^6AuQKJ*kg*n$VO)^bK`)}{2NZzB@77Sv5k+YRNLOXpPU#&K z*0MyJ`^mAvr|qj=4i27Gpyb;!6>#2;to+?s6zx+an}+PuRag5r4P@F{;q4kz=$%bu z$#khKv8s+;{bzgw1G)wuW&s0x8^e@$mI32lRQRZ_A;6!e6o7b|@i*A7ir<4gI>;w7 zs=&uEdZHqbQ!0)=@4hHj$dm(&?I@NL+5y~z4fQTEsLmk+eqDz=?cK|w$2^Ff8uirm zN63OSqFzy07gZmmvff2RCn&GyNgZ3chS-R_p?3lx{;7g7@Ka>wQO>+&f-?_W_}BF% zf-?_%A}yFYB1)|f8_5}hGcS(;rp#Iw4ZY}C{bBNd^yde&adp?zzosUT5&lk3WAsk6 znt0zhAS*%Ccv6!76Kj`HEn6TJ2>Av{b<2EDEnd*ZG;VSJ>be}$Mu;HU5K=>hNs zKE15y^9T%Vdslx5%kyCj~ux3Wgt@lF#)iN zP)b;b6q=;`TI7`vKGSK)YMSCc4Sa?Y1_&re0fdgaa`!e5U_QYu9%}1$XM1S7I|$Q& zv+g^#IRY;=ggv*IP4z;y)}IaZ(oNaw;>8w9L%6N#M0lv$7+$RQYZ`DxXKdb`9^e_Y zBW_Una-`{Hhx(J!9RhVU(-DES!7&F1fGCf@G!Ud>g3J+z5}iJ&k$5=IO1o{Nfv-0?w^IXtX{`y^A`qR(zgL zGgS}5Z8g4KhY_Y{0_;X?93rA?wiJLyb^9otP1cRJcD7u%Z_?R8-F{kU-$r9@7m16a zd%WU0Vj-XZsn;d;Yy!{T$3)ppKUnG}nEsi-)tS&p5y+tzgF50Ra+g&u$p11@S8-@mVM{+_vCeMoq?`3{|Mt$uiT3Hz=QClCvjflXV4oj=>pc1I`#4-@CcsnPEKR69 zx*BhT)oY;X0%OVqb3an1aRWAOJ@_9=NL<61J?XmHfyyFl4awXjkVCtE;{R@>qEuoOE{{t4f^-*iBF(!oKW7# zhNNBXiXOJrW}UIIqb20%rRrO3FF!GAzcWa1X@i_rd;|Eq`IrO!G@1zj-2&mF2oydg zzf-CFezIN%`IR_Nf6U%}RNLcZ&-xEK<;&9VHaX=MO86V6JYMn5b;^^}cM*SDn=9kS zNQbkJ#b!9nZBDk|VMojvN9d|kp3Z9{e1TU$c)XJ%Ji=w~X0eH`H;}%M6`E<4mU9SQ z+z5xZ*B6Z%6G83Yc*o9SUm#`SB}o=%oDdxCK^855iZB zmp1_ZY4YxfG41HFdmSFcz;|1wMQgboX?8h1=;9My!k}oCOQbpDvR`+xRu(^KvB8#o zoW-&%`zniNM`QL|e<|MA#F-xg*$fovXP#r6sZ;p!sw4V)ME zXhED8FKL)X3!W*^TOOD8$h7N@%pwwW%>XeWn;HLEm{+j^JXml8W%v;&y|dfnL)%&FE{PyNcG!A~DGKGY_~! zFBI79{TFC7uvh!K9cyJ`2kqHmKt1>d!re3u0-eQL;4px5Ha!a>O`Ew3;!XXZxI4~p zcY+PPVP+fbTcgSgsTyuXGjR9DNp2V$8nAUVL2J?|=+or$fj9wwOW&u+5Ch02Z0T4sf0+ z>;Ts~*Z|uuX`(4#ws%9Gt;`BYwbQi2O!tua25zr)Bwccp92n94ZUwbIRR)T%k@*UH zzGyax@;3g_4P!_!TEWZrLHxceM%ipY06^Nf;!YkXOhuk<|HMrNRzS_w7%N-fj_ zAbOkkW&>Jg6A$*YJ0VBNvAZWUgl7Y51kUM(JEI|uHoHoF8$oiB+PWcKclzcwpiGw! ziH^H`xSe77a5qy3H|g6z;A(xk9LJ9}q!AH5r6KK)@O2GnO}yT{0c{rS0~g};j0SWq z{v_UbATh8X$&&)h>(lY%n5p&YTuP*WeL7XnLU>}T|3*FPS>C_59<8h(Vs2IlqRf*Y z5#jTXaD-=63{0#?lPht=tge)Lwk~~BnV+mnbE^3_)uj#9&`4R;A0AVej#p1ZPd@jU zm0Jf6V1#gD-V@fkI&}UCzOoMGJ;9MCvxdm#Kn)-2(7tAc{dH({O%cDn<}+}I^rU#- z*eCh?IyCc1Vc5{UwhyIWRojQspRCRMH>93*d??MtIvg+ASZAT!?s!oJ0rf;&}A&jt0Ie{fygJ^TM)oY{XfZVYGn%KAt21P&$9?`Go_$rq-3d=J2;>j}Lr zqsBVK3oq;GjDCY9H~I|tvi=Hj2%jtXvWnML>>)DHr!u4@NDH$BcRA(}iv;dyjFhxT zqSbff9wc4HK*q4PEx_XoByDU6E*1lmLLeWwCc#eslFiy5qLw;V<`a4lrupC4!y91A zZ&ZL3*>EokQI-fEGXm3MDBTPo@mhzs7rc+VJhx-0g(rR)Y!f_lv4`9lh(*5rgXP-A z(1IWyIv%w0W9V9tL(MoKhEI%PV`8w4ZWS`RhFIrN8+4q)^G;dy%Yfb%0)@>e_hw0( zodn22AS($L(5I!g$+X<@)WRg1&f_zaXfq#*tS&jj%aW)QT>eojD||VL23j~~t+#x~ zlIV~Hgu`_!Fg=mRy90Rex+jp4MC*d_D-+>YWi?7aHO{{Kaj>~{PcP5A@QLijX>r;i+ zN`Z_jG+Q|@U8q7Aoprlcp`)&t(ePaqcnjg|;46cw(DWGB@XB;5#y7Mw-HQ1NwFw0` zB6&CnA4~0HlK_y3^-ZcmS+O`?Z;K7!!M1UM-j!)jByhVjVs7(Enx1gqH%6mpu zrnwd4@zx%d%6(IbW>rE>S68x*AbBM|y)xad#M3LYj+If<i1{|)9?+Bq2E+ZDQd+D?GcMNMrzvfT4fkqFs}e+-Hi_;YO=(hMxLZ>iUTzFS z)SA>YI1$ZwIBsV%%6=GYz@kSImN%mVkKpjyvZ8NRGwNLtEA`@vF-Ux_V$7_jG^3Kp zeMu#Z*#4D0InPmcW%tSFXh@Z~eb3SCs@{xdH0|-wnx?ew@h)hiT~EfMK7DE@OnHuG z)<#~3YFn+F(dF8Fb5qK%z03jIy=OgRpQGi^@g2{x&ClVBQoCkG?`Eu9v#!OO>i%Q* zLC16H{&T(>8)r>(lSHNAbohuJnRp4@Ye53QytcPGQlsfhyI&E6trlQYT2)A%y zYC7WzUnvhW%J;FBTH)RgQF}MqbiCWw{vl9zR7I>ike7-9--qFmjb7KKRO;jlA5NuF zzV4{@EPr5kd72suwJT3+LksYg+DBsX*6opUb5rSh3lrzTApsk?-z}o z;?F9NkIMI^vK^@?#gg)TYk9V@eDQ{i&Vl#Tu@-wgYFJx-yi9)v3(8KGv|EB5ac#(m zq|}xIsLO9k>|4nVJeO>Ylv!69vqIs*Qs%t+f9iZ$)*O1jzEW1-`zdjyzspa3?}O&| zpy|r0+k-w^R=TqCD;<|n9m_hFef()KF`2}yt_q|f*TpE26Hdy|Y$m`;SLUsSCIwSW zv32C0yx>D8N+^>Am1q|Lw84VP7cw@h=oC`s__*J9__1~RseP=h_m&k`y8i!D?=7n= zWyO_MzOvH&*f?N8U#p_`Qs^ZU>~vqd4=6N>SqNTWD$Izkus=bzAgKd^i@YRl!_$STS0u?4nY2jLL=-(+y=@1o<=+HkhL`W%sh5Q#-{y z^5@XBySw}x`~>b3FH%p+#7#J z{oU?U%_z;|JlYIP%B{q!&1mvtkM3)R6Wq%PcYY$UrWp;aG1iWYi4FOIW;D0qdF(mH zJY8;7Gg|kwu&`U%M8t1xB9!klnik*>=ug0I}V4+^+=?);n!jH z8n!wl(UmaYl}Iz<{q2)zL?WM=$fhLz4yctRJ~)Z>PZD^$!lkNUAMs=R)BVQJgY@I? zI+wwgF2VJFgJncybauj+F&$i}Q$8lZf&K!By`-)QV`v8ROWs6xCx0MKX~2lv$oTP9j; zi*6yNt)2I>vuSp9k)6#hf?11pZ1gjGI$+?;-UX0w+3I9~=iCKI;APFqu|ts}!pm*e zw?JRp7BO6GvRioIu-(D~m+XaST*1Nh2NMq;W!89z@036X1JZc!c{>=fjje#+=oVtm z>c7O@C3f+eOLnWZ!CD#(iasmOg1Z>o%Bs{^o8@aeo~V=XCFZWZG=R zUPYHPuru0ezS0|=)Zx64M8~;zH;yJe85$d>fz-oYne0*$$khUi;queVS0ux!P#`Ut zvizT+YflLP$VKhK2F^d-!Z>m+2*=>CGb7HxLkr_R0o_6*7TNTP_u-|P@v(?L9`8n8 zH{oD1nR+Fh6WO;*vQWN$NfwfhPqI*uB}sg165E)x2&M0m!l$IL0V#K3QfP1ZN1VVW zfg4AP8ER1r@ccm`qVS_G8lqY!;h|b}?1pGti&pJF4;ouEIOlGZ7irxLWf<{ z(X@Ji16X+R?BodLf=4EP06<+NhtAm{supc>B8u<7q`=&T#@MaF2F;CP`q$VCM1bfk;8%I66B`SQ z2iUDbEH8a_0Wd^GMa&ZA0`i!mSqLxHtZiU3(TvtM*3t$Ol)HP2Ul#(Qy}KRgX=c6y z?6imQT&Cil=0GQgu9b$`J%b%|!7d!H4m7+2954>*fHZT=nE#Kx_W+NoO8>{txp(f& zojY@rJ1xm11Ofpm0)}QUtnRw@#j@&JFoZMdtet}XNqp*MkmG(j+ebcE268ahY| zylMhWOeuZeg5C)|2WSRIOlv$zo)+EErb2ypwHav7iWDI(suG&U--p9 zKklRGpB4hNirPv2J>m}B{$Eb&>k;q5@v$V%uGz9C(ZiE^d7w@J&Ou5N#Iq+W>yhzQ z=;I?rEc8@6Sxbd`xwaQ>?=UG;n4z=?8C}ExS^;PIuq=G zv%TPmFt=mss_#H1#x;VX^mBiX4qxImH+tncuL&;So`(66A%~KBSYBYSk?si)Xq;yN zYkdUgw)5zW;qLUS5wXeb16TM!PcI1;@h^1qvk0s-FCfnx!vq)6a)Wf^U-Fyl!jP&T zjFoO=u-cq3SitZECN74op%Kw7Y@G~?kHX2*!{W=ZIVwqR2wR84vN&v93(MgV?UJUQC5 zvAFuh;?NXHAN~*0AS5p$%TB+az0C7c~p! zxVpf4fau^!T;v6dpMl^W`T?{SKa9zLuUG8H#ewy6)Zqx~kZ*_~uD~QnR=CDd!j*P-}##~6ZAaMLHfGjG$nn{cJon)`td*4bybcJ=iiL8YZx~4c0)R@rhx~~_4cq3=IBNQ6}r<71o3j6 z&^IV9c@hQ%#rNJ9 zng8Nj50)|)T<1dk(}%O&5@{4dudo6pKYVMWcNl7;5@Cb3rz^NA1a?L1Xb7~E;KYzv z>a_-h#Afe{2pQ)OBJD9V*ggaU6XtrTj!L*04;hKUdC*9jX!S;;6G@om8;c?y3Dg=H z7CnQF(cBkwRScMPh_&W*z<`a*mD1P>Tb7FPl?l@$i9K<8USOCbyHap78P!eUi;0$M`-f_hcdVO4JZtXOaO%l5ym|9KSh z8YNppn{@|;?1{D2VCPi!DJAJS>)$7UK2hp!O%TVh=p=|9D(POFtcJQIK#VK76KP{K zfX;I5QZ~T!iT?6p2r!woE|^eJ4d!=e-XtZp`U0FRwtRRy)dzP^wYiP`*KGmKMl8a5 zzes(0o(>bbPh%JE=eF8`e&gPU@;mAeY}MtuQZ`d+S2LL3z*$IIy-h5pb*}iq!>gb2 zi}Q-U4K~c64$v=Fsb@66WBi$4`Ee9#Mb)LW7DzOZ(vjEWrqWBfJI?p0$hTUq|0{f- zpLL9ZLbqR;jc!H%R<5IKAU^d#wN85jQVZL`Lqy-?ht4CF^*6;Yhd(MGF3~YI)z&cv z%P%`zSc_o>BYeWvF}4vjK6e7#BRt0EhJd1UxHo#%AgnYYLWHQXSEG)mkc)en8Mq19Tt=Sy|0^sOcnV%}+x8j&p!K3hrIs#IV+ z{FnWLc!=@3{bx5QWPdN=ovq7uMe4)e&BreNBabL@wU+}tVx8N9r@Kc7(9cuDsWa)I zegR@Y{xcF9p95Y-hL9#0*H?pq)Sk<}+jhz!M9{HmZMdU{t=B}&-_zKO$Ur#p zHIWJ0P#d$Ol<$|JPubXCMCKzxybggQ`A#YJ@8sVq;&jLPL7ugLL;s0KGx|?><9;x& zc=h_vbg%{VyG0aNPwLmi=Gt4hvn0YIX@4+amrM{_U&~LCPoup48#|0d+p*|CR!svH zJX?e1qp>nDi$<)KtH^^SI?l5fa~EdMz|O31m*8ck(;?dOqvXntmYa{0v|~Y0)nF?I8tKuA-Yd|S+O{Lcn#!r*J+?-UcU?V@1khS z712|93jA&gG*HOz6uq}9+p6GN=2EB*|0PZ2zof@BWD0cqAkzWd2AbcrsOpE^X+;lGgYjcx{rpK+CeLql9On7CI0Bw|N4& zJt>Evi(Lv-puKkDN>P~MzLU8DrSOxZ)tl^deq z@Joiqmfh|^`>5#Sc>p1!^ucmi3iQ1iUnh%v!x*0|wi(9dBvFvyUYm*s^BR|M3|9$=4|Spq9`p2^5pykq92CQVu~kj{8PXC_E1UyyS7OND_VZlsQQdyGtF7q@;{x zx;HR13ET#?aJKWNPmYMsjYPy-YNX*6rmHUz8Gi0dL~%p>Y4h+p;~#`m=Bi*iRQDVS z?!;GE63#r8B#ws7V-c8KHupwE=ZLuk&p8q63tZJAR}cr^?jrGtwU@#CX5x^nvZX0> z9{H~}6`NgY2bx0ZK&XE+JVE=HG==z8+TkX6`HJsY5i8z~_gxn@a z{nL?iG;L%P(LF6Gr->L*MQhtwY_AgitT7DzX^1nbTI#_@VsSO|<3{4UYT>Sp#Kr0% zpxtZWD;}>=?Q)j5Tr+$oOZ2XV33ako`i?Bo?K+}n^{PEWB7>cE0%%Itx&c&tM%@4^ zxVmmlg!iwPu_a3^tCz7pOU%7KqaaI+t)Dq7OZ00{b6S>|*f5OhEN&P^%w9J{(8LKh z1d5xAxi^@fHWe#x2=r|#cHI!jZ7PayFwZp+*KP=$X(IY&nd6&?QCZfe#!xe0Zf+vK zZ$vb`WlapY3!4x(lrs`Bt{nTGr{#IF@0kd8fu8ChTxQ2;jW5EMjRq=*{hgLb`K5$0 z1dzLxz|pGWW3`_=RTUN(KmqNir5>n?N92ULRl&Csnp{6?05AQC!75Q&n86Vtt%0`lMTkKPnyb;+u5y zYP!6Vezl~<_FVEll(w}vH)PF|}mG{+m(HB2kRI+!Fn z_^tg(Vw7opl_Vx4gpuc|1Zz3wYhni6TdcsMBq+rXBhSyE6hBEU2)qp&6v4XrNunr7 zBk4dWj6#No!^nP1IE;*YN5aT*Ld0AHh4PUwGCNN1iQSVjk!VWNaC|Mhy^TMxmTBU9 z*cH}9Uj@ta9z}-*fWt}~%mg+4IMlDY0!LjS*PD>?JnX^=!%hc#3CQA-LiS3!sn^+I z{_QehG4xYPoAyLBg0qNoR&nDo?~)Ro?uB4oH`I2x%h%5f!LQ|5HNVlVLu?EUt4r)% z{hBnMNjxRRABG@0@}@gN#XH z7NPE)y`fPithefG@XqcvKq~vjdj@O7J`?0LdBSXf9Wuc`kqoSr)U#|k^!7m0>nnL& z+vXDx-u)CRIrWjq`h*ciNJpOqp|AnI-*I~I&pwd^8#H*p-2y}F3aNxS;WBeU&(><6 z(8PAlcSw`pXvSqtc5qjlyls0^jiS(Ol`a=$C?-^CF_f0o3WjQO#cyy_g#lJv>BO|m8l}#WS!CHomFFoj#q+l z%3PS;aeJXwbBgDWa1YV#yHdrr4m+X90}AFPD0Aut-Jd|_<4^d%C)IXB4u&y{0 zF~`>xIZ3qmZ#msCE@#n`?*B7iVf)$hUi)5JEn#b48A+C->BQbzcLy?E2dw$5H<| zIE(B1cQ%l-8<-T_phoP2()Ys~U-KuD7JF#?LMC*KG7eLGrQ6)#!B(AuN1ijbtZEmJ z(cdG7dwdf;a+*i~(j%97s-5)6gO$lR|I7C!8ShSLTPNs?ouc7%U@oE+Dgw>OS6voD zay1j~(VBrN^Ql%1hY;JjSxYWkXYkCi=|=wu7pyuabigqiS=fy=?a4sa<%;b!CBg zJWC6o^}tTIg^(ql;5Lug;-T{>#>kz}Pa*JU9@E5ma1VjyQ-^b<(hk9^RUIU>ovJny zR%tW~;nTHD;#4#akm}nKW)`RKtMCMWX)1ORUF(B=MSm6U-d-F}(6^Q2ww_p0Ion+^ z@pv*=nSlzdRf8}obwt%bT{@{^WnKpDdq9^{HI8Wpw7H!vt%hU2i`%oev^{XHRNjF` z5>;QV!N9AA0r`<;A^20uXPsv3(B$^A`C#ruBe~F-2t6AE!1qYRy>DF>oNcw?sMiR0 z@FKd^tsTPCwI>rXC+fEXy{wzvyt0e83@yNJ*Kwpd4z?sW?u6*$C5jH`YTL5**Q$P0 z6J1@}RZVQwEQFuXjEfphde{?Udszc)ULZx`&p2n`f!u%~bb&|P1l^9{dqL0w!(3~~ z)keup@Y*ow4U0xjfy9e8K&N!94RE&As6Hp$;kgEGTiQ+%r_Myo3wq`Zuzh-OMV#e^ zxy6v1h@Zl#1bt)MJ{tG$zS91MbESfZz9p)@M#Dpj1|vqpH4DL$secPKW2Yv+F5ADT zTUw;Zz@FAiJqYEK)W7Fk7MvY5I<dzck4IZ;h|_u|;-B!|ia4_kbA=(7 zRj3>38RmW-P}m6@uZpoW z%^m&47m&dPX^tl&@OVt$sOWI+P(DL&H<#84%nn)#%)IY(TL}NwZRU97Rd?yPptA>^ zr*dQvr>)T{w1+@P-6sk>=iE>qB8ok4Bj|{ZyQAID73s29RCz%K>6^&kNhhDi5iqj( zX(;cYy=9U+Y0lGPp}RZK)!tD4(_)VoI<>`kD>D3PynBbfe@aXaM!tDUtP6#fKP3)_ z109|cdn1waPm1#qx&&@W4lR6A%u8wY@snbB6l^}?U}_7vM^_0Ww}VyoEASl6NdM}$ z;Bci=V{VNwGTl`pgzyuYp>KaH*1=5alQ34g0KGS?cKDOuijj4~C~Q`p2+;j?DP&5$ zFbZB*FKO6s#ld>?Ot-HAh4*M^eer}CeS^9G2{EuyV9^uebR+Y#C&ZM-VN`2f<67;W z5L=p<#~v4-HZ?muDP}h{m;6?AZ5H|FaWSIVB;@neP4x;N7h7&lK**6>BU2t1YiYgwvKIxZ#K>Tlh75VHj(f!w9RISH-VT7!?-&*^q*meI5^m)IBtpSgT#Sfe3 z9u>zPPP+7{82AXeCptY7N(ceD zYC>C0=Bd6M7Ze^E2TE^t zrKt;*1cab&uE7O)g)NTkdoDmS_?TJ)1NYZ?B^?IZMl0>y}3}eUn=j zYu>Nj@;j{sViviRuDHul_OU-1$Ti9L?fDmbQWlfkJeTiT@_de zCk9+6+_GuASpaKOS3fKKjvVtM?K zJ?)Y_ps{m|8d&WX(`{Sit6k~f_8+hHmH=jy<`LjE#ejH!x03qBdn3R-uDaDz5sm0Z zXt&Q4ID^0LgLvk9xNOG4Kp1K1!$toO_s7B#?DqZv>;7SBAGFY3Q~YbZlsxGJch^c; zb+-x;Lq73gumHJ2hH%!ONj%PWpY_I(w6`l<0F}eqT=@yOO+67D8>V__ z4Z5U9z<=7?`%KeMkz6Z6$=T(|k-Lzg3+KfAThA2Qrc$4o{bp1hhrC|4*jZ;aXdn18sW9NRY{r$w)5!2i036b% zWFxpoDtMLnR;e{u#k1|5v3gYz-B3U`B@sI9=PT(;NNarPV->tqkK1`A2%LXz(mDY(cI;U|7O;083x-Mt^osRUGrkDI z=3mC>Ak+&7V8^hdJ8(9Ddt?ACPn{CoqXXh>VsK4BbPq&k2E^EaxhEj!1oY(rSr{wscnmNaZU!N z=@9I3gA;R=J2*lY`#h2EI>cw|SUN;lx1p*K9C%L8S3K>nQ`$saQ=@UB#% zgYo~IZp26B19$46>_4tAaEVu+``Cr6mJoNXcV$ZqmZK-g%r3cWV4$>j=@@p7f(PGvc*Fo$2}CXNT-mkI)$9j zDWu4&o%YIu-g0#&-f+FHNCX=k>ENkylMmv3lfdrj0%taq3*xZ~x&-BRR|$Cs@%}44 zhC$rp@YJObQXpHjz*uiT^xN;RP@oKQjP%VSYeNYilhy-csv?&u<_<+}EUT6Xbs&9p z9Di=2<@Ux8#Q#6O=ArM?=Sb)l1)D%ebo&xl(rFj0B;n&bk{7YAt4Y8ntgNu6o`D+S?nL-5UDxt?{iz zvA0pz)?jgL*tWG8uS7ghQq3O)YpTt9P zhrIC)6Q&`b@b6beHiRx$NeheXKABpm!b*h!_hFb@Rbke(m3`&jrOF*D4o#&r1n?By zchDYIQt{~9$SVCA{#JarHG1Ah#* z1$|L|tBi8to%Tiwrf>^fln^6PLO30E<+l|_-9REJa_{CMeRm}kBhFD8;xl>Kd;?Nw z)>sKE)TQ0+e1{wS_loY86@AgCSG4GOKwK?+up80qg0i&unrr8Xor`bvGYgbKnE7-iofZx(IQL2Z=)_S-2+Rp@b8 zue^?X)Hka2IrSvILm!th+$D#(aA4lu7_InAyP|^JS(Q`;SbeDCxF*Z~E@PZajwn-IyN+S|;pR>d0w+p+j+9f& z)ROw-MggjJaw;sewR-In7r4Re;iA(+^&()ndLKd#t5LXfT(}p&NX1H*TvWCQl<_IH`CmSAm6$z1n+Yj zr`+;{8x+%}(3j|ug=NV3$RD~alLJug^jMR1Dk$vMU{Ko?69Mg2a}#)*Rr9h6Q^S8E zV_>N`O>C@CKk&4TkQNq~X;NP-<=oN^uzBI2&;tU`i=@6o%9T)|9;0Jop1tsegnFj| z3fT%At6;UJITJ6uWZm+Xmr*R8W8M)`4lFI5#z<_ftC%KUIC!Iep@1+jTq@9#KC+Br zbz47kvKwNr)rq^XHiqbfc(-bSX*WVfpv!w&Y036nxr?OB9>nwXEaDuLOG}&XjGNp2 zxLDu!A{J?BLIu&xaya_5ng1E_3-EHhVqzZty|mw;FQqyHzIdN)Q(BAS5gW>#+8Zyqi?Y;z#<+v zHkC}Mpx>u7q!%MSPnCnqG!60S4EhnO_>uHoQ_v~2VV+dTv_U)7=&yoOUVgp7nQW@G z@G9}0wD8W;OKGrJk#ozfA@r_+v5dcj?Jm4ILEs9OnyjrZaL3?N+I)WkO@1x_-n>6Y z@kS=SgGijZv?Ppw|3+y+JJWti9r$nekRRI1v5tno3z%{@rT@u$g0H{S@v8I@y-pxK z^q+u~PLgMR)ZmI+!AF9XHplg)oOPS{QtO8gTj&k0z8#jodYfx+7n4&?quL`=BNuKF z`_m#DZxi2E2`;}yOs`7r)fvf?ZWHG+vi997`qYRFyhWVP+$W1}6<=Mq$pamen;Is3 zcB|-^<%9dH#-u=UcVlhaZ6c?MG5%IDyNR#MZDL824yeqE8>5JG=*GZ|o5htIL&&@T zO|^i|y(x0|7O~-`$jn>B(VHUQ-z;)&w)WmE`rd5qyjhI7*+QIEw;EsHD(Bv2uDMO- z-2TgDx6Adn8~bmUJ8m!e5cIy$>_vY^s8p5O2+Ru^ovNs3qzQK)#r#x}Qx$JV6$2pJ zU6tn*6Xs94t5qkdGL=BDfs7FEW(m@wZUZcxR znt8}04{25hk9t{4{?@Gya@Ru4HE#2`Tb_06SKacG$2&)t?e%I%RiLL;up~oe5kE#a zx%9mID|u^ce`iI$<(sLfOQhKcHjrfU2$zH<%g+@#6HRc*#md_V-=Uh=<&LRQxcj(L zCRNb#O7DZW{@y=S!I@yC0=lv}&;_d@$sfDqIK^C|$d!t>8|+~yw;{YpHFI6^8#M~| zKvzos59RegTd!fLSK=x~-5_x!m7w>Hamn$Dxs){GdeN?}%54bWt5OdXt5LWIxl%s= zmwHupUi*pj$kuB`3WoC)tCNN`w(12K4N);Ab6qzhV5Q62>4H-I;C#;c(T^w63B4y02qD~De1 z9Xvt&6*_lQ!Bg8+KEivpL&HvmOn5iww{Z4xy}9`t@o*-MOQMxI_k9b;?C+#e!QutQ zp>-Q%bo^O3cFa?;qit37!>Zg%l{bC)&f-K&94JRm@eea}HAPMDW+DaY)7b;)hPS%cY~k z{x%C_^lJ$XDpq?%p2S#=oj1w8MiOLAM0OBw06ic@q+pA~K8!I?>oDo#s9PGBT_}`52AzCE15--%Iz22&DK>f*mR&HNM|6Pz4 z-lKYegFun}OFxyZqotRGf^G0T%FrNKbFfuK?SQ_8M6uPKFgqZ=^CXQAh+}$arUe~P z+Eggh^_r6{@s(GD0-eI-y)BopZEzAMyQ4Q}_lck31(bRHs8n}-?pkbl=4RPPBm)cb_vsBWN zG)Jx%U}SkG2pekML5ssRPz}L-POUxxz2U+fo$fN1(1j9L*%;Bqz6Ufi!9exvOLC11 zs_-)r`?5mBp-C=%Iz`Vo=ED1JX(!otL_zOxD`a)B7#)R33z%2_fP_obS~vk-RL!0) z+0hliTy+_vT{6#AGV$zngVy$*NZ(Ud$CJ(!NVbA~h3t;)FEgF+%^_!UV_+%jHWVAd zUbQ-I#_e2abH2-5;F2rI#*N%ore?JE)4hE^^4>2^SQaam)RH{4`bJeORPp!?ZEN;b z2n%LuAH-XyDX%L?e?|HR!4!g0j9$IqN`SkgmWq`^vu0}YvofN@C?B@7vv1k2iDS~e z0FnTBf6(yYOH3tKlx*m6Rco!)z~KSH*G5+qp{HEYOUPTpy?v2pfK_z8X6({%^z)y^ z*wn1vZaLWPtH45va^lq)>zZYb#l4i&J2!;Bz29jcik6R%;7R6I2`;sg4{6^e{uula ztDg?7Nc~F@>POn6`=IT8WL0eKUr6s#VjwR`?2PruZ9Zs}xR>6>hAI}E6Jzu`T3>Mw zC5rDW?KKb#-Xc19=27sax%BU`PL~de%I`Flox$Su!B0G!5iQRdGS)c>JzH3viO=Ep z&(|DkVlGt!_iRU{4%{cyYP0>Ky9?j(xT_|dy|w9RBDCK1_QOO@J7uh2Y&KqiN<~}G z*D{}V%qO<_ECe6%y-4;djV*q8(r2r&X8e8Crzv9&OKkTD)b1H_2i9Po=jFVSjV@~`L17)_%Jn%2JXNZphj{u~z z5V{6WOJZ&8;WFU<-Zfoz_lPgt)-gBuc5$F`>RA_4fOM+(cDq58qlb1-``~V;&4TGk zG0$zC1_M@U{2M+2<&HF-5x3|9)pyb@R;r`mKCT&Xk8#%my2@>}1$&j93g@?yGWJjz z#4g|0Wx(AYW%P&o61N5OCu>T}sKPv?-jOb>IAD1Y`)zY@$JP7nwYv&T4v^UaFHXpx zNxH8uP<6PMtG}}G(zTt&3?%UJSN8xIoprE85S=IVkoH&cC?@yEQkyR21X<>R4)uk; zK0J|qrrom;eW<->=jk7*q(N3`j`9hLMjZbhCG8TCVr)Oo!T+byfZJrRW4@e)(VKP>1L5Gx0Q)OeNXGvX9haguojZ^G^DEKTBEdNyKgPL zO3=$h1RH!249ie||6dBLg3~XyH`#iI3kp$aeCD}=U$|ho4b&lrMl~Oo!TBy@hbgvs zjA9c{8GX>3XH27Gg8ber*Iw$AXLLx^^_Kb`iJ@<7CtHuDufLQh-hbCgeIYR{>3F%B zs_3g!8~}9Kt87mj=3rItM3+V#9Ac;F^&_@zA}!JQx1++_r9MuD5I(MYpDX%a6~suS zT&w6f9pKgk!eS>?2QhM$s_#(c#xl8}{{zingYb@O6>SjyTl<%RrdkInZm9t#Fzufr z`)+65L7S6(`tL!}u{aBYE-~YyL zWcYR++xCMR9{gJBxMsXEz*!G|nBT^En_c`L*^`V{PxMPE{{YRW86M0z+fv#pk6GlA z+sZx_ICE#730Y248%)=LH)%W(-#AHa%$9$e1>q6}WDeL|i^4tK15(8q+u4JJL6++j zTBO6gp_pqLYfQPc!uWk1@?1xJ(7fb}>}n*w_hFG;=8wX;#}7+xVn`%qRU`3v1i_ag zQ8@c0Z9wdU)gzxa5|^suR=%OeN*CN8)y~Etu67j80d;nuQN=fmkmDPPUX5_co7w2b zbB*N5MkOPJ#w2VllD$Q9lPQ+F#(JHxbq&uqq@{PPGG88ndLb1o%_83$h5IY-bR1Ey z`Xg}nGl`(SFoD9qP9WI|>K8|U@>(EkW#n*8+(shnYT_)>0eEjcijWEVr*LobM-iTr z5IL491|-mOur#p>+&co1fi*>O;P)Ws2bW2>&xOrH5W0z&voj&9g10zy0)o$`nMX23 zw<_k;Ofjemot!_fW`2<=wpF9>0X59_nPOfI^J)$8RgI^xz+{?xYs$%)&p>vk=F@QQ zshJTQ(Nu5JJ45n>gA{9Z0!Z1*vD%!{qi}cju0Z?OB^Y}X$~ku6~{(_@Z+ zJ|a&6^6TJ_B7C@?sMq>G6fW(YYs21@f5lP> zC5B35c6~f6;6MX$)+pQ~{Yk6p!`kI*xFwifRJg}mZ^Ipk!Z{}t=~*8v*Rb0q_D7;{ zUx{qNz}-;YEV^FosSaJw;y~>*#JpB}5~?(@{+-43<&pX&Eu!!8TdcOHF)&YigEOLH zwC{mIQJ4^EkEGuOLI`OWBz3uSBS{EfnPm2j!qN=p-+*Ka7?Wb=M8)SRIH(7RBg*Vt3?PHE@q&CE4Za zsK9;BZw{*lS>{=tP|RrOfe+IT$L%#rH0||ng%vNF)!1E zyD-z-lPPy)mgY!(O>`>KrnnoNZuBmUQv}vt^K*~E6Af>mk~ zoO{*wa38Q`XHJ#gYMnKp5MQZKMn3j||7{MnQjfwtODE0p<9y~^pPc3^H-^$|KH1<< zVq+YEp*YbMg8NGs2+UMhT2~;qia&jrAD6xJgIFX$x9xM1EA88I=W5b8}R# zDKlHBEo7r`8S1snAMBbc&YQtwQPCv3`;r1Ax8cqVbB1~g^PI44+Iz`Qc zQPGda__nCFCn`@y>yJv6L&}cv*X3(sR2XuC5TC9qriE#5JrS8K;Te()%6pfTmE;~+ zMH^FBe3Y(@hJKrjG=z-In1b$IQ&Y>UD>l>wAD-w|J3`^L=|!$jT@&sRb?ah%t84D8 zD>v0G=?wZlvMkI9O&6Oy?~*H~}gKeFss-9xDp>MTVnwZgU|+b-M7&kkO-9KV>n)T(XV?D#`*?%7z(-SZ*TY5hPuq37wA>)fuo2o!px(0LIn-q}DVwI)w)ky!RxCQ6_ zr*)j;OV01LWJZF9r|#4rqf5thx&;KP_ghm}(YXEB?-19X+>idYrFwOK?6>$){g3@C zq=Dxp)>r7Z?xTSJ8AgszUM$^qoiUDC{6VoiikC|T&J(KH)+N6y zCGI=lw=Q@spp`?JuUs|2(L4>=UGvr(;1i1s-xU;K1YpedoY5*a9*y;J|EJ|&haXlNVaNDZlH5v;yY@g2xLbYSyTNW1zU+o3 zd1R08QdiKKuRjz9{MfquZ^p+STvvd}5`W#4SsR=kQrm-QwBFEoz|x1mb9m&3oC`@k4RM*U6+5n!L{Izve^BNP0w!i&y0@#QHsa#aW|w{-l_tc+ys zTxr-Ahr4dDzeg1qu)!6^6@mo%0apmRGp@L*!97f?ZsWdA(!`OXpUjNqF&?cNFJb!? z4}e&b@lBIz{t<7+y@{+cU8c-YKxdhONH!Lz)_M&w6J>xjzFZdA!IUQPG2a2`r1OE% z^#gE5+i^|X=B*DT*$?ic0V#Gq{2b;N*t(Tjcdk65mqcxAsU9!=4%_Rc6OUu+C>fam0Mc*I+;5b5EX8b!!ZR|-O= zy6)mK69t|!AAfF`fPeo{P@O-aaaRPj!fqSic$PW}w> zYaxCe08!zf^j?BSaU~P7Z=03OD=;6Z;1k4YZxWLUeXvV9QK@x|&IHYorTy)b`bytL zVzPXlmUZt)MGh+e=0R_pFPL4W_)`W>`qGETszEgVPfGV974J10P`#z9u~n7p%5D~@ ziv=}rr0PxYO00j4?fO}Q4x^xXf{kq}>2kE=VHYNmp8X0W@NrB-n0^~<)!u{Nv)hD| z_Fr{;l((8vwNY=J-?FqfFs?1=9~@BTXa@}Ut8_2EL>mnw@y%BBx`~G(ER5D%MS{)> z_oqZ5{gCqlt+T58JyDa+_PeBhQbK27$r049OI3GMQM0yFu9fM&UDQn%;$Hnp`AGbD z@#{zL%x-+>=`!&fDVLO~Jh$t0Y8Mn34!~kva`+$&>9DSkm5F#t{GtqKWAW-myy7A6 z^CHWAueh;98yE45Klc9PZ0luPTN_7~CkZ`6LGOMmPv2{Ohhkf!mJ`>)gr`X#*`mN$ z&ck*bFhL-!qmqE-yq|*Q80joXdgA0FBjC1ePtu-0DGbWT#mKOGW*8;q!P9oD7$#rR(gl_MSy6Mq#xaKBjcYpd%+ zqQ^u2p%2MT5BZNgB#R!p36#l)%~=o2F%OryUQm7NVmAcWfD$@lK)cmIe7kP05T1sH z+Xj<9(?T#1vq)QKA73awXr|c1x`DMo7js?aSRIO!EWGWlbDIlw=x-ox0u=9=zMi(e z;WxonK%n!Dq9_!AdwDoKvYGfcDYExQ(J6U&65jtB+|lDkvA<#Zsb*qaYOVQetu%F-hl)#(K>6C4&ZtAzVB7K^F{mNph+G6Lfoi|HAwkyYDT)!Q}^hiiqe zH5UD^3m<3!tI-g?R6vj8jDkPNo#UW!^rZ+unm99XHCSVMv;MyMeoLk zXcnQ20Hgsx#*FR$Ge(s|fUW_)rZ1ZTAkO(6)l zP;PGq_7H7UQ!y#Q_`WGjjfL`W6nhgpVB{W5s(Kg-%abpon5!wFPR*dwPlGnRLs3ka zeyME`&^`?}VCaeqeceQ?NZ0l^7U$CqxO-PUC_if^@-hN@nuy~W8novXXJGo|RbQ+l ze0)9aVq&=4$VZrhR?KvF21b4Bk`w=!c%S(1&z>yI~yfKhv2zJ$-|q7 zUX7CnG!f$)C-+2IjVa2`#*hHA`yx0>MsQ6zAgf?I&QS(A-;T~BzY^kCR&ObO`)sTa z0{k4JjZwsW2+734Em4SMg^JdWcF@*#z7}?SurJM}M}jUI$_K>*v;y9Tzp z-BLS9oHEI=32A?u-k5Z~)jCU{@<=5%Q~d03Tq(s&#l$gpi86)5X^gFuVVn+zDH?=Z z@|2HJtHo*nA)8d}!b@HHZWq{rN{XPoU|9~aj>{09C9m?n>3z+UE5+;BB%Sh-u{Ds6 z1$r~z3}v(6&669bRA=3$7wu1E0LO_1(hG{niZZ(##lad@<0){s4wc$=DMreF;s&AU z7*M0i9ti%&<5Ami%)uW$R7@pZ!ghN{AZ!HQMkP*+&YJBP*bnRKzY>kAahz3%vr67M zP{CJo*6;-Jgb+_?lce}v7l3xW9||*VzS(kT3h=Ysm)uIcPk5o5qbDyhKx4OhSo28Y?OcZYk@m8Vo6|r7mUAOD; zcm#yYBAdstn6%;{p7;I;t_v+OKR6C}kTHK`;3J7abTi_Ryu;hIQP4;^3Q&QP1$VJR zOW7Wm{|p%5OE0IC2l%SY2Lmm|>)^wa|3E1veVd#s({S9JB!5HqlL)MI_f{}mC=H!S zdZ1xFln@wJz(h=Xg3Qgah0u;ea@LLx0U|ATQ?%*eZ&AR_4}M+^x;xvcIaplUdA$8R zV5cel`jmeTMDPBZ@f|eoN^O6#XzSKyfq3kmh$8d#!0HsSP{;Z)#+wFbCnG#0D%$$A zA#nR9pn_BUi`4T`(cgX+S`@qo?v5b>CWotTPllSw+jb|zntY9mQBjbbT$CcVCex@M z9rfo&<&@~VC4E3VXZxj^>&NO3+iS6dA@Kt?h21V3w6(xm$gFF0SsbKSg?qJL6L#S) z={57bQ2OefLRLk+E4;G6Tcb2R?Jb*8;%1q6h8EQYNKSo*vsy11#-cGAXB*p}C|<-} zs_s<@wk+aKp=@N2_Nsi%3eM3&LKME(KynHQ~tQv3}pmUh}gk_Wh9 zkb7Bc=%O9!KK-INl1SD*=ZD2<6{VWn%D=jmJlHC6#fx&oi~jvD%CW5}=E2s9<6n`-UosK%;!D#} zxsth(&Ywhs+|weN)?0%BCD~nGuhL!3?)$UEv3*2lTy87D`=pJ+m2`pfExIvZ3l|`) zom(67q3G=Hfj;Wz_4h*1NH4ur_4kLC!t<4RM@RhEDIp&NZ$>D*`a`iYbOiX+q@{8I zuGITd!rKwyLTacz#>b|#IuyNUl{%DodX?ci-dk(>uYDkP*F+Z&s}=5!8hlm@l9Xb3 z{ZJ02Y>>6<12MiK>~@MSw}o<%=djy|S~B7GEb?@_BYXmB_TJ$q-=;e|xYnbfZFhs! z7#gA4x=$gr$HSCh$RnXcABs;OIf;$D8&TKs{? zeeY4YFT9tElKQ=08}4Nv__ux_k9^?&?gQEGLw~;y<(3b%q7UVn56zBPk$UAwomQsJ zInsX!|L@I#=69?C?WO++JxKOQtkxaE zf{BQdWBK81A4o;S1%VJWXkQ3~w?xF4U=;38!|6bGhbf!$;Se(D8iBAdtuf8{d=`dE zl{IoTeJ-`yJP(vUnZ+Jx6--2U4=u07X(|c13vudKPo^c zy*C6}-tT51q>s`Bhv+5Bqp|uWy*pe&0(7u~d39Qe!r7hp+w8Q)?}_vGZM-8ne*Kr} ztwk%REdd-^>DX$1p@8g4=UXRE0D>S`n`OdBpc_aW%{bh8C;@COM<88C!svI}`TII6 z&w^aGPeB`~KVV84{gJB#Aeb~tc^T3m>UD7LP_sas?(PD?f#Q+;UK8W4*tfO=fBxs^ z9{9Nje(r&vd*J6D__+su?t!0s;O8Frxd(pkfuDQe|F=B=N>#aE@#sI<{x+9EPQovX z|1a`)xBc<{DRTF>p`uhLUh^pbA1I$L+jRWha7D$lgZ%@EtmFqhAV2s!v>Hqj`2Csj z3+(?3`%~HfH};!rocMobe;WH=XMf!a@o%f(|8)g_9ZvsuPJb=j#;(sB>~F^So9w@f z{co}VLH57R{>Rz>4*MVF^4@Z;`r>)U|H*i3_P@*i!uEJd!|y%z7qkC;_NR1k@DF0~ zUw7*JA^Y2NemU&#!v41G&t-o*_K#*ixV`M(MD}-J{|xqbWdD5jL;H;VTgm>;?BB$G z;$x@ZKK6HIe=+-sp_6`N$2#@z&VJWg=lkM4$^NCYzZd&!upiW6``3{Dx$M7*{e9Vg z5BvMEzXkjIv;SH4Lqm=IYsLP7?Ef?SA--?_-eLb>_P1yM5ccEf#>WDuEUsR2e)K=BL_96T zL5@f3fQ4|5R`Opg$MYPI)`!aC`FWhtI#F4?RE|gMM`iJ9b39rnDvNgm$D{S5vUp87 z9<3{t#k-T^(Rx!^yazZQtwWW?dyM1J`czrG=Qtj%Qk<&Rav~|yl&CDR$08? zb39t_DvOs}W*w|7-UnPiS|2Nm*N)@Sx>;Gg&K!@{)5_xY=6JNu(o~|j^o#AwJiWvy zjz{ZnW%+%=@n~JHEZ%gEN9%QE@xJ7Ew2oI6?<w9JKHgY^#_bZFHm*d6u1By#O z>KE#hSigM3@o1l@EWfK9kM@ts;;Fn&(!Nshdk}w4tlTObkM^6&@~h7AXdkL9UIUIt z`%`7{Zsd5hZ&eoWZjML$S!MBl!|`aJt1R9#9FO+D%Hm~nyx6|j9DPPV`fhl>D(SyJ zaXi{DE6eX~jz{}wW%1f^JlbC?i`SRq(Y{+*ypK5^?Z=hHo5JyEpRO$40**)fcV+Qb zb3EGDD~q><7Q^;CiUXg&*xO=M#ibn=vR_I<5sYI`4#IQYhNrp_J6E@s%>`KAImrP ze}H&X@jH|0I>sNA+Vn+aMdi47>EN-I5jBrJO1Zlc&g)vN)h{4 z!1(qro%3b>A2RLmDopT~GN#*2Q(_{$ES%lHb;zu;BQ|2ZfB z9LCo#bIQ+}RMRQHj#IxjjDHlX|1D1XwA-Ehvl*Ytc-8_gzqONp3&w9+>f~?zne!(B zdHk9)zBHEqmz@4JCw&&dLg{(|u@ zxcwOu7+0M37yF$2&cy2XB$xk&Q+^TSve0Q?PON;$tkAEJ@dULqu-ab}-ic@~H zz72~!#=FJvW7TaSZK~7%MLfO@F2Bu7T>k4${<)lf9K6w$*7NvJbNaVp{zaU>6$jTlI{QaP9J~(apA`ph&bSq){aKuU^El~S za{3l=@b?(cj)V7MyiFW@3gbC(@KucG#=#FTo)-td#CU!j{Aq4~K^#131JA!IKm7d~ zGF})beHYHZC=Q;_cyS!Oh;b38{Cl~4YmqbFqmy}Lv%ht${*Uqc^1idaWb^#`BjXv5 zGENN3__bjC4aN&*GhXD(-{y?3;q@smpXc9x2hU=>Bd5=btuNpUqhAK&J!APNJNZZR zY*<)~=P_P9lgp1f^%IOwWxPd&^u@%BjNg35i;~LcU&Q$O7`~qKU(f5uQD?olvc&oR zxvhA8x8oe=wGRW3GR5C;wc=pJhB}YWe(g7=JZZKKrA;*X#nC zv;TH(f194%zBirnvly?%c=Imh@eIb>bN>1H<;%AiAI5mz!;E+0@5A_1#xr93;}U25 zWbyb}7{lYNziSvT^f>v)+E>8-U9t4+PkY?yKa2fmV(HzS{&60E?3bII@1Mc`lJx9P zV!TkRke>Zh_ zGoBl9@Mv2neRIZ-@%oqFlItIF>X*g%HpUB|E#JNj#;~xb z{yB{2#ld?so*xGv!?;Ly+Fx=0O<}x^!u|6we}DGRX1qX_$Mf00B$oaY#scy=`huUNm6jAz8@-z$t4#A(02#hE{aaquYPR-FE+%Xm?o^vxMB zX1wD4>$i+&b9-a^R}1#P%y_|)SpPZuM;7CMV?0+d{+u&@+pxba-oE zeHhPSf0XyXHtZk3>qCAkp1+UV*@$e$+cKWFTWc+c)^MB3wEC(-O{0|G94$B|vtWU|UH9LJi z;(*hhit}eyY!LMgLI}Uyq<89)sUk}FcIO$t4o)ZUuoAInT>t6@P zn`b!Ruj2R5Wjr@d{-YVsi-Uj0czztb1JkF9NAUOU>wN#>@15~@7tfEvUot+<89zmg zFXH@*>N(>-?Ezd%;UGv!SfhD$LG(& zPMrR%Gruw}JN18p)93XqpFWqgL!s)Z~823BrGdO)a#&bt7&i!LCK8*2#kILhM@u7Ua zv>I~%f2r8T7hiF{&ooY7Se@H9+=fLF<2(5K7Pqfy1IZVi`WIhv(*G{DJ{@6vm6LxV zr`MM|->2XU#=myjSHSpL9{)L?Gk(~?^BF(S^#AN-PW_T$orZpSj0br9T6b~!*-rVn zj9*;rl%I8bc|3>l9h`seV$Oe=lYbk=i{5wc2Q6;l^plxd3Q+@{H7kGXY_2l$kXM9?W?_j*3 zJL8&z3&wMJ{}kDbFL&}U=JELgr_Xwaaem<~;_v?p#+$!Y9xr4(i}4n3GS2h2fbm6) z=XGV=bm~{c<-f$^ui$Uo|I)$pIsKow{#Hv)f3wqng`8f0$N4^m_cC7W;026}cO5*Z zGvnVmcs}D3{^{V^9U0%_;CYNc&3NfAY9} z7e92$7YA$F-#?k>SDRS*-2RN`%BRnc;XFRG2Qt3FDZd5dUvmFiZ8?A4!E?F%hj@JE z4CeGu{X)OyoPH(@TU7ddzqBRSlm3sKK08kRK8)dU z@*mE4PW2l0xU6_SoWXcuoc5VDJ}b`nILWvbC%y5t z^L^XI>7ODlzj>VeYjgS*aqwR+CU7>E|NsB7mEB2p(kV-nWe^{09czke zN=d0qB?&P?2z3f&iwTL46IoJe(xxbfRMwhEQPfGcvNR=2DF5r4>-pBqyK~Q=&*S_5 zG=BG^<2CR5^}OEKdSCZ_&P+2>zlT2R)~84LbGC4O zdhAc7@B_`={#5ono}ajXaef%T3ePujw{d@tIzI`&D(#PYTwhJ_LmvHahabGywO{Ygi84MO*UxVH zpX@RI{t<3}iFo*egq-!!L%P;?e(__^BT4Z-JlWk-xpv?@_)!^B47~{{hN}J@OBc`aRa)Q}_{& z^>q>NZxVa6{=dkTcKt>9{_R}K$3N@VZ`o?@`Ur7-?B?^6&^wjV%9U*A{6zdkl=l&r zUFPzq9&yhL_w)H)LR0cTT?MdEd1!*n#?Iy73R{Ff}e;VC{Fts{|NpF{P^?n8Q*05SET-w zjP-}{Uy%CGqx=}=2Y-^3Uq^YyH-vwme17vb+cKH+VKNEif{h#5+ zKOR5f5w|}l4xs*RxzZ9u7~d%6qfcinAEf+m`2HmPovwTwe*W*={6`DXzUFTI1@Oz@ z`wQZ?cJ24$*TxU##~AO2G^eyeH!NY}sALvH;vl=5RUwm*tLOv-$K!9O{@?=2r~NiwpD&0%iTa~WGS(l5 zejK% z_;Z}^!|%%TS6n6fcZF+T>Or@Dx=`NNG-LTFej7f2N$o}X=`Mc~?JE`H^QWWuTXUt2 zZwP-M?GJY+KmAX{kEea{7gN5KYhMcWzsvrR`T^zVyZR&euP{HpCz&5vpHdz_F|R9M zmg_T&{~3PZQ_8ddCeXenv@h{O+SkyvFNyM1@srBoH*0c8T|l$7r8!`(Y}c})8@yIzliI@SDWi&it~N=d7|uZ9?yTp z@KZhf3i!UAZoTQ}@7nl&5C2O1WRK^sTk*pl&tHl75s&hZNPdsy0F ze{=nL13#$zDE?CXl=Cx|Pr)BS{Q-~u&yfC|!}`6M^-uX?JpcKJGJjvCO|LH*zaaCQ zS_FS#jx->QKb!K2v+&F0N%NEN7fAgTT>HzGbbdV7$H#pCI-wioySny;C_hi$A9;*# z3Vw>m^YIb&rbyK_bliB za6W!n*M2|#dVK$R8GRrAyZCX1@hiIWsR!KpFT?(xc%y57$!gAz;*Vkd1ukWMTDnJBKJyb_fcd%J`2qa+h#Q~an{NC{7IfFYAO9Qb4;-QX+|Kvm|0wMng5TEVPyN-+ z|3bz;S`WXb>wgr#G4%%)QorBjPr-j4Ke7bBq01k^KOy6{f&B5g(*`IRzwkEJcTwk; z&hPSv@xSKtt@v{ozedha!Y@bpIFJ3eI=vlIkA;#|zH^$~~PN%G73DDTP#@Q<=SA_Z9= zOPue=f0X_w<)Q!WT>pLedD#C#@vPqj=coR1QCdG9VgHM(O#WM(AI0xQ{^Xn)^QYin zAp7U}l<(onNAN3h{rHlpe|K87zGVC!^go))_*8WL3*!&LPpE@m-_2hVej@ir|IhfY z8NLwyWc=Vh{6en&MEoMOFZwF&+w1%U{BhJD|1jnIxcQ9& z-_@0m!@q&?O+Aj^+4%wd#pDmyqW&vf|NZ#u@uM{}`ab-f_=$V)KXm;|O?C5sLh}EJ zA9Q{ce-Y!CvMXcx6#UZL-Srb1fIr@~KZ3uB^2rZn^po*_Tk6V3UZ(#Y-1QO0-^TqV zzAx+R8J9l^zc%%U&vW@p*Kp$>!oQaHkNzvk-_(s?B7PIb-+vT;pv#|te<^<4Vf-P^ zkH>FG{ec?vuaV0i#J?Hew-f(bH@8Q$nWoyF@FUAW&DI{ z_$}S|B;zl~kNBNmx}NJ_82=i1fA|6W&s0}`5`LWci}AzG58=O0`;)Js{j;5)h`)P) zdp-{|!Efu@mw;cJ@^OvuTRT4<{|M_l-sAqXN&4^M2S)MvpNHQXKjh&bB7c&HUvvl8 zr^o#}4nN-G`Qd8(ut)x`(teNpcTqmsqx>NJh=)H3KgGjOqW-9dzX(6oe&g^HJjN#;KjM);5kJMtr+rZme=L5g zhaV=tZ+GnV6~Xs=_)+|Thwp!i@$vBM;|D$b1pIgp|3&(j;Ng#;e86LV7U3s*Jpb>O z@*exk2h{KPnBP)k*Q)BE2M+86Yg-xSIRJ?5vxE}s89#=jcA&tv{u;U{?bcjG5} z)c**+-=lw%@BA{j2a3J?j4+KgHwo-wL0&@$oI<`6j1(ehKpY@ufT;_u~1n zsPp6S_mDqsJI`Mc_xu^aFZz?qAHEd7n0vnQK1(SC*tgph(8}c@J+`23HTBG#9sJC-20z+{Lk^@ zH{+La`Gfe|@k3u_^yBcqVtf+kGCt?6q$ElkiL7r*y~v)s+w7SH$;q!{_~P zB7R*dzt@dN*?2d85#oD4cJ-%B=KAjL#y=VVM*PS#8T~N+YUanEOXkOwPr`3X`Q-7G zU*r4`{u0WkoWMWf{6zdX%7@3{7jx}Tz^{OxGzR}QS3VwpA@i5IgZUZd$_Mdh;roBU zAM5-${3QIiXhuJPAHt8{ioe~>j~~Ame&W~o3tWC5{$2PBbbbncJLW&GE9)cR+LwgCjO#OgHsy!9@$>QfGVY^%v`D*kp^;7(MuDqZ2y+r%t zX5nvl^+&lMz9#Lvg!&)OodzW1FT+nR(=lB<42gOC;vkN&1qA?eEUEM=~)V%lcA?&0phZHV&wDvg9~I=jC_H=sypqk_QuF3d*Ep&GX;K)kk?%~exdQ*?eCK)OJJU5-!Xsb6PRbb^%9m$H-@|jWccE^8a$a(f&l+ z?U+X(=Gn|o&gSn1rKjxPcc%Matr+XY&hMG-FLh(&v$@VRU!~CB$8Y7CcGk3`dW`l3 z%=t4to@n{^_DQZY+4BcxlJ88$Fs`k4`_5#~Zxmzvq`!Xo;xsgvNxqYRRNyr7wag@6 z;570G`plufKktg?%e~^{m#6wgn@rjlkX@9y$=gjg&PQQKKGt1{Y{d|2g%XbF*)}xu_JN@bPjm|9J>37#RF|&MUZ~;%x zG~em(fQvHCclrzP{r_^lk21}7`a9~nO!Ea!_j2>S-Zas(%s2AkoG0;jqhCYse3m}l zOXS67nddv*OQg)7ne6wbeW#mmerER%lkap_^u|o**Zdux(;UFM2Q%;Q>8`-SS@btx z`g}Ua(k$|YPA8dR5Al0NGA(u*```^(tQT8Pj?>8(*?g{a0>0qbsFvaE{pZ2 z+iK&?u9+XsAYW$J%ui>KFSF<1pEJql_4$2f*UWD*^4al8|I%Y9e``#iw{gB0^J{b2 zZ9sBbF8z^NKH=gv)lB;`fcjCNsDK`t`jsmmMLjUj(=GD+wXZ*DDEoaP{)ElRGMR04 zw@^NpSu9~Q5O&Q>HU;cbFJu0(zfRVc?wPv){!O&i*fD_Seo?Zn$u!5i`v> zd+QUfoZ;5OO@lj^MP)uFIdP?_T)q!xilyay5iV~!E@-&)Ythy_U+Oh=%rbS@?~h5n zrOi2eSneI+3=`y>aA6B@ZaG{TQ&G%uF*z;%9b8$%#Tu7caL3`w87|hi*dLp=`AVPT z<}-J?dXs3sZJRwTR~;@-x_V=AP2tW-S8putX1IK+UWVjky^-vVNzTIkJZ>Gefv^>rc4p>9}O!(yc$?o=?Xu6V8mStQX;Cq~q2LXU+v_i*QX% zY!BPM@8NQ$>qlR6-lnR+{8?_VaOwIXoUzjm%N-UjT|Z)RuduG{kF7~RVsY;Zm#!be zx$iK$epEc>o^yg`-o7+BZC^JSwb#2GwtcnWni}pa;~VkW|FvJn#}yZXsOF{HSt)~f1W!(nRq7p3fh;?Rcmy0 z+}oT##`(SI3eI21-_Ksl`QyYJ@ZaV9X7ok$d;DjJrT=>T!;HVoSHe@H)6f6~8W(Zx zl=5C0*-+2Rih17NU+fXQ&&_{K$ei5aQNJsF;zTHm^1phNm;QRyD>t;-Y(e`paw3BTn)tU(SQqr)PMS*FR6B z%SrsEM|qiF;k@)P`M#2@GWLltJj(N9#jy*eJ6p!1{l(HTnSHs- zqkeuZL1snMyh9%4<>%3|N>G6NndZzb{*;cg9_8id<+4h$(_{Sf^MY5NLLS#&mis>m zt9sNg`)eeN`%eeef7$g;?q6LqfBt!ZzXz`S=hgp&o)gnhsb_?$U-D#CUgkIHG|Puo z{m-6Zd8vQKX_lA%OFu`RVR;#!QKwm6`Y-iQKEv`-{}fd|A4c76?zt?nJAas+3WF;4 z6Gyu_E_}b!Ae!3M#Sv86?WLXFpQZP8Eb8iiinuHBW5mOW?}dBtEZLV%ieuPh5$36mb(`^KKz6-}S@~5Z^;= zcDFRYH}L@CCyB=pKSON(oK6})mv|uY`@}i$dmK`?7~ztM=>Y!7TjWou6P>`?5!d^2f9APdGnl z%GsAaGL+9@KSgj}FzqYl=W>3W@$AbU>B}eN$=r{gV+HYU>NZc>w+18~8LE|0V;0Y8Y!`BPTf7b=r6uUGka>Par;_>_`P<54MR-`A#pZ!7YWMj#p{K-Oa%$_WxyfL!aOsCbE1@&^$T|L`KO2~FTU1bAJ-1aA12nEZh!Q_jOB!v{*_nt>+%Vd*X@`0-qo@y z-#g>=C-ukiMSWFX{Jio7n$XwfIoXbWE>_sd=LYFtlyN#)jsnvDma2Z;{~-0~^78$U zJ5_nv=gM5@)`iShIbzv|E+N+Km-wC1uDmbc&J+_q=;C}5yYO%S4#SuJjHaFTXRV}- ze=C&9iTF#e$i)4>vjUfAY)7DuixX>SJnz*a`!i|TssD+!T)&g!PObk1&ZP5ZF#rFa z|0L!;RO!_E={5iP|E2wpYvB6*Py27LfBTYS>BVlJ`3Q}x>FSA8cN#>K>SY}FXsSHurMZ9olhVU+f1UZ?{wmA<_sib> zU&{R3_XlU={Abz!Y(D=VF#mQBI2-3b%l>Ec`G3;Pzy0hXU|#kyuQuO>mG{xUZtUmX z)xLfbFopib$1wVD_rJ5T|Mt&;*!j2D|Jm6866w~z9fz}R{TENS{?Eq#7fZMP&&K{g zVft^k@_>2S`+xs}apvE@p8v!5xqUzBo{al{2ao+fDIp`5mh6A{pRD?y+BJLke<<@W z&;MuJ{Abnw>^}b?=3k!w&$ju`s{h%2{_US5uv>Z1yzCn2&EHRz?LD=F+yBCyGVbf8 zJU;(PZJLoYDgURBtoomFTlVh%)9LR2XXE^5)&J~1|Mt&G+G{;vUiSI#A@%&1csuL= zMyEm4>+|2Zw*Ri{Kdb%+?#$l(f1LT3=fAUU{D#pYHD;G^zh5kF5G1ZJE9MKh8YIr=Neb9MTRw|0&mG z&-u@)|1$sCwf|#IasDH%v*-M0)qk1)?ArfV&4qp{*MBgZ&VN?@m-)}G{eMNxzx^Jd zJ^r@;UzI(t|E&5i^PiGU`#;}Iw0-Ui*hx2s%)6*O|0SHI{g?TV@1H%_|I6v-->w7s zSXa+~sM*=sf0_Rz-Up;zB<7#&^8ROJy3c>k#`k|&^?Cqfc@Ev+MhxtokqWpI!U^lDW~_dwo{de|CNUlU4s^{{x7Tk%lv28_kSaJ z|7YjkzRtGq|7F#Gng8ti{_iQC|7HHqw)cNo^?CYk2<`FtcvwU%&s04(I#6qG_wc z=c^(Mg!tbofAIVpFdeY{*YAI%|Dj(*MLz_FVs;u>R%ypJ&_s z?>PIP^#5$T|NVZ7{m-uVzeA_k|Ll7IJE8i2w%z{@nEu;+-|PFovj1n-`=9;)n5F+` z{~bKV{%6e<>-)cB-2Vcm*S7z0X}$kz9Yn^s_r0O98Q=d7fcv-0A=3f- zdk^LLuc-R{uYvil-$`#|?EeT^Api0Kn85yL`)|h~7Z-qZPx>ECKDGXb7G~uB*N12P zDfU0~TE>2P&Hulx{}(auvi@^;%ztD-_Uymym0jzy{&Rcu-~Vd%?0*y0f3NF5?&a*+ z|7z*hzuo_Gddz>)yzJTk0R6Z3etYQaKg9hnyI%kHuY%a?-}c|mzrOyZ|Jn8WZ>;*S zuYc)(cD?>DW8P){_4P0P&#u@1UCh6H?q#n5d)RBj9tlg_z88nOv*ucnH_CG2U#hm> za{b#boNfKjYu^9awSRK|w}W5~ng7)Hng2+}`(G%H`uG2nUw!^7%Ubt8`a$;We*x8h z6Q&)y|Nd;+|9t7zzr6-{{QKMbkEs1G9TlbL-8`F4`$Q;_fq}W`=9hbWqJ0T{|8Km?Yg%wd&s&MmHr2^Y5#ks>%ScX zz5hx7ee45igJk~6F4w>Rvc$A5ZJ^^Nh`%B(NBlMM#l%~Ps}O%nT!Z*?;>(G@ByLE& znK(%N4RI^tt;B7Kr?4PzBwmHzfp`Y~oy2SKI}@)ZmiZIyh9AN2OT3Ku5#r^U_<WXEit9 zQ;7=^Pa`fxJe{}#@$kn_0pYqJ$^r8S)Y#* ze}O-ecq8!yVp(s~iDf;{CEf)8ItP@9E7W&{ z_*LRu)!lq7ATCV&8gXgjWa5g%uM^iKUP#=K_$}g=#BUSF6Td^;k$4et7vjaly@{6) z4<>$}_(|dqh{qEzC7w?F9r2sQQQ|ek-xF^m-bVa8@ejoQ8g9I{6JJ8SgZK*Koy0d2 z?;?JHcsKEI;vb2p6YnE_nRq|(yTns?P+CR&9Pwu2sl-1LPb2=Fcsg;unyx?36PG5Q zL0pwMOx%F@1>&oTXA<8^Jd5~#;unbr63-?cNj!&mTm{#ji987T3k1`)%3vXsSoTkg z+0P98asp+$@CBv^)6S$$bDDyJofPMu4F5G>^fN8(Z(hYzi>3cz`k#o#qYC#0^@)E; zd@buFKzq4NPCiElUI?Z+k+9P+3Vu>X@KuV(_?!g)$G&JQ*9q-9)Bex3=8l z3etZ4`C%&aoz?ueru@H6t}%VT)4byTVgI}S+d58ruQq+Z!@L6ju>T|erTuSh`hL54 zmHUVNPx_bkf2P^+o;R$uKxu3ABXx;-MxQn z|F1G@|KZH8f95;Fb3h`RUHae3^nG9^*MAEAPom%P*{uIzv-YQ%SAYrC_x}X?ABXx; zJ^w*{;$ITaGJT(6UY`5^^R8zRG>q!*IZB`X-;Zs(o0^xr|IzawqQCKITvq+}@c;Km zB4Z2X{a<8eFwICoqiEVm^^c65I{iN#o&ZYCE^rk-QpI$a&T=8>Pe_!~a>s%aHw;5+* zORM@WkMvVhCpg-lBG>s8IbDxe{L?1a5AlmPaP5`#x6|ihvqhyHds1A?F!{>DGt9m_ z7#I0IXk~oqe;wj;$=8Bd)^1zkeE7E!=O@0OxBzh*>a%}))E@ou3%Stu)2FU~g^35@ z7a<->>?dwWd>-*=;-bV_>eY7RaR5&H690jpyP@Ol_}Vc^sAxX{`s*l%e-UcO-Hufk z#dW~H0=4sD$M6Bg^~0ZdPH*FypU*Qd%k@*-z?QCE&EW0)S#F5pTH%Y@KG?Y$uDF}v zZbxk&EH_qhz3~U4woc1EtGKcF&!LvFudw1?!(WWrbz`}g6qka(5w+{d&dEZ>b!7dB z+I42<>-OA6j<@U8a*Gw0k9jQy z=ZE`1ar<((JXPTA`nLI&DXsy2W7MvD%dJqH?AN;rx^;EFVeH!aL~-rNBWmySc8=F5 z?p8R_;)b#Fwn1^7;Y3ToZBbl5IMI@DI}|q(PSpM!yRCP>;^x4KmWDg5xOd=0%fR_6 zWxUSUz=@VMT-w@K+~;tj_I_pCcb?*+aJ$h93}dh1GKx#ZKZ2HryHIhxuX5|f*VyTW za1|Ao7vGNt;HoOF#78bqDY%Oa7wfnP|5Ef~1KDe{hRRn5zcE@NRx)$0CH{42MGr1= zg=^m}aFq;a=c9qDw-f$-Xl0Llz3}^^mw0fG;y;O2@!-n*>Gp$ha8(Uw=eMb9-vs=r z=%sM26qk&@1hqfM8|zq!zY&$6_iv-}ZNvWwt!|Rp_O(;oulUE%8nG%h=W;i3^C4Q( zoU`-MLFLO2CmLrMdwnD*t|XjjEx7v?R|QVAHr#`XyBtom4%{HcHG>nq9B!E6u7eY; z3-^@bI>Cw7gPWwd-f*J-ft#VY;c%k$;pQoB7Than1H;*S`s<2YjX!UtyDu~}jGebd ziu(fYJG2p8L~+03|A{s>T&yEM*KbL*Ni4{mtB40*yq1%6xSa=gtmjbR&h_`uVg>C2`*l7bK!Qw z-3-@Gac{%rUFG(d_HgYLw*qb>dJEjGirbHW1nmHKyW;XUb@Najy%nyL;u_*tp?$Z( z-L1GA;5wik4QKa*dllCSzYBW1VPYK*;P*xEhy|H*gYX|m@ATltWN z>U#foxF5c#y-IESW~ug#hMS1m-rMJwR}>e`0t~A3}ol+4V6zmCtL+* zKR>kfE>heM{I5`Z_p|wyD$blbrQ>_@{EXV4F|wc4tkC(IyL~M$I>0dYd2O}g{P?BN zfrg271n{e%566Pcxj6j#=pYa7R8I%V(-IwG3flLL>s3G6z`Y*pN2_@a** z#*SZ9aZkXBh74opccwEVf=GjxOpB1 zm*tKx>>Z({t$!#$|D(Qv-i?mjXB zZm{B}z|BV|!abq5kMX}mpMgtK+%Nc|lMH9C^XC+I1Wxo>xY>#;*vhSU(aCVhiYo>u zIt6aA;>yB_J_q-);wr(3PKEniadqKDry0(!(=Cc?1}8clZinKog%f?=aCW`ySKJ+N zqBG!*DDD9`(J)-jDjD~eesH2M7|!;ipyCF>iOz&8uDHkHL}wY!?x*DyHx6zJ`XXFq z#Vx>Jg3gAkp}5WX+tE3Oi*@{re-xc-Alu)1DqmqfXT1QO2Y037YU4LWUxI6`xc2z> zp!4BwP~1TL$I+J!XV<}PihCY^4EhTBIxFs}OWi&o`l{jVKKX#+W|K#B0bHWuUWXHX z&2aX<+DCEkz=F*;XaqVhO_JCF~#l27hMQ9QgH|1{y^V=ds=aMTf6OmUmxL_dVfQ#IqhyAw`yh2iY| zvWVgi!-;+bS4MGpuXgKM^kcY6iYpB#`UzZ|;;QicAi5H+k>XmziLQccrMRweqO0L< zP}~SO(KT?lE3P{I5M2v*pW>RriLQftP;u?yL_dWaqPU)LqMyNyP~78iqA73_6gLS@ z^mDl96}JFRbUoZlidzjQx&iJ@#qEL<{Q_>O;&NW&)|Kc+xYdd)2PgU^+(yOKhZFq@ zE~>bAIMGdTdlYv+oakn_LyCI>PV{TI9G7OiE?t|Rm~ zTz|z?!594l?s3J%!-@V0_mtui;Y3fsO;+4wI8pmBZlAAaDQ;nVH*YD7PY%P`=i&v5 z`vPAyr{V1Tp0^bjg%iyM_rBtG!inaFTcNnUaH4tO)+p{bIMH+9)+_E9oani5n-!Py zS~o7DdEugp%L^x(4{n#@iol8Hhug2X5^$mg;0`M80yxovaK{x_5l*y_;q3h8s+Muz zXaFZ#7_NZgu7eXT0(ZXR?tv5a!uZxH^iP4JTR* zu94yv!-*D$Yp%GD;Y3TowNc!6aH1vQ+9~b`oM*4M|FMu1WxE}bT<>5vvZXnz!^g_4^iVNe52H>VD?o~L^ zi{NG{ZV{a5#c(exZWWwp1-Lg9_Z^&QMYzR^I|wIQ3GPG1`L1{Cpa@zSZjIss_|?!$ z;5I0(0e*AT{#{7BZ+xS;F??TUB3c#h2gO}S9??tT_9*UdIMK`C4k&IQoM<(;V~QIG zCt4jYSM`kh-yAs68gK;^w**eKCfxaoTL&i^2Uk{cKfsCBf~%moKj1`b!(FDhQt@sb zh}MCtqqrJyqL;%pQd|o-(YkQW71seyv>sd=#r1>}{SRC_#SMcKtq<2xaZ}(#8^GP8 zxEJ9>8^U#0+-q>6jSOc$*XyIW58*@`!wpv47C6x+aKjaM6i)OCxUq^Wd4ro@(JSGe zRa`YV(I8w{aaX~KHidghaks;XHiKKJxL$Cg%?)Swjm3%^3@6$G?nA|mgA;8Dw?=Vu z;Y3@(ZBX1>aH3bieWSQf;6z)){h+w5aH3bk?NQvXaH7}19Z+2E8{Pbhwt+jQxYBT< zZQ*j&$hfangA=_Lu7Kj2!HHf6cfR6offKzRuB_s^!->YjRZ!fcaH2QBU8cB+aH2QD z)lu9mIMH@+jTHAfoajw(%@y}CoaoJPZ4|c=PP9E-JH`D7CwdE9N5%aCC)xq-9>o=H z=hlnpt#I8HR|QV=Hn={DYY8XX5pIy;I>3qE4mVVB-Qh&S6*@XZ|3?%d&6C# zxBz|)^g*~d#Wlmf0qq0VKyh90`=Nc|nkg=_*tJizA6y&7B_+7e!$co~yGe1QsBa?L zAMOstZMfLgD>}e%xy`(FQQQpjhz>NI{XTIw#k~R-;d8Nv4VTk!y%e_?u4b~Ue~{tK zf4<&|TMG9fI+%P9D((~fwdfGT+3$DvRa}u~Zu~xnd&F?Izx@^W4Sp1T6mF2>_TV2u zLvW8OE)Spo6+$0_8>+bFIo)^^hkG3ENyU}NuY?YT8?Cr%_@cw$#wo5AToZJ-;q3fQ zP~6q{H=<7%&R*w}75DX{t{)xYo-~~Oe*6oH>yCfNEkhKnjLh<_tG9_|Olb-|Bvolk(m5l zpYO(HyuZos%N2bNu7Kj?_vngFg*#ty^80l~r@@s~T&ZfVAEMLYDk!c3oT&Z1ytW^g zDNcS*ujmZ8I*NOe`4SBq&dx_8#XSo*1AW18_Bv{&xVHIRKNiBxglnU?5Aau`v*2!0 z+?V*<&==wEP~3j}qv&k7E{Z#+gKJ+=bPilE#g)gu6rBqv%BUyd#?oZYY9 zQQRi{z36L(v+L?T#pS%!^`jh`47W^i4e+l=Ux!<%xC=MBe4+~tXa4hjrnvjaBl?Dc zY(G*I*BwsuP3qmCxL$CgZyC;BmtQNcADrmhhO^hvHpPvA6MYA6kK(4oi7tZsO>qn0 zMBjz`LvioHom9iw`~Eq#GVYVB;Y1h1`4zVvPIL)e8O5c-iM|h4QE|uNL_dJ5p}5>U zkBBaXtFO31aH0{oW{N8cC%O!-t>P|%6I~A1UU9YHL_dT}P+TK8(G_sr6n8zG=tppU z71s$)^kcY36xSC{^b@!dihBZ1bS2z)#f^g#T?IEyacv^*`ke*88g7o_=HrX5flF50 zzV}?drSNOv-c#JYW!?J<(RFYu6t|8%qMyQjs<$(G<9CirWV#`Z?TQ z#ohHuFLSk;|NjnM4|hm$hsh_p0nS%D<8^)lPV@`7{E92u(T%g{Mz~^%3&4qf30Gcm zad4tv!BtV*m2je);A$%_9!_*KTw}#`h7uDE4zqTj=fQQT@c(QR;(6!!(3=nrsV#YN#n zx5Ld>+%IsVJK)|_obPtGPDOXZeW19aaH6~5Rw^z4C%PMMz2fS@iT((;MR9H5M1O+Y zsklyXqI=*{71tL|bT8ad#XSZmx(_aQos9dzBskIiaD^2&3r_TBxKfH+04JIXcd_D@ z!HNC?S50wW!HNC~S5I;K;6x9=1r>J!PV_gpYZO=D4!5pE55nD~xbxsd55e83xC(Hh zhYe?+PrE9vK3r4uh~ez}?(T}a24D1d!`c7;BT;d;!-*b+dq{CT;6#rZ&OYA{R@_iH z(c^GK6*mn|^bfyGMwn2a8D`D6g{QmJ@Wb1x%kaH2)vRw!;MoTwjerQ*JV6Fm=Zt>S)$6De@{ITCui->5gv+hC{cxfI zxV(z{6HfFZxPpo+lHk^r=*4h;#RcF*E5H>~Tpc*kig2YAcNLsyCAe~m>j)=W87`o> z9&nu%4z9K08o-Ixf@`a|>)}Le!^JD^9yrlDa5pKg zADrmra2*u)1e|DHxZ4#s8BVkwT!P|WffM}?TxZ2Ch7+w1*Hv+!!-+P4>!G+EaH0+2 z5*2p{PP7qRU&Wn!w_69Ijo}6;t~8uz6S%>Os|F`}1zbpRSHOv02{%k}H^7Mo;YKL# zemK#laAOoV1WvRWT$19Rh7)ZLH&JnO;6z)%O;+67aH1{YrYY_dIMG&cVa0s~Cwdj! zi;DXRPP8@LJjMM9Cwev9D~dbs9=BdZuYpTe+{JLBZQ$Ni+~shhZQ&Lvt|gr4wQx%m zcPpIeb#M{I^@J0>9&Ux=9)}Z+hg+$*DR81Uz^zqWGMwm*a4Cvg0VmoH?hD0jgcH39 zZj<76!HM1sw?%PB;6&TQMHP2mXVw9F3*2_aRmT_Y0JmFlt>D_Dx5DjJ-2M3d(c9os z6*mrFv?JVaiVMSu-VS#}aSPx??|?h5xFv8Oqj$pj>SlcY`xalc6I^b^?S~UhfXl16 z9QV5U5WNeopyGKU_7%CBun!gNsw#ayZfMaF;7?E1YN#xcZ9w3GOKR09<3m zmF(iyfoM;-pyH~+)kk~5wNPAJe9=V1+0U<9EA9?B(cW;^Dy}=6=!0-KDsBjzXdk#+ z6gL4*v@hK4ikkx`+7Iq7#VvvpeF(0L;?}@@hxRv|{k*Qb;tt^FxX;bY0Jz?YJ0HI? zIuNeE;_BmHgFXy5L~(cF_dy524OQG|e9^&%v!5f4RNV7$qC?=GQrv5BqL08mt+-Wi zqL0Eoqqwi&L_=^>6t@#j^f9>UiaQ1;`ncijdVWE11-iQVDuxa&!`Yt~SfseO@E4;a z;g&0IGyYC=lt=px;QQ`(<2c%bD}-ML9pk}Wf`2*sln2)o|2lN62iFn5D>}}D>xcgc zn&iPfDL(qN2R8+OE;`IsPVeqT%f4&ui7Z?Zg*-2JSP({Q@UC$#C}j z2J01f1n!(}ZhoINoV`9aE3P8`f6&Qr-z%;KetUEZ+>eU88~;J{Im6lh{-U^1_|ws; zwCDFaJ3azf_AMr$F*}7TqDK3oaB7b7Y%3k zp%#j(OFq%rhO_h5QgO}TMCTaJ{O4<}xK?nYbIEs&;;w@eoo6_^POnwmPvu=dL|-zT zT?aQS?l(Bm`EYkC?oT+;m*MVH+&+F@RP+_vm#DZSaH6lm4NzRJ>aHK63*bVED-0+4 z8r%rQm4*{dhD%ahML5yd;U+7tCYj)8z|B)!KRD4h;gS{Cka|Vmf?K4x zmT;nP!$lMq4=4H#+)BlDgcDr^m!h~3{SbW@Zj<6h!->8J7gbyr>J?oKw_9<&;Y63f zr7CVPoap;-M-=xYoahH|zW-$0C&$ByE``ghxNeuZ^(-1OoPA#NE3Pk`=rXwCihBf3 zbU9oZ#f^Xy{SfX##f^s(T>)27ans;LKZ2{OxH)j5AH&s9Tr!;KCvbHX_a2<+O1S!p zTLCA!3a*LbK7|uq4cAO@o8Uy(z+I)dZE&J%;o2&$0sEimI=CAY*BnmtQ@HkuyB1FL zGq{e5y9G`(1uj8xcfpB%4tKBOy2FXChwG-eesH22;Cd{r;QA_VB%J6*xPgkB z04Mq-+#`yc4k!8*+)%~Mg%jNbH$ri*!-;N&drEPO;Y7cN8?U&J;6%THdscCu!HI5x zo2IzUaH3n`UQpZ*aH8MB%~9NR_CL|@;9geTn{c90xManxffM~6?k&Y_gFC5k?Fy?h-iB9dN4@cLkj2PPk7McQc&mF1QVfdjL*!H{2%04Tlr` z5pJvECUtlH4WmC9&VF99O>qnHm!W$MXPDsB`0kLX^w9~C#9_T}o~>fdL$SjWq7 z`Qi3^aOdG)jQ(sm`+L>)s(S0-w?I?j4lC|v{4VG(a5?K|yzlqNAA$aAIQu+aNO4o} z=c5PUiYsn0{#x`mxC<1w6@Nc^5U!HqPT>0=aN~RkuDaqb!mo`UhO4W%=J+?GM+_J1 zxDS6I`nv}=8h<)^)Ps8se;InrgWG_=13m7+9mdbs(~Zj?9$Z=cYUrPav-8_TjY|{! z>(CQ$Efv=ZKM}PTQQG@A#XW`};O7K$7|vdAH!E)CMA!b-a5>>RC~g}07NEJ{Iw~&K zT*f-Ll056sJSLz0y!g&D%onSUSm)ML-#2JpQ?DJr&Z^$+`1{a&a6J@v2>%3{AFi+B z^7eA$d>&c=Zm{B3^mp9nXhFDPiYq$6aaGVlaAOo#hWcutg$-xl$4^vTQ~c}EB5>0c z*A-vXPrY*#HwbP7dLG;Y#ZAH&EowNs@4l_L*WpCZhg+t&RdAxk3}^ehR&kr)M2o|1 zRNO8&(GqaqD((=RXi3A_&k1)au27so*>!qQahJo1mVx_2ajoD) z%fjVpknw)h0Zz0WTp`7EgA=^~uDIeJf)gzdcY)%D!--x9S4nXb;Y0&))fG1jPV^$U zx{6x}Cwj5r?0RXUxaDx772sMaZati6MZ?*B?Rv#+ffKD{IQu^SX2tD<6Riw)o8l7L zzbB)YP;V#2Meui{Rp9PbTq^Y*MXSPfS6u$yZatSrFNN!^xU$FG=drcmE`#f@xB}<8 ze9hsi!3|MdJN(Tp99*A-v1hT&oz`;NNy^?|QRzL6^5aQsPV9Naj?&By-$tp)dt z;x^##Kx@NIRh<7*_c^v`9mCoE+qqr0}(S~sA6?X(qv=Q89#RWcd<1E@3E~>bAIMF6> zyA&6K6TJd%zv5~$exg^x9aLO0`9yT!jAIU^x5y(noR0aPOiw!VOZ~=lEODc5p)#x10L>>)rg_1UFi7LHw@h&2SSG zcZmAJaP8ryDy~i*xBnIEC!G4YyWtCHlH~6}<=UGsV?}6YUJQUU7}!MDK;$sJM1;qFvxNDehi4 z(fi=OQQX6DqFv#>Ror+u(fi@PSKJ&p(Qa_t6}KEtv^(4`#jS!9?E&|b;y!~DeE@Es z;=?ui)e4S-xXH`PV_;z2RV0;m%Xst8k(Z z!xdB9GC0vea3vMD5l(b4Tp7h}g%cfOIQzN91&VuokXr{6(MJpy>)1!WW9XxXv-gE6 zD&M&exqQXZ5L_+AU4$?C7+gceT@Kd_eH^a2;;zHL9UThSR&ibNMTf!NthhmNBhle- zcPj1~{8{J|aQ7+hHGI)0;Sv?M9PU$egyCWxU*qpYM|yC-;{S<`^5F9Gd7kKK!`byR zP_?f-oah+1VT!8_C;AlJIK{PsyA2&{IQ#vX=M>i){~>go;q3Z*UU7r)pFoq~<|-}; ze;WF<;p}rsvf}39zln~ATco%M{yKDm;bI+Mn;hs`lJih4ba1#_anfVf3Xt-F%EI83OJh(UD)}U{C za6jN5L*Me?&L8Nm-^C#Wlgd8vVd5!Gx%i9F<#0bKZWaF5=!bB>DsB({ALt6WqlzoS^KbzD z2rg%njQf2p{ATFKaQPM24!<+{30zUd^}~M>T?to4aZ~W;qpRR9R@`FzwdiWNOBJ^j ze?PhguD0S%;GZ|xt;4l&4HZ`bzcRYcaCZM|rnu_(qMsVhexIq0;_AYQerC8>$05E? zBAVjCH7B3w=Z3TQk9bvYdpObchO^H@?G;y%?;nM^E;ks?uID=xR|{?>+!t{7D()WY z72Qa^4=CKrz+0>rECA|@LR|?Q*m){pTcd0o3FS%_@duZ??S~Lg%kY_?p?*jQ?F>0 zdLxP(04MrA+)Bk29OAAs(QSsa>oi4i<>5qspnYE|E=;|m+o^Y};#R_?qB{&{uiqVt ztMZkbk9c$^+$0%o zhQY0*eS2tM3B}ET6WvR`3l%pDPIRB)?7nu1;^x7L?uVtO?WFHs(-Gkel*NtCS@*efzp3UdDhvANSa6|FOqQ?zq*K;E^zgOjQ`JRLO!z14; z{8!LF$=6)vTZ#WUdIGME;`ZRDavj+Zb8P$CDefTLxsSSb=78&{xT5$K(VTGiD6S@c zLo^p$cg3~B?||lp>!Y|H_z$6Z;07t~G5qo9IdDT2HydB{T*KLYe6-?TgNvYf4QKbi zrxmvWe=C{~ZnENv@O?kg{D!kjVTR&Lz=;-so2j@1quqQRMGG1(*6}OtI)WDR;7;J5 z8*+IIdvJdI5@-<*?gIR(sNaLDhaW`G^WfUx-;5UZ;1ck=pyzvV58(Gfi+OMl<3ENL z_uxk2KaG~~;GV;O5iRM#y@vk|TFQfq;IBkWdvKrQZ$Zm=aJ%sjpk+O{6Zq#o=GIF& z56+KY8oj`Si?w$D$+-&DcX+jHU%=FB-^b5Z*HI0)2Ixg_$%<=%FM2WDV#VDJCt3mS zW5tEwL@UC5uDEU7w|cWrS2A3zV-)$uqm@0l=kUYmB_7;d{MXPb9^4}QkI<@yv(Kkn zR6o|^e}`TQw?lDz@qb4zgWIpTa~^l|dOlhW?y%wl_|-+>d{<_Cj%|p46pW<%9 zzYDDiS5$F5@du%CaAg%Y0{^QuDeg=BAJEI;u2ftq z{vT*vxYmlxKh(`fNwgl^4T`IXUkm*Y+--`x0>3R<-*B;x+wi-h4LrDq@Q0xdJ-G4s zVYHD4w*Y?$+Sr3zjlT(P;=%bhx%Y3PR~XLjSNEuK*?O@XXVEJSXP+Z_DsCy9Xb`Tq z;&#$5(WY>H6?ZQGf6pKA&EWbguD~$YzQSm8xQ7*24qvnd+z`c8gsac^v^1Q3{}xhQ zkmsPf@U0AI_o3m6YX=vEy9#cs;+j6;`Y{5oHQcj`yAEzX+|_Vl#dU;R3wI6NON#3X zw;!$z+(N~*!M_P@3%6Ktci?wHuZ3HoxL)`}(d*#WDeh_f+359fUn=em{7=w$xbGCV z5&uW@2DsgdJB*)yxSN+7;eJtE8T{&KJGi5YYl1%?y$LQ?FynpUM*NNF&2R-3cOSlw z`D+hXTycZpE`z%TuDs%&hMR|WfV)I-OYk?Kx5C9KZWsQa=xuNf6jzjXRYg0(HB($y zuE!>Dx5KqjToT+haCgAnq_{Th-YI%p5LR~2_1etYx*xVIE{ zCw>>SC*1pr>xusm+6(R@#XW-mB$^1fPH{>2lhNLA8xvS)Cf7*9UajE!6&;f9{ znr7Ue3ypC3%Ao@dXYcz36jvYrD)eEvVv5VV**%Ae4x-)*6c-2A0Ub=fN{S2N&qIg6 z)ll3$v`h36!`b=xkK($)i9TvL`?*v@#r1|8goX@fzt7%OaY^{kqmLQRK6kcJ+!FlN z=;Lth6}KDzFgg_OF2xle>E`VcbQtaHp|~sYtD(c;9#Y)Z_&1?XP;W?az3~U5Pa3X} z>F;R8O~Rjnj)0r2xL5GsLPx^QR@`#@HRvd~g^JsR|2;YyZmHt-;~z%Hz^zqW?on=> z3!zWJZB|?v{0it;xSfiN!*76&gFB$OR`}PWNpQYq8L!{l@$W^ShAX7F2k}M68_xc( z^ko#+A1;OKZGz$KepOC!<0`muc^rPC;p~0pBE=mckLWXSRTcLHc|<1}&hA6C6gLS@ z^jWxuiVJ-0_94;9)Z1KfFOyGn3i;Y7E&?a|9NbNc`x;Jks^RSZa);vLX`kpc+Sgfe zyT~UxoqBsHZUFg2pC?~G#r;M;(HZ0$qPQ^mR-$3JClr^8U+Nn--Y>w7Q(O?gD>@Ty zvf|F+{iWzE!^JxMaH21IaAn{`XM1oJ;Y8DD1@Nn&Z+mbxSGa!0!M)?b)yKaMT}1n~tM(<}kA2(aeHU)8;(Ec& zgnJL}H^mKxTLHHi?zrN5^L|EjiQ!@$gWyEp_uz)ZiGJY0je`?i>cLHc6ODLqv*1LR zd2pi{mx<_d5AJ#Vm(ULlXV+Ek<{9t%OYl?B6>tR=m&AS>K|g{krnqm(lM44STsg&U zhZFq-uA<_8g%e!~S50wwpK|L?bQRp?iYpH%y4rAdUu&$mN^o`1HE>N8cQyWP=vu?s z_gk$L*B5^{x(=?b;%49{qo2avsJPYm-=Lqtbx_-@kxQZQ*iDXuHrQS=+Q_Z63SoSWC;=oYw-6juSi2D%k) zo#Gnei+*c3JHHzh*A7nfJGiLg?uYA*MyYp?;s)YBhJFusKyf4SMYmD!F~v=U6a9gF z=d{SU|IL9D-40h+af{$YcfgfU+-f+{op9w9_YIurF1X5y+XpAQ8?J`pawNHRAo?R* zJ;fD-6aC3>_Id3J#a#j?x(Dtm#np!s-3u45xNG4=_ZiNvt6LS<9ZqyVTxZ3NfD`?h zdV48uHk@dx;q34C9-z1n;Y5EioPA$AP;o2aM1M7$`Oh~j5Wv%y4!ee^qfq;Y5$ay{WiqaH4;}Emqt@IMF}hmMd;0oahO-Rf^jL zCu#@9uKN_l9fT9jVL1E#;~T~07|(u><}{ogmmP|$ir)gwWw?Td+pD-v_@cRK-x0<2 zf)mYSxLC(9IMH)FxG8X==X!7p;NC*>dT=Z8*P;15xF7KMp!p4F@B6u0X1p&Pz|S?o zjduaV+4(4-xC`-Xq6H0S_tWBvYlGjK>#`7BdBxod*A=cX+$D;;A8s;S5yRQfspAy) z1Y88p4_8NV)8UT5od;J>aj(Nw+3NP0qHqlqw;FB>dOloZ#T~-WKhceIF}N!gR~f$+ zS{$yK;#%Ox)4mdLEfseo+yJvZ%On5xZ4z06+iE{Zhp(d-J!TzaB*-K!X+r~TDVSV z0PY^e4aDz2zKh_xC~h3w0Jw|c?pNGgxHr)Xa6J^4f*_a;Lm7^E zqF=KpAEvxsZgG^)@oZv-ynk!|JXgOiUxiXdRCzs42`{jUMXKw zmDgNwe&+KRRONO3;VjCx&7!>T<;?59EsOFA9_3~H@6V!qgz|d*1em{vvM8VMO6Kh! znnn2t<#qiXsDE4*=9!jp{fjT<0}EXJa$ai*kMf#} zlE=OmO*@if=hf>kfpYr#k^Q6cDb^pRKFJe&{nY9YQcho2a{bj+_3QSBs7LCR?o0cd zW>Ma^F!uaQ`3loBpT7|0rCzOlvM3+PqWo}GUglTE$M=S7zh3_V8uCmQ<-?Ts8vmJD zl=r>q>bLJ{(;xK-lCvlucq{h!%l@-MmDlqhro8k&q0CchHOEo^m#VxTzu?=k>zDc8 zrONC2Bb4_Vze8D+54@9c{KB-qHSI6_e8%frZeA54bDlfkDPvY>q8S_Nm zbFuiMQje^^Amyb0QQ9x_|NpUf9`H^T*&h!Gie(`vA_{7BE!d-CS?jf94_53^0TC=g zP_eC1QBhH&qGDSkqTt^a>tc^}?Z%FZ8eMzY&DvI7mH*s1zu)ua@FsWid@mr9&*w4k zd(WAfGv}O{JGZ>>+GW-DvmIULr*Ekb)y1XXSU>Jrf5p6v=V?55em*Ij#PL;zkFa)M zJw!@9i17Qo!XM`Ae4VBKwiBf+&DhFTiFexCmML(0Uf~2d(^0tmKhZCtETSx+)cr>? z>Lvaw?UomoessM=cR8M42qid)dRjk^?Cj~Euwzne(Aqy{YCvUI=nEVeirq^d!^wgv5eSXwq*X!I--8!!Rqm&T8#GJ ztm;#)%fcd(ull$zmw#jZc#q%Kzi<6;?YFVI8}sxYDa%u8_h0(E$g`+dyuX^0kJPU3 z>&HmFTcw}W4Xx{MUem#E89(jg_{lSkzgVArnR~1Cv-edq`-%O=@ds#V(&lpB3jd$u z@Y8v+a30+AbNT-=!v9w}{B(sp{Qr}~&tl-Mv2Y~7+kjUCi}tVo9&6;I%}?UjL-seW zOXYR8v0OlzL#fnbfj%&sa`2>#r}&hV8L-RTEpCuFxa7a}IQ`7?M;_}Z!rIh4<%L4E zJ-UAEq3ZRY4Y2;bsy^kqEUI=AMQK;->HgEI9`)J(Z2dm_+L@=**@=|6diU_ z@7;*{*@s&mC+k<9lX*zib{0`TyeHrM!|}hb>g(|bkJgUgp10MGe?FrAAXT3>(tokX zYL9=@+iUk9puYAC$G>|-{ruy#$Nx-3{n!&ypZhP4kJq=;BkE_Lis=82+T$-r)c-J| ze(-ed{x80>cK?ZIYS+J0)u(@&;{UAF=W$)Wt?JK|zo_qu|Cg#h+h_mj7i#yv`P7K< zzgTr)x|?OLBUd8pd|x_rij-$UY+-@Q8SmHmaw z`$(Bq@|g@)2RJ@;ICk@%GLB?Kd#vyBPg(hUy7I5ikD|jrNf@Z>YrA8EtNlZHWf1&? zG6TKhke2mXPurK6Ry}`)5XUI32ZJiXpi?-`{xG?6up{L_9-J$225Bj*CA7^>S!==~S zc$6LE(DC@dp{L{Vi9=7v;|qtLjz`6zr{nRBLr?qN#X24rdB($~*V=e|?-+-U$4?GD z9go;GE$@ePJUTh_bUeB^^mIHHa_G7IuaE0^^z%G_%#BCO=a06I$5o#5!==~S`4M;I zm7X6x9C~_w^m6Fw`O(Lrr{_n)p{M7^at=K`4_vJ0M^DfBF*hD9&yTi_$7Ij>;nHjE z{OIe*D?L9}b?E8&k#y+k`O(jzr{~A|4m~|THgf2>=7T=2=f`cH@o?$2HXeav96BCb zI`nir`aAS=Ja%yC>3F0ZdO9AvIrOyOU997=f#-TPHy$moS8W}S`#k4|ORu%_W1u6i z^!(V@p{M6Z+M%cC#~_EEo*zRUdU}2w=FoG^2Yp=6k3OFBV{SZJo*!);kHevEhM>G?6ip{M7^l@2}Ee9*`B{8-j=e$0(W%k!hH z){BY^Dc7Eg?d8OyaB!`}!A5$E9dVbvG(9`py;Ly|a<4%X3o(C@0^J8nz`7t*h zEzgg(j>kVe=Z8zLwew@DBd_%QxZk0t=SR_@r{~9G4m~|To^3A&U(9`jVJM?rsdN}m7-(9TZQSgk1ORu%@=;auP zjz=Gdo{mStp{L`qoI_8?qpw3x$75B8p3DFGxQ@p`|L}W%_Y1@={I1#XBWJf6Gg=#u zq+=X99{n78Iv(pg^mIHna_H%J1P(nNk1ZW~;-%<+bv$-}pZWI^^s|0{cWyjd-e0wK zJnr>euUvYqoge)jd8Oya4h}s%KT-}oJwJAH=;`?}(4nX2$G#4|=$RoJdVW0S84s6U zYvYl2j6=s`kV8+$W2i$<$Kx=Eo{mSxp{L_9%AwcVcG?6np{M7^ScjgTALAT)t(_l-dG4=P$9=B0+F#`yL z{CLcvr{~9$4m~|To^|Ny`B8G{>G|=BL$9^-W02?km>Z9l=SN$|WAQcQ{#6_Sm0oAe z(DzGRdaa!w(;RuF=f`x1o}M3Nhn}7vA2{^%{P@J7r{~8P4!zdSkG(wO;nHhuJSvWH z=y-hN(9`kw-l3=C@smSO$0K%a%g+OJJUTh_S{sk!JmcZgYi&HbIL4vlv5-Sg$0P30 z)A8ux(9`kg<2!~ff$^>jR3diwh^5{_}`cr548)A8u* z(9`i))uE^3k#y+kc=U7VwKg6nAs+nxC09IpA|6^#$HS$kW1vG%$75fI zo{mS_p{L_9$f4KTc<}%2jfzKGpU;On#-ZbJm_tv;BjeE1@fhXM)A1PX(9`ia(V^Gc zc<}#6j*3THpU<<7ap-uAap>uIjCJVgc#L!C>3HNEdO9BC9eS;e$EN-Ko}at)^md@2ixZk0t<56_z>3BTm&}(fxcJ+*hORu%@c+xQr9gk-ndO98@hn|kdD-Jy! zk7*7)9gpb_z1GHKKhJo$^jaH_vSS=N9v?XLbUZ$B=;?TT;n36Zs5ta=Jic-0wKg7y zc*et}*V=e|?-+-U$4?GD9go3DQ;=;?SYkE8Ssy;k-uQF>2%>b(g)`qMRz#}|}-`Msdjqa7UY zG*7*AFy5&4*iXHsZ+zO?@AN10PuopD&F=o>{5+w5^*;F{{6C$Hdqwf*U_EZlY(Mco znSacK_)o%||H&VP*&pT1*EH&L{>PwC|L4#i=YQ@8X^-LcW`~ zrOa<6Wo1<uSq={X2Jl(xcU7aI5&YaEp|AlsS|cl&M0?aq#tjb+2wJ z{-e5|>=V^oP^{&;<+k2Ww)Otc*MGk2S6h#_t=Ey+-G4fNqPVT&7uBDZXa9rw@pbh) zDSai}*7o_He|*muzSkFe+`e4=(+(}FmOIGt0A)TVoOS5mhU;eDPq|CoSGyUkJDaqC z-}RlY=gVy!-%+ra_jR-#yk6GFU3^a)-)~5+qT;Dp8PeA4VOzJS%&i;SI{s}vzP3Jp z#60iQ_&RdjV7VUC*G0bdqx9Ol{aaS9ecvj|z9@Nnx1WdoQT}f)KhEm@OOs?hE9a$5 zff*Mq=W&+4_r0lKZ^`prY?@>e<7m(_yg_ReD__S*3;-PgYJuMpLLJD-0u5&ajZwD0(n5&f6i`TSS8t#`3<6pw{d|O|CHtPOH_8-;bOFt^i@npfge-Q)o{zV+@ zx_?o8uDbo?lft}zQb7OgF9kX8pOheXwV!LJ_Sd|k<>wb);J*IoCtH?(3;9bZo9-K6 z0O`x6-o_{?=iiHU>?ZQ{l>DmR=nwM$T~^)yY0u$3NXVa8{cHJxs(mf*tK|IqTiUlo zg#2yQ|M`Eewtu>^|2n+a%l5yBkne!_@I7AU$AGP+pMeqbZ6f5)p?|)|#P&NO?z}&j zdA>ToQ()$E9?beI8#TX6uUFfb0dxM9UKV+iy{`y!{w2Yj|3&C?{+GcV7fbplH;ejj zlz)S_s{NY))1SF%BB%e7VEQir({C()d`0qD=O5*K9@$>wWc)JkSC20Mb37T0m*Yvk zC;H5<)W3w8PpNr#v_s(EJqO>5oc>B|Byx_^RkoFV!4lFR?Mo{AlFGj92932Zr~Fsx zRPDdqf2;jhKCiL%#g?x2UrE`QRrXcRX{>$4rK;`A%_GeGD}Pt*zx=t4wJ)pe%P9Lw z%D&+2#@bg>`Iq}e{6+sIzNz+KagoN_7xa?;IDa$BzPPe4)?oW$%D!Yrv6uc!>i90) zSpO9ltM*@9*_TlEWxF@lzL;8{OR;MI1>aWZU-B=FwXe8%wf_przNE4*w_aoI%PRZg z>im{a=eJk3NxzLzk*s{ienpVUqRWIQ}*SR zedRM6YhR$wZw0kK$f*56_VUKs7gP4-lznMsUui;P?JF)R{W1SiYJX5v>vQhX#@d%v z_9c~l1!Z6P;s)EN&To|t(tp$XqU?Z)gY7GQDeE2cukd5_`j`Ex z`urOo*;xO@mXrQyUryPVQT7ER8f#x%?VmHszO=G0nQ5$j+10E4ms0knlzoXK8*5*n z>`N;90%c$Ph{oC%Q})Gi|AXsG@!jhA5j(uG_7(qJ9pAX}UsCxmIlQs`M)8tbJK!UqRUyQ}zXiG}gXA*_TuHRsK^wKaxWlYhO&+ zS1DKLUqQ{^#Nfu-7pVD>QT{6{|D_IYtbH+MUrO0mQubvJY^;67Ri!`f50c8hqOvcO zZmfM-WnWy`S5Wq)4`{4?fwHfH>v5jn^2)x{{*ARSrtB-J`I}esH`uSS_7#_v{+NFy z<-eTrUuK`i+Lu-K6_kBhWnX@;#@bh0rP_ZvWnV_wmmAnv`?AWujIuAS?91-iSo;EH zUrO1RQubx`XsmrPWnV$f-<+Di>D?P^U!dkkPTk*4sQbH>T^eg&Oxc%F_QjQbxm08A zE3Pd4as5jv`(nzz_$iIGFRScJD*Gzx{%QWNjkPaO_QjQbWo2J^r^ebBQ}$J6RPUcl z%D&`|jkT}1jP%F+E2-xTF|3Dt|Dd>CW9`c-`wGgwin{-t?%!DZiYrz7FQ@D)EBlfs zHrBqZvM;0TD=GVm$2HczK-rg4_7#QFUrgDTRQ45=eX*??YhR$|M@FqLIkmo& zH*c(cF=by$*_T!Jm4e3FSL`eOas5jw`!dSD)Ul1VFRSc}EBn&QzVfKX+7~GMD(d}` zl(H|eX=Ck+Df>#wzChWR*|@Rx6%*1Q^Dm>Gucp-c68tRt2iJRlJl=v z>?{1#So?}AR{Jlh>`N;95)HO5tL%#_`x45&@-2NvM>98jkPaO^CPb8%d6+pmC22@FQ)9PbgYhVPT7~buCewNSCIa={*{z{S!G{g zVq@*gD*Fn`zKpUjo^PyufwC{B>`N>A%2zekzL>HvqwGs5`wCYy*1n>8KRc!N2Qj@r z=+;>KvdX@svaj;BoNsx3Uhdjh`-;m;f1JN@WnWp@muj$mS!G`Z`zM~?O3J?CpBn4G zK-pJP_7#5pDQuxpZS+l^Ecb2vG!%v{K%;N zK}PKl(#gi!msIOtO4*lI_7zuetbH+MUsBnZQubv}Ypi|6KGGle2XSRzpzJGN&|v%U z_tmto0(&?=lFGh#uCexIm3<{;UqabeoUcCn%D0I=zbB&t=HHiR?+`itlf7M-{z-v( z{aA!P?<2cP-d~RDKZf?%e_Hh)sQ&X{SHC>|y!xIA9_RM~@bCY5yxx-I%iUG&-!z#1 zE!p58nK3_QzHGG1Y$Yjo;RO1?@4PDvwHgjBoH8+b^m1%c}j< zE5FVDf@;5{+AmJ~ZSCh&`$g4$={MS+QSBF0`^DFPoBb)(eqOa7MEEE5f%MPyA@`mz zzqcv=kuc9|>Gy@X-dCXCbUr|P{C_$U?}$GC|Hi^}VgCQCB{0|PA~?`~GP+&*x*H$MI=9skf|Wzq-CJAA5|9pX)H|F;29jt^Kr;=eX+iC-aHpV99Z` zwLj^%)W0Mjng4|^gqi>4e+$#Ei7$m|ZwmTN`H%LPANfy3pLvw{M40&>fSLbEFvssI zH$WUX4(icP`mL?wUvFIL2inJy_L1u?XVv&;RsPrOALd2yU&*(o{Qgdu`JDnYZ;IcF zocWytGru$6ROfFR%=}G(qwJ-9S!G`lJiFMJ{IS}9B{1#F{7~($0NmuS??ujekOp)9 zr@&kvvi}o(`ZEF6{-pn6zckjq*w5AW1wRS9>`OzR`Pbh5%flY}uk7&OlH2(Gf43`p z>YarDuZi{|a%Qvb|}Emj9n9t+yY}7mNe#(|V_S>P`04yVXrDZ2&W9p6%3j(Ro6YS@EFj~Z-TXJtQZg?YN9}Ls5A~Y-4Mo)$%>`>ku!miOy-=~w;Q(|+}3-}ybbx1YVf{Zfx{XPkMQCF4%L-+O+vwI647{F>si zk*q&W=he-t*P~(}%s3}D6y|!K-&mOId1h^4uIKsngt?w)A?JEtLHo=bmThHUa*JyF zQp&!hvM;Ud%YkVZ%gQo-^J@NO{q%g-J>PYdcDA-$ZDp~Wao6o|e*4<3>qjx;pV?00 z$Ma(a%zVvlFLK&h*;bhOnFKRGb6bm?`59~@+?1b?Ge7fSZLjZo;Jg3!J)aFdv~Bar z_j|y7^MUI<636^CPyCFy}`Ba?Xz;SdYUuzP|bAJ3rpu+HZbn zd+X&!#W&bb{LlC%4iIL1v-=A(zQuio8Q&l+%=iY7Grn20&-kVwXMEFO?H}Lx`ko)! z`hJG%z5@NgdH&Q|e(Q@Ke-t+=Kaz(^e3>8dp~B3M~LrAB97NnIFaB z!px5%p6$&W3Ex6k>aQTdS=CGlf^l)=o8*fAn!exxC1eq=|Bob#qQQkeOX zMSbQ+33BE~8Lac8t>^mzoh42jC;Ow_obNpUYdwyidP`%U6{VM5Th5nYr%%2MCGk7~0eR@O_@)8+YI9y|&Iv-|H^l>&zj@x2W|>`?Fqd@BEt^-|C2P zJ(*MD%j?_JM4A80*VL`TTwk)c2y=bOTrbS^C3&52)A{FWVXiNg+l9HlvhO?zWLst()QNN?Y+J*zPSg*|IEMiL&D6z z66DOk^j#uv%D?-BnSU|JnSUiP^Dho&{w2WLKeH;nzURxaEBihFIvnRC`b&?K>)NrN zdZ&5nUE!%W#Z&Km=rM0N4(0{N(bn$)vL9VGYJQ|2uAU!-$ExQ?7EC|n9<81q*{7@L zN4_Y``H^@+nDe6mIp;?atjEtdWM7f`oWI$!Fz0XPU18c+1T!BqZ-|`lLnU4oX8*xU z!cF$RD7+91Dx&{Cfs^lvT-&R8`Bmh4mUd}5^XX&H{M7ZMnEoq$EcViWiO+@Uztn$( zX=f2~`Y-jR$mzcf+N1w+ABvp*%Yx~@^cNzh|FRzmN7+BS_%HZQ?4|!={}ZPFlHUu{ zeKp6n*+T4Y~HGum5yCU-rH3y=s`>JQ#`p zznXbVJLp%=m%VUaYKjLG=|Acn;Hl?(f5G>By$kw{8i(&bt4lw>``g_;_2}2Aa(0jJ zU{60sjngG({1Wr;Y*mXv`oH`K^?#JVSHyj9`bh_Z>!?2N z%iX{BTep_>e15l@r=IV)T+atMK92uic%PB^M>$LCt%mhCO0VY&EkAG2?fITZ+WP$9 zdmi>ZfBByO4_(mDFDGK35ann3^S74iP0zDUlsAzwv6+;!+TOYOE0NXv!&#NT_2${! z_|0DNo7MAK=MVQk(OKKMkPI{b#m^w8#BtauH$fKg->Px&O?7x&KU{J?=k)xaf2L z8At!z{}iFG{X47nCmUfO!+2@CxSyE2K8R=NC;G*A-!Z$)=lnL31DPf+!)9VTI{2hRK{w}O9a-P3~<%D_uPOU4<^LG~Q^ZrusXOVZsKyr}t z{2p6cqk4>5WCs^Lq~d;r*oq^m)E7f$3*gN&lDO zU-~}|`|9<7H*{1)|J+{{z>H7sFESoid=ikm;uEO&q|v@BJ{ib;NSyJyD&whRP8NTu5em80y58=EN zrT2)ZUVGh-o4BN3Ui;3Iw$5wc_)YMfpOZc33G*$goV&hNdx-P1t@B{+`qr|aedmYo z`gYC#{MLgzv2I13mj*w2q%}P1ym{Fwe*NAv$WL!x&-I|*^*rjl#PvK%&v!ldU7vl| zzv?XVr|glqzk)J@r{I<+*uDPe{pp`=ebq%&NTfT|eipi!JBr+;vg>!hIg+Z?(7F zG&irReMA4v&8y#*SM;jy`sRBco>l8K$D_;H-ELq1&nmyps(u+qU;p^VdG2~j&q_I` zt*6zai>A4GQ|%+>!yoPXqS_1oD>_Host^QXCaQSGa_c~R{T-}S}! zJXYO$G__Z|?AdpG)UUVneeUY}ca!z@KdYW^`o@j^k9y8t@3^TytH!^*=ljdP`7x{f zIjj0*{P^6lyq~;p#rM6E`wR1Ztt{lM$I>^ye7~QyYbU?=e%OCh>1$t9J1%*9x6k-g z4yle$Y?v_LmrM>4=KGQb#E^7^uF|Pk#l{{L7($KeuT(5|5IqcY5hK2=X)H?`JP03obM$t z=X(Hq`95?Oa=vey1MB$Fe`)2v!ZBhG=Y#fN8twV|FAe)PkZW3^VIvuQ|}v3y^fxKj(h6;;FU zXt|!?zA**n-&dASsJ`BapD4`h?%#S?mi5iEm|K{e0WJr`hwVe48KchN7GGnXr zqX;?kqj;vsnIAF8nIBm&^P@0E2s^&n*cMu$@8k?n>$;W@hzMs%==9#Fz;t)z>IGi%=jkHk@_yb@%XHY@2CU) z{$81Owzl-mkJh%&`5n7Z{LS-A;UZzK|0yuzpT1b+oZlJLXZ*7lh@A5~i~QpGs*)2q zHLkY)-eBMP{kY?MMd%-%k6-rG8?r#l_lM{&wio3OE%(iz_F7+beBOsY z;xM$eng79*>ijQE7H0nE!1Q|otJ(Lu#dn{4WM1-&eqnzcH}mXF=<$5w(!125M?bJV)~~m0 z>v1iM|Mxm-{5Lzkk6iodWXF8e>i|cmC;ps?KxHgIP5WZ4cSk?z!_uJf`zMsJ0gMrRsJoZ0L<4~I1H(cYX z*Vg;ib3FHP%4~0(Rr%T8>UBLmo^&xXP)>ubWUlj(?LefJ{dXwF$U{dchR=kj0tAd&m} zubdWrm;VX}hWnV#l33#FE_A0|E2e=?Z4z6bC&;N zyVv$#Y1jJvm*1tf|1tySEdK?m+Ww30T%Z5SJJ$AJVTU=(f7$J8`!BU!ef~>qTibt? zZRRZh6}PVKzuZ>!`7ga?ZT}^=n6vyB+q|~_NmBOz@5OWLh&+ygx%ThA`}NZ5(jNEgIqcW@_oxB(`}}*=1h^L+3tk*tcI@|k z?;HBwhi&UTIBLy|9YIw7`HrKl?PGqHhDp4b|M8QBnV&r6iXTHXukM5j>(|^}Ve=h%(uNAqk{|XaD-{rsTH6ou={Flnt_Fv-a`utb9sx}>)M@)y_Vzs&gB{tGUev-}sou(toox%&K9 zIKQ_4vggfN{!5)(+kc61_4%)Ic5VL^&ziIRmm6E#f9W&p^I!6e+Ww23K4)vqJ3WfR=`d31+4v{+2xv1EnO~ICe|h9n+%v!Ou#fq}_Lx89){ejY8^@o1srL9O zZ>#agO41+4Po{s^ALZm(<)8d>wf#eRTlpt=rrJMb&aWcY7tXK5L!!_5MLFkJ{$7!{ z)_=b9>k^!I=?A@j@w}^#`|?3(pLwC{vHkY4!}t6a;I-x3Tsm z>$I=(k=V!eJo|$%_a}(~18iz=f0z4Sy~qR;mm6Z45Y4*mQ*!rj3|F!zta`%<6lYyM+l?*HPDbN&=R z6glTl3UV~>EI5C(e+yfSeJ=kNw-ULpe@k16zRSPmEky3?-^%8q|9kas4EDSH8{e!x z|0aUk{!MOLpMQf*e&7C0Z7lY?{F~lLJ~xH`_<-cja%cx5$0-H@}4FyZl>NT;#s~E%p-q->ZL1i;4X%|CW1-+}FRA zMMdA`-x%b+{*Cweefu}DNNxWn7p~90LHFAJO~pm->)&)Y(VyM(*Z29m^9DwQz;%Bk z`;FW$(etC}eh}n3-+6zh2)Xtz??09y=l#)OUWo_qk0w&WyuY6AEZp>b9r}E}9&{CX z9OHG}Kk~g_l=-pxeo+GVi}-xK1m^Sg0+`R&b6`GS&wzC}PW?y59-?2hocGrcz1C0f zX-~a#@%=|p{c3yaW#8xBzV8LhY5wwkzTrD=Uw`}NQ+wwL*Pj#mOMY{``3V0H4A+-$ z!CYSs*-P}J@{#Qq2g>@u`{Qvi`^)Spa?S_J*?(bgkvFYhV6I=;{YB38D}R76*RL}4 zxqeZf>sM+o(T`(5l|6*JgG>7gbNz}#&imb!T}00N-TB>wdA~cht1#EE44CUz3e5E@ z3Fi702Wx+~^?NU$tu1k--*tan5A|^u`_8Yn9*4^wecX55dv&t-h55{On6LCp+4Fm? zKl6O9%YIs0(%$@V$v@7&^e|!0zx08^98c^ZVdg=4kTBa-^mzF1QkakOxr7WQ2u!EcBc>Y!?d7LHXm4Ckf zzuB~ew5RtGdjC@IxT){^{qoeWx8(je{*J_(<0yi8{ZM{a+wr=GUQm)rXM)d%}Q#+i07 zZuC=IU)T7?$M^jDrl;RGZ|C#RtlIxGZc$}h+qZ=yf4D9%e;f$`?Ia**(msv>#X(*eE+|&#}J<=f7Uym4(m#s&cM2TbO&KqJD*LH z`*h(x1~UCK#_@1);j_0?msr*mvE^TsafJIp8KFsjXe>4W z$HV7(Rv!sI7{{B&i(W?IcsJ_DVuATJHU`JTvD$Xf!G+D*5qremYj8aDgB(wo-(s=b zXKFvxh{Ybk@o>E2&zQCJIUEn4Lx#sWKi|jkraZ=i{uz#k=7s&zcmKw5J1)}*+nIsm z;d4s#Yh}F<-{!}|F4n~H@VO_)8}`*7$LZ&+Io8r=U+9H(I++G($0gfH9)#oR((L$w z(C2ZadF;?;?S%TgPB;R`Lw|+G`8@eFb)45RE!o)o*aXxw);2%f^m{%+J|#kadxZS{ z2>BBc@@FFC&qv5#j*!0=A^&HD{G$l@*N}H{_@DpN*jnn3epSju%q+&{Q{GGD6DP`X{y&+N7a$*{+V6|{ zu|uT(X^@|fGJy?LVu;AE!12jVa_K)mROENyc(F+?XOQ$@kw1syZ#K#0%#%G-I10Tae!jE<%1QxB~f|;0~C-Q^95EKLG9x zc@ex0_(|{p@KfN!!B2zF06zo13VZ?hHt>bu7r+;Rf5H4*9OI8|EBSsl_yg#Vhkjqk zF9v@L`A*QE|4oVCI^dA^&&)~}-@9~z5?^^K6;EkZa3HW009^h-h1@wOvcsS%2fX9F@ zNBdWTuK?cxz7qTo@I>${;1ki_zraU>J5Lw;cLVnUzk~YgfIkNB0v-xJ0{kEFU6`-W zflqyp9t`=v!TrIV-VuAZ0`~#$2%d)gxEl5z zi}S^J$X~&H%R{~%>Msm=fABSsU;Ux} zJ;C>YR{?Jido~2$2l)W-(vS}WZwH==@!k*pQy@Pb@{7R_LOvP%5cnbRuFxOwvDmvM z_%+BMhW@AE%OU>}JQ^I^Uh?k{@PfGRJs8{vyb^c?@QUCqz=P4>9^lO(KMZ^fZ%%@L$0TVLf{p^%LOrAzu@`8F*{(U%>l-Uq$^4cxA}X1n&)=0NxpVCpZOu4m<$- z33y5H4DeFmZXZazUPu3Zzi-+^9QZ5nRPfi}GI(Cp-y7}S4*3Z13Xq=%{s!_c9mW1{!8bzQ z1Nvw75czkIKLGiE!6oqb;7`FnfIECD^-o26i-OOAd1iM;k0cCDI;XF9|7ch=zHxdrE zlrp{{$_=C}K(7QYZ7Ro$IG#hhB`{6PLa&VD6_i=%SJszy(kNpnGmx_#UB2{#__dP} zbTB_lcNLxwd`|pVd1rHM^7`fq+1Z$15BaBO%^h*`>1KX|Ao!Z-H2CMKjcwpzl-@jZhk)4_SgIfdG(<({?K3D&Cgb7 zFXWCUga63?JK!I~o34Aohjv37-+2 z40$+SJ~J}EHhsc55q`q4gr9V$i)Mw=&oH}-scE4Xj z>}UH?rLIr@_8--Dy4s;W``3DUe2LE0{s~q*-&Uc2Cadx3_Q<(IcIU4(OWl7~_0P)e z|7F#`u3wI*|8+$DU|t!2m|x953BZhq`eoF2<=2A0v>Z3B&%X2LjJLmXoXgCpuYMWz z*oHlntJbGpTbDt9=_lB+b^V$9 zarRTVbf7IOC{yPO)851-)m&7ZyjaP{S2Npbt1^3$v|oUo#dBKMUumAbtVzYrQpP%= zgrQHO+;AS**QN%^eG#rHPeFbWOTv4SIC3G z(m&gO4)Vny&p}T6%=;nsvoPdOLe6s+#LnUfjLW4kTrR_6!#at74gsG69tyq`d?@&4 z@G$V>;344Y;6dOY!RC2dc-a?Qw6pYg7b`vZOk7oL~?egQ9VeeLn|d`9H- z$4X%Ob6v2uAk+_S;77~JR}GVRa{QGuWghz0Ke4yiM|<*T*H{101*^xOy`sMQ4?SDm ze|A!R^&k0-^_M5_#J;%wf*_C z>g#`x<*V&a)LDPWYpeT@omXG~d#U=_bL*?WG}a6HFMED{^;c2#Q{(Hazn-d}zo@?Y zTd4Y#3+t=Dv#KA|S$`i@KX*ZW{U4(0mvi;iAF1jm>#Tp_B$a=4#y_v>XY0)0TXg-4 z>l^?5s($hE`szQe>c{G=KTXvSE~~Hqk5v8ag!<}#qv{tgt*?GZl|QjM>&I37;F9|K z|3R%^u{z_wfEs`Hs`~oxt?Cyi)>nU3RX_BZK+4*ewq79y?=~D zKz&_b@27SB?rd0)Lblg0i}jrW+s8=CXd09C&$u1C244etMS{LSmn=cvD!svm#h zSN}J!-=)s_q5qrLpWjjcxRo<@MBIOHc%lEA*I%H{`nvxG9reec|CZw4y#IwF>N9?{ zU-$nfNBw1${|isH?EkKH)^FZ__Qq|YjZ?sF-p9l4qkE(z7ulDmEWoyUZynbuO&-(R@Ke%CL`@{Obb^IOS zznzr-1|xpqd~5z`?*H)jPN+Xf)jyy{{5k$`{feXhd8+=g$7F1`VIR#uA&2)^!%z4- z{r{+{Un~Eb*XQ_ORrPDx-@HEk|Ea3a`y-q`Tt7pbd5<)VAN#+$WA*&|_rk)gpD6qq z|K{~M{?V$wo%mu-)b#eg4T$o!S1df380_ zss3x8e`r*V^Pj7JbN`3^yUu?#&p*xjcb)%S^>zRABmbNGF8sab`KMX`uJa%3w{-p) zkECjC{xz@Pn*3w^*5+UH`mM>o=Ji{Xf6eQ=_FuK~uX+8}ndhXHfBd?Bzl!Tc&IA4b%cLHa^&?FE=Jj3vchwK)U-SBm{}$KF`G)=L|Br_2 zx9;ENe^>pg{vZBz{r^#o|6JVvE1|M_bCuJaei&-$+Y zv#Y-DU+2#iu;Wc!|F^XN4&%rEUHfm=Z)yE&USIE@lUGX~oP+mULVKHkLJo5`{Dkd< z{s=!qJpHHZcgFg^v#MV!f13Bt{ljQgpYf-CVx{bvLc7B@!rbEdzniMx{cG_<2Mw~Ti!x_a#VfBueJ6we*FIKf1-bKRR5jfKYkC*=crGP zs?YU%aBuP7SEx^ps?YV0-^$781U*$9gRJ zy-qy;WuKWjexWQ}i^31{jrqstx3%II-v48MNGreo>zeB%g~LOPO9z%J20;jO5NkK0D@mOEwKs`Ts{7|G_H% z|7hc1uUYEH&prW8h>S-IWztnc;s8H|gDE+{s<5$8Wxu(02rc*3Fb_jzZ7r-IE<+uoL&iM=m@A4C1Y;CH~6fxiM@2cBg3kkw0Z#%?0N)C}4SYZNt$oCv*T7Ff{vo)G@!t)e2KkNP z&%w`vPNeqrT3A-@N_DtH2TbMPbJ0pM%FryL~hoeDk} za`XMSw*BK56#1LrV;~<7J{SBj^;gK)rR`qu)sVjnz5_fR{1o^d@Y`VX_pY}8&%t+s z7eqe13hoH|ZUXlLUkzRzoC9wKJ_O9~4}K85H{`d2j|86vJ`4Oe@TK5$z&C)+-{V^Q z{|+{<)L4ER{22IM@a5pIz!!sm2A9BH7m|3~22Ox41+NFb1e`=Zy$?= zz!SkIfbRld2EGHFLwgs1uZR3X@I&BX;A!B0fu290l0|v{|@f`CmH`M;8nq| zgDcRV2Hpztm%#^v-vA#EHv3l_p9{fx@YUdJ!2Eu`7r?hbJ{kNF_y%wZd>r^)@D%X3 z;48rkc9roB2QLFY0o)IKBDmLZSuYL)ZwGl9d;s`N@F=kPK2bZ~3&7^vG%N>b@2}u% zAb$Y-ckus#9|Io_eiQr<_-k+x+_jsG&n^*s^BsYa$?k@WGfr}_<-(%n?`%2J@vTr){T=p?w zar`oH6|wIV)MNQ2xI6Urhh7E8S$+#%7GSKS@y^e7?&$C<{{XlJ|g8qG^ztl@WgYkY9{U&jo@qG`+0~~i1Y@hiRha$^` z!0eCtMR@{p>al<3mrIZNh3d|N^{2cderKGuKQ==PEEC`vC>ejY!#vRbI}rLTld2u& z2iswuXn&jQe*0m$Ik*GL1WM))Fs8>vJzY|N8T`Wh;&E-y`Vi=n`mXY@SazvU_Cj~b zzd_(H!H0u?1|JJv41W(c7~Bth2zYDo5bz%0EO-$3ui%yNzU^r6Xvj|hj|ZOwo&r7* zd=L0&@U!3}!0&^P1Ah-b68xt{Wc-JMR|F3OuM5tA#~v2$TEf5m6aVc3`3UeZ@KEq6 z;8VeufKLJ620j`55cqiTo8Y6sUxJ5&JNFR#M}ijx9|K+mY>jUAkMY-hA@cs5(YJgb z^o_qPKLkxVEHda|o>>UjLANUaPe7!`j>znz%NO-I_lbH_H>?Ka*dUmxtWM&vFrR6F{eP1$mKVbJYMXdlUL0)l+wuxv6K~7wfsMZ{Zwog5w!AOc_|x(c zU^5>qp9D7RiRH_|#^0820~>!^eim%zqvemlS@6$bvtC;HpKv}i`E7X_u*q-B8-Y#y zEbjz1`D=MUu$e!Whk?!fu{;`V^4szmV3XgL$Ais$v3v{ISg3bD5nfK?+dSv;(kehtA+_jI)FEgJkuLRafV&c&~JjVZD)#QuiPoZ!8Y55nh z$sfyno?`OHa=$G`*rrYXSnjc;u!*1LE=S1vZSu!5&o9Q`mY0RT8NcOCz{dZUw+9>l zTOJ5D{0v^*JX^3n2xV3UuQr-MyCTCRXiK3eXW5Pz8bx4Z<{wOKc~8_g^VjkbU^9O$p9wbcuzVTV_|x)DVB-(VMX>RQ z<$tGTJjNfE--g`y!!q|<#vhhHgIo{7obBu-;V+Pz{gCBe%Sij?`(7=t1~$(-EN=lm z1-u)0DEM%&c|K(IPX(Lj8vp8%WZ5te%$d6XT>5#VQ?EguOs`6~Kg zldqQl1~&O>`DU;gpXH~(CVwq|05i_)Jz>`SOsP`DQr) zn|!c55Nz__at3Vj$?}5E`o0c^L>OoxCFU* z9&PLM{RET$mfwNgJWsX!E%+92=M`l9lfjFEuK}+HHu+}jZv{5_XnA+Ac|LD>82Cc) zDd1bd7lY07c&pF%AqwE@AUErWmER3M5Bvn!tWQ?{CipsV1#I%&%I8IV&HS~zICuhh zRq!3)Ex~5}w)z9X=J~YcSmr1@Rc-($!2bsx27NOht^RRf<7La^z&C*d)Hmz7m0u6J zIbT@54{Y8qvCQ`uj1`t&fc!S_2jHv0KY}NLyY`iM-ws|5oCU`Qi`<-_Z2K#L&HE;n zhr-@d!JDAIS%O;A_DhSCa8u2JQ{M9K0_03h)5%Mc~80W<9t4@&CWm>!oI1UdJIQ|Jk%?KApfU z68Pl-^uyz3ee4&y{6-CSNQ+34faP*7BN=oAu3d05<-&ye-)H z-|{|Sv;JEi4mRh1%O`=&dT;qmusI)Cz7TBIU(1ug=6qoJF0ffYEk6b}`E2=BusI)C z{x{h8-*N@xGv^1(y++7i$iYK2P`o!{s;4{E4g3a}rmA?-@2mCYG z?5C}q|DS-_Pg~~olezx09Ke5Oe{H$yN ziy~-_WcKTp{{gwV9<*Er zoBI`(zXqH8JC-}ICgU~NJC+v#o9i9R%Y)7Jq2;x~=K9Zaf3UfKVtF^Px!+-VDA-&t zS>Etq>F-SNDUgo^pARPeCiP%8;bau`Dgh?)Hn0f@_k@4KP*23HtUP! z>0mS8Eq@6%^WE|;8M8{>G}lJz3F6Q)V%KU7zQtom72RrT_96KacD3ziZa^Um5kaUF^TpTGjQn zUeH(kr;oFKkBIvDi2BQ^`a1rxm1_6Dj;g;b8c4rwX6kSFBo{CmDiT~Jg&t_NDfnt~a=hDu_e06+m<;#?l$_sZfUiQy zxZMtZ6yo8!Q!jyE z25wlLf986ldnh^-$BzY%2Alf@R(=}T-0!h``mg&j%jZFE_G6a+1~&IwEdL#x2R{xz z9sCyf2Jn~Q)4)H2bKpfb8evD21+NM|3%n`#0`Q*Tk>H_Vvmdqgodh=fQOk*=Mh=K9C-Rp3*= z_kd3YKLZ{O=HJ8I1b!cKb3ewmR{>83&l8NW_KX4d0NaDj{?Y4KB9Qfq>p4}E_+@}< zN7v7z{`{sGoJz z?~DGUuK!|NO8@%&(I55o^`E()VNaz?ZYJ?I_m?c^-jIAW_m3>E0=c>0VtHe*xqo1J z0NC6gvRp=foBKnS2SIM`KUqE*Z0?U(z5qN9JPCX*cq;fja0zUlXWRN8gU$Uf%in;_ z{SeFZZ7$<8&-X1a4mS6TEUyAK_g^e;0yg)Lgzp!BnEPdxcYxg7AG5qa*xcW;d=%K+ z-?Drf*xb*t%)f^;_uDM<`Lwy;XL&sI&HWq8Q^4l_jpYZx=6;#wH^An8pyltt=6;mr zdA5-8oBKzWyMxXBBg-p+&HXmZn}N;!Hp{V*ay~Wp&n))^oBMl~`S*C{ewk&yA7<{S zS>6flnfE^|9|$)0-z<*;oBLyy`S*C{{RYdtpJncsSw0>5=Kh=IOTnDSECc*9X>*C+ zwV2qQCkyAnJwG=qtNC05?h5%t@M7StF|iWhZNRI6`-3+-L)zaKyc2jk@IK(}!9&3? zx2b?QcJv0)o|8wyD;K^V@EH4W-=WokvfX#l!@+M%jzp}hN_zdv=;4{I)!LNZ&0KX09 z^UvvEKL30e%=eex2lIL8Snvs5WISenWbGM`_P+w(0yg_QE9dtk+y;IG@_&P00pAYh z`vb$k|APDj@Id76ec&wkZZO}kdIZe(tKI_hdF`WMzHfCCnC~Av2Il)y&x7afFXMk4 z%=f9@0rUCqhu|r&?{)A}s6P$d4{Y``5?`>{Us~Q9Z1!80`S%kqfQLZ-4=~@ix*B{E zS&`J^{?{FQ|a$*;f4bE||}=&jw$C z`y<1_{C#|=k^UHFt?WKR?Z_E7tqQk&^-`bpCtUL*QbH20OA8git z%Y4867VsXBoAZs8moOj9`NlHef4><#82V;DS~z(D3z~=mF`7E&64_f{k*sRBvZvmVAl;y|4WcPBbN;mQF<^84v3xbyoIfq! z4>spZ%ddi;181zISu>`$Bx?V6&cD zz6Na8N6R;Z9{}_Ir&%AZ{87lqf!_d|^Oco<4mRt(Cbk3oI2U$ONs178ik3H&-ZK)#y&ht=o%iFxpS(7y(p zhWSEdA_q` zcx)i_&GQS(8L)XCXZdXKmEg<3=J}bG-vqt^`~cWwg_ZBRxY&CY_%+DQQ7iu(Y|b*4 zJMJ#}cY*tW3*dg>iQoa?k>J5#^Ze4bcPiN2zq5Qf*gT)Kd>hz254QXy*gOxm{5IG; z53>9puzB8Ox$_=kuX)~Nxexe6@Y>*$z}tb%^E|7+FW5Yvw0s2EJRh}u2G~5GvwSr; z3!VzjgI@rf=b2XjQ}B)8&U=czL%}QTEj$UFfZRO)wDmUto9CaFcLkpUJ`DUg_%!en z;QuG@J>Z?Hvi9NFQ4u1DAhrNf6v1FY>;V?AWh$uzzdq^*k4|IOpbu>;L`cedqjsxjWD5d+oK$Imx~EGT<`soxqO+ z{~dTQ;HQBf2A%=@6z~VYw*vF?*GGWA1OG3;i;cGaodi4$>$7}b8u~K>SUwL8cp1oF z2Rsn?WMKaO!Gpl-gD;=g2K_O>cLSHlng40P6TrU%n9n=pDSFVK1pZ%vuK_LqPY1pV zIB|rX&*b|GK|ck&5AZXP|2yzIz~=&g0=zHq_T4Pr^ML2w+3+dANnrUrH250;EW1m< zqu~E;FS4t} zFY9Z-%K*#x2V8}HS>FThaHP#w*W3--iozysi4_RE0(1itK-0iOdb^CRFU$lnco6tL{4fqxU^Wq%I12)^v6 z0rUC3td{}v_u*td2F%}IlX?&M3D`Rl_)TEhe~l0OvR()L1^BWa1-$TB8xJ`j1l$aH z+3y2h2K;M*hXTuf5%?p4Wq%L&U%Qz-+1~>m1HPP30^So?_WOVj2fiKnG~ho0&%o~k z%l;qa3*gKC9x#7jL*`GwyuZu?^Y`Ut{|$Wp{a)GM0=^XXWPc3!Dqz{a0xkic0{jTD z?013x8u0bNUjp9&{2Q>Wk3oJ>~{h81Yg#>fcg9Svfc+g2z*&T0^Sf< z*1LfD`z1F3ZwtPxe}TU*u&h@B9|)1OIDa*&hR5WOvh-{V-tuyfJZ@J&RYTV_wi(X4>$+D>?Z+l z2K`5X3*cV{%=_8Pf%k^IoCkvbp}=y!4fsT0*{=iM7g)B2Rxeo}7gB+XATRSZ;Az0J zz6E?Yu*~0pONdwYkAR;BU-pN9X9CN58t_lRvOWjAc-F>G_K$!E0n2_6@VdaV{s%k* z{$%|Rcq8y-)B>J_^NH*S0rT%4$odxW%Xoex>r241U{CggfVYM{Sx*8!09e+WfKLOK z^*Z1!@qIa2p99_(_(?2^X97$82D|`1PnGcuczIyy zb-+CDNv{It^CYS7fHUZ?@9WFwF9F{IzC8a5_#t34-<>Pr&zrFZC1f4De}&D+e0VJR z@1V3hv433#%)hr%0A2z1Wc>~D{QUVZz{9{l4|pVS5qNjt8-b4nmh)7wS48}01G64w zzY6@RkeB@`;9G#@ek93W&Q>H z3h;Q~_knK#{t8&mqd|VY{VYGS{{_tNzsY$bV1C|kD{vX(CC@_wpWkP@8Mr&_O#h}?|`2K&I7*wfTex{J{efnkAM&DW#c95Wx(fwFY9l>mjlaw z6Y%Z8GXDa;7g)wW;HQCQy$W~+u}4PtOWX$NdV(_muZ~eGmMS!NgM~ zi|-8#>|gFM%yEwEe+Kz#ii@{Sek#Zh!btf1CBa|rFBZ@I5X@a|n0eXkZ-y5Fe;eTC zXc+BK(3b!n@P@2Na?J-k8kqeCd5%WPJ6s3H)IzopeR zX~}ymF265yd%)-xz1%E6Xt)>j`vD&Yyr#6e;(ZD|_G`xdrbm3^eYJKUfq&NFwcxXE zo(AS>+Zp!ApW*DC276o|F9YWKyV||xpX*I8*yH%V2YK?lI{80Ap6kfLkf;81#3S2H zxNddvjCbqT!pIl(zX$FN{fY3$x;fwF_iOlL|GshY&kud(|2<&lXHQ`6KMw(ihl3Ks zdd}ZHz#NZjAkTQ0bn`Xq`a2Hsbwd9}!5;g6A~5^2H0*P{?*OL%bAeg+ufRU}ecbpB za`AR^_SbdxHwEVYc?II*S)!-wZy)ek&lfm3o zPw;7fA~5rDKI(=14}qz_p^N7q&?o-|VAjV2(C2t|arwY7xBML$u4~1uOe42Gdt#FQ zoSWO)-`~<%M$b*Lmgo9U|2ZL8;5yB7{m|!(J_hzrl2+||`V^t{jiGC8c=<^&@=A}A zpDgqt5q6ZW_c-3Z(zOOXUH1`Pd(TC`*k9hS2&?Aee%XY4k*W6e>R?Tx`O3j~XAReP z@)P@8zPGJdJ~xB(Rnlrceg1hraTVluf&4LlfUn_!M5PI(j`nfUm3xpnJ|3c6Qyl(y7 zLTu_)LVi;L&91-lzLs}?&OZnG+%IN*bWYG@U2}Y3F1Dfk&9KMwNqgu|3vMu+!z?_pjCr~fn$#%kS zZ`9W9O2ArkdQtBJ&_^3N@mJZH^=y`R`}SmqKZ73UZRO+k_1n*nVfEC3M|i%2gW|-Z!+jj^Bel zp7Yzgj`n!R;`^iQas4XoX(x!aV4vsoje*ye+~~#mNxkxVrgwtVJF|{nW~k{s2DwgV zKJg;3){&yRVL3 zE@^u2LasaP{{Wnh@z*@w^j3V&`p5lzUEtN7-gMCY`8IQ(+41MArZGy&DGUWL=$jKtB@}7P;=tDj<`;^bc(3h4(sU0uB2jtI!9nQ}_Lf5@NioTuDdHFmi zk!P=`IUYzQX}w-)no&5O6#Wcw^#&n*ugRr=neXEDv}g=pKN;BfaTP>-l)OCs+!*>3 zLf19M%fBzQjUwn>r9*1p_p8H98#mp<^z!_*!PmU$HREHG=ecg`)rQ&sN5SVgHT_Nd z&R4#Ft4e@+Ch_$3g+4fjt}`G?zA1vfli1NU!pn~qdX$}Ag&tL(`wCt6Rd442p$~|l z=Y%dF5zZlhgwS;kcsoZ4Ju1$lW9Y{UUH2ew=eQX9pFo%8AY1~&mF}{5Xy5z9#$D&K zUNeC?x3~{@{Q~rhu5P-1YWDQ(q8Igfeq0xPJ>%{W<<6$nn174PfSF zsC({L{J!=3i1(q-b3XG#|Fgi?+SJSY|H{Ra`giN|J$2sBZ2F&$k zUSP&wfPco%bqVT;IRBKV99xcC2J596|q9=uzv1-Y@hK zdFDr8xT=R)9o~xmvmWjQ9tJt~%j;(*n*KC54?l;#u2Fi$=@+5j?QZ6=+&YGCCGyaJ9rB!i?*a2Z zp8hw4V$)3)_peT`(Rn@#`kWU>{b=)!{(Rjp^o5NR?@QPZ%J&4H{qXa=EBLIl4nMU% z&*S`Y9DM)1KfkW^fq#zcQSi_DY-@ihUvHgR-{osoJNxU`foo+V>s)3&3pa8n;mEYD zrG8U8^(#0px6SKpDf%y!+82Mao$+VyYM=k+d)lX;YOnvf%%88Tzsm&Ey_)lk`$Y-s z&O}$&dEl)vq?{kafs;4edbJL44!C7K`={|=fgSpL)!`WqukFq$>pMKc;n$$w32{6J z%=#Pko2^I0em(dI@)j+ONJIJgzO?m`coAU#{iRv3!*gSYL?IYszk4_w=a&)q@jFWf zPHlPmk}@zlt^*Jk&p#twp4J7Qfkw72f!mBUjSxZ6#ixM zd%`aL@8z%`$Lu_oPsZ)X(SJ@4_bv6lH|+Dg>c^+8_Gs6S!#t80?Mv!At2gey-tM$n zwe>h2`!n;9|GAd$^=JHQe9HGgeREtg;K${u>gq6symG%E)@=2@J39K37}62D7RZsqK>j3Y^}OooQ-r296h+rFmZwjOkym<@{A8gIiLj&eJ~4Fdm-nmBId#R~`YX%B z=JH-Ie!iWX&z@lW=QmAD^U1c!bJyVbHNS6lpZwbFjyAED&!@(NegNoY8DRZPEQ+qa zJ^h6k`HIjth>*_B`@#7u!5{V8>W}%n z;NP|5(O!Gk!(LDH=L~7J&OQASq4kfT|5<2yU+v{D7n&{U{{-^(7sz))$NmaD0+{{(4)o5Tm)vuT zsSDdYqJ3Z2^Z#Ju=I?hY@9+PXg*^B3KEOO@C4u>zU>5u{-nROuysx`&rJqsrU=aye z>(R@17J4tCbG+xM)9l>UX>oVcJI3|*G~j_45B9^?Spt3=trM6{q@aHX{Bisr2Il=g z`|bT_p#LW1xlVro9QRx%bCmVFUS0eMJFKf@N2^1|;pK%*U?4y&xBt-zxO~1bNF^B5@8d@0Yy3gk#sy zrcrY1*e%c>3^CT%8=$ie>gD?r$a8$?mU-a5T=}^6JVLp8E%j4hv`;@jt9|;_neEfh z{n|eLay#QM%w_&Lj;yDq^Q@i*|5Ur)uMOS-KG%yp>@yy}zQoz5AHR-F5<_Z>{%JRh{`>R6iHJw<74+h~ z9BwdCh92{nyUy}>9rS4bdSF(a&*SLDThHTk=yM%_`<8w@4*nuw)XQ6(J=*noyIVS< zeR%_Zc>i#}JCFOkR*(vK{zs&2yYRTK0K<4|yI7Kb*h*zUO2Y=d`ZYFXqMfi~f8|`RTC7`fRVg zCt;80@-4)%o*jLCB+8cQxxFvQLf_BZww~+r(Eq^Y^WVVr_VXh2+j_2V^c>&q7n>(s ze>r{}w?@z9arQVLI6m}Ke$K|H58_~btPad|Anv?Vh5p>0r!y7v-{^U^_^RnOdS2ZI z{o;KN^T53Lx;|0_bS%i{xFlwn|66{w@#FKAJAiqP_j#v&7W&UZp7&)h0yFP%`eo=> z-2U4P{UPX>*JpoIuUY)PezW-bExR>=dqXg8+%wSM+36n)?C+z7!(I`3e%a%t}Gm}wzbsHwDUZk{ABL@`+ltaW`!aVN)5Dete)uC&*v*4uQ~huMR~?kZD-vS=kh+1`S#S!}`ZpSONSljfO z2c1KDl@~R=wvJb$<8e!!@$hy1xCExL4G+=D-)ZS-@x2Q>To?U1pIff=b><_d5A(s7 zzVFe&^jT-VuF8uTpZ*hge#JaifmzpHzj?9N>$cRnHvVQ{j#sWz>-w|Y{q8V#U)T)& zxcHiIf5ZM1fLr`8Vg6aazJJLjjZga(VA>ni-T2JkWVdhTu}{#Sx1U(r^l8uYCxcJ_ zoPUW)V0s*XwxtzpeK789yR=`tkDt((1nIP&m{My$2}6`?#_xf|+0WqbHTm&B zMGBcQsxIxZZSL24+|7IOq;8(6$2Qxyb^Y9)t?TpmTjKiFbeEmDe7_Eo1yaY~(@zk( zo)|p+A))tHcNd!0 zlcygbwAEwidJpL34-uL^EAsS1g%;&^VhmmH%cJCviJ>1Wbj_Xjt8}eFxleLJCPo}Na0T*Y;d>=i-R??tE`_Afo3MerT;&Aa>_ zmh;c^0`-~}GQCBTmS5`4s-u_swX=Aa?*KuMyUJ?7`rRPCyg#GLIeaJc^c3V-Bdt{xr|7NGZ?BZt6>ko&$BJ_5I9PMun%=%2O zRH%uU@xe@@xmyjJ<6nSYqvO3u7pp7TUTQApV;S)Ic}WtOpHF93ZoQuB z*>AKy;_S_BeblqZJh084-oE-MLw|1TBX!2y)khwBeto#ijjykt^k5rbu2X)#URS4n z8m*Ul_8P61ID2zjFZJxPPS~byZ(qISq3`Qud{>*ddIr;r{oy##e--+EKRG`}f4G@T zWbUxIeLd9MKOThLxb>vbdZ=fw(fuber1g4^^T)jU{inV5I8JP{kG8K~%Fy@q($@1w z>an?8U!d1$y==0C)iKW}D8H8TW25y_&t9YJN1Q#*H(w9+&Nub!u@2al-)vt!q~0?9 zxvhsh^!@r#?>t(CUZeH!BkIB5-!dPK)M+Z1 zT>s#@|`z7a9E^C8*8^c$TI>{lB4jn;D$^ct<# zxWA{%d^TF2_3Y6u+j83SwPJT$Klof_C@`Or_d$ZF$2K*@^tXfjqLAxxmp!jY0aM?P zcOLq4JKk03H#**oKe4LC-`4eSIQo-?o*(ae=kQtX`4P;utWW+v(63j!AtUQfjzc|v6XB2R|Ng*y?l2Ah$@lAJoPWwUTHkT@IG&BJxApA#=c{QMuwL@=^dUmi z=c}h7KUP(VM7{k)R3b0-$NL#0(z>U5`goz~Ge}S0PiXpi3CEjuo42tD{k*#z@$>mL z$BFu4DqKz5ntog7-EipTpm(RMBR`K)8??R;Jp}#QPx)p)-+lpn#_#Ja-%k5J&!yLE+qYP+%K|qA?(F9;)GKC8?;yw-l6ecfTAW^glf2jIy;Mi9G|2Q8TFTMo)a<7Z!u;m1XHUxu<6IdyR_{yu#5CpN+zEPdaW;KwdRIDs zx7YEPd&l(Nbb4RJ=w(*4b&L5;xX*Pm10CNzr_TEHxxzJGq9&m5?bFFdX)TRk<~MSx1;nvF?8M6 zz5JR&OUjE^2fSfh_j@e(e$SQ2%jVGc-#elY+HE@7_MrurvwUs_J>AcA4Qm2jzf+*s z267HNP4%=5?R!0i7Iz})wfDXUkWA9i%(y&L$vU-$fD!RI;Y5n%d%%kdZMW&YTo<$yUK z*8=AK{zkw$*Y(=c$?xR&Szy{f1eoW@Q-K*@5t#8$2d4i=fa(7kVA_8RnDhNpC;u%l z^Sx;A+I;r|=6qTWctz`OVpm}LJILYVfo)YyBrX7Ee{TS0{C5B|-@CZ+z8`!(AAT8_ z@x2So`SKMo{VmwX`bV5`=cy)#mxes^-4B@kT@#r1W19hUysB=!$~yadK%VpK2w?U< z56t{s1Wf*IkrpU(s4dhi@D z=ii%-zrXAMx8O5hEB3ekbNu!MX1o)Dx!)fR%=vLLF#XST>r(-Ip7$oWcn)>=e8_YE zeaqSZ1eoL1dw|7H|EmBqzaxRU-t7uZ{qex;-w`gJE5K(y@@~Go4Ln_a&41fTiZ2blXsJ^5o?{1-!?_47I~$9svDEI#_{4$S&k*5O$$-abzMc;`QH z&4jSC^M0sF-tU@1(=p#JZT-?3(TmSZiqBhxb06dSP^_}@P2Sf{{t@FZ zF~sbSHL(Q$KhGhcZwC5R(sHgViGJAf?_z!lyfvE&cwxr!OJ)qv%V<_*J^rl((~-&~*$qTdlTk_`M1* zuj^gZIH!f)Il}%hq3b=Mw=+`cQRAcZDEnIpJu1%`q3gQk?XN9#?N=0C*F{g)|L>&F z7o+G=dF~n|aPEB&z5=}oKKxN%Qu`lr$T`jN!? z@G9hoz|PWZm_DET=-k^$UZX(o2)XTnc|JPN?f+xJ=lOSEV4jzT0`q<=yK5m>)-^yc z&Obx(KPgWMzYaDdFTP)=h=SHt*P+(mwP9dOVCFh5e|gxA^V@`VV_pbwoQmt&NE`@1 zJkJ~k+zayaq4oNS^-cc*r~hZ*Rh<5C;4Jj~IQemT9(EY-3l6{N@Jqn#$5Rdu*v-b3 zmkk_$D`5ljJ<9b*{`nj(@prq=wjKmL>VXnj6y1%2H^e}8ej{C=zZmGTx?%j%GI z>Fs#EC1t=g!=64!=(-nrI`3;deIt=iMab_ML%&q$QRjxcg|2(+V3*JL(J$@~KHncX z{wKhEuJI3GK8KyLr{$mX+0Q=-A@ZWU|Gr?(%~!uabX(iTh4&gq?PdPipSJp!^n`0L z>~WmiYp>;d2=4hy`75jM9;ipwpHB|;k3?LYzs+Aarhh#2d44K<)0qBbmzT;9jp?5c zeU4N5r^fVehCb^q^=o7LW!L`{?oQj9|D;>zN^R8VdRP3?;^q35na475BF@XkmA@A) z1)#Msb!_cA*2A4krnz&&0PK6Lqp9O+_5D2Xcof!6*4wDPO`me3_N}#d;08ADMx$VP z|N1ECV?aMiTJ5Q)>vNO7F?3zqz5JvYd8J3mPZqk~gLpei?-N7UJ;BSbDYT@#md{v! z^;v*ke4b)x_D|+NHHejNJoT#=^XdOCj{4Ax{PZfd`lPe1?5aN5OM4C z6TQBd7w3>-@3*<5`Q2c+_18b=xeWA!R9UWtN0^+Q0uqTMf$47pkx9wx70~_jq11+^ zzk|r=b)md8hhDyeEa>{2hZpA)6W#T-rsw=KDS6m z&_9t4L~Fy#cNF@nLO)<5>!*LtCFW|b#~`PBxL!?*+jyh`nq42cMUB4Xcb0kb?-7HV z6HmWS=z1RUbp1b_dLHp~{d>du9Eq2&lLG3*>zyq9)yO>kGNJ3d^YqJwuFt(a{RtWG zwIb-t%L1k67zr<2`Lx~fkKfet%i2B;co5{oT)3#0S>5z*aC#5a)9Yt?pE$i=f!B@k zmrvUYzxHMpC(qAY0&`vQai*U&y(=NdIdBi~dU5{VG`;U3$NSHDH#h&Q#OO6YW_m*) z#~Nq?ZgP5l+mU z^;xK1<$t#=e(Lvd=jFl=jp_da|E#z2kB#Y<-F-*;m&Wwx-`eU$_Yl2`zcr@c6Z)nl zd+0ni^XrX2^S2uGIll^>8q;47`g$hPE8V#<{jH$S`CnPQG5xe#4=P<6)87;RxgX@Z zHKuu*>2Lj>HkxPu7ngCytA6IZoc+yxUk^u-RZU-cg2$LSZ3HvaiLTD<;#xfyhS-#c+9lOF}cmrAR9wWnV$ zG(AJy4|%R*Uha0t`MjMa3#;DW@nYWD@_QI@eBL*cpTryLSC6v(PaAFhVYd2-ocjGc z=v=>^0Oq-(aDi#0oZZTi(RTL{xjvB9#>bPvcyOJd=u$gde7!;N@tz^{HRa{$X9}&q zyf|-j=dp)EY~X6I{s4C#eh>ZWj2H^X+I(ieIX?A5r2K-rSbn$KZ3F*yx1C62kF)+Y>W}i?zTa;Sg+JD1rJeqmcfa1{V&==jG7!4*`T83n z^pzs$O+xQ0bgt*0BYv(A*#&LZzl(9>I5RG`%ufq{0n_{5+4~K62o$+bc>OH&(_?Du zX$|0&WAqtM8T#WO&;9X0VD5kHH~mw;3jLz{e;Fr3pU>62eoOz6w<{sf{rDE(5ib5O zL1*4)0droK+P@%+nvv7f$fyF#ANlZLv__olYfpFiKO27g@7*8=9c z&<~i;2|DDhzpNL(F2(hi^6Wobj#DmXf4EfyTALT8Rp)MAl!lnzzUUv<#R`U{V>`eMCy0p>Z7^I}8T%Wr9s z4RU(*>aaiLStrSpTCanlkmr17-dG3q>To#pId2N^$2|JFi}Oc$zYZTK1EFKVaWA#= z9MIfO{lfX}JBKv2Q@@a(JO9it>pHWw)mP4q-*LeGTwM0V2tU13KKt+MGR{6d`MT6UjH9-e z+Rf&5ZwOxP_JQjhUI+3V54Mb}jQsh1cs=Op8mkxQC&wj~walzz>_i@T1aJ|U#eQl zzB2T?!yogxA~3(7#Qlx_nYSwR+j{Qv=d5~p-UM-Q-)Fz+ztMA3oIRgk+OM2#!x+%{dDtPq+;{zcM7^UR$2@2MV)53yuciK}(C0a{a$Vc> zIgZRzzG!+=V2}Nc`y6;U5>m}pKPcc6IXHZYHHw$?mgYh~^TK%lR z)29ec&zezmtr<_B6eF+nDEY}k*JoPZj?(+Y&~@+g^7`yJDX;DJu)5q_-s@HG^NGaM z{Y?-*)rMZocjgyc4~#nJ^X|kW#$RGj^E(!T{Jl)-G4E`%57ye{xUsF=S<7cUZ25op zPKV#k;OHu8bsS#=eGAYB$b!lj~o zZPESzK&ZFGpLBIWJ+|q+ZJk_lZ_C#%Fu?!!mIIyp?~U&M@JR4^ZqGhx{Yk+N{Upk@ z{q*&l{(CLoKMyZL|2z2OK0n_+7B}ykvyYn{uU~-uPLO96X&vhOD7yB^)2|VlR)nYD zEHtg>D7wbt=?@ESWCZ;Yp=tel`Fn+?bH~$5Lepn*gU~Pbdt+dZi`RQmbTm_*{+`fQ zm6yLbABqoIep#QS7gn+-<}2=ND{ zbozPVKJe@HK~9vQe+}gM-1BB&|J>8xpFa#a?(?%QDg@KaPs==j!^a{2`?W_|la7UIoKO6D$T-n}udA`l!zFJ%~bX|*h4u{rgX}QKJ z$)AHNG3TK46?3;wz-^)c{kdJIOVA&7fUPIY%Lc&yd9n;g&6T{;;vWlno_F^E=6b~Q z&v0m`q1VryTm3q5jEn0qhx1ok-LlU8I?>auGYp>nX!KkZXOHvhG{mPhtJjIZysv1w z#^R-XTjQmC0rq&GsLx%MHw|>|t4{+@)F9+)me&w@dHu;k(=*Kr2iEQ^8 zKnnMh-tMJhb5nWU7XH|k9?ys}1Z+)G*AM%`6 zG|%yR7|(B+&zB+3^WEra?X&OKjouP~`u5L7{Qj}`!B#)qmnw*Z_2SoK_RF{ICtLE5 zfPLO4#ywBX0x|KkLHQ^~X;&KKEa5f7G8_=g%q{U%DSIub;cB)_)G? z5z0@!*7#hnW?){i-tIrl@_9V$uO+R{-Ag7KT|dv#Yc)|wO1tUdM(28Zg!}#ElaDn1 zn4l$}he#kR%KNt+{Uo93-1YP+LhBnt*FJc8jW0@G=~42Ng|6oiZ%65UV(2yLD{&4;wkulN6SlK5OG&cFZMiGJB8`*O!I3#7A6AJ}?){_k}7 zd}c1I)%X1T<+XhJWt(xIn~}~o?sGx*l)-{C($Xpz}UrZ;@R^UQu*i z+xwqjc6h!l9B=ugKF7KFFr(M|J=Rm5y*NuY4LbAAxJ!%LN;%?W%PZ?@E8spMirMQn*SAB!=YE(^nVl=KPtZQpTN>)04t@5! z(yKB3tD(>P&`RIN^dE*kpKB)iH>UqI^tta8+odoJyeoqn(@#AzA&e={^`#+=>GyK}tE)DqpLYHWYc!@m2>$ups4%o``hNU! z7{6h#r_Va{8V9_d!IpE6*RMeT3dpmbZU-Ld^f`ahi&?zugWm+qbv*~XA^5osO&+kN z;XEy2J^uuLdCvS7a7&&ZXnjBY2J)QObVNUXKkPWEcHL=ir~M4<@p)Sh-~kAv>B08J zKN|M9Zj1!xIkMDF`+nWl`xwogr{5(+rL!JNo7dJu1$YDWyBXNq`4M(Jy}uNy?jyAS zFZ7eoRTJBozqYRT88=@O+cu{EIsEgSUEIDgeLvreJG4#T=jAcU%lZ-HalX(q5%lwr z$KveZv&a2+Q%x~K9=K=04KJ=PdwmRncwDlZC`TU)&>*ww|-R!y*Pgj ziN7_?U(xBkT}Q7Odf!2gpTjP4vBk|ey}!~B^Vbh@ocn77GcR7RxU%W(;Pm#3(R**I z#c@13I#m*^XYaw68hv%p_WdVtd!ftLYi-dK@c~aP)5t<=CPm0}*zvAT<*H{y4 z`8?`W(DwxWAjzlRKYP0V-!R<+KZd+tXQ1A)elR}%J-L0ZF#oLkLxDLz4g=l=hWL9) z&w|e9JnsSX{QW(!Y~SIU1ErtUKF+&-!jY*6fS{o%W&D($GH%Ir!fddRlXO?F;PJJFj1W{_#%#^fv03 zpg-U$ozb)RwIcNW`bYolUj_R2L*7=mMB*vn5y9&0{Q2i{9j~(SW*+DGyAn@Zz0t3) zw{Fn)^-p>KeV$by&-<`7fVqD6cJ`ite~y1!{Zk&@Z)upfB<7>9-@8RJs^0GtdQ@GP zg&tMc<%_Hyw?cpTJZ1;rRYXrO#>suk*LCTtxvT5c#ilp6b(w+wDTueTg_}4ZnCk=M z=6Ex|S?J#idDh2$zyo2A{ii<2i8Ay*ggoo>OJJT8=zl{fHs59aUgYZ9x~^CE^Fy9> znfa&HJ>&Cr*A?>IUl=##>(%}8PQMI)%tKrKQQp__WfG8%1^JAx>2Axuhc&M z>|FZyb#;OimG1kj3(oiI!xrDor~}T6>A?MvP|lCxz?r|B9_MeSV)z5-(f)_P+~3{? z=J+IDXnmjh7V`eH8ulZ3jjb27w*WBD13B1dJbr%0*=HU3JdP7XYRl70Le%_rhkx#i z10CJ~nDMh^d`0BZpKFFguP*}g_m=VZfgSqW7nu3=<5PUG_3@cn ztUdq0eM_Ak1^b#Cz3PoeoITT?Gw=HU;k7S*Jl+?g`aB8#c^>?S`~88Z9IiJ$739(H z&zHbY-1wy5t{tBOFvlnPsqr6#9gfdK4woJFUjz4nA;#y=1M6OE^Pl@!_7&?t?fd!8xO_|biLl4{&|Z6! zV9$D)NNg#N^-SgGeeye#@b^>KLZ9`^JW!wg$U)z)8*RQHg8qFjpU(pO^8x)cZzbrr z^?t_Ruhh%)r-*~&!hX|#qxT1$o{FeF*H&RUGf2BtKHinf~0)=M41c zc0OmJ-`4ru@j9#P&gg*u`{lFVXnkFt5mOJGe~r%XID2vPGe5}kJ-73-2>rR8pNYZd zztQ=bUBmPmoi9tf@xrjR>`T7RIbWE+m7ve>ofg-$IA|xXrT#|H=Q@}i)|mbd(C0ZO z-=O|@=<~eM+@St2_uMbLR%7uW2mig0s7izSmqVY=b24i;=6^c$Iew)E^i3Ze#vOx$(=jQGW!+tBiTa{8fQB1V4lMFyl#E_xOCu zpGQm2)bi7Kp2T%;)N^(A(K`I%^R?@46`1?Ys7mYh)42a*JUL*_<0qg`?E6=Fsn&ne z-JcA2)%ZO3c>O14)bgLexq|V`dcBtK^{2gQe8xBaEyL8W0`s{?wOT7b|4mkBM_^p_ z`KPWKp1!isv=)zn{1|z!*Gcly=hB`&MQD1j7)96n15ck6Bd_!*`N={b5@AQ_ePZZ3 zm%ZOLg_e}p%jnnU@?I}~e<5|V<%iEBjhjfQAH6sp_5N>l@_8aUG#v`8(5l4stw?ybHX#8j))byvX%tscWBJ zy@7R}=;iyDTf+3VhFnXWz_I>PruUfh_gWo)nY%56i{4>zavYWeW?lI>i}#zJABT0J z$2z5+^;YJ~U8c7)uqt%l#&zEznKtP=HXz(#d=77(!PGv?q6Y-`Al@~ z75v_YdHDNS0|P&(f0l?L@6h5yd5TTC|Q|3&Cq^~-be?v3fc1ATt(QSH$-eVzlE zpJFG|`waG2*FOOFLH{@({O6_1{LSi+=c(pTTOZ#6kZ0T+8^+`7?okoYJ!2&FIGzjp?87`d{6mG5rzn&vR*EtH$(qfj-YyO-+sI9|nDne|E>l z^#25X=D)a8WBLW?a~-Sf+?c*!mlL}+rtkNa#JI-v{k~S&yD|Ma_NDzB)4$y1zjRPz z`q#MnE#(^1FTp?0Q@O(%(|;8Dc3P9?`$sjV{|fXuf78b|rvF#h|H{dY>A&mzS59qA z{}JauJEbvwf37H;)0qAjF8@vEwoTukOOn_(+IlW&^c<3yUVCl{o0R;R2XA_UzY8$` zZ+Qvy(V+A1VfcM_OF1wN6Pac1F+V(~`*Tch@Od5@1k7_`2Vl;J)OU8y;eOlJ`v%JU zII|L`_IZ8uC;7OI*9O4lCk=bOJoG&MVWCHzAO00X{}yz{=hxq+XU%_G&kuh6ZTe?p z`hNXwZcyK^zlG--^Y7Q+a-}hSzy6k=Z%p5>znPaB)A#Fd_T|R({ra1FwK09a{^nk9 zOy94+xi=cq_v>%-+ilaI2lFkzoXOwe=KVi_dqYm9O}MC6T-5YtLXP(_zXBU~&gVAe zON_Jpy|zyAK7DoIQ8E51Ynk40kmK{Z^MQSwIo$Vi9rWu~hc9ehv!`9Np98~v%X4Ak zC$J83-x&41>2u%q_NUxu{qxVWX)lR4)XToZj8Vecc>oKK^sQk~k8KY8#qQHPJo_7Z z+Nu`EMlmni%|BIZ*Tm9%eI$Af?s^y@KD4z$3FR>#mD`wJMaPs@UIUTe@9^b++l>gUj}k~j_>8V zh+J=xTN85p{zX0e-9#@Vdfr}Fp|2W4-!y{WN#u18&A`7Omoq^3<5EJtd|s1pS{^Il zGq26Cv$Ocp>p*$+mY1g=Bs851QFQ%X6;D50Xe-3fbtY{3kd4b0@?Nic|EH^jx=DXx z{TN_sE%UevI>;?_)>Sj~6Z&l zynfy_Btm`@p=qwY{q=+v73Ug4Uok>nbI?y-PaqGhi!+3# z@%Mei^259hgS@BjCiKA(@>(|v%0+3Yp~2~ ztt(!B-774s)tg9ESGIQiW7Z$8L+1gru9ug1bsehr`}~jo)9i2^$w(YJe|YKm=+&}* zUujV;|D5UVV(i303tByU`UyhsA~K%-sl=!A&eOjXy2{^NiH>WP=Z((&mfv4E2K3Dk z&sEZD|9ScIR`CVP<5$qrIiXkanhBw0e^-9N{EZ7#`8-GR(@EZ^elUGMPNkoXp8Lt# z!bF|TiNt5H!?@30#O$p3Vsw9k((itV+i*3(?n%(|{q=t8ofC5vi}QKd(|tj&t>mTW z+0|aM_!R4PB5+TGv3Y1hzaciq=Zd+1o8Juj!+f(%ywo;+(=3yt9^2F}Mt=kG%C!6a zmH#*B%YwSZ%hpfkxf^h=7=96cQ{dBY75y3tecltq)l1X&7H2-jUIO;urez+|Uw$d8 zucq$SZUMjBLE$xNmylN!UH9A4(x&IpAT0Octq)CJCyDv@E%fezo*(}^g|6d~TF?6D`<)wZ z^mN8r?i)M3Ve$BV<7!9eJ_z?M4fB(P-4+Jkke?WVxZX5>n}L6ow7QS_IO^>y`A5wj z%*>Iu;=0DKcRqO-@f-|8dhXQq%+qfaT9*jA)~((Xc=-o}mWiO3g{JlC<)0Or&Y|>M zmLIMw{G7ncFDQxCbE>DmEHphYdiu9Q)4j;k|0H&F5ApPqgx*`|FCiY*=sUnVhxLl9 zx8`*$|K6_tUZ2|X^pAwD`IV;T8vM59gY;E^weNau2F&^8?dt!x)BB*mL5_9Kdj1V` zpYNUiWqv8odb}F+MS^!ZM*{P?YB7g82cP><^T9@EKfq4h27S^?z!G-2NT+-~{+-ZY z2nzQD^E~y6^Y<$7f{^$A-U45r3F-B=`#sq9+W#2#`dCJP z`Qau$M|~X!zTPY7H3^vG>+^LE_#B@i&Y^z2O&nq4T?U`)?dQ63)kC4#=3Bp@wxUi8nl zFxBGAp)J8K&y9NDzpA|EdoQ|w$xBS%?}t1$9t}PJTrnG?S3(?*L2nNPuFn#5Zg~3I zLhBSkA1k!=Bj_gyP4jf-`_>gqDh+eu>)LYV*ze#5*0GbtW!qF3!g){0{uk?D=~3ez<;CAkX~kxmWj}H9j&s z-QjHuV6LlM154S3E3V(kYpuWAKz>ok@9Ok-bN0sp?+bZ-)~##66QFbb^K$A<$LA%; zaU4DaX1+uuTyxa(H5PANf6D03JTomnS=iAU>>{sgLFc@BO=x<4;l=sLwtTbs%b{(r zTAcBu$D|32qspPKwGkk@@$YwCN@eZL?!$9XvW z*Vgmie2?)9cUe2(GxN*3;(Gls=-zMYKGTcKXIxy#`%SNMueCm(T<_!bGwwcsb!vwtNn-{pZ$Su1ouff}WQ>U7xG#dgbXkq4A6*Z|BH=68&513-iPC>*~NL~M7idXg|dsZp58;~x<0M_rTHDF!gA@~e^&WxLHFZXe7tSr z$@Px;%>2Xj5>HzDCG4*hyh^P%TO7KN>c!{CM}WSZkrNjH^IUo)^dOU5_UPB+~3#!+Ttah>tG1xcR!flH0*kN+{e#=z46pV zJ;lYFc(L_yDS^NIHx}nO*u7a=&8w$BAv7I3AIETsL;K+ABVy+bK( zKIg|6VEQ{wI->o59&|mg>E-1P7r6zL@uS(}dYKWr&h;^lev;5Mx1K&lXnkYo+HWsE zDMnuDQSy_8uICkRN9lcH=(-PhdHw89=fz{_*8q91*F2JM&DV?$b|Ue4SZ!gW?-Hct z^M8@oTJiLgV(6!UeirO_`!gN=B(be|_H^bsimrL{bmlpV9wpB_dwJ$LimrL~bmn=( zMJ#Vyh>TwRe#;Y}`#khnv^M|DgQqhOQFQH>r!x;x^eB1e!OJrbQFP6Nr!x=7qhDI9 zdR+xPz+lV&fgjefw*Q=m=Q}#{;_1vw6kYr2>C8(MJxZQ=@$$?|6kYS;>CDR)=-1%I ztltyR-io%~^XV@j$2wwOJe_%oqH8}roq36(N69lUUY>c0qHA6}oq5@`ljVc!4gWrO zqH}b8jB#}4!PA+CD7yB`)0u}TdXzl#;N_WzD7xms)0v06&@axL*MJ9zj$Y038X~V5 zNy`hLvs@_WdR@=QFK%@1&-#0Nx@X=Ey005gXTGB7+J8@HzM|++^30c)XTGB7nlDdh zzPfa={*D$Iz227>&&Gj(AG&viYqCCnmy)!RbZe0oBNyGXJ}U* zV0eoqtYsZfS-|ekt^=L<=Q`)*xzBofeqP&uJ)Qfkr}O(Ur}eXVyx(^no%6@jSr1Wk z9bZppJw(x?FM_fy=w%W-#ha1E#Esr-7p@mdkd~uTSug4W9Un*Wb(QO=yfmT_}qRAp)DUlA1So% z^6CwJAIEW^^PE0%ew?30M=#zlx8!-f!NzbuIsdZj*Yc^yw&L_jXWMjO9ewaq18eJ^ z^>Hld?B_BP*xC}Sr|&8B)g$Pi$H;#o^HX#0?JO$!(z^Hb$wE&>(DOpq`#>+x`S0mG ze|tLXy5q{02OWRCcpe=MI_pEnQP)CG*XPQbySpLJb%gm8R=7AmY>QXeI4v>A{Oi5l z?=Q-+O=H|nguM5&BIsP_j}l`Ud3pKmh1N5IzJt*8zSGMqUH1!5-%)5fFQVvbhnEaj zxY!mCs;y5cmvFI7)T!U1<4=Y@^Tc&*%wWqa_j%rj-w66X(9`E^o5;)4R~DMqrKb-P znm%*$bbUUjdG+*tg*H@P$yF>KnFir%=`U~>@JaV}4i-6`hh7fqE$cY*P?>6Zo(#LJ zmu*Es`{n85gvMuWYBQxjS77FOEHFO<^87=<=kt=YfV;pR8^*=9xla5^HxD>J z*fybmw9k0i7LZr+>6b0%$uC1JKjR>HofIH*LtSlYH+xg<{G>g$x#`A#a8S>fbg(UsZH`yw^kiec0U%c6FUn|DHZRhQ6QB^>Y|6e}K?>%ZnGs zlWhs(O1__u&1D<+;zQP^AV~cp_y@0UdE$N7RU-HMb%pY5ldwm>q_eFq^84Ln_IgBq z?m>&^75HV|l&a@oPd`y;x{iAKr$QSLL0S3S1{Uxwo;$b}E;C`d^sQ2TZzQ54c zlh-4V=W}Y!!glgneyHVRoV?ddYg(Vc-vYWnul)dei(iRH&zqjU`h4~r-P5;^q34@c3*f^JfC?rWuwtX|3Ic(5(h;j`Wc4zqaJ-zUZI(qi;f(6ex$ zwcbfyAA;`Z%`N~ z5t`OXeoh zmY3$u)2|ZR@6Sh!i*0Ff>sKD_ld!v;=;?KZymY@S9V^_p8Ve8 z0@fyeO9z~v-|)y!4i30;_?bxT=y0K<$)y*zR?oP4<-4yD+Ds2?o4Z)Nf%v;0f3$z* zr>*{f`%Nam@2^Sd|LN8y-?q4uU9HV`v$nc~wZ&J_o~$FBNR+oVT-wIk6xv)r!`UWl z3usgGtrqlB8|evK&M+HWo9$_G`Sq>MZ2~>CrLLxz8v;4B3B;Kic5bkjS>5{4ydLaq zY;9o5k6(V}J4}uLvi|Dj{k2m{{PkeZ|D54VBT{b_-~v4|J(cD z-unMf?SGr+{~uNV|E2q1%lQ8vk-@=k3#|IItQ|H*I)iaG!MZ|i@ijs2fb z`j5+Q9sZB>zr17H#()0V{ZEBF{2%Fmrj7ld{RA6T@PDNLZ5{viu7552AMS(W&cFXx z*T4VN{{K&{fB&idZ)^Rxcm4ZM?f?JO`uCsO|F(|*AGZGem!AJx#{WO8|NrCb-+x&D z+gksB*!uS$*8l(U_3uBd|7{)rmM_rY_{-+0r*h$Kd6a%5O)k4TwD&Q&AjkR3JoEc% zWyp}l54`+PVt)#OrWS+7m$Rf65@^7i>~3An{E-u%&@ z4=)M3|9|;s|Ngi5|Lr$czD3^jPaDtV3)W^{vbOlLwd`M-bUYVGe`WmYeEO{f`I|N! ztgQf3k8NSN@rixg{2BabOs?qU3muJK2EBro&qoudo*7K?^YJFw$vZp$?fvIISvbkQ z-@yGazqmcG=Dt?}=DDB*?8nXH)JA5fG{V~afz}q#me3{+GJ5J*Yja0JexkMI!>vt1 zu6nTH6fpf}fScIDZw|N_Z3S%=Z5DDR_)nh*`#EcA-?x>0!QaW+?DlA{v$g~~*^!X* z27n7!8Nc{vYs+XUp53Nazxi^*g>7r;lxN%4`0|s?PW4=Ci|1LJLqD?D8!p3NYCFU9 z(|no3h%b3%EuHdglb0AjcbK*Ruj(U>arX7WIO^30swRT*S*&A%AG8G5N#4Oj2BR?n?^7HtA94mLg7 zVOxbBv7UA6wk%t0@= zw#ii%v$inS+WZH#dR>qgX=<+2{3cIg>cd(+{T(UwmxsU9D3ecjg1_CYEkiGJo9XMR zC!a|qDt8&q4ly~l^ygbWO%>%;fxqImrsw6FeyWYLs|e^gq~Je0!SwP=Sz9^K+ER~N zdrLqs0lj?A`1z%+EgWoZsi(D!L+|Ufe+Bd}y{hrqR^GPw*fwE43>3Xncr!|4(&muQ z^zLRS`;qB4-*4?8k-1i0W#pxRasQo(@U}YBc0@z0_Z= z)!!exmN((@KDU9%rIxTZzZdZ5wf<)QV)a7*zD@3LdY-P|{k}FMKj6O^{bXAOW=s8* z}Gx{@R$0+;!NIQt={z&GxGlrZa18BZ4v7;TYBgwZ}J4Kw8d{~^RlAI zUduzPyiadx@s*dfHi`Poe1~{2?sU=e{n$Zvzgk||TK(RPURB@{TKzt$Ud_Y?V}J7b zYXh@QvOc_HmLbvFB{^`oCF>OP^@Xv)E!-TfI)fA+xJpNAh3-ld0c7TVvH z4kWDk0QT7b8s_f+?}vUz3U9w|r~c;0wcc;<&*K++n|^5x%Uj&|ZL*@}Bd(wNe^B%~ zWl59E{>AJyjkmS{oEU332YPi3@NU+ofK&SzP5_(r_@CWm@6qd-C9OX#{(mq#^q>C@ zetv{~Q%e*+1-)u*_Jdk}6X<0}hk9aZ4Dc-HKl`iMq5pLEVN|JUD|oV;?O^<-g=^)~ zix@6c^^ zT08!QL1vHnPXH$d8=dhttpvYli!0XhDc5Mb{C>6`luz3sQZ)(cpw%tzI61EKU-YZB z=hv$qu(#xMwf4MR3UXg9ZE~6Z`kQWzU*plg%HZ1df|eNf($Ch$Lw;OKy@i%(U61`u zI=Ok0wU);NCc9Yv`1w(-)NDlg`Il|oe_P{ZI34TQi|fzq$n4$!xLLz&qh~%rxoK;iJ7PVb6<`}Tl=3|&OGsR+H+|DE&IR6URIyE>uf$! zj`NrGaV+fBn|G5S$McPI+wyy$7eg)!zj1QYAeX>-sYQ+*Xd&2}w&v$P*v-WFr}@+a zmdBRC`f5S!jd?**54agU0K z1pHJC|55Psd)4YsgZ^W*zh^Z6AK)h(zXJWo!O!kdtDm^T`u7C*#c{R#0pLFge)VAE z=X$Rj^3(+WQ{b1gwfcGRp9Via!T8Ms^{)mb64StchWZB@zjU+lXMleR=1VzOYrn%^ zE&fZn9zZ`BmmeAM{|tWSfLeX>F9Scje=UDJ^e+cLzh5-}3h;~Lqxo0T{=UY~R;_;p z*nbxN&+b;MUk3l5;8({+^PdAhnKM->3hW{pkbnGj9JVBK{A- zFYaF3|0lrz2>fi!`Y;pxxb@*<@T;!>&9MJD_~rF${r8w|j1l>D%wkc z5J-Sa2c;}6guZ};(3ciMzknc$zbr_J)FmKt=9E2qZi&*jpuY(34@8?*?MK`p z_7_8+ZBnnl1bScT$HD$m=;Mv6_S9cS{~J~H6JdWj^sYsJ1>4`SYCjeBG4#Q>di|Bu zZ&1}g2>Yw3A6u`#8hUsAs{U=*e+T+(y?XsM(EICF^<(ao`cH#C_UiTLVWXL@UDfXe z`^8+@S90IcGo3Ea321t}@D1qMj@e$AXQ;-RqW3^U(1iS1qR(>K ze`NmdHZakIrIVea5(avM=0&$VZtZxNq>0g7wSoK^iy<{;A7DC z2~~g5aEZS)4Een$`DdT3=EeStFMvJjoq(nn?^QOPLO;~~7cVaRdFH3-$L+shPVt}N zxgkOx!KIQ{^D?1q*PpvuAIeE*RsXTQZj}8OtcyBY`Y(chsQa(={h8Z;>1E=-d6Q5d zdCYG8*Z#@C{g*>O^zc%zk-G9zCGq?Y;^TfY< zgU}Z8nBDrXU;7vD-kIBf@%`ez`Hax$DWU(Z`Mn7LD%o#n8_xZg?Gp@|#e?|PoU#qr10S1xhm$>#?LQCfV&_7=&Vl}y% zbW9!i{Y#yH^Q*IG{{N%$H=oBhm(D-JI1sJl%r5=EcaadszoGm{v(CS9;_TV~hkYo2 z)3;L-vKcdKCp!v`Iqtj;3{0~?8>-o?86O04X=jNJS`v1@( zmx1O#^Y^FBp8bDzvHvjR-_*eT&58X;XZ?#MZ~vNV{!HOTz) ztE+jSs-_T)}{%@;wZFb3jCFIZNKd$?v&AVjWXLnY|{}Y9sx%B!k(*HaEu2qC;a^>?M z-fk>qCJW}@x?}dte?^r)-j4l9{^{+rXZ|Y``I~vq{>SwHNdB$cX3zXL$M;hXGy}gV z#PbCyugl~cgxRG+{mX@J2mC<>UmTV!f`uXlE>`&6fuCsbMUl4wJ_0UK`2PX^O9sEB z;~WdT51gy;2LXSu!Mh*&jxcc9CDr(k1paP=FMh1)!Gf481ujWK%X8c_)mh54iSE7@NMws z`N&+sp`thYWpl;QFDIR zD~P>0uQFGAjPN6cE&fwB;fp1wyb_FWs%`YPrNWA;{pj`;p7U=U<}H0#RTX-6h5HY4Gwd4c z$h;$t^`!qhfaCW;h#Ll1#Vw({QsB~c)%P(80FLBA;PXwk7Lmev06qbn?e_(I;HEqt zmaq7|wDTb+VRin>IMwfh5=Ywk{uqD%K*h)Uyb6B_^PmGz&iD7&F6zVk0^u%RjF>8U zWbns4*e_#%TbQ`rXKY-q4ExX$H}hKqxV8nyvTOhx`=8^4`LPb!y|O|Or}JYSwj5-B zQ`i6~VBE-$IF4`P4pshCvmarPr(g89t_S^|3Y>5G9&-zxb=()z z4(kJPI_~cRXZs%DM*@f77WzkAw)pP_F1CyhoBuZKx_v+Nu_cczU0CDi08|Y<3;!*| zrQ>&je+jt262G=%GkSd>PWRKh@b9-Kl%{&#GyD-3g{3}19Gn;IPtKo3fy=tg`_aI0 ze$yZ0=lENzn?D9fL(uWC>#WNPNA}aiS=P}p@b|?oI3KvnUXt~L_oMQ`7`hLWZubqw z*X_Q+y6gJ}+tU3>`P`R=<;(DC+~25B)Mmdp?AzB3Y_HsP*uj3UbTryY(axM55AuR_ z+7&qdE)QWB;6;l9P>!#?VCOtGw$xnM1%CkW;i-F+$V-4f50r%dj|QG~nhJm|o(T8^ z`Cil`{^B0-wm42h99_R(%!CykZ2zv0c4Esoy1Yw17r>tDZ`=icjly5i1%C_cfPE<7 z9Wt}(Hv-?&=Q!&$h!-4Rt8H7o|8RXLzJV7{xPt4fO9WV`zJF*K{oafEa2?U@GtM&NW(eb%(y%*wZ4YE%A1K(|b$lp<8-lw8H5{?h% zos3h@rvxgh`$wtEGkGIB5^=_syx9IXyYvt1c{Xu9j!#{8jtf10bRLY4^%?9q*5?!2 zFWWzn{n#ZRZ9mlYzle3k?-ZV?8f5)b;B4!n3%ltpNx!LAE>{nYj0IO+GgzDj`tUK$9)zY$2-U6uN98%&@XvX{rpOtZvR>3mpI-2KY-)@k2pS0v0vX& zIL1TDbz`5ok1R#D-{tdQaQvxKM;lH*AG2Pa^~3V}X+s^yIK;c>%95Au_s)Fa`1^%6 z+yvnGyM#7e6S(15OPy@Ey?`6p1s4FJK{cz7hV?}@!hC<;)D{CeNAXLye|LDe631~& z+$q3ud=SU`2XW_FaJ+vIcR6q=elM&cIGz`=UFu0+2d*c;~3wvi%5L7aeh`&FcV{Q2IB}|7f+p_Ll_kQ zg96ph_VsfPgZ>-(KfX%xB2JI5_Z5!z-6%hYz<$x^7VN(TZ$Urf`H?ur(Lh5>C>+~g z7!y809+dY?6RAVKXwmETFGT&DKkaSYXg}oBd&Ez8_u%|7ecF@0W|=S4kHCw0e<<@WP6yW> z?H7X`*Jm9E{qKwW2k)1(C*^!6PkJ!@Th;~oj}(sfq-Qg*dwa`|_6^v@GiYzi?;m)d zm!A_Mj^Q%DrxlKIk$xI4+@H@_e)L1?_2|cT|9=+!65cmsas8Y9YMIxp&w@W1c%SfB z%+F{B<7mMyxPQj-kau~D{}ph)`}WE`kAA6K4_U-eBu7g^B&?j zzW)3Nj9-j%>N~X2c~yDA_ua$s`24TJ@jUy8d&EEAXK@s6BE0I)!Lc#!x5$&~`KkRf zzmK#}2cUdkq}%(+F7WT*^TW=r@_8~H-x%QdIb-6u%t7sVc(KPYsZW49>d#5?eTzqK z5Zp&Tcd6=0{~!6BA{C&_`&jgkElwABTl=>8v&FfVcvT!WR*zp@XZG)Bo|n&K#{67` zss~w~lj(I-&kM$ra@_7QW1nx=@zXCU<7Zsq*ukwIv_Bp1t9IrU6`=IL&cjk4elJ16 z{_}wwrI;_3{&T)rKfgIHyUni&@N1jjs@cxxq&_mg70?Br?JMgX&zTjh^ErrV2M8`Y zSn}cLAc*(yLjV7ddR-xYUDT(6?{R3{6aYU`9}Y<9r-It*b2b}P^dt3Ae%b#YSqBu( zRqflx6YKMlbyE4`xYz{sNl)h!Ry6^Ri*EhbgxL-AR{QT%$hj`;1%4Z}%kfSe=Xn6! zE(*tWm+yB>1kSeZLG9>uo$~QpO1wOO;rT7~?4OB*e>xda0_1{{%rjXm~(e5xCQPNnqGAlRfD2Ct|0L&P5YO6vu__M?M``B{A9N? zBWa%c2cZuv`Vp_e{%#Rr_V}|BceWb5FhANBoY(ej@bg9aZ~oi!9?yU>^*tuCJ^Q^^VeW z{iHsfyK2w%jru_8x&Bb^C_U#t_3>O)|D1o+XLDBdoL|&OO3(R2y{q(`AJnHRe~$kr zP(NSA$ND;N%J@s)tM(7|KJ?DJRXyuVdso?0Py67Vsy*vZ`{>{GdfKONSM}^4+Gqc& z*VEor_Uu2}`^uhr+DC6y{Zk*IKH2+KJ?noh^s%ZR^)JzWdcFOa>C!)e^3VQhLZ5z6 zwWoeE^uALaf2<$vGmD<~!5me4`j6>f#ZUc9(8q7q$LGBz`8gJS2z~HIy?p|G`g*w5vskdkR>C5$c#_wA6j6Zs*-k$Mif2ry@ ze;B`S(KG(|#d>?j?^yJVKlpRKJ>yURRIg|JuF`Y;V*JqyReS0gfA+_EJ>&N+dd43= zUvJO&9gCjv2U*pg_s35BkJalt@&C47--+L%@5KL`dizfN7JVoFUsvsU|7QGYyI#-u zU5lRaN587KXZ+ct^?JtdTl9=Sexz#8{SD)Ho~hR}{^03)J>yTGs@F4q*P>_q(UbM| zj6Zv#s^|WT@%t7%iKfkQD&-Eef9d6 zpwE6@)pLJCd*7m`ef+bkJ?roOTk>-(`n{kJ?ycIhzAfm}pVsRigx*zp*3WrQ+Ka{(&-Rs`^RLss z<$SQyzD3_@|CVa|^nWeex9BtIZRdw0K9Kskmh;0-{Fd{qCw_H4$no!?ecSnA zr~MnN`SbqXXUg^1i>e#FELFzm9O3(Y_MAXN2 zet0eGXE{I2X@7k+ey-1q&vt&u_-yBg>|fjYq3290m$K}8)%Ll*ciOk;JMCM}4>`VV z=Z75Mw(~>!x1AqOMEth%!xr>2dVcr>>}}_V)Z5MvskfaUQg1syq~3OZNWJa+kb2ws zA@#QNL+Wkkht%8751lz=eA&(q$3Sm8Kb#1??fj7Tw(~>U+s+SZZ#zGvz3u#v_O|mw z+S|?#X>U6}q`mF@@LJTzc7E7~-gbW27>4<;&fmDcHKDhiA5Mnec77N`Z#zGvz3u#v z_O|oG2kBqM&-Jr0r{rflKims?+xg*C=xyhRPe5-wKXm7k_HE~fjNf*C$oOsNhm7BL ze#rQ3=ZB2nc7DkCZRdxK-*$e;_-*HhjNf*C$oOsNhm7BLe#rQ3=ZB2nc7DkCZRdxK z-*$e;_-*HhjNf*C$oOsNhm7BLe#rQ3=ZB2nc7DkCZRdxK-*$e;_-*HhjNf*C$oOsN zhm7BLe#rQ3=ZB2nc7DkCZRdxb_$}v$o%k*1gPr&-`cC|o^TAI17JVmv%lRSWx1Ap{ ze%tvW+55A2NR1`61)CogXrO+xa2mx1Ap{e%tvW+55 zA2NR1`61)CogXrO+xa2mx1Ap{e%txsMBLv}%lTl!`=3SsHuSdh!*O$Ce_}ZwoD99~ z{4j;yc78ZwxcIl7ANtS-mh;2O(A&-r6X11^+s+TiL2o-h457E3AJX1-en@-U`Qf$jZ#zHC7{BHGaLIWkKim0X6MEbE z;S}g?=Z7iuy`CSw4Z8zzzUOZw@1MK#NxTz4sZYm=elp}!mEPY<^vCkNQ0e32M1KzS zFDZR6S@cVel=jDgvi*2R(cb|32SBM0o;jyHXLt(ox0T*`TJ-b&Og=ZYGAQliCq*Bi z-3^uAe?s&-K)&sq;)nL`Q4(JS``1se*C)_tDnHtf7&WQPV?BJnivF`Ni~n)ZPgLw^iv@3c0Qe|{!Kq6_O#Re7p+&->;BVv zJwE((tM+WiMsTP~0*YhL3xfsuG>9clKf4kC0zpCn;MXLVYN2_|hzGe?r^;fI)C4Hc(zd`Houj=*s z9Nkyd->&R~pI7xG->a^V?oX@waVkImo~nMb(mOw?>Qkjp@2=`cELyE!bXQg1RC@o; zs(z}{J9kv|xzeY%RrM1VQ|;ec)yGQj|EQ|h>!bhYs$So}qDQLwkKDh0S=Hy)>_5R0K`buZiFxtPfWYzz|^HldY z!4g&dqGwd~@fubAbE<#b<*WLCDZRg9RsX8m|HZ3R^>hEc+PLm z`W2KuUZ<+p^^aDr>NimK&T>jWR>l8`s(y22pDkR~Z>#ja((j`5@j_MmnjujUy{*(6s`|-F@1I@O>-E#Uu&USV zr+Z#iUny1%b9$rNzrmH&^^GRisyMUp^|-diZBvhXTjRE_$GJ;PDnsDGE#(DL)(==|KdR(I8^XqX>Xx!%YIA_U8)%tB#j~kdrIThtH<4|aqHIOV$~n+m+Em3YTU$n++oL8^N2rNkK04z_NvEis&SvG z$4$}q+t1hIVvXCo9(TLOeXbsNv6{c`9`(5EH15;&xH~m&_j+8e`Xkt-9yeyGNtJmX zH0yDJ#_d{-8}W%rmH4uq>T$lp`3KeGB83YMtjDDa7adTKb3Qq# z5?{Q3J+7&6=@;v9vBG8h)#Gx7b1b+em#)U=?pyEAS2#bY$4ykYV4r&2RE3MaP>*|1 z;o|?P$31myb=}Ceuj1O9>`?Z@x|0=dyL#L$8aJVeiw+cjiyWu?ZCj6fTjddaqlzno zEB-D&oH14bQxW=-RD*3u!smG1e zxD)GffySLsk85e%@%6Y=!OT%``5o$33KRN7UnP)VRazap!2g^Mn$$3+@*jk}~C*Ved;>v1ENpH#^=x~LxKYuwa&+(T;r z5}jO+`-8@vQjdE>iqqBT&De9Uys{lGv)7x^|<*o?v{GokJR&J^n-fbMH+W=J#NH`lPcph zy|o@ULE)mL9+zyQ^1Z1Zx025H#(Laq_|B3T{v&G--0XZaZip=xVRoy4yqph zS#qUGm2nuQRlmN{XZKX~q0;+GA1i(QldAoLO7AHB+e#n&xN1LUm#DN*_H~)xV_l*#lMmh|!ZO@%c)Bp&Fm@{Z;#`l-^PL8OB>odv8_WRC@oXReh-R+0Ux_Sm_<5Z!3L#d)0o#Dw8VpOK+>{f2Q+O{pTzD=#Hv= zyk&J>xp!9efwsS^s@LcDnX)f~AK;(Y5&yfO&YRWu59YgH;-fyBUeyoax>Rk5{AlmK zRE@ud{5tx-RQ3C6`xmSFowWYXRsB9&RO5I5RMn@t{THhG6SVywtNO#V{`snY8{8K= z`MqA%zogrLt*T#0)!%)!s$W^_^QwMBt#{6?bXjA}q>}H%_d(TuoYucz)dyPtURA%3 z&i|dNeu}n#yQ<$q$NyGUe~{Ksuj-G`?Y~jge@*M(tm==`{@<z_5Y~qZ_)a{SM|Tt`oC56&ujf(tNJfvKiP@@m8$*}t$(?yuMD;t zX1Z>Fj_UZF|AA_KQ>9;4>7!v)d#<01KT_*wO-L0Hf7de{Cg+I!|Iiwa@cf<8^aJ^R zJ%0zaIa2iey;EnD@cepybI~2kb~?Xrx|Hzzf7#Nxb}RMsBAOWf`TxDA(|0X3^Fi;- zC;mr*59bwre(=G265j&UgQvNTGJmJf`A2=uzcq){vtRum^f`YA<7u$@r=w*2a{Nal zh3EKBhY8Q|-^6&gjej5cbG+wsi#^ACbA<4EesKJ!@5p@N_-})^jeE*D{#zq@>;Iw7 z-|ch$ZlCja`ka3RyubaQ^f~{a&-pj{JpS{!``iER zKKFmr=lolJ&cD&;{ImCE|K6|lFP^Kv<3H_l{$8K+kNcc|I%j|TKk9S-%|7QJ^f~{m z$LIf{e*W?MoPV$9Ki%>V-j(N3KL0w7JipqWf89Rk-|P9$Q0MRTIsabIe}+2$4Ci(I zy8pX9o_`H>{%N1{PjKElROes4&i}a2`TKp&Kk9S-;bPVOj|ZOT|H-1F=lQ<}p68$W zBBGzs^Uv1eVz19PxgI19(Ra=}@qWWd9Avh^^ZYXb&vQ;2<@u+#g!t$9pVj$?ea=5u z{hyqKMV@1)AM54iH;b+$TOAZ}4 ze{Uw|AND!_W|#c)nVf&KPx*UCOTVW_33ZPY>W4xT=!3B`{y6VQvm*o-tuOi*)IUt* z4cOW2n;+Aj^EWJd9 z=O^d0cdYp1{WAQr@FP*k7I^NTBk-)VjWT}+@%JnLsL%Pg(BJ*aKbS@NyXVNb2{)4Y z=Cy?9_-KN+>1iL08`$2ar+vGNy-iPhuZz7+Py1|xf#dI{Z+5fCx~1#OI+Jq#HDc)p zt}nqQ!gGDeuNI!`OLnR7Twj`33D5NrMLt(T_x+&GUrU z>l4=_4|=XYK6vJ7qs%|MQvCNT|NJ6pzhC)>ea^q#=lrwlrT!eRF?f#G26&E-=Jy5P znIGUeKm6-N&-symPk7D`>N)<~(ChKd@eo`q_8jl|G~q{LU^l)iJjcHS-Zt(j=lFMS z6#IVVpY%EZ)(!p5zt!jbqaR8B9N*p#h3EK=ZWo^8JGfPNj&J`K;W>UB*mM2_&~v=I z;BDhwe||Mj#6QRXU_Y}OSe&MeNaIg9hlZkBq^s{YGo@%T(i}UkmaemnkX6^m2 zeaEcrzjPMo*Z65QzvySebN`t`&;6%!pXj;&bng+K&sR<=Jolq*=(!*D!E-Q>_KV2Z_odI&OhyQ{;l6t`#%KF^Un-C&p(Iy`!h}WXaCRY@6R-UKXCr>j^b}z;piO;5mMV`ui_U_~-nY)!%;!pBgy- zUxnxU z&%ORWZ36$c_g5P)i~o@bJbFoZzTX@^BRt<~H`3xS#ZE{5SiY zztiXZvp@H@|5M!G`_=zppYwP7-2YCW^UwO+|E)jucl^hF&fo2G{`s>~|9;K?2v<=KlZo(TYb(y=yU#IpYzXqeEuKm=bvVu^Y8Wir(6ELzQ64CIsabI ze}+2$MxXQV_55e3^UrZ!*RT7(*W>xuQ0L$7bN(sLdxz@$tJnFT^f~`#pYw0cqWm+Q z)ARj}6ggiy=l2VJ@ce!u_5A*z3%xD>{9W{J}GS>Y0D*6M|>{A^1-I;F*6Dd?$bK%-;iV%iqKQ-^lzM;F*7l zc$vQoy{+FVXa6^rtLE=6BRunOFD*Rt?{>_7ylj8-Z}mBUuh031ea=6{ zc<228xZ}Uq{Y|sa`8WHVzt`vdUAH>_9q?TLVyur`|AzYWgAx35{hL*v9}JP_$Nl_R zxO}yKP4KK=j&@kTq5k|-8~$0pS@rp`a0SU*e}1Tq{PpLDa^ShYZiDCjn0oGyZF=sH zZF=sHZF=sHwVrX1a(|GoB6+g^T=3lgG{=aZ`yY2z;kp0GR}!B4pZ3babG?nhbG$Ub zbAQx^{U`*c|9@(J9)kNL{=OOaN6CuP9`{Evc;;!N%r{?K?3r)6mhjAXu$_4b^JGb%s;_=nQi8OkNLM| zv;5l_&x5`H=j+T~>wl}q{M)lA|6n7jvo}^~ys=R3hp2C3Jlgc`CIj2Yo7U@7w3m+? zSf6e%u-+Cw{oCTF-WEUgw)j~m(r)`lJ`bduNj}^kMd0;*nEP#iOTqK`qB)m*UxNGP z0QRF0h<;w^wqNG&m2tn^#{X}{yhvFOTfLZ1vaQ6+=ZEk>;XC#l|^J_uR{6g^TKLmP;-b70-}x%O^|r0V7hEKI#+RHcJmbsH7M}5iX9{ntUk-na!$uij(j`7e z#n)2tHB@}fF7c&3#us*pFP>VhU#Q~qTGje_UE&Mj&sI0eSwBz37p`CJ--e2>sp4yX zyBc4kOMKadf@d5y%J}m01kd#`Sg9Ic6aF~6#FX=J9q)UAH1=1el zYpD1_6<@ncd@20d>P9*17pnNY(bf6|D!%+2iI?-&QSl{R;`4fp&r|Vb%U0uSqh73E zTgBJHc;oug>Jp!OvE(-jh4O&!++V=6jyB5rW>Z(k|=C`NjWb`8h+JU-Vy= zU+XIA@1Yu>!GBqP5ytb7<%jvC=O5==YMC##`Qr|8eEtx}mtHZnpjtG?gG##w}VGBxoGs}N~ z`Wyd4QGeEh^cH`9|BT=GABy;|ee8&GXvI6q`apha;e068 z2l}Ibu0J!&Kj*LUKNRbaj-T~6{s*dmo>u3tZTV8o_Kmnt?j$(+qkqmf4BHqf8&3k z`nT?>j(^rj`)?nK`|n0lfAUKg26gq%SLv<(^ykAr>p!#nv;M~aVCtVAGjRQN{H(w6 zKNR&h`%H7`eWE&qCjVp6A81XCHdo z>{43H2RrT`8IQB0=tn`HZYw$TZF7?enU9E3hjo*BG z(X+mBkK?y7#PyAL>8-xe-h!W5^^LmJH{HEj-%yR;Y&%uo9>;Ic6#JnXzge&A!)Io0 zebYz8Ki97&cymT&uI6t=&-oTUCOp@(_AiC!dX|Fc`sMsg^n8CYPlV@syx5A*2jTHLeKj6;AgZx`JCdv!Tix4>ytsx`Z&V{&-#RO3qNG_IcwK460VQUGlge< z4e+erP=9|tKSSE%eB<}gxWDq|+pUa`_2K7HIUo6bHQt{x%jZo|?hfJn3HqFWyU+RO z=-;90|G|ErhwE+9=lr8S=ilmc{^9x6`JbO#o&O2=nKl1g@ZYcb@ANtUu+RCo&KuhP z?{)q+`<%bq=ls1s< zvWrB|`+XZc_XmUhzDeiCj~6p5e+TvB{;6C3*=4g={w?(9p!2_Y_R8PwG5_?xJpaM2 z=iE;_7|(<4|9CdbKkPC8sL%Ni_3v|p-wmZJ8zyV*Sgz=N{)@ru z^H=b!dD z{|x;*RQ*5L^^*IaxX<~Aea=7XbN>Dv)%l;@TAlwfc+UR>c30eG(eF8CQ;{~g$Kz1RD{ znf?ApqtE$gKb3m-EC1xdYX3*z+5b)O?EeOM_J8{Uv7gcYPhf8w|H=L0pZEVZ`iuAf z96ay;8F+oa*L>&x|J!Q*&EE*m{2Snz|4={wv%NZdT{qrl-wsYy;o>3Z9S2HU1)TY(CloX@i{{C zi-oqX6q@cP)ZJYu+siLi{AI#7uBgh1Ck-Cky?p6EDzqcF#MgXCaNZ+Ab$sz9>y<82 zP!D*<7d#BRLB_{;G(GdZuoSs#ZXhat&<8;FZGUi76Z^| zNB_SaJ#as3zvPemK>P=%?I9u-3IO{58gRCHux?Wx7k}-w>c<1yC7pJF#2p=6Kd#yS zW`7gEjdcd+m;V3plFWN&*Rd2;DE&X(1vf7?d z9~~vsKU!!Ex&LM1^K~{Z?LzPg>>I#^pbh#tM(hGm?^xj(kEV^|Mc@3YQ15iuqrLbW z!sik6-x8XJz?~{o`wieP0*yf(3!e7jaLG5CM=0g-FyWK;WZZev>%Rw=9{~HKgvOxl z6RQ5`H)Y>onef6;5gyRd74wn0PU z-vDmJW@USgH-%@snr0&f*LoYc<%Rdqp0lv<3H>c5d~jsyK<)biLyK(I|v26lOe|i!@&6 zb0weeAhcwPe-;HG^88ZNUQ1}n{2%&fY>~f7#V!6!9r!$`^G`oDd*;8s%AdDCoxiu! z?3w?kJ~aMK|MPrR=O50d<9{vWzhsfSxtKR8=YKSt=D!ZczsY}~`Jc?D^WRhX+vb0; zA87suv+4L>75SUo&Bb|7%K7hMA0VjN=l;J2#=psbp!x5wH+zo%)m8qs z`5&%3d*;8|hsOUv^S`nE?3sVF829F^%iRAA)%%}dKgl}_s`<~^n5 zia#^U&+GH}&_6Kixm(K6Q2RXWBP^!ruSzQ%EUq`+mmeFEqh^jGwY_oKC6j;B8Y*ID0`KNtSq0Iu^sxWakB&9#p7 zJKqPl_3s&<6CC@ed^m*!e*N^EMKu*h&$)q_;e{QR*(=4D%qC>(Rc9b8YdbaV`vw z2F^DB=vUiQesY(1nBP?3`1u>{kNI5>9P7Y#PUQKNe@xG|zA?`NdfWjoH8y?k1_IBy%|=PFrOQg>%*HwLA=L(eg%gZ67%sAgLG=MLQd zu;OgStlvR%#_Gq++Fua+aQEK)a9yMy(&e|5dEp_hQ=#B^mDc-lY{IV|VgKd0H-bm&h_uH28IZI+fc>DDh7yUKAD0cn~+Aq=P z_CpN#e&zpF6tZ9KFUtjSkmu{s{?gwuD8~V50C{N96Gu7$FZg^#xs4|9>mJbCc-?Lm zwZm0%X6LiREXrrcS=7!>v#6b&XHh%ldueEEW|F0PoWG3&W!`w8I<}ni%A(i!zhNU{ zdp^?mbS;^Q{viEpd(Cry(`)8< zz6;y6e*cgOuwl@L9umKuajS6jdmZ9*EpdAA$8*Yt1?L0DIBoeffx8UfOSHu|5x5^9 zzVvi?A6D;&CjeS)6aj;0++!b8`AZl-+w5-%!_u!y#<`ZekA}@*QcXKy>;Bw z)Bi}|SO@0EI&fGHHb463cx3yw`K8az*)ILKc%jDy_1Z7x|1IyoE{=inyIrv!;`?9D z^D^%E{j2t~!Y4044!-f6@IfZD{S5S=%(qv{@3-5|g*iT!*iGW@tOKecj*peQ;JBWx zt#G#fo}h55*$z7j6W|r#`Te?l?t@DV>zmCbd_0d(?|rGG>j>X|5A_``e1OkkrT-Rr z@-LyctbBawcMKvh>xNtWB~!$Xd9r@NQiqhtCTMcB;IcdEoaE)-lf&<};64KE9AGQT(-$5Az^Rw>h-Xe)M8L zCRbJUv?KKom;C90a?<=T(XX+h8=oJ(=3G_$P_B9B1Q`chU+6FX9~ocyk)m&7KH2ad@L4GM zunWHVdHA0s_`C}~*jw=a5rS`7=Jx@`M!?ib&+kWy0+@HewA}pegOSgLI*ms0)-CYn zwU)0}$j!LZ@=q1=6>8+$75*2ik$<<4uUR9%uaKKQ*ZzM~$jy487><)13#W*yY>y)Aw|SIC#I!S7SZ z7pal&U&!nF<$yxILV;fm{cAoyZ?3(HI+!}w$ycnA-%`ldtC7E3$V`2-pMP28<}P37 z|67H;F3yuIax)w1{M=gPW%@?N#oOK~4HxapAZ3i6aI2dZnxMeFW|G`k3JUNj=w1(l+#L zkGS8iC3%d5;5qQb{QMO zQNZ;J`7dD4cFg*>e2x5_LcT_g{9lFKj2-P~M6n*2{fd?^YLS1nkehWvEOXS{4HXo+7J z4YR%WF=#K6_MmpgDO_W+-~!;bUPtocy!s6IVi=d#|0q5~9XVe~0e6l7p6k=M!1MQH zwf-FF&6;SgE5P&l=8HuGW**-Lxw+Sv>t*m83F|zKeKzOkQiYwV-5TpketbXRc<{!j zxxNXW@jZb2is@5cXG70CZR=&I)cWu#lO#tL2v$GBXG7gP*mE*XA;7 zxw)1aEAee5Z0FzCf#-TOx|j&&9;xM<7jko7)X%rC6ooQ*dZ>E{+PF#T&xY7Pq%Evp z**$_Iwc!)sofLjSpF>{UU%U*SUYkqf&MRa_ zr{$LwviXX?{bA4joW_0CVt+^>H!+?Cd$X3A>vr&Fk72H7z>g8uF>#x5qU8$|{bJU< zG2W~RZ7z*7`&ZN7-vy52<`wX37^C7c>u+%@br#=H+F{&2_>Byx zxDG4+Oq|CFSOjub<*{Q5#}=F3s=&wSr6WM&L#xtT9!PCf=a>u*N289!@nEOG8qyf&Aq zyXi0Q;lmB7DRC_Vx*_P1 zpr?Ue33>zQt)KzoOTqsh^v|HLgF4vv?={yEWxk7oUmG-ppH0E<4muI^D9}?uF95v~ z^!uQH-dyt8zHG&Dt}LjT|7-gqXTR|L?s&*|1fJ)24??c}EWCyI34p({=y$UwPl9}J z$S*9`RWnbu{3eV17K?n-;=W?$q4x9R;1P=Dwr-82Q>Y^2-XD*&A#8Hwu}VM_T@^Lbh^^{1nLFLjQ8Uo98ZbKh<&* zOPzdmi+qPdzCewi&lR#UHF8s*`D^6M78AxiKkInbDdc9I(Q

    y=@^sXS~dRbMH3S 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

    TW6MR4A`ddA0?M+Ry{JDSk3VE@;`TJb|82AbJ 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�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 UhvaI5T&;jB7b*!rd-QamE&Hid1Gs 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 int: + return len(self.key) * 8 + + +class AES128(BlockCipherAlgorithm): + name = "AES" + block_size = 128 + key_sizes = frozenset([128]) + key_size = 128 + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + +class AES256(BlockCipherAlgorithm): + name = "AES" + block_size = 128 + key_sizes = frozenset([256]) + key_size = 256 + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + +class Camellia(BlockCipherAlgorithm): + name = "camellia" + block_size = 128 + key_sizes = frozenset([128, 192, 256]) + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + @property + def key_size(self) -> int: + return len(self.key) * 8 + + +utils.deprecated( + ARC4, + __name__, + "ARC4 has been moved to " + "cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and " + "will be removed from " + "cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.", + utils.DeprecatedIn43, + name="ARC4", +) + + +utils.deprecated( + TripleDES, + __name__, + "TripleDES has been moved to " + "cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and " + "will be removed from " + "cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.", + utils.DeprecatedIn43, + name="TripleDES", +) + +utils.deprecated( + Blowfish, + __name__, + "Blowfish has been moved to " + "cryptography.hazmat.decrepit.ciphers.algorithms.Blowfish and " + "will be removed from " + "cryptography.hazmat.primitives.ciphers.algorithms in 45.0.0.", + utils.DeprecatedIn37, + name="Blowfish", +) + + +utils.deprecated( + CAST5, + __name__, + "CAST5 has been moved to " + "cryptography.hazmat.decrepit.ciphers.algorithms.CAST5 and " + "will be removed from " + "cryptography.hazmat.primitives.ciphers.algorithms in 45.0.0.", + utils.DeprecatedIn37, + name="CAST5", +) + + +utils.deprecated( + IDEA, + __name__, + "IDEA has been moved to " + "cryptography.hazmat.decrepit.ciphers.algorithms.IDEA and " + "will be removed from " + "cryptography.hazmat.primitives.ciphers.algorithms in 45.0.0.", + utils.DeprecatedIn37, + name="IDEA", +) + + +utils.deprecated( + SEED, + __name__, + "SEED has been moved to " + "cryptography.hazmat.decrepit.ciphers.algorithms.SEED and " + "will be removed from " + "cryptography.hazmat.primitives.ciphers.algorithms in 45.0.0.", + utils.DeprecatedIn37, + name="SEED", +) + + +class ChaCha20(CipherAlgorithm): + name = "ChaCha20" + key_sizes = frozenset([256]) + + def __init__(self, key: bytes, nonce: bytes): + self.key = _verify_key_size(self, key) + utils._check_byteslike("nonce", nonce) + + if len(nonce) != 16: + raise ValueError("nonce must be 128-bits (16 bytes)") + + self._nonce = nonce + + @property + def nonce(self) -> bytes: + return self._nonce + + @property + def key_size(self) -> int: + return len(self.key) * 8 + + +class SM4(BlockCipherAlgorithm): + name = "SM4" + block_size = 128 + key_sizes = frozenset([128]) + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + @property + def key_size(self) -> int: + return len(self.key) * 8 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/base.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/base.py new file mode 100644 index 0000000..ebfa805 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/base.py @@ -0,0 +1,145 @@ +# 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 annotations + +import abc +import typing + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives._cipheralgorithm import CipherAlgorithm +from cryptography.hazmat.primitives.ciphers import modes + + +class CipherContext(metaclass=abc.ABCMeta): + @abc.abstractmethod + def update(self, data: bytes) -> bytes: + """ + Processes the provided bytes through the cipher and returns the results + as bytes. + """ + + @abc.abstractmethod + def update_into(self, data: bytes, buf: bytes) -> int: + """ + Processes the provided bytes and writes the resulting data into the + provided buffer. Returns the number of bytes written. + """ + + @abc.abstractmethod + def finalize(self) -> bytes: + """ + Returns the results of processing the final block as bytes. + """ + + @abc.abstractmethod + def reset_nonce(self, nonce: bytes) -> None: + """ + Resets the nonce for the cipher context to the provided value. + Raises an exception if it does not support reset or if the + provided nonce does not have a valid length. + """ + + +class AEADCipherContext(CipherContext, metaclass=abc.ABCMeta): + @abc.abstractmethod + def authenticate_additional_data(self, data: bytes) -> None: + """ + Authenticates the provided bytes. + """ + + +class AEADDecryptionContext(AEADCipherContext, metaclass=abc.ABCMeta): + @abc.abstractmethod + def finalize_with_tag(self, tag: bytes) -> bytes: + """ + Returns the results of processing the final block as bytes and allows + delayed passing of the authentication tag. + """ + + +class AEADEncryptionContext(AEADCipherContext, metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def tag(self) -> bytes: + """ + Returns tag bytes. This is only available after encryption is + finalized. + """ + + +Mode = typing.TypeVar( + "Mode", bound=typing.Optional[modes.Mode], covariant=True +) + + +class Cipher(typing.Generic[Mode]): + def __init__( + self, + algorithm: CipherAlgorithm, + mode: Mode, + backend: typing.Any = None, + ) -> None: + if not isinstance(algorithm, CipherAlgorithm): + raise TypeError("Expected interface of CipherAlgorithm.") + + if mode is not None: + # mypy needs this assert to narrow the type from our generic + # type. Maybe it won't some time in the future. + assert isinstance(mode, modes.Mode) + mode.validate_for_algorithm(algorithm) + + self.algorithm = algorithm + self.mode = mode + + @typing.overload + def encryptor( + self: Cipher[modes.ModeWithAuthenticationTag], + ) -> AEADEncryptionContext: ... + + @typing.overload + def encryptor( + self: _CIPHER_TYPE, + ) -> CipherContext: ... + + def encryptor(self): + if isinstance(self.mode, modes.ModeWithAuthenticationTag): + if self.mode.tag is not None: + raise ValueError( + "Authentication tag must be None when encrypting." + ) + + return rust_openssl.ciphers.create_encryption_ctx( + self.algorithm, self.mode + ) + + @typing.overload + def decryptor( + self: Cipher[modes.ModeWithAuthenticationTag], + ) -> AEADDecryptionContext: ... + + @typing.overload + def decryptor( + self: _CIPHER_TYPE, + ) -> CipherContext: ... + + def decryptor(self): + return rust_openssl.ciphers.create_decryption_ctx( + self.algorithm, self.mode + ) + + +_CIPHER_TYPE = Cipher[ + typing.Union[ + modes.ModeWithNonce, + modes.ModeWithTweak, + None, + modes.ECB, + modes.ModeWithInitializationVector, + ] +] + +CipherContext.register(rust_openssl.ciphers.CipherContext) +AEADEncryptionContext.register(rust_openssl.ciphers.AEADEncryptionContext) +AEADDecryptionContext.register(rust_openssl.ciphers.AEADDecryptionContext) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/modes.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/modes.py new file mode 100644 index 0000000..1dd2cc1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/modes.py @@ -0,0 +1,268 @@ +# 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 annotations + +import abc + +from cryptography import utils +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.primitives._cipheralgorithm import ( + BlockCipherAlgorithm, + CipherAlgorithm, +) +from cryptography.hazmat.primitives.ciphers import algorithms + + +class Mode(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def name(self) -> str: + """ + A string naming this mode (e.g. "ECB", "CBC"). + """ + + @abc.abstractmethod + def validate_for_algorithm(self, algorithm: CipherAlgorithm) -> None: + """ + Checks that all the necessary invariants of this (mode, algorithm) + combination are met. + """ + + +class ModeWithInitializationVector(Mode, metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def initialization_vector(self) -> bytes: + """ + The value of the initialization vector for this mode as bytes. + """ + + +class ModeWithTweak(Mode, metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def tweak(self) -> bytes: + """ + The value of the tweak for this mode as bytes. + """ + + +class ModeWithNonce(Mode, metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def nonce(self) -> bytes: + """ + The value of the nonce for this mode as bytes. + """ + + +class ModeWithAuthenticationTag(Mode, metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def tag(self) -> bytes | None: + """ + The value of the tag supplied to the constructor of this mode. + """ + + +def _check_aes_key_length(self: Mode, algorithm: CipherAlgorithm) -> None: + if algorithm.key_size > 256 and algorithm.name == "AES": + raise ValueError( + "Only 128, 192, and 256 bit keys are allowed for this AES mode" + ) + + +def _check_iv_length( + self: ModeWithInitializationVector, algorithm: BlockCipherAlgorithm +) -> None: + iv_len = len(self.initialization_vector) + if iv_len * 8 != algorithm.block_size: + raise ValueError(f"Invalid IV size ({iv_len}) for {self.name}.") + + +def _check_nonce_length( + nonce: bytes, name: str, algorithm: CipherAlgorithm +) -> None: + if not isinstance(algorithm, BlockCipherAlgorithm): + raise UnsupportedAlgorithm( + f"{name} requires a block cipher algorithm", + _Reasons.UNSUPPORTED_CIPHER, + ) + if len(nonce) * 8 != algorithm.block_size: + raise ValueError(f"Invalid nonce size ({len(nonce)}) for {name}.") + + +def _check_iv_and_key_length( + self: ModeWithInitializationVector, algorithm: CipherAlgorithm +) -> None: + if not isinstance(algorithm, BlockCipherAlgorithm): + raise UnsupportedAlgorithm( + f"{self} requires a block cipher algorithm", + _Reasons.UNSUPPORTED_CIPHER, + ) + _check_aes_key_length(self, algorithm) + _check_iv_length(self, algorithm) + + +class CBC(ModeWithInitializationVector): + name = "CBC" + + def __init__(self, initialization_vector: bytes): + utils._check_byteslike("initialization_vector", initialization_vector) + self._initialization_vector = initialization_vector + + @property + def initialization_vector(self) -> bytes: + return self._initialization_vector + + validate_for_algorithm = _check_iv_and_key_length + + +class XTS(ModeWithTweak): + name = "XTS" + + def __init__(self, tweak: bytes): + utils._check_byteslike("tweak", tweak) + + if len(tweak) != 16: + raise ValueError("tweak must be 128-bits (16 bytes)") + + self._tweak = tweak + + @property + def tweak(self) -> bytes: + return self._tweak + + def validate_for_algorithm(self, algorithm: CipherAlgorithm) -> None: + if isinstance(algorithm, (algorithms.AES128, algorithms.AES256)): + raise TypeError( + "The AES128 and AES256 classes do not support XTS, please use " + "the standard AES class instead." + ) + + if algorithm.key_size not in (256, 512): + raise ValueError( + "The XTS specification requires a 256-bit key for AES-128-XTS" + " and 512-bit key for AES-256-XTS" + ) + + +class ECB(Mode): + name = "ECB" + + validate_for_algorithm = _check_aes_key_length + + +class OFB(ModeWithInitializationVector): + name = "OFB" + + def __init__(self, initialization_vector: bytes): + utils._check_byteslike("initialization_vector", initialization_vector) + self._initialization_vector = initialization_vector + + @property + def initialization_vector(self) -> bytes: + return self._initialization_vector + + validate_for_algorithm = _check_iv_and_key_length + + +class CFB(ModeWithInitializationVector): + name = "CFB" + + def __init__(self, initialization_vector: bytes): + utils._check_byteslike("initialization_vector", initialization_vector) + self._initialization_vector = initialization_vector + + @property + def initialization_vector(self) -> bytes: + return self._initialization_vector + + validate_for_algorithm = _check_iv_and_key_length + + +class CFB8(ModeWithInitializationVector): + name = "CFB8" + + def __init__(self, initialization_vector: bytes): + utils._check_byteslike("initialization_vector", initialization_vector) + self._initialization_vector = initialization_vector + + @property + def initialization_vector(self) -> bytes: + return self._initialization_vector + + validate_for_algorithm = _check_iv_and_key_length + + +class CTR(ModeWithNonce): + name = "CTR" + + def __init__(self, nonce: bytes): + utils._check_byteslike("nonce", nonce) + self._nonce = nonce + + @property + def nonce(self) -> bytes: + return self._nonce + + def validate_for_algorithm(self, algorithm: CipherAlgorithm) -> None: + _check_aes_key_length(self, algorithm) + _check_nonce_length(self.nonce, self.name, algorithm) + + +class GCM(ModeWithInitializationVector, ModeWithAuthenticationTag): + name = "GCM" + _MAX_ENCRYPTED_BYTES = (2**39 - 256) // 8 + _MAX_AAD_BYTES = (2**64) // 8 + + def __init__( + self, + initialization_vector: bytes, + tag: bytes | None = None, + min_tag_length: int = 16, + ): + # OpenSSL 3.0.0 constrains GCM IVs to [64, 1024] bits inclusive + # This is a sane limit anyway so we'll enforce it here. + utils._check_byteslike("initialization_vector", initialization_vector) + if len(initialization_vector) < 8 or len(initialization_vector) > 128: + raise ValueError( + "initialization_vector must be between 8 and 128 bytes (64 " + "and 1024 bits)." + ) + self._initialization_vector = initialization_vector + if tag is not None: + utils._check_bytes("tag", tag) + if min_tag_length < 4: + raise ValueError("min_tag_length must be >= 4") + if len(tag) < min_tag_length: + raise ValueError( + f"Authentication tag must be {min_tag_length} bytes or " + "longer." + ) + self._tag = tag + self._min_tag_length = min_tag_length + + @property + def tag(self) -> bytes | None: + return self._tag + + @property + def initialization_vector(self) -> bytes: + return self._initialization_vector + + def validate_for_algorithm(self, algorithm: CipherAlgorithm) -> None: + _check_aes_key_length(self, algorithm) + if not isinstance(algorithm, BlockCipherAlgorithm): + raise UnsupportedAlgorithm( + "GCM requires a block cipher algorithm", + _Reasons.UNSUPPORTED_CIPHER, + ) + block_size_bytes = algorithm.block_size // 8 + if self._tag is not None and len(self._tag) > block_size_bytes: + raise ValueError( + f"Authentication tag cannot be more than {block_size_bytes} " + "bytes." + ) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/cmac.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/cmac.py new file mode 100644 index 0000000..2c67ce2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/cmac.py @@ -0,0 +1,10 @@ +# 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 annotations + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl + +__all__ = ["CMAC"] +CMAC = rust_openssl.cmac.CMAC diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/constant_time.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/constant_time.py new file mode 100644 index 0000000..3975c71 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/constant_time.py @@ -0,0 +1,14 @@ +# 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 annotations + +import hmac + + +def bytes_eq(a: bytes, b: bytes) -> bool: + if not isinstance(a, bytes) or not isinstance(b, bytes): + raise TypeError("a and b must be bytes.") + + return hmac.compare_digest(a, b) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/hashes.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/hashes.py new file mode 100644 index 0000000..b819e39 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/hashes.py @@ -0,0 +1,242 @@ +# 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 annotations + +import abc + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl + +__all__ = [ + "MD5", + "SHA1", + "SHA3_224", + "SHA3_256", + "SHA3_384", + "SHA3_512", + "SHA224", + "SHA256", + "SHA384", + "SHA512", + "SHA512_224", + "SHA512_256", + "SHAKE128", + "SHAKE256", + "SM3", + "BLAKE2b", + "BLAKE2s", + "ExtendableOutputFunction", + "Hash", + "HashAlgorithm", + "HashContext", +] + + +class HashAlgorithm(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def name(self) -> str: + """ + A string naming this algorithm (e.g. "sha256", "md5"). + """ + + @property + @abc.abstractmethod + def digest_size(self) -> int: + """ + The size of the resulting digest in bytes. + """ + + @property + @abc.abstractmethod + def block_size(self) -> int | None: + """ + The internal block size of the hash function, or None if the hash + function does not use blocks internally (e.g. SHA3). + """ + + +class HashContext(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def algorithm(self) -> HashAlgorithm: + """ + A HashAlgorithm that will be used by this context. + """ + + @abc.abstractmethod + def update(self, data: bytes) -> None: + """ + Processes the provided bytes through the hash. + """ + + @abc.abstractmethod + def finalize(self) -> bytes: + """ + Finalizes the hash context and returns the hash digest as bytes. + """ + + @abc.abstractmethod + def copy(self) -> HashContext: + """ + Return a HashContext that is a copy of the current context. + """ + + +Hash = rust_openssl.hashes.Hash +HashContext.register(Hash) + + +class ExtendableOutputFunction(metaclass=abc.ABCMeta): + """ + An interface for extendable output functions. + """ + + +class SHA1(HashAlgorithm): + name = "sha1" + digest_size = 20 + block_size = 64 + + +class SHA512_224(HashAlgorithm): # noqa: N801 + name = "sha512-224" + digest_size = 28 + block_size = 128 + + +class SHA512_256(HashAlgorithm): # noqa: N801 + name = "sha512-256" + digest_size = 32 + block_size = 128 + + +class SHA224(HashAlgorithm): + name = "sha224" + digest_size = 28 + block_size = 64 + + +class SHA256(HashAlgorithm): + name = "sha256" + digest_size = 32 + block_size = 64 + + +class SHA384(HashAlgorithm): + name = "sha384" + digest_size = 48 + block_size = 128 + + +class SHA512(HashAlgorithm): + name = "sha512" + digest_size = 64 + block_size = 128 + + +class SHA3_224(HashAlgorithm): # noqa: N801 + name = "sha3-224" + digest_size = 28 + block_size = None + + +class SHA3_256(HashAlgorithm): # noqa: N801 + name = "sha3-256" + digest_size = 32 + block_size = None + + +class SHA3_384(HashAlgorithm): # noqa: N801 + name = "sha3-384" + digest_size = 48 + block_size = None + + +class SHA3_512(HashAlgorithm): # noqa: N801 + name = "sha3-512" + digest_size = 64 + block_size = None + + +class SHAKE128(HashAlgorithm, ExtendableOutputFunction): + name = "shake128" + block_size = None + + def __init__(self, digest_size: int): + if not isinstance(digest_size, int): + raise TypeError("digest_size must be an integer") + + if digest_size < 1: + raise ValueError("digest_size must be a positive integer") + + self._digest_size = digest_size + + @property + def digest_size(self) -> int: + return self._digest_size + + +class SHAKE256(HashAlgorithm, ExtendableOutputFunction): + name = "shake256" + block_size = None + + def __init__(self, digest_size: int): + if not isinstance(digest_size, int): + raise TypeError("digest_size must be an integer") + + if digest_size < 1: + raise ValueError("digest_size must be a positive integer") + + self._digest_size = digest_size + + @property + def digest_size(self) -> int: + return self._digest_size + + +class MD5(HashAlgorithm): + name = "md5" + digest_size = 16 + block_size = 64 + + +class BLAKE2b(HashAlgorithm): + name = "blake2b" + _max_digest_size = 64 + _min_digest_size = 1 + block_size = 128 + + def __init__(self, digest_size: int): + if digest_size != 64: + raise ValueError("Digest size must be 64") + + self._digest_size = digest_size + + @property + def digest_size(self) -> int: + return self._digest_size + + +class BLAKE2s(HashAlgorithm): + name = "blake2s" + block_size = 64 + _max_digest_size = 32 + _min_digest_size = 1 + + def __init__(self, digest_size: int): + if digest_size != 32: + raise ValueError("Digest size must be 32") + + self._digest_size = digest_size + + @property + def digest_size(self) -> int: + return self._digest_size + + +class SM3(HashAlgorithm): + name = "sm3" + digest_size = 32 + block_size = 64 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/hmac.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/hmac.py new file mode 100644 index 0000000..a9442d5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/hmac.py @@ -0,0 +1,13 @@ +# 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 annotations + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import hashes + +__all__ = ["HMAC"] + +HMAC = rust_openssl.hmac.HMAC +hashes.HashContext.register(HMAC) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__init__.py new file mode 100644 index 0000000..79bb459 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__init__.py @@ -0,0 +1,23 @@ +# 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 annotations + +import abc + + +class KeyDerivationFunction(metaclass=abc.ABCMeta): + @abc.abstractmethod + def derive(self, key_material: bytes) -> bytes: + """ + Deterministically generates and returns a new key based on the existing + key material. + """ + + @abc.abstractmethod + def verify(self, key_material: bytes, expected_key: bytes) -> None: + """ + Checks whether the key generated by the key material matches the + expected derived key. Raises an exception if they do not match. + """ diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a218982b77d7acac27dbb39a105b67c3e5b66bde GIT binary patch literal 1376 zcmZ`(KX21O6hAwTlcq`eCsc+GCzvu2t71h+v=t193}uUitc&lGIPpL3oV4!Lp&K8d z5)%U|LggdyAs85tCnP2olqyV}c+ZZlR&6iQ^Sk%nz4v>+clPI2t3hDB|8_R~s}u4Y zH^r*viniDS<(P27HIMjOPt#D>J-w&vVM3!7siNKfOWr;EziD8l#(H;#-G*q#<9(yLyIXz<#V z2$Rpin4&yJSFHf5PKA=(mqpy(=ed%NKmnl z2ZLdm4<((XEKefnFwZ< z=k~2AiAQ1Zq_eqcDK{36Bk;4KP?jT;C=Q2`MWe(Tu>+_KnOxtE-5Izid|=r&G#A@; zCrVP2Ba`A_<62TXxpx(yWo#W1{4HQh(x%vt0G{ABG?*IQFc8ji_~<9s)BK?%V0$E- ziK2TW0j$Z4I%KNgn$vz#8VmZ6M`r|cfFot10td~(avVvA?lMjj1@q}9FHm0u3|TXDZH1^jYM|kI*7FPd~5qPMCBka13#}n&HH~QHy{@8mU;_f rUePpd-XPke@8sdd|1Z)w%zksTr9nSe#YgAUB(tBP^WQZQSp)w8=wMhL literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67b434e214f072cf7c334fc9ef3b45610d4edc57 GIT binary patch literal 607 zcmZvYKX2496u_S^ce!w(LJTJcqz;AQPJ&p46(J#2U65GVvRJu`n>d%)k?lkcQ^!jE z0PqPwh_Ap$UU+Va0~~GtASjy~?^Pkc)Sx_8+hPr)SP3!~>gJ8Sju0%@9B{REJ zO_ffRA_WxJfR!SF3Dg0EqHt_Dha7t7p@$rMToydA3kWb!^x&HUr9J49{{Jks$cj>Eb~ z^`t#;_p07JpXON`uln--v_Bt62iUVu74pG!Fds^X^5JxtwfWUZKAMg~eOL~E#HTyt z5xE=gF?m!z0QXK0nIUrjM?@Y_qIbQ7Jb=qC=`Pkc2z^6)`nqM$6_OZxgsch93QL++ zFeD>a(DW2M`$|Sm)e|18^P)->NiI+4G)c`ZE3y@ONn3)d{EAXec&%s#Mi`Q2h(<22 zSpKY}XBFMzvw0~4^Yj7NltOb$Z0hNfmcdt8oMw4*nqm2=Vw9+6`DV+8qG!0~%JIg- z1zX{^jzQ%%sgQNJ?=3PXd%pDE^}xpAvI}gCPd&m3EbnY?9(LhZ6>Z+gT0wkIfyxSn zwFyQ+WbaLIGz`o-zCOOKC9{RRl3b9JMOs);GKQWkQSlou#1P|B<#B4)BmX0fS#o}#Fku-I@bl$WlFw#Dek zABRHwpknoinL<8a&_sB(Zcn1qL(tO$m;Nr06|xy3-NW^+C+;O`T~DvP+z3S1LVpho znSr5=jsbJ<@?XvZvH!J>RJ|i*3aLh*(+rGk2+_JQRDJGVuqK?S3n$E-|E8A+qrgD> zaS;*Ny$DtXqL5U}CzYDQaxtgPPhOH#Rhm_mciwq-BHm^cmkOGpTr=LyFx|m4 zSR8$S4f?uG3`c9AC8sWP6|zT5o_X#%FMF^1Wd6DzY{J*HiFFSFox;=)*b9(c4^#rs zyiYL#t;UMqZ8z>Gjy!G-SR1UgWpCfZxyv$vlV5L_hO-!WSDU>$&BVR0J@54y(H3uo zmwkiIqnmdb_^$gZewk;rHu-(EE_>G7q~c5fYjw{dlM44+PwNd3^ZY3~4g;8xP!#wh z)ZwG=pdmR~9s6-~B;xn{Jtyx;~Fzfj0&Fa?_(V+uWt z1YOPY7fMF41d$x>$Q#HMN?>W!;}hoR23XKo}{lZ{B%>I)yw+?-kE z8ba`va6|ZPwEC-B*U@^{(VFmNU3k(Io^1B4jnss(x-e!6V>>N_HDS0e44cAmL+H2_ zy%AlLZZG_P;S=>!wI+<$g>h3Dhn~;I*XF8ke7f*S^3!BZ_{pljA;i{>e;ip2Y{p2q z%U;T6H;Ke7gNTlsSG*s> z2#v$wAvU*4APa&g$K^28C%h>pn(2g(#ZfCHI-q6+nn4&E9SpO4Vo6uzgwNu2MV;Ff zy6H2pb{%)pW^{rG2%9rRaruBtVv{@V&*Gp9K*0PuNN}Y3()!Z9a!oi>7tWZ%na0rg zDt|N9=pTh!q%rxdIeBS)aDDJ^J=pxPZwPLoRruMShe2RF+!lIWX${H(E^g~-sJNxv z3b_EhjwIb~e}&xVQVB0b*RpujJ3Rx{`yBll-0Td-b~T@fOIYsNwPkF40a<&2tdNaZ z-_2iFpT2XU7JI55d&(4^vNtgfy%aKBl5rLS4}Q4V;x(wa^8*?%+Bkn>D;~J)(vJUV zHmw{0>W)D`-7(0!(E7mXfo*$IR}+4E4(6lC#Nq}$i?t~v&jGpbVNzgmO2^gggdM*f zYnFT6!mwLk1ja3#2$QYY&9j??3yyDeA2K6{8hwMP+l^Sf5gDi+zB6%;|1$K|)SqAb z#_Q<}eM^9B5>L=pycJQd6(LvPoMr*> zgKyD`@OYo6h$oi7Qa@37kK%qQGT-;M#6@3*1|5wP9LF{w{}Ln^bLHJavs-@-oLd;W z(S%0ou_Np97mI&f{A!~1#D)437rq{;#ZvWH3S~LE(LG{DMmD`rWzV*S;o<;OSnBn- zpvByoqI)Jh6#a^#m%^4D^R!#hQ1AQOT5&hbeC>YJMIvB9Akd_|B8m`D#C$<6saTJQ z;(H}YwR`A!9LX$-$>}wmxe2M50n$@Dghd+kgB9nu86gM9H^UL%@Fv-ZjBvgQ5P*yL z{XQ@uH|g~FKv0h%w(xKj8MvH+nuD?rn)CsRgc+Lj%N-0&2IMY=CWCUXgC;}mXma`D zrG3!^LawA53{GrdK^ZXhWZI0cl~w)+y4{A(fQ0`+K*9r%@VkMe!nLBtO22`pw`PGJ zXDx6Z@qF%aI}V&jyenZD&M~bS?30bwXW+T3Sr#zDvI3`+UFS=HJ}&@S(BbgG6Zq3pm8S(Z87wuZv*FaBFq4gg>yTuVMwz=vuXiO zD(oB+yjm{W#~6!8b7eUljU$^+WU9gN2vHKTpbZ&u{+7aYln;106z1s6Dv+MX1`!x&*ad$O|iKM_wjTTxJ1T?SuVBtmkIA+Iwec z{pz2@TI^IkcFGh^{YcT5PQ$_<1HTxD82r*1++7>)GN@_C50pbQ?Z-hcAwf4`=<{Pi zO!_LWCQ{dR^@zraT%I6&WpQXPm=(SAg!eaH#U_Y9&`JNZ9R3KsxQgVC9? z(+Gob1nd6^{EU;qcBl>3+1ZoLbQtG6f`pxLaL!gLkmx~xpDV$qMF4mTQ2@@V_Nm8; zw11wn55@iMO_R#Cj8bIZLG3&fqop!bga-OQdhp3?s0EL{2H^}qm ze*XrUHXr|QkSWvs-}H0baWE7Y5rW*wP2wg4z1)#a;wF0_SoUl~FAJOBUy literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..586c073278f754cf09bfaab28a5ae32000c7e396 GIT binary patch literal 5241 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79b88eab96ad7cb71213f9fc1f15f00c3a74658b GIT binary patch literal 12145 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 Y?5CwNnLbG)^Ujo1z@n!$7|5FbAFf^|{r~^~ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e425e665bdfecb2a8a156676d235d4f083395f16 GIT binary patch literal 3002 zcmbUjO>YxNbk-jmf3M?wKp}veh>vZl4FOeEi%`!_z=m(enfc^*vS;AT=5>nekZ${z7sqf9&8wbLrg24kiT#;Xi*;#wjThpPIRIRCb5LFARrzxL*)>RVKZz+$`MYBm{ChC zi`Gba#EO+;R=gbN^r)GzlI0Y~MKf(>${9;4OME_JX06fks6ayGBGF?Hi5{n;Pr`&e zg}>j*IX!ff$ccY(Dhpmxwe6a#x<<`*N-&Q$T*Gwah?ku=8CCV>f?=zsu|{<-@s+&_ zsD7C?z46<&)2P>L%%%Fgxm;t0Td};Da)YW4NCH74wK}yO$CN`}S_6`++OFan7WKr6 z>QpH5On|5hlo_l1{Dp?Cp&nXaRX+3;7q&lu={ljLEa;>hiW5DjkLk&W(Q;TH*E0{n zZ2E*g3S(3k;DVE0;`-;8FD%Snx;p3Y${rb`_!VYrm}2J%K0Rc(dZ`s;+-tQ+=nVcu?P;*h=(z(HkUyT{el1@JBS`JO0{ zmbeib;tbH1@I(L)!QXGrvx&_+5X|C(nL9DS2&pCqxE^hVcgutugkfK5z|q1J(u0{!!02L$p$f9VCSh1R zlsB9_L{~ltmHbkT<$b>t7T6f_X1tRcYu4S`GE?i7W}%|4S*ly;8`>%K!)QR@lD&!g z;)=dBt5hsiQv&G>@9RZu)uIe9>t%13Zr;9r{o0LNUtUly&ELG_MU{qwp{xY);EgE0 z>lxbFODS4~YAcHG`>4VrA*t-dfII@>LCqy50XrK-fcIc%MPIo{4Z_|*UGjc=y;7{y zELyDU#X751spdMxnzgFn9UJxHDz#UOrmC(=}zpx4%AO{vSGEcYP0a+(4QiaiPOmh3R1Lyi1Nd^gmNzmsd#0`=Rk|5Z( zF+>em2_{puU(gAj86+X#J1Ix1LBc%&?x(>HNR)7C?YQrpyunMOMxDH-+WDGoHuH-# zk5LK}jTUanadrp}XSm->v4-O+{haW^;CU~nV+EzkP)e}FxZ!;S(+G|LkV9++@e=?X zv|&Eaj>6!H{{FSmp=j|*1!VmOzJ75g}d@wsO<$nJb&QtDW4{cIs;1fB#4a zJJONo((E&7wwv1DO=TZnL+~|#PHGC#D=(8`Ht~u8=n*lVV8`+J6un!AjG(##-u5D; znoYI90l>Eq@UZ)R{ z+-y5F+Y1AYFK}ziLP<{el`9KE{qmJVjMuPn#CRd&G^`bD9{{)vh7IHE@&J>?Au3*R zX#EuK60sIxHC7a;xQbQN8z$l@MY+>ZO@DudWxK(Fa1?Cu4&Wb)hsk58?NS4(4QR_S7(LN{@4eJ;DfVBC zeZ!;zy{pkW|C-_n%VUAROa6;Ay^DG9))}@A9}`YN!R%)EGP4iy)Wdsm?-YI>cMP9w zZ%?^9oCPQp3}0^Fq@N&$*~iWNI(E)?&3QHlH2e^8{ssWCBM7|&5oX$CdbqzJ>HGZm zf*fw|?!8b{2=&PS11Tb06xw8AxOd51d#~Ol7uvgfPm~34@7tg~dh8{VU+uBRt?(a% CzS-LV literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c322439fc516600c980445af30bdd1713437988 GIT binary patch literal 687 zcmZuuy=xmW6o0z2eg238C3xu2P*O0s&=VnRDHPH`Xq_dUu7f!Hl(R1Pg`_)r9*Tz! zg?4ZLf|k;Mp?`z}9>PtAPT5?tWvXhYf**G2ZB9(*fvQ5ZYCNoY6;d;)}6on}FDmwAGn@$RQ;!Y!1 z+9MWwEcS&>cqSyT>F6yD$-koif0l9~rso*Yz_ia^DL!rK7&-6`tiTmn(AlBT{r?OO_eQvOroDdC*K&jCtch(yA*#S ztB=b!GjC?z{JihIH=l&VK?L;sFTP&=cL1UP(8eM8y$bVU11h@+Bg|;1#N-)<)_s~U z?}L)n*b{zuZ2otUW9rChwgCsun*lpSiFO9 zSP>tw2t9$nNBIc${S2j}&uKHwI3Zcr4NJCELpO8K_E#)bGt)jNc1j8RjX*|7w0cr$eOC9e5(xo@~UEH3#3}Mj8!6+i`8sV-YUr!Xi`h6 zrEWm?I$p_cUjFVyDCf&nCoI7|NU)R2#cwYwBnexH(!IP6YzMVN;{CIz9+m)v~Iu&R^53g)YY3&C{rE)lbnaij2IhUO_$@nrt0~@Uhmy_E z8~fs@El%#$9_L%)C0o4I6fZqHHC^ZKMcc2PhC*zQ&(t|vc)guG1j7Y#582KTCskvc_N5{a#S7U}_2!u~|mD%=T zZkxsaZ4OrGLx%0b^QlGMp-XE$*udBxXojH*;Py9!!x@7mtUm;5fax(KtweubjT@dd z+yWhFjYc+?J~(xp#=%iXH24|=XFSveZsTuIqa2|}AbHZ09?`~H6q;SC`7lp0>(TJo zEwKAGTjQ|bt-bR8KYxnZM&xk*U|I7GYs2&=diMLRufHm|bRhS0LgS{3K0>kcoW_>t zFM-lga*lRUym>wv8}w04U029i+DDD*a5P|&X>y@jdOtqZ6sOwBlhobzg|ID5?)~O*ttDKsg)2?rN;{r>kgW6V(KxVpq8@k_ ziQm)q-uo&t-Hc4{$4-0{+PnVnRx37V$L8wS+G6@B znLo`voNI}*wm91qXQAig!rr+?{9)z~#z#g=oT)Fh#l(Z#zk8>Cqce)4iT(yVVL&@rEmH$pb*CO-z8?i>ct3zATmKh`IO0}IYPsQBe4`6ay@Dj=?sP}Wfo5{!omC^h{Ch17d^PgU*c7rxx z+Vv_|O84Fm<%I4K(iY?(T`nn-1i4Ns8Mva+x+qDvE3)SGkTjj?UdUCbecJU>nxY7O zBe{%5L^BU;r}yiK=*)B{6!VXF&@0&4gnyxfhFQkvhdVfidG|tBgwxWP>b`{B#N?ee zO3$!Tf#)ooflxC!y!Qrj#K9+_7e!th6wND}1*Po1y1hU{P47$&4e=h5^ZkdUiy1HM zO#T0n^YGLpBXrAdFmiA0E!w2n)&+lS70l+xKgbV}5Im#e1eNDyxeMO&p!2bbYgByDQ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/argon2.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/argon2.py new file mode 100644 index 0000000..405fc8d --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/argon2.py @@ -0,0 +1,13 @@ +# 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 annotations + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives.kdf import KeyDerivationFunction + +Argon2id = rust_openssl.kdf.Argon2id +KeyDerivationFunction.register(Argon2id) + +__all__ = ["Argon2id"] diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py new file mode 100644 index 0000000..96d9d4c --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py @@ -0,0 +1,124 @@ +# 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 annotations + +import typing + +from cryptography import utils +from cryptography.exceptions import AlreadyFinalized, InvalidKey +from cryptography.hazmat.primitives import constant_time, hashes, hmac +from cryptography.hazmat.primitives.kdf import KeyDerivationFunction + + +def _int_to_u32be(n: int) -> bytes: + return n.to_bytes(length=4, byteorder="big") + + +def _common_args_checks( + algorithm: hashes.HashAlgorithm, + length: int, + otherinfo: bytes | None, +) -> None: + max_length = algorithm.digest_size * (2**32 - 1) + if length > max_length: + raise ValueError(f"Cannot derive keys larger than {max_length} bits.") + if otherinfo is not None: + utils._check_bytes("otherinfo", otherinfo) + + +def _concatkdf_derive( + key_material: bytes, + length: int, + auxfn: typing.Callable[[], hashes.HashContext], + otherinfo: bytes, +) -> bytes: + utils._check_byteslike("key_material", key_material) + output = [b""] + outlen = 0 + counter = 1 + + while length > outlen: + h = auxfn() + h.update(_int_to_u32be(counter)) + h.update(key_material) + h.update(otherinfo) + output.append(h.finalize()) + outlen += len(output[-1]) + counter += 1 + + return b"".join(output)[:length] + + +class ConcatKDFHash(KeyDerivationFunction): + def __init__( + self, + algorithm: hashes.HashAlgorithm, + length: int, + otherinfo: bytes | None, + backend: typing.Any = None, + ): + _common_args_checks(algorithm, length, otherinfo) + self._algorithm = algorithm + self._length = length + self._otherinfo: bytes = otherinfo if otherinfo is not None else b"" + + self._used = False + + def _hash(self) -> hashes.Hash: + return hashes.Hash(self._algorithm) + + def derive(self, key_material: bytes) -> bytes: + if self._used: + raise AlreadyFinalized + self._used = True + return _concatkdf_derive( + key_material, self._length, self._hash, self._otherinfo + ) + + def verify(self, key_material: bytes, expected_key: bytes) -> None: + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey + + +class ConcatKDFHMAC(KeyDerivationFunction): + def __init__( + self, + algorithm: hashes.HashAlgorithm, + length: int, + salt: bytes | None, + otherinfo: bytes | None, + backend: typing.Any = None, + ): + _common_args_checks(algorithm, length, otherinfo) + self._algorithm = algorithm + self._length = length + self._otherinfo: bytes = otherinfo if otherinfo is not None else b"" + + if algorithm.block_size is None: + raise TypeError(f"{algorithm.name} is unsupported for ConcatKDF") + + if salt is None: + salt = b"\x00" * algorithm.block_size + else: + utils._check_bytes("salt", salt) + + self._salt = salt + + self._used = False + + def _hmac(self) -> hmac.HMAC: + return hmac.HMAC(self._salt, self._algorithm) + + def derive(self, key_material: bytes) -> bytes: + if self._used: + raise AlreadyFinalized + self._used = True + return _concatkdf_derive( + key_material, self._length, self._hmac, self._otherinfo + ) + + def verify(self, key_material: bytes, expected_key: bytes) -> None: + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py new file mode 100644 index 0000000..ee562d2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py @@ -0,0 +1,101 @@ +# 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 annotations + +import typing + +from cryptography import utils +from cryptography.exceptions import AlreadyFinalized, InvalidKey +from cryptography.hazmat.primitives import constant_time, hashes, hmac +from cryptography.hazmat.primitives.kdf import KeyDerivationFunction + + +class HKDF(KeyDerivationFunction): + def __init__( + self, + algorithm: hashes.HashAlgorithm, + length: int, + salt: bytes | None, + info: bytes | None, + backend: typing.Any = None, + ): + self._algorithm = algorithm + + if salt is None: + salt = b"\x00" * self._algorithm.digest_size + else: + utils._check_bytes("salt", salt) + + self._salt = salt + + self._hkdf_expand = HKDFExpand(self._algorithm, length, info) + + def _extract(self, key_material: bytes) -> bytes: + h = hmac.HMAC(self._salt, self._algorithm) + h.update(key_material) + return h.finalize() + + def derive(self, key_material: bytes) -> bytes: + utils._check_byteslike("key_material", key_material) + return self._hkdf_expand.derive(self._extract(key_material)) + + def verify(self, key_material: bytes, expected_key: bytes) -> None: + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey + + +class HKDFExpand(KeyDerivationFunction): + def __init__( + self, + algorithm: hashes.HashAlgorithm, + length: int, + info: bytes | None, + backend: typing.Any = None, + ): + self._algorithm = algorithm + + max_length = 255 * algorithm.digest_size + + if length > max_length: + raise ValueError( + f"Cannot derive keys larger than {max_length} octets." + ) + + self._length = length + + if info is None: + info = b"" + else: + utils._check_bytes("info", info) + + self._info = info + + self._used = False + + def _expand(self, key_material: bytes) -> bytes: + output = [b""] + counter = 1 + + while self._algorithm.digest_size * (len(output) - 1) < self._length: + h = hmac.HMAC(key_material, self._algorithm) + h.update(output[-1]) + h.update(self._info) + h.update(bytes([counter])) + output.append(h.finalize()) + counter += 1 + + return b"".join(output)[: self._length] + + def derive(self, key_material: bytes) -> bytes: + utils._check_byteslike("key_material", key_material) + if self._used: + raise AlreadyFinalized + + self._used = True + return self._expand(key_material) + + def verify(self, key_material: bytes, expected_key: bytes) -> None: + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py new file mode 100644 index 0000000..802b484 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py @@ -0,0 +1,302 @@ +# 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 annotations + +import typing + +from cryptography import utils +from cryptography.exceptions import ( + AlreadyFinalized, + InvalidKey, + UnsupportedAlgorithm, + _Reasons, +) +from cryptography.hazmat.primitives import ( + ciphers, + cmac, + constant_time, + hashes, + hmac, +) +from cryptography.hazmat.primitives.kdf import KeyDerivationFunction + + +class Mode(utils.Enum): + CounterMode = "ctr" + + +class CounterLocation(utils.Enum): + BeforeFixed = "before_fixed" + AfterFixed = "after_fixed" + MiddleFixed = "middle_fixed" + + +class _KBKDFDeriver: + def __init__( + self, + prf: typing.Callable, + mode: Mode, + length: int, + rlen: int, + llen: int | None, + location: CounterLocation, + break_location: int | None, + label: bytes | None, + context: bytes | None, + fixed: bytes | None, + ): + assert callable(prf) + + if not isinstance(mode, Mode): + raise TypeError("mode must be of type Mode") + + if not isinstance(location, CounterLocation): + raise TypeError("location must be of type CounterLocation") + + if break_location is None and location is CounterLocation.MiddleFixed: + raise ValueError("Please specify a break_location") + + if ( + break_location is not None + and location != CounterLocation.MiddleFixed + ): + raise ValueError( + "break_location is ignored when location is not" + " CounterLocation.MiddleFixed" + ) + + if break_location is not None and not isinstance(break_location, int): + raise TypeError("break_location must be an integer") + + if break_location is not None and break_location < 0: + raise ValueError("break_location must be a positive integer") + + if (label or context) and fixed: + raise ValueError( + "When supplying fixed data, label and context are ignored." + ) + + if rlen is None or not self._valid_byte_length(rlen): + raise ValueError("rlen must be between 1 and 4") + + if llen is None and fixed is None: + raise ValueError("Please specify an llen") + + if llen is not None and not isinstance(llen, int): + raise TypeError("llen must be an integer") + + if llen == 0: + raise ValueError("llen must be non-zero") + + if label is None: + label = b"" + + if context is None: + context = b"" + + utils._check_bytes("label", label) + utils._check_bytes("context", context) + self._prf = prf + self._mode = mode + self._length = length + self._rlen = rlen + self._llen = llen + self._location = location + self._break_location = break_location + self._label = label + self._context = context + self._used = False + self._fixed_data = fixed + + @staticmethod + def _valid_byte_length(value: int) -> bool: + if not isinstance(value, int): + raise TypeError("value must be of type int") + + value_bin = utils.int_to_bytes(1, value) + if not 1 <= len(value_bin) <= 4: + return False + return True + + def derive(self, key_material: bytes, prf_output_size: int) -> bytes: + if self._used: + raise AlreadyFinalized + + utils._check_byteslike("key_material", key_material) + self._used = True + + # inverse floor division (equivalent to ceiling) + rounds = -(-self._length // prf_output_size) + + output = [b""] + + # For counter mode, the number of iterations shall not be + # larger than 2^r-1, where r <= 32 is the binary length of the counter + # This ensures that the counter values used as an input to the + # PRF will not repeat during a particular call to the KDF function. + r_bin = utils.int_to_bytes(1, self._rlen) + if rounds > pow(2, len(r_bin) * 8) - 1: + raise ValueError("There are too many iterations.") + + fixed = self._generate_fixed_input() + + if self._location == CounterLocation.BeforeFixed: + data_before_ctr = b"" + data_after_ctr = fixed + elif self._location == CounterLocation.AfterFixed: + data_before_ctr = fixed + data_after_ctr = b"" + else: + if isinstance( + self._break_location, int + ) and self._break_location > len(fixed): + raise ValueError("break_location offset > len(fixed)") + data_before_ctr = fixed[: self._break_location] + data_after_ctr = fixed[self._break_location :] + + for i in range(1, rounds + 1): + h = self._prf(key_material) + + counter = utils.int_to_bytes(i, self._rlen) + input_data = data_before_ctr + counter + data_after_ctr + + h.update(input_data) + + output.append(h.finalize()) + + return b"".join(output)[: self._length] + + def _generate_fixed_input(self) -> bytes: + if self._fixed_data and isinstance(self._fixed_data, bytes): + return self._fixed_data + + l_val = utils.int_to_bytes(self._length * 8, self._llen) + + return b"".join([self._label, b"\x00", self._context, l_val]) + + +class KBKDFHMAC(KeyDerivationFunction): + def __init__( + self, + algorithm: hashes.HashAlgorithm, + mode: Mode, + length: int, + rlen: int, + llen: int | None, + location: CounterLocation, + label: bytes | None, + context: bytes | None, + fixed: bytes | None, + backend: typing.Any = None, + *, + break_location: int | None = None, + ): + if not isinstance(algorithm, hashes.HashAlgorithm): + raise UnsupportedAlgorithm( + "Algorithm supplied is not a supported hash algorithm.", + _Reasons.UNSUPPORTED_HASH, + ) + + from cryptography.hazmat.backends.openssl.backend import ( + backend as ossl, + ) + + if not ossl.hmac_supported(algorithm): + raise UnsupportedAlgorithm( + "Algorithm supplied is not a supported hmac algorithm.", + _Reasons.UNSUPPORTED_HASH, + ) + + self._algorithm = algorithm + + self._deriver = _KBKDFDeriver( + self._prf, + mode, + length, + rlen, + llen, + location, + break_location, + label, + context, + fixed, + ) + + def _prf(self, key_material: bytes) -> hmac.HMAC: + return hmac.HMAC(key_material, self._algorithm) + + def derive(self, key_material: bytes) -> bytes: + return self._deriver.derive(key_material, self._algorithm.digest_size) + + def verify(self, key_material: bytes, expected_key: bytes) -> None: + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey + + +class KBKDFCMAC(KeyDerivationFunction): + def __init__( + self, + algorithm, + mode: Mode, + length: int, + rlen: int, + llen: int | None, + location: CounterLocation, + label: bytes | None, + context: bytes | None, + fixed: bytes | None, + backend: typing.Any = None, + *, + break_location: int | None = None, + ): + if not issubclass( + algorithm, ciphers.BlockCipherAlgorithm + ) or not issubclass(algorithm, ciphers.CipherAlgorithm): + raise UnsupportedAlgorithm( + "Algorithm supplied is not a supported cipher algorithm.", + _Reasons.UNSUPPORTED_CIPHER, + ) + + self._algorithm = algorithm + self._cipher: ciphers.BlockCipherAlgorithm | None = None + + self._deriver = _KBKDFDeriver( + self._prf, + mode, + length, + rlen, + llen, + location, + break_location, + label, + context, + fixed, + ) + + def _prf(self, _: bytes) -> cmac.CMAC: + assert self._cipher is not None + + return cmac.CMAC(self._cipher) + + def derive(self, key_material: bytes) -> bytes: + self._cipher = self._algorithm(key_material) + + assert self._cipher is not None + + from cryptography.hazmat.backends.openssl.backend import ( + backend as ossl, + ) + + if not ossl.cmac_algorithm_supported(self._cipher): + raise UnsupportedAlgorithm( + "Algorithm supplied is not a supported cipher algorithm.", + _Reasons.UNSUPPORTED_CIPHER, + ) + + return self._deriver.derive(key_material, self._cipher.block_size // 8) + + def verify(self, key_material: bytes, expected_key: bytes) -> None: + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py new file mode 100644 index 0000000..82689eb --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py @@ -0,0 +1,62 @@ +# 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 annotations + +import typing + +from cryptography import utils +from cryptography.exceptions import ( + AlreadyFinalized, + InvalidKey, + UnsupportedAlgorithm, + _Reasons, +) +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import constant_time, hashes +from cryptography.hazmat.primitives.kdf import KeyDerivationFunction + + +class PBKDF2HMAC(KeyDerivationFunction): + def __init__( + self, + algorithm: hashes.HashAlgorithm, + length: int, + salt: bytes, + iterations: int, + backend: typing.Any = None, + ): + from cryptography.hazmat.backends.openssl.backend import ( + backend as ossl, + ) + + if not ossl.pbkdf2_hmac_supported(algorithm): + raise UnsupportedAlgorithm( + f"{algorithm.name} is not supported for PBKDF2.", + _Reasons.UNSUPPORTED_HASH, + ) + self._used = False + self._algorithm = algorithm + self._length = length + utils._check_bytes("salt", salt) + self._salt = salt + self._iterations = iterations + + def derive(self, key_material: bytes) -> bytes: + if self._used: + raise AlreadyFinalized("PBKDF2 instances can only be used once.") + self._used = True + + return rust_openssl.kdf.derive_pbkdf2_hmac( + key_material, + self._algorithm, + self._salt, + self._iterations, + self._length, + ) + + def verify(self, key_material: bytes, expected_key: bytes) -> None: + derived_key = self.derive(key_material) + if not constant_time.bytes_eq(derived_key, expected_key): + raise InvalidKey("Keys do not match.") diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py new file mode 100644 index 0000000..f791cee --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py @@ -0,0 +1,19 @@ +# 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 annotations + +import sys + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives.kdf import KeyDerivationFunction + +# This is used by the scrypt tests to skip tests that require more memory +# than the MEM_LIMIT +_MEM_LIMIT = sys.maxsize // 2 + +Scrypt = rust_openssl.kdf.Scrypt +KeyDerivationFunction.register(Scrypt) + +__all__ = ["Scrypt"] diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py new file mode 100644 index 0000000..6e38366 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py @@ -0,0 +1,61 @@ +# 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 annotations + +import typing + +from cryptography import utils +from cryptography.exceptions import AlreadyFinalized, InvalidKey +from cryptography.hazmat.primitives import constant_time, hashes +from cryptography.hazmat.primitives.kdf import KeyDerivationFunction + + +def _int_to_u32be(n: int) -> bytes: + return n.to_bytes(length=4, byteorder="big") + + +class X963KDF(KeyDerivationFunction): + def __init__( + self, + algorithm: hashes.HashAlgorithm, + length: int, + sharedinfo: bytes | None, + backend: typing.Any = None, + ): + max_len = algorithm.digest_size * (2**32 - 1) + if length > max_len: + raise ValueError(f"Cannot derive keys larger than {max_len} bits.") + if sharedinfo is not None: + utils._check_bytes("sharedinfo", sharedinfo) + + self._algorithm = algorithm + self._length = length + self._sharedinfo = sharedinfo + self._used = False + + def derive(self, key_material: bytes) -> bytes: + if self._used: + raise AlreadyFinalized + self._used = True + utils._check_byteslike("key_material", key_material) + output = [b""] + outlen = 0 + counter = 1 + + while self._length > outlen: + h = hashes.Hash(self._algorithm) + h.update(key_material) + h.update(_int_to_u32be(counter)) + if self._sharedinfo is not None: + h.update(self._sharedinfo) + output.append(h.finalize()) + outlen += len(output[-1]) + counter += 1 + + return b"".join(output)[: self._length] + + def verify(self, key_material: bytes, expected_key: bytes) -> None: + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/keywrap.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/keywrap.py new file mode 100644 index 0000000..b93d87d --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/keywrap.py @@ -0,0 +1,177 @@ +# 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 annotations + +import typing + +from cryptography.hazmat.primitives.ciphers import Cipher +from cryptography.hazmat.primitives.ciphers.algorithms import AES +from cryptography.hazmat.primitives.ciphers.modes import ECB +from cryptography.hazmat.primitives.constant_time import bytes_eq + + +def _wrap_core( + wrapping_key: bytes, + a: bytes, + r: list[bytes], +) -> bytes: + # RFC 3394 Key Wrap - 2.2.1 (index method) + encryptor = Cipher(AES(wrapping_key), ECB()).encryptor() + n = len(r) + for j in range(6): + for i in range(n): + # every encryption operation is a discrete 16 byte chunk (because + # AES has a 128-bit block size) and since we're using ECB it is + # safe to reuse the encryptor for the entire operation + b = encryptor.update(a + r[i]) + a = ( + int.from_bytes(b[:8], byteorder="big") ^ ((n * j) + i + 1) + ).to_bytes(length=8, byteorder="big") + r[i] = b[-8:] + + assert encryptor.finalize() == b"" + + return a + b"".join(r) + + +def aes_key_wrap( + wrapping_key: bytes, + key_to_wrap: bytes, + backend: typing.Any = None, +) -> bytes: + if len(wrapping_key) not in [16, 24, 32]: + raise ValueError("The wrapping key must be a valid AES key length") + + if len(key_to_wrap) < 16: + raise ValueError("The key to wrap must be at least 16 bytes") + + if len(key_to_wrap) % 8 != 0: + raise ValueError("The key to wrap must be a multiple of 8 bytes") + + a = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" + r = [key_to_wrap[i : i + 8] for i in range(0, len(key_to_wrap), 8)] + return _wrap_core(wrapping_key, a, r) + + +def _unwrap_core( + wrapping_key: bytes, + a: bytes, + r: list[bytes], +) -> tuple[bytes, list[bytes]]: + # Implement RFC 3394 Key Unwrap - 2.2.2 (index method) + decryptor = Cipher(AES(wrapping_key), ECB()).decryptor() + n = len(r) + for j in reversed(range(6)): + for i in reversed(range(n)): + atr = ( + int.from_bytes(a, byteorder="big") ^ ((n * j) + i + 1) + ).to_bytes(length=8, byteorder="big") + r[i] + # every decryption operation is a discrete 16 byte chunk so + # it is safe to reuse the decryptor for the entire operation + b = decryptor.update(atr) + a = b[:8] + r[i] = b[-8:] + + assert decryptor.finalize() == b"" + return a, r + + +def aes_key_wrap_with_padding( + wrapping_key: bytes, + key_to_wrap: bytes, + backend: typing.Any = None, +) -> bytes: + if len(wrapping_key) not in [16, 24, 32]: + raise ValueError("The wrapping key must be a valid AES key length") + + aiv = b"\xa6\x59\x59\xa6" + len(key_to_wrap).to_bytes( + length=4, byteorder="big" + ) + # pad the key to wrap if necessary + pad = (8 - (len(key_to_wrap) % 8)) % 8 + key_to_wrap = key_to_wrap + b"\x00" * pad + if len(key_to_wrap) == 8: + # RFC 5649 - 4.1 - exactly 8 octets after padding + encryptor = Cipher(AES(wrapping_key), ECB()).encryptor() + b = encryptor.update(aiv + key_to_wrap) + assert encryptor.finalize() == b"" + return b + else: + r = [key_to_wrap[i : i + 8] for i in range(0, len(key_to_wrap), 8)] + return _wrap_core(wrapping_key, aiv, r) + + +def aes_key_unwrap_with_padding( + wrapping_key: bytes, + wrapped_key: bytes, + backend: typing.Any = None, +) -> bytes: + if len(wrapped_key) < 16: + raise InvalidUnwrap("Must be at least 16 bytes") + + if len(wrapping_key) not in [16, 24, 32]: + raise ValueError("The wrapping key must be a valid AES key length") + + if len(wrapped_key) == 16: + # RFC 5649 - 4.2 - exactly two 64-bit blocks + decryptor = Cipher(AES(wrapping_key), ECB()).decryptor() + out = decryptor.update(wrapped_key) + assert decryptor.finalize() == b"" + a = out[:8] + data = out[8:] + n = 1 + else: + r = [wrapped_key[i : i + 8] for i in range(0, len(wrapped_key), 8)] + encrypted_aiv = r.pop(0) + n = len(r) + a, r = _unwrap_core(wrapping_key, encrypted_aiv, r) + data = b"".join(r) + + # 1) Check that MSB(32,A) = A65959A6. + # 2) Check that 8*(n-1) < LSB(32,A) <= 8*n. If so, let + # MLI = LSB(32,A). + # 3) Let b = (8*n)-MLI, and then check that the rightmost b octets of + # the output data are zero. + mli = int.from_bytes(a[4:], byteorder="big") + b = (8 * n) - mli + if ( + not bytes_eq(a[:4], b"\xa6\x59\x59\xa6") + or not 8 * (n - 1) < mli <= 8 * n + or (b != 0 and not bytes_eq(data[-b:], b"\x00" * b)) + ): + raise InvalidUnwrap() + + if b == 0: + return data + else: + return data[:-b] + + +def aes_key_unwrap( + wrapping_key: bytes, + wrapped_key: bytes, + backend: typing.Any = None, +) -> bytes: + if len(wrapped_key) < 24: + raise InvalidUnwrap("Must be at least 24 bytes") + + if len(wrapped_key) % 8 != 0: + raise InvalidUnwrap("The wrapped key must be a multiple of 8 bytes") + + if len(wrapping_key) not in [16, 24, 32]: + raise ValueError("The wrapping key must be a valid AES key length") + + aiv = b"\xa6\xa6\xa6\xa6\xa6\xa6\xa6\xa6" + r = [wrapped_key[i : i + 8] for i in range(0, len(wrapped_key), 8)] + a = r.pop(0) + a, r = _unwrap_core(wrapping_key, a, r) + if not bytes_eq(a, aiv): + raise InvalidUnwrap() + + return b"".join(r) + + +class InvalidUnwrap(Exception): + pass diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/padding.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/padding.py new file mode 100644 index 0000000..b2a3f1c --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/padding.py @@ -0,0 +1,183 @@ +# 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 annotations + +import abc +import typing + +from cryptography import utils +from cryptography.exceptions import AlreadyFinalized +from cryptography.hazmat.bindings._rust import ( + PKCS7PaddingContext, + PKCS7UnpaddingContext, + check_ansix923_padding, +) + + +class PaddingContext(metaclass=abc.ABCMeta): + @abc.abstractmethod + def update(self, data: bytes) -> bytes: + """ + Pads the provided bytes and returns any available data as bytes. + """ + + @abc.abstractmethod + def finalize(self) -> bytes: + """ + Finalize the padding, returns bytes. + """ + + +def _byte_padding_check(block_size: int) -> None: + if not (0 <= block_size <= 2040): + raise ValueError("block_size must be in range(0, 2041).") + + if block_size % 8 != 0: + raise ValueError("block_size must be a multiple of 8.") + + +def _byte_padding_update( + buffer_: bytes | None, data: bytes, block_size: int +) -> tuple[bytes, bytes]: + if buffer_ is None: + raise AlreadyFinalized("Context was already finalized.") + + utils._check_byteslike("data", data) + + buffer_ += bytes(data) + + finished_blocks = len(buffer_) // (block_size // 8) + + result = buffer_[: finished_blocks * (block_size // 8)] + buffer_ = buffer_[finished_blocks * (block_size // 8) :] + + return buffer_, result + + +def _byte_padding_pad( + buffer_: bytes | None, + block_size: int, + paddingfn: typing.Callable[[int], bytes], +) -> bytes: + if buffer_ is None: + raise AlreadyFinalized("Context was already finalized.") + + pad_size = block_size // 8 - len(buffer_) + return buffer_ + paddingfn(pad_size) + + +def _byte_unpadding_update( + buffer_: bytes | None, data: bytes, block_size: int +) -> tuple[bytes, bytes]: + if buffer_ is None: + raise AlreadyFinalized("Context was already finalized.") + + utils._check_byteslike("data", data) + + buffer_ += bytes(data) + + finished_blocks = max(len(buffer_) // (block_size // 8) - 1, 0) + + result = buffer_[: finished_blocks * (block_size // 8)] + buffer_ = buffer_[finished_blocks * (block_size // 8) :] + + return buffer_, result + + +def _byte_unpadding_check( + buffer_: bytes | None, + block_size: int, + checkfn: typing.Callable[[bytes], int], +) -> bytes: + if buffer_ is None: + raise AlreadyFinalized("Context was already finalized.") + + if len(buffer_) != block_size // 8: + raise ValueError("Invalid padding bytes.") + + valid = checkfn(buffer_) + + if not valid: + raise ValueError("Invalid padding bytes.") + + pad_size = buffer_[-1] + return buffer_[:-pad_size] + + +class PKCS7: + def __init__(self, block_size: int): + _byte_padding_check(block_size) + self.block_size = block_size + + def padder(self) -> PaddingContext: + return PKCS7PaddingContext(self.block_size) + + def unpadder(self) -> PaddingContext: + return PKCS7UnpaddingContext(self.block_size) + + +PaddingContext.register(PKCS7PaddingContext) +PaddingContext.register(PKCS7UnpaddingContext) + + +class ANSIX923: + def __init__(self, block_size: int): + _byte_padding_check(block_size) + self.block_size = block_size + + def padder(self) -> PaddingContext: + return _ANSIX923PaddingContext(self.block_size) + + def unpadder(self) -> PaddingContext: + return _ANSIX923UnpaddingContext(self.block_size) + + +class _ANSIX923PaddingContext(PaddingContext): + _buffer: bytes | None + + def __init__(self, block_size: int): + self.block_size = block_size + # TODO: more copies than necessary, we should use zero-buffer (#193) + self._buffer = b"" + + def update(self, data: bytes) -> bytes: + self._buffer, result = _byte_padding_update( + self._buffer, data, self.block_size + ) + return result + + def _padding(self, size: int) -> bytes: + return bytes([0]) * (size - 1) + bytes([size]) + + def finalize(self) -> bytes: + result = _byte_padding_pad( + self._buffer, self.block_size, self._padding + ) + self._buffer = None + return result + + +class _ANSIX923UnpaddingContext(PaddingContext): + _buffer: bytes | None + + def __init__(self, block_size: int): + self.block_size = block_size + # TODO: more copies than necessary, we should use zero-buffer (#193) + self._buffer = b"" + + def update(self, data: bytes) -> bytes: + self._buffer, result = _byte_unpadding_update( + self._buffer, data, self.block_size + ) + return result + + def finalize(self) -> bytes: + result = _byte_unpadding_check( + self._buffer, + self.block_size, + check_ansix923_padding, + ) + self._buffer = None + return result diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/poly1305.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/poly1305.py new file mode 100644 index 0000000..7f5a77a --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/poly1305.py @@ -0,0 +1,11 @@ +# 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 annotations + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl + +__all__ = ["Poly1305"] + +Poly1305 = rust_openssl.poly1305.Poly1305 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__init__.py new file mode 100644 index 0000000..07b2264 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__init__.py @@ -0,0 +1,63 @@ +# 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 annotations + +from cryptography.hazmat.primitives._serialization import ( + BestAvailableEncryption, + Encoding, + KeySerializationEncryption, + NoEncryption, + ParameterFormat, + PrivateFormat, + PublicFormat, + _KeySerializationEncryption, +) +from cryptography.hazmat.primitives.serialization.base import ( + load_der_parameters, + load_der_private_key, + load_der_public_key, + load_pem_parameters, + load_pem_private_key, + load_pem_public_key, +) +from cryptography.hazmat.primitives.serialization.ssh import ( + SSHCertificate, + SSHCertificateBuilder, + SSHCertificateType, + SSHCertPrivateKeyTypes, + SSHCertPublicKeyTypes, + SSHPrivateKeyTypes, + SSHPublicKeyTypes, + load_ssh_private_key, + load_ssh_public_identity, + load_ssh_public_key, +) + +__all__ = [ + "BestAvailableEncryption", + "Encoding", + "KeySerializationEncryption", + "NoEncryption", + "ParameterFormat", + "PrivateFormat", + "PublicFormat", + "SSHCertPrivateKeyTypes", + "SSHCertPublicKeyTypes", + "SSHCertificate", + "SSHCertificateBuilder", + "SSHCertificateType", + "SSHPrivateKeyTypes", + "SSHPublicKeyTypes", + "_KeySerializationEncryption", + "load_der_parameters", + "load_der_private_key", + "load_der_public_key", + "load_pem_parameters", + "load_pem_private_key", + "load_pem_public_key", + "load_ssh_private_key", + "load_ssh_public_identity", + "load_ssh_public_key", +] diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5408d9cfbdf264478f68ab6cf04eeb17b830a372 GIT binary patch literal 1632 zcmchVJ8u&~5XbN0_uG!&cAy9}F5)AiMMwmJkdUHCrrKt8_AT}%H+QGKvyoHL)6vk= zAie`1f_hsjI-_){*f~FPPQ*(B&c2^^{<}Lj^VfVR6tbFn-hBEto+dTz3kK_FXSvWX z-m1kr&C)F0)<7q^j_VzJ2Vx`!aT13FNkEb$Aw^P}5plQwin2fCySdt^`7#+sFQuajF= za-j86U$MZRE_0^ixPcjP*YSI4**s!?@Mvao+Z@{Li8B&&5BFqRtzC;dW7&Dm<^v|U zY4h{&UgT8%*o{P`6H}PL0w$ii0?a@bP6VHs0b7Onlj+drqgB+UKTh0B%Bt;}7PXk5 z-a4x45z%9C^L{AaxF4#U`@O6z4hGL2GZFBYe59I?_3ij*%57Di z+})O6%snO>D{a-kY7}LElVWMaM#dD^k5*6%%h?=TcJKQW>P4z=g`R}!vU+YYC*Z-_ zm&lGXtJe~7H3=etP*bdl6e5ktAaKS-9nnDSBC3cQqKRlBa)>;lfG8qLh%%yrXd^m^ zuEKHew#-ucavDqpqg2F{CJ(}abH~E;CiDKpJXd4WSKR>*_>B2|>PIK$P}ffZBzPDyHGu7m#>V83(PpR3{SYHY!vv0 z3o|-2M`u&dm@#K&*nDVs^I+mS_xp#3hR*|b;HiCc%zPtSvaz&QWm;QnY$&u~+=Q}6AFVDSR7nrzz{q{TyfR7@n!sKQAJekiUAb`LSL~v|D zK&_y)sDhwfsd2l(SC)LG!B>}jwZS_}-Z6Zw%7XPujk^uLvE-Y?x(1`xX8}eq?{Gn5 zrNXOGFW;HSRA}x=Ed12=@m++q?XsA#*i*J6r%KD>D*0w1oyDJd`8`sBF;wfA7={*`#cp!?N`sTEx%$HyY zFW{%R|F1$mk0=TV5|RgWq7~v%;<$KnI~6FQae_kTB9UsJ$4B170h+09%<|QO5Po$5yo57w vQ6KNa-E6p@4bNs^`>m$m2RqqdFB_c9K>w|#4S(R-;CPNJX)-h9mf7kLxW3T* literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7788dff53f5f53065ebed6ef8a42ff2601aaba08 GIT binary patch literal 6281 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cedbe92e8ffb1a551a836492f507a4012912f4a GIT binary patch literal 16917 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 DJ3H0< literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d00f2e365e73d0767e1e3355b3ece808036ea3b GIT binary patch literal 71201 zcmeFa3v^pYdL{^v7jF;%!S@?{Nu>A^A9~A@DN>SU$+TLM-8S8BhT?@J%6$0()B_E= zX}6O=iW1X_9n+2!Gd*p$oVI5)lgx}d+e!LtXR=A=>x}897SN z=4i5y@2>*x3!p@G`plU*XD-1)p>Ex}_4xn4{{OGP{`ziFk=ugnSAOv2*?;*L7R&!i zKeAUbk67>jsoi3E&+?o_w20Oz%d~aWYNdF=RKaKg`z{ zr~}`HQ_gAEsGB`2OnIigqh1!bO%+Z1Mtv-9pYl%!MguJFm@1wQjs{uWIaM-UI$Ani zHd;1aK3YCqF|q3Ooa z#_6Wfrs?L<=INHvmg&~fR;$HDt?^84n%+FxhTPuK_L-7qOL$9*Me^Wx(P%qzd`o;& zta#Hl+V-MlM!0CXRQRIhqE)OM?GUR*JH_hJF0p2`TdW=J5$i^`iuI$tV#8>k7#i&t z8%GDkrqOK$may&o_H5^h%^zDWmha)8U!yz3meHMJ>*y|V)97w-^XMM2ZFH~LKKg{X zWptnM+3+s0BZkMqyIE*Ezdu{b#|0=8|NI(#63-3d{{a4n#7?oxc;8q9THK5F`Jrm=K4N2ig*m)C-MCZzE6qQ z#AosS9DX0i_w(YfiYM^>Ro0&;(VwS`{WTwFCKjBuv@d@_m2bDEJ>xSo zv(fSBC4e@1V3HkcyxSXYCJ+eZ1d5{smLeRbm?<5k@>l~St%M8 z2dB=?N|VuZ)5u^yHy$~M=WOXhF*2Sm2v4LPVX<%9w%%Q7$K1FmPR^W77fO-wb|GCh zcyMrdI6NU;o}-r!&CW!_m!fI=(B#~?u#|R>XUmPGZPTbxq}`r&9;C`qA=O92mrsVJ z$?>Vl7^^()WJ*eVM`m@uijGT@7sjLEL$lKKcr@)jK7V>@aw7AqW^Da((4N9q#51Q3 zrJZwV|HWBJOxsw$q=m@%R5V?TN=-^(aqN}wDskY?v+#7Me$^6bp46dpSh zzBrai5>C&~P9Z}$Ixo#k*fJ1AUj$D0x84sS@}4ECPKXvT8^$T=4QqSBNGv!K4vV4F ztkofO(ELWgf(8mg2qN^t5M2+Xo^!L);hyti&zv-SK0FbP^vq6Q z7&|>a@yh&M&xP>Jg`TO&(>-&SqvvL4`n!93dm@w3aMv8}kDm=kdf01c&r0KS=Pvi0 z8;_xDQPSk}WOVWZZb$S((-VoD>z=!u_Kfk`j-gkjR#c^z>QsVY(ehKD#owH4-XZ&T zD!!db=g#{`wnRJ>M9y_(fG9!@q~8D`H7-UXtdQ^oV6H22ZoIE+W-=0;>)Wj!>UQUg^?R#&Eld-_BD9LpCq6q3*nv zR6#?+w%)!-5IMd!*!H!P9qliLz7~DCgGD2LBxkDA1#s)S&})e_Bdv?B0|yTu83{dm z{NTvRlTU??pE&aT;HiV5qX%DPcO#A2dLo7s0 zU@;qFb~VkR#+)qX!d*9uc@XomSP`g~FYO*fQ#q-Kl}0bmgMfc#rlP{+Wks#IM zZD|ML=Tvwm*3U9BV$wZy>cq>Tcu1deV91nmc<7mz(*osByG~EdPP{^;r0tUz==*^i zxQ-G=&{1hebo?wOO4QeB$7Ez|JUlLrfXq3^#%9K+!((Hp@)$=`#Jyu%$q?(cJ>~>mDWQ1rnZ;*b$N%Cp{H651FG2{~9a0y*q;3j& zDA-B?A+6L;!2p6U2!PuQrOo(?=)vXmM5G*P8R$7XF|EggScNz_5q*i#%+8QDlrN)W zFs@@mM~**r@WjdX!n7+Ao*+z?dU+Jcn~efr5iP{vKG=kZGGzW}`0^=$Lj)s3iHz81 z(%1B_&ZJUPl*m!$id$9)ZE~)Uk)rX5Mnb+|o%xZT z(3{??P7kK{28{2`Df4|(nKVS1>%3ays6N%1y?>^_^e$(V2vX)keP1z^U7EdTv79Gj z&910EReevMvWci>E|mR*sqEV9J(NxKk6lrHDiI`h*GlT?Zm^&g`KMF<^2Ax50i#bal~(J@Sl zYI~(qxczJRkNhhHicYJnI>3SkrwNG~KS6ut= zSzMI2=HYo9`aCJ8=U2}vzRjOiDD8vEq61$R7P#$yV?l7wVzc%B)NUyaQE_*DmC33e z*|$~kZB072e(ot*e3nzo!)WA#s_;a2{*g6M9HI}5;=G2)dzQH6Jiht0V2xYPtJEo~ zqa+usQiUGhMMKWtD!5T##Q!&}`lt1!YH|(1daVBhV?v2a5~Q=S4UNx;p$UR$Hfe>< z%u1m-&OTF~?$~A>8x2WE8$N5k%9MBbR`~bNC%wb? zVEp`UjGy0q&r;xWWBj}|%iFH+Ry>=M!X`Fi_o-Z8r3}&w-`qwUU0V1n8N4`t4Vu7S~x#DIg|E*?T&=E z4~%iq3$y7ImD4$F1DN?q@*?a9*JvS*Lt*^?CZaL}dMJS`CW0_B2s(aTu736Tj(rE()(Hnt~j zjiIMR>np4mB)`5l#2nZZ3(O4fJ5RF18IvYA24xO2wnhG&4D+00GVu{ra z%}UbzT$E+n9h#nufCirpWyHu4bYCHHTp37WT}DmPLlWrI#JMo|HqO08CSzeKj6AfuxYu|R+w?pym zNIG}iD?}Q*!CIJhPcT`WF!+I&F>4uq_dz>nyqX_ZJJa8kn#^SW!7EeKB#H{&}%*{Su6P7sHa4!{M2*1l0xOL^?u~ z7Z`o!%7YLeo9-BCLPC=fzzf$=bU~nxLZAoioEm9&GWd}8qEbxc=G;8v;fZpNpiHLh?6872` zhlzp*Q%>(&&a2L)(xn;7x-_E{x5~~`-g0@E2%>eQk98_Bm*2d+)ceN5;sSOFz!ya5qvZe(0cjDp)08Dn!6pO`>Nt>U@VP#$(ugxy{dGhh4y#|o^txbO0NK<})@Ih_6)KV7 zStXkJG?9SBg17-%<0w}w(8Di-&B9pi0n#alE<#rv0vLrbd7nj;vtYcl!1@qyX75sn9#W~~LZjNlAK*P3?O~|~yUE3-VB6T|pt`nL?h6r-neHwEs#}SEU-n175jYVfU zdB#{#N2TpEj4v|`my2@o(fU>7`4az;lL(0Kb0@y?#>K^pra3v~@zJ1_r2N4|B;_l9 zYv$^V?5kIN^()1)uW98~xu|XN(3&TpcJXsQzP}2j(ZiOiN+Npb_eC(24m8tht04`I(*P zLPcm|cJ6Zb1J4wm;mXLD)3!78Ya}fYZ}T9iyOrU6r6yEgI*lN|*mRt=`z)Yt3^9Ji ztx~OC+|Lh>fGxnOW(q+D8zmlZ?ocUPG&!l3tTNM zmxiKJ4NA%11G{m@sNUFcdzl(8<{uQr(A?DcldrjhkmN!K-6vhYse?Z3{GjvZ`0Z`WopSY{Qava;4=Bz9 z$?S(y0DW8kbLcCuQ*6d#%-3&I4@oNs*Xxk&134YCeV_;(BK-q;Y7>G7#S9cd1XR$< z4cv>S1Q4aZ%3NnmP$BJGZ%M%*x|(Q)8J0kG)OV~SqMAwo)d3c+_wKlL zg?QVX>tm#7bLm5C;mUa!2~bq3^)x?C^?|~&p7W2KU&PdEVkAe}-O?~hVuVSWLyU_$ z`HJiNN$hze$NXhytxW(`#emh?S}%-mRq;6Fs3R7(9@tY-!@g!H;%- zb~#zIOZGtBxEuOoS379xTgR>*yHT=y^8L!|m9n=<@iryBO?p~8p{C*nKA-bvmPg(0Aw?*-`B)tX-J#l?f_O>bBwq*8`i-)T8L}D7ztQCCcUIrP!1Pkko#10r4n%>x!vrd4rQ!Lti;&MEU}t8IfN$}O?u0J)qlga()_;fx{piw zN#|z%;jKq*^&)6u6r0b-dTpG(#d>T6u4K3u@P?phngOA)9{`QkSOpe-q%c;1XXd9* zho#W$89rA*^IaI3pH3G}kI!iU2L&C?SUP!H`UJmYKCRINjHDKe)Zzw!${&2U|J}&) z@b#zp(ueGCQ~V@Sv$is>K5Z8x(bMy1IJ6he%|;9wY!v{qnp|SZ_%&>KxnZGD-w|<> z2(lnRrv|MWF~ti73$}P6v~0FG1Uq8iu7%>HaInTozY5!*FbNw_;zGV-*p}f{So5J* zVsrIB##7QiL68>CfK5Y)`73S1nwk`i&|opeQbw}`1DP2pC}IJvdw5C{b)BLz2flqLVn{xAw?gdZ&SSk{y2j5)2Kiz@=ElXDs0#)iV5Ssz=GLjwK37C+E59SsId^m5Q@6>8wP5zx9o)-?*}HZ6WEb<>31+3WB6V+^h5( z6f{wAnx_(3 z2o~7ds0e+4=aJ7CIPJEQdzL&wK(N)_v#b;FuAp9+z`uIY5aF`k=b}T_W=OO`WGol$ z5b^}ELUiKWCRU1WeA~q;F@SFe1j$l-JH;{}K~1`d*2%eX9~R4F=XjJ!KU%>chgEge>PTW=;dzh&Tb+S19%P= zeNIbB-SR0p*rWuTt~e6b#K2mx)|ikA6fgBAE-Xb8@uahc0mp-8-e<6q>qc!=tA_Qv zj;hJJj)=+nd``YD%5)_AZ6gCFWXBPW1qQOHlbjT9LZrcLek`e(*p35Rrj4=@ao zs-0=(yV3c7f~s>Xkbv6g5yn_V*cy3u7Nzl#enbI{P};}GV~q14JZr>`J2Y(Bf%8nw zj*Homt1^z9?$!Ysx}$g&Yd20yW$k<4{Pl0HMCFQ3rK0nS_liAHoETgZ)~afis;-;k zw~FPeex<5E;Y*b@-zn=}E$f!cwkl;?6YiA1YIz{(Z%8^D_=vU`N0cKLR;`RfiXl`l z5)s&t{-3DS2C#t!5IM6~zM);s^Coj8XjPts9y-L?<0v=^DiCZy^|MhCG^xshiB8wU8s0`AjJsGnXvTFiEpbMv0FT{k9w&L?D zj7#W62=RhHqZjzIrDYNIFOeFd$}v1ugUq@r$4cJ*Sam*(&EOEB?EiyOHb!l8$nRQN z!-^o6wJK$;SKJ99A?D^VQ|!;ZMTu7v+m~Kk_0%Ul^>`pzw_grEsRW-)dY@eL2Ni$A zigl$|_O~kj)`XBJC5M8nRo5xiJt-=AsS)ci11qH~uVEFqhD>>C+zJ0ZyQN~&o$}t* z@?N>TUn%cTcvAlA<>911lyrtTPjMLC@E~BGHK5KV%E$Sx)5u~Fkci|kGDA85%pBGg zeCJ*!a4n1%tmuf1mOoyo%^W#={QA$RgwOm;M(>dkv5eCPOp6(4NsQ_I5h}sJF*}b_ zZ%AnbX#vfjF-_$~+|VdHC)5}r%y4s@Kx_yFu~{KdeaGLn>Ti?%TNMA6gphI;kx-6R zdAsavP@F{b^Q9pRg;~AC4KE^W+^ewv{;~7<*XMQFFeq~(3XW++2i@4~Kc9(PquhIeG zx9BH>M44i%6p)#Kq#(eq6h=d7^rioW0`+NaR|+S8zAOOpx5aAngD1Z`N$~j@%46_Z zv*}Ltw$&%|N##%0ayKYd zTV!X4;_OH|JG9(L?vkC|inBZE>^3B?lUqwhIruP=MJUYpIaO+qeu#$Trv8h(seeJK zc5XrWKO)Z1ofA5eK)5VzXXqyV&y>J=okTC4r0g<@y3!xg{Xe1L&nZYzutvd8C@@L0 ze@tl<^wKE2fykozcdx*1bCQ7Qyce+BYAL1<0uEbvlxR;J7qBjfg)Qc znGxp=_-sIxn!vw$Wn?Yu{R2qSmL-{lS(TA6t1}X2O-913%}AJa840r<`<`h*vJ#SJ zgI>~vWvfBb#P3H-nj|`QhR$||ET=Ofgcz z09h}rqDY;v`UXMmi+BVYEi<38A@(s&cz*~U$*3wA?Z^*J#2c9SUJSa)s6 zVV*+bjumz4%hrRwO&paILPSKLH`f%)nv74vlx;~|@Pj*&c@secCSYL6iwn3@wzcqO4)!U77?OvsJ zZ_-(n6}gkW2jr?DrD_N=H*~DNtG=bzxEW*;mXI5j!n07wr_YB<;VKwTp#?t!7;+#a zd07P~TIe$Z2~)v9Ugr28w}S#`@~{qga!si9yCO7uUtW$0xSfW)YN?P}%@VN-z^!s# z7&G;XyNva=S`1~XoLAg|oS?kg;?aUT?%v3v>4GQjG0DLU4K$|fA#yN=)hq|QIHn}f z1TG8{&Pe~30-`I@|Ain;RMsf^GLE6$tHY5b9+2^KOs@4JO+^tE zONf=w3$q%Q@CLq1XhQ7A2GGPzt(jB`+3_ohz012+JuOL3i&--LnK6q?r?;%P_Q}-; zlo#UEy1vzpr6X7g`$cg;?f~2#~(v*2^56emg zD>|IamOz&98YY?H{UOh&81)#>s93h)X9~65i{@vHqB27p*6UnUadHS{uu4$Rh2}gE zot08l@mYJ&B&9H>IHr@F37oTn3w!lP1kbeU&EUDZ#%4JcIupy0JzICak@ z<)3q*I$7DSRCdVDPQ}@obarOM>c>f4_9>NZva?-rwkNY6&K`3aJPV)dRKP?816T^E zKLEvg{~sdquqhzFM#KoNant5f28JM&xfe7sdBM|I-uj?w6kQoOXjF6rqs&AaHp)zY z!f4lDqaH9oHj1f+y;n>K(#xazLFX^{Cp7BMq9iuzuA)26>Q!g;@}4_2y{k37a!tQd z(|_xE*|}G7Vs78736C{*ss>i82IQ*k3Vn9U&RvR=HXZQ~A2(t{9+YOsje%K)$uZa> zQQxsqn?i)tCg<_ZuLUgXYa}DTV#L_Xx~*O6BnSJ=+^t=(RctRDnX~|AV$HOxFykU5 z5}KWvx*Y1=+BX1m*l37`158~6f-b{IhKE;CJvK{aM}To$bl*4vgubx~O(Q@fpt5)0 zr_Lwy1Xwq!_~ofpJoR@x?W>-4+0&tTI&MZ+J^e{fKbs*A$iX2cIF$4bVRM&v0LiSU z^T_6RQEskm{zcx@e^03y+5A4@I?CTfKZ*R~KB1xXQws9P=6DzDga4cEYfrf!Phw}} z&Lp<~Z&V@$m#M#KC3{i*Gm7m^Bzo(EfQ!U&V^HoRvE3MiJhm;gcUK=&+iYYOWe9wQ zwqdMTKP=>sPt~2kzj|fpMqYuwCL_?-iXI5;HdqiB;oA<2VzMlDz>>HO-%eN(ll`zu ztOn#ZVvnl2bj&uZ#(q<`c+65BCe*`FjBki#LOQWO++J`FJ3OQLCHzM}LdEcPX}Cea zzAsiz+DH4XwOzX0QsS%VnFj&$Mq~pqr!He;fuM=Vg26<&0KWha{363+iP>lrNMx$O z_UL9&Q%x|UCfP;kg>BYls^#&&Bv>m$7T{)mXF^b%HL0>{vOrGYj}Nj@8}?wUPP6gS zI(uN&7ot@n_(QyO18ayI)ObL6wrB)YUAa>^puC%8VEA5zTJTFORG-olRKdv8ykT6s zx5Y|02pTjZu@YFJ!MvSzXsQcf%;1HY3dbs#kDz%tO`3+;WCZ(3Lku24Ti!%v_|Tp} zEL}1(8$B|O9dXmJX$y;d>%Yz@fB`_-#-28=CU7N-Zk39UyJi#cmo)M-cnMpjs%Tni zk;^wL<(sc~61GHit-R5gkn#kUhLzIItDenC&t^uX`{ZE166{ZU`{`yeHtW24^@+q2 zYr)p!CT;O46)0PpPrSAqO~R9qvzdX^gH8@ZX1sVDCCsB(ALF=@JgYM+$dD--c})S6 zpSb~C36zhnc;QAACnh-)rU_hr{KOgyv2|1f$mCa~ct+x*9QSl9~?-D0E8 z44JZ=F`;PMIwn~$s9YgJkWX|X3g$;6O0PIHcOphxt*{alR zg~=EeB8w9TmxkBMDwMMBJ7t5bWrNIKcG>n}(FaBE`>*@4G+0hcgXJI`SQ-pe8_f;6 z)){h@%{9^tq7&JR`kztAKSktW?Cv^aP8yF#YdfHrBP|8&a{hjr4jUjwr8_2AutT@O zRcZyXMm;QOe6U`d&}3XyXD&?4`h<+;ErG7#`UC=RL0I7}J@ z>?T(oOEB<(*9A7IF*b;K^I~9>1tg{~(5?OG0f{%_u0~j3vC`W9-Dki3?5$zBWtY;j zOLjKO&YDE^(sRqF)+&g^RBTo%HbdEFUlQO;V%dh(>lHAC9oT!uh|HiIJfH**B)tdL z$}5%fj+=*W4gdbra`}FxeE&M@&C+w!7qrZ}&H}RvPq&eWX51Bg=U)2l0UDLiZw}BX zgK3;;FE@o}jHLW7(%Hm=Nr=f>ny_u90i`}8K;XJn64YXKCeF+#Xn#phk=Yz0 zD8)5*0-IL@o7cRh*PgktSE<loq|-%NOBblz=fl}qg9$oJ#!;U!>r;M$r(^Z&4K#o8f25J-3pPOb z^2R%59jj#>a#@#B)&;w>>Q>|GFZOw5#P8iJ7xJ&yZkL@q6esz<;2%}^V?1sRwT&2S z>F*Ha3V;7EQa{OA#4SKAbMrbVH6s$5$Of_F29XeMpYw}^`Gr4Xyt%G-18cSqC^H3r zOr1%FFN^Bmy#g1l*-}tmV5=dMUwzdy!o8uZDgH*O9WKW z3H+;9hM)R5SPB>GV2wM-ioK>6_;}jGM7~D~c;*a5)_5A9`QY_0!)P(V&SVYnAY(Vl z*%?j#*@zYKR&?0LWS)4z8F-Y+*aw$o{DK+RU13B2Cd$i-e@sfV67&#JL6bP8{uBJr z>&7xg>DF5V7(C{TGOr*2_C0ZFxis-w(#bd9Kj_FXa(pDZ%|6SFY@CkKwg{*SW8+p3 zc}zAA?ZW!0VaJ{}C9lJ{7p%}5b1oxkH%`JJ^dR-r?O@iMID?jfxQv8nV%KdP!)a|r zI*uS+%-D6q?E8JBXJ=J)lsK186~s{KnRNZEn(1O4n_fYKrJ4g**MHdXLBq{bxvE>K z>b~N;;!Kn+wXBuZg7V%e+rL`2Kjkfc>zS+1TzU4|vyb4_HqK^(8wVB`Il2n5W+U8av$Kx1ACY#W*J3Ru20sI9%#u~r9AJL>6J*x; zhG5`E>g1NV zm#?4p4UouN)JUNCD|nQzq~r(1%I1|}nU+l2uM{O5OQoL|S1y;pp-0I(wF!F)KZ5wl ze?W(D=<5E&{^j}Qb2r;p>-&@STp2th2Zxm)Ig(o|uT#o`p#&zP2yG?okfzhM2v#qODTZyGV zcB50N-U13!O)P!2JK@u_^!2i{O>xpDN&ewX1aY76(P$bamEPpC?u4IgaL#c$V_nJV zL`pEy_w`x#sBRcE!~G~BL*~+@l2DzwjOCk58epQI-%w$lxB0TAg60q%WtRzLY|-NE z9a;*G+s>L+c|h|lD`WwabAcA-Tiqj*gPaQ%Md;V>;h$fsm|0~4K#ib{w0qb*rpXtK z0!ajrQZq`D$|*+rWe%wo6nl#Tw$w*LC;S;Ra%B`o(tZZ6{8dbQ(SqXAt}_%TGM1~E z_z4P&F|Wm(U(9kk+2vne)=q-q50RBot-QiY|7vwV2kI{JX8N^HzW(Xg0or=I_lLti z+@qD%FMsovFIm4|E`3rdeKO&Ch}6S8UcmgdMRB$yvmaIDVPt%cx~z$Ua&$wkaD$U( z@(4Gzl$sH48WGp&L|9p;QDAnxtCjBOS?`kmHNDleR8>ZqDXxMfLAqfrF$K z3W7FUJuNNi1D{bSVKPdomn0KoP;1=($hJcUeKzbWUMJv0g(_umQ$$lfBO2dE#Ke1> zyn-_QFmu4Qf>LrXBjV>@q&3?^MN0JcNaU33x8O+bhDoD?RRyg2Fm7LnH8QE=xxPao zxK+WK2<#jMa+L!&n-O-8(Qd3Z?T!uP&lVDA;nIuz7_p7q+$Y27&Gg9TP}>7*JEn&> z(Lkm{PP_STZ*ttg*LpMFy*#@2M=;Qq40n(YFosljSL#8B9U)jy7Zj>mvJ<~7lr0`z zDouIH?|AC5KSlP06i?`mrvqBPn}@m6Iog@(hWDd;1=ga5RGNT2xhB*89~6O-9Ae%o?NvYm2UQi8kS#Jer{wvA<+} zeCnL)Hwr!k#zX5LGLV(ZNHUm=?B?58iIw6*=5jTy|7;U`mp-#Lz31H0b$F<49%ngp zMdrd2lVBFH@%1#EC&3Riz-0=n`b{*{P3^1*ll&?Xt;lbe@CNHIz45S~(J{^r`N2Og z?@n@?gGPj3dGqj1v5bS3$h`#oHTcJ-W@mBi#n>xnnEx*6D|nvUzZ1BD2x@FDV{`0C zHL*3!22{t^sH3d61RW#5eG-K;0l2o~v%PZ7PNin&otoj*n&BUwl53t;YM#a-NWzT; zkYLlwfE;X7f^B^Fta)GMh_r=jXUl64z%)T7VoFx}5(UpwJ^ENZvgFjb?w@0FuUg=9 z;zx!2jF_NPyP%KADRk_w*TaKHoTjlMe0W3|xp=`=DcFjtiWlJtz8vQIikg%~xt|lN zkk0TwYg7?XLD2Gke5ua7M~<94b)3#-V8BMGA`KwOhZ#CuLuS&J~oHdl^{?`24i! z<&F#Bmi52&E|yPP^nRw`cHWZD**q49nlgSzxUX4GLPKyIk4b*^Vkk_92*k?ue&cEW zqLT#RCf;sx*~Iw-FY^D)&) z*|P~A-^rt4-x_=noZ}93?v(Vbmh{Lay-G=M!kKdT-`$&Zz>$2zn!jfGDeP8FI$PJ= z^~r|e+fD@d$nJxR`(RQy$i_VFpwp4ynC5|-=D(S<-Geii(?J*wWeli~W{w^)7~R-W zF*ep8LvAvTwPr>_y=#=k$n(qVW%?OX(?Y^2waE)5jM3>mnQMjME9Wx93uz$Xep@GR z!k;Mm^n3W{7nsF$WK7Yll_F_WH}hsofH90Yr$NTV*>9OEN}^llGS`$OQN1?KSWANG z6d+J<%ka!|lMMYVJ1G%5Cgx);iCEJKCtLmB*NexeCzf9&|bLl~#n(TG!75 z+_A?UX9}X5v^@IwnT(!x$trywx383HxwM#xZu;WB=oalR4&?|&yR_e;Bks#b9pjE@ zx0Wl@-^M4MaYw!<^>2&&s?&PwpmA*DfxK{L+D`L^>4+ZlJ3!%RF3()?;<(>TFAXhq8tcGduwVg;I-nnX5T;8u0zdJxk3o~ar_$wx@_6|Qxu?pxOmJ6WphOibI?UD{ zjTakRV*IsGyn*rE9Uat_R}np+{WA7*q~K`_Xo9|vDps1b+*-^G2gX`iEi=!VN@>=f z)ndl}$SI@WFzP0_WTQ^-t*@;q4|I=iVA7*tOV{t_-ezy9L@z%oPt`(kyfR*u7aL6U z&_s1j-jE?D8sf&|zzE2oVxu<6@APvr)v1M_dIpvnZQ(+u|)cplmc`S%CMd8FN zQ{fBYsrC-;{XCF8$%hURn3{YgjH3cGXZuhJeDobZ_{`XeA+jnQmnOJ^Q6k%`bRl^5 zwDa`j%y?vCauO%Y_MOh0xWpYKc7fxC_wbWP$DSEHd}N4w?R*nY^1}$2pz$a4^Bk3C z8yk6c7&`Id@l*Va#C}R2pn#Y~cH|H{9|gzh@&j*YrL=v14hR2) zxd7xxHmvBQia5_UJVqMQF^px}nN4Dz7;p;Qah#cZWaKbA1x_NININf%OEaXgO$!uD z`-atiKQc40wY`q3g_@Kmd9b zT0(YG7Mc0ciU>O<43A_qWwh#>4sbxFGPoIF+J1Tpqc_8jiA>wVtb{_ehaF0r7G5Er zr9>{JX?ng8osuq`cm;^tj#aX*JnDTf@sNBQ6=kJnzyA|K=q;q%5<$kN;YQ<9VmFjENiwEdu+10Ydt5+(o zRW2S_^ORr%(v8^77P+BEY3R9CaI5c@O=*A={T+&D$Ko(Nu)nqc>i!$>989MnlC15-NAYyALvpbCJs?-KDHUz9P`dau{Ir#lYp2pyrL+}? zdmc`}2$s}|hAcrCPQTs#PWS6a7Y`-|aIo5v^^MqKjJ2*;_Vp>gzNE8{)|f)3vT8Tq zbjY<^mD;VcP_=k$Y4e(|Zh1=fbtt}$#lxwp(4DG|)hbfDv+a&>WVv`GadAxuELGqE zMW{*&Ri8V9ONWz=+K1MQrc18rQEGa~cc`c4qrFK_4?b(b zO{u`1O+C@b+{4Y&kH7ZeoHGO)Mg-LtDWyu(w6tjW!XZtp;Vj~qO#1P>>@ zhu4bhlJ(t6agS2GD`8&?Le}q5f?Ji~&V=Kxc^?AW?X65!wke)=#nVgvoEz4HSPXc( z)Xr>36t2N0zW>ABAM9QU%Qc-!O{W~_QUYBG z+nT3B*Ce~Eo%ACUKW^SBm+VqXb|t-;&zcw36L+e*SF5^jM!2Ux**l z@?q@?IDh{IW%{@_!o_V|Borc$+#vvkQYsQ~AQzS8=f~IyJ z8-G`;T;8UXx4r)C;!}w*ka=nEDp%{!;cdHR-yX%cC+Xb7pt5Tf&I`l0UX-i$D^>dm zE{`si-Gwi)ZL+^n@i)Hy6wZv9$Fh&J=w0V>?T!BB`S*8U-@RO`1U9WYHYFXK7{wrN2Cfy+3RA^hZ?WPHr79}#xoj@?mjEKHE+HUra^J%d zSvZQfoNE+mSvp+`mLhYE`Ivg3u|yK8L8(Nl7N%56+aIb_%2gBD@MPwKDiBX+FU=4s zhpE!32Q-^Rp+7-(!5P(wVG9P&iSdGHDEpMzA-LqjHd<9-@w!9* z3#I4;j`M2k%&Hamg|Oup9^)pZ2iQ{Eimo5DTIKOdp;JrH9uRnDbeV)t&rFeCEpf@Z zU|(>Gjs=HkTkwd^1@AibH?1Wv6p5|{-$Ta7ANQ}*K2u3(pRl4EIbHiKE7~Ax$tKgA zJjwuFZ^64{QH~)?ARc&(x~Yl~T@|1Pi3g0hf_AJ|s?R9iu$($YqE>Enrxq9C+Y=?~ zL^1825f|bPI)yXlwpjFnmie6z87l~LEBWg~JZ|PPmxpJFH04~m20rWNG%0G(FYA?Q zQY5pSx>43D5jTmy4=K~X;T8pQa&Bl`7J_Kc2F7opB)VT~fkE^w!Pw%K@%_eM3#E8V zqxQTOi{~h?;wAAQ!O22d-1GX*xF^5z#t2<2c~vv<(s)_CL=SJ2A{tfo;Jvj4EU3?p z=<5dfHau@^6$Ej2tp6momocHpAdR!LKe9r0jxdn=PrrGv=8r8#u3g$ZZUNlH6K!E-D|H<&z0rfFD69X@zy@VR5B zG6&xCV>-7|re}~{cmKq*&y5V9l!!*AJ!6p5#-!Q#88MPBn1zrwFG0Ybo#tNXzfF(N zQgDo3xkfQ&weS;)U8jJKsNs(4k5Y`;eBGoQ{~STumEl1kqk6cEiUXzSfHT}|FXxgO zlP1YJl1pn}M=b4y$($-cGSO1{14!xpdBZO&^F8_dPTR3|r5+NQSzkJAr!)lb10V95Tvd-M^ z8>k8~Q;{A7FwEd0V);^RWv483Dne&c=%ho;*XQ!KJe14(sm~H8QrxZ-_miAbm2j*ThZ6R? z-tuHc$B(<7lD$V1?~!|jf@}NdffgmOH5u6Zd0D$swk>gJ&0l;iw%l~(wQH}DgVxeJ z&W2Sd34_j7#Yt*EHA`B*l!MlN~<((@pB&)mSK#vmWSv-;witY%Nt3u^+r7SclLQ_&` zV&zn?LV(|M($8hJ!2RH+TJ`eZRX;?%1Pr z?74kL?iiLE58{SWen=J$E5hNVK!f3{xbo7qmlhAD1otnGyfO0bE?KBk1Ue29DR%@a zZ|S`59oe+AvQV!G^+};#%Qqzp&5F>R6q+-oEp1a}-*s|j-Y_W(Aw>u!g%Am~WpsWj zm;FgsQ2f@Ot9!0IaqS75pX)At_r>Mt%9-~U_#Qaf-L1I07l-JD&%E)>QZob`g&if4 za{HD_uXHR9p+u)Q>8QxK9pYzn+;O(7I$Ksw-YmI!>SpD4UcNPSyYRMfTloDWvU8u} z+?RCjyX%2OxjerjEYDxZLE^N&o;^{00{Ej|giN@s_X#CUCUFHg#etpw%@)mv!cr6_ zWuzcH1!Dk-(bGXZPuAw!@U-p#4&k|z2T!Dhr=C4|%52iHfF~phULqVO0=cOEL0>~% zhJgOKm_=C)HO6CfS?~LBM_1zx95N`37UICdPO26kjQ%<^vr8noKdy(ENw&bK2vGmrQbRXKW3GMKsm7DP$ z5c|Y-d>4ybF#qdnMg;hi;?qqcIyL;DCuN5+2w}|JH{p^ z$m|2jq)40;)5Y9#4{7XXphLu|qtX(F0-9ZBOENZo2KrGrTIIh^hoN)~c$RT;upQL3Sva@D4)TkzAby8ki$!~rn) zF#oFWm3CS_tsb-&vYiM9(>bEn__yBQf{4+aO7EA)EJ+ z-8}g>s4_%laKxLxZS+7ugU%<1*;FvrrbJiXm}VYG*=?Pr(11Ojy0G%%ADatRO~)Y z1#HN;CFRdpBSwmuU>k%;XKsjS%&hS0dNcxD7VG{=G@vFgRNOLvZ8jqDjUbI{P$kZ9? zSs;d5AQMNbUqZx4AlIkt*sN_`XM>2Ie4^Q!St~Pffs6F0%GhA7AXg)et@(V`uyKtI z;|~5Db>l1o*#f{Io_2<$UEmw}f_S<}Wg(dc!-JoMyl}o2HQB}ALZxE0CJ-__{d?4J zq!wJXtd(MW^LIw%(tf41KjBKXcHe2;z1q6__P`IGkXw%^t&r535=Bejpe4hX;QUB& z66mM=wb>IF4Sh|_9}2hLe*=+?_O)n@A-CQHU7MivhRPT%0U6n4oQHFdzNQkv)(Io` ziC%>cwOiAUnefG_$r5zK4H)nLUQ-nEaKoy^i&q=?nUw2r)PAXpNwEAYe zWO)SOZiV(v>fyG4=ztJ+IT-aofgvQojOvUhOmU zI*EDRG*5pwY3)8wtN^==t>Pw{=x251F-ltN%=HQrHl@;NM>Yi`r>>!zAk#i`#88gj zm^oiL>Ka~7Ijx3r`m}fR`ee*X^>reClwIbs)*B1cNc_DZUvKVwp48TPYJ$-N25LsV z96$J+Q6~|3=c@tChsJRfkhWg{<9p^Zr)x~SWFjE(E7DUGBq*Sn1x9L-%hO}?(aEU@ zGYXg$!((D3qSH_W#>mAcwx*pMhtU&^1u`x=*`7LfmZbDF6~|=RqZA|jObaKU8tjGc z0~5~}&U6~XPi)~z+cV#W8{2yO*bRJ3B+aLt$Bz!3?7h&tExVVVTA8*=%)~5hjikNg zX>=YYe^k-5Gh4NsJ@n}^-W6PdqRx7;7Snu~H`fn|ivKy@3|F$1wRbAFtX6K3D?63S z&O{MeN=<+CRi*U_*|Sga?7L^Fb@@`>syp7$syDO-7op-ivvOb)>^VNO-4vDXLAmXK z(slsWL`7sx1VbWYKw9C-<)V)yW%HAA(V$W^c+XPl^4%>Dt(1PJK`!rA%6qRI#sMDi zWQruYe3MeXDU$#r8lCY^O{-F~`*!c`ak=J6rRK@Rv9*fLH;a_EJ#xifrDAX5DYcrZ zK<$n2%COS1L$2Sc)bISmrXRHZaHqWcn6mrW`W1CrO6!-WKRc;(Jt3FuQ%d$Fy_pX* z_lm#yqf4v)o}|BLt)}t%p7)=){=|}V$(brHQ;J(ZYgjGbnJnH(x1M-^|MmTJ>+^~l zrK01rZ?0DCOJ+a13~Fr+oyvYFSP44f6)hw zCmm^T;tHHO0@iO4{=7*6Q{|AAhV)DHlf{_y#PTr_W{K`HhMnDILIjI3=J^^u#`sqj zV~iYomg#y}j3Eh&F|=echMO$LSP;gHFt&rG{Q$4T5!ytLx#0cZ=n_crl)bs6OQ-i| z(@#@+(4^^Rik`G{PMU>|F?v~ArmC~myWghR3I*S$;5!t2mx50yAnsQBi~>e?iYWG{ z6zrn%G+s(fsfwvr1x1iI(3a+Bu-Y_H8mmS2XzS8oG0tP}8&V}tfp8os|n z@Sv2aYBph6>1r@wMJB#Q>Yxd;R`WZBL<*g^&!+By{XN3jQAc z`2}VWaU8iN&7Os5r+BcKV`ZZU{(!m>j*Z0bF}aUN^UC;bg%E%Qm=cTgPFNx-?<7 zvXL4@J3S{_^!$5t-TWSd^%ZTfjjBAl#ggH?i{n=Gf=iX5xbI^zAp|d_uYZ?|pXibh(E|td{ zqO^@Eb49mjW6(3{a-S)@V2u=;N+_hfQdztqUXvHobGJO|YZ=N@%f^L}p`E5YXeV*I znF|ZjUMxKOu!vj?o5#|4IW}L`#A{KX#&{iE3b;PTLi6|3#bz)w5ADOa7kWzX2$OVU zCD}D-QdEXAd!dL-NP__BL#JY0`kinyo8ca7er|47qP=j~_l7Asq+7j?#C+NEcu}!n z_BV9Lnc`#pRHP~?M`(-PqYG|4nYCzO8x3iNOLN&ZJszDnhy7v1gh|7wIIJ8{wXx&R z9XNXMMcPYeV_BH5uC(neOb+MLPHd)&kohI7G=>hII5l?ixkHDJyudfjjZjI%b#awB z6O>4GD?Lr6yH4Tt>|~L&jeT*~V1G{e7b*A#1s_mA!d5ykhJ!dGVKU^1kgZ3AsYWEG z%lJbom0VaeX$F$xOY}s^*i`uJ_{3$XO2(lQnVP*A7NzGY*Galv1YY^9wu{Y4nt5j3 z;bI%^XhCD<#q^+x2Qy>i1=Y|cs6Z^dub z@ypItM-BG;C0lmT&OcvM%1hhH$nzTlD1cmUsD1qPnxW=Bq0rU=Yl$0eN_E%GbNqa9 z*}qfq?<7mfzg_c|y?g1M*OJ`pOb3aBJYY?0mwj6lADuW3dkR|z>?t5#I*Tb+6|3%A z&8C%TW~Y`=xj3>koN|;c*Xec~b;-VN#mCMYcLeCcw%mhrD(df4Y+0??g40wgwkj3a zo5!{SrW}DUExT>iYo^U*=AY{Rz|7_|U7ff`vQ$kS?Z|`kJoM1^wU(Y+ZnAaVVYi|n*LEqjIJBL=5GfwHc0j2epcLoQ=9H)8 z-Ak*Uh9o|1dl0hCh6l}i44sy$rj^c*PTnm2ofp6J;>y!2P&)QN=~&;6-JSJ4N_`I< zI#RS0HSOGM?!LJoH$R~?KOs9q3E#34<6l&E!wHpS65GQ9^;qBgXzZV!OP1^hgcLt% z#Rwz(+*f|1ZPnM5^fj%#cDr(Q^I&rGAhXbUQVtF(!NH_=klx)U*Y_*+{q%0v(oTB! z3$n8wb~+?l`s?7DJLN4;d4t(cZOU7b@>XKJSbAy7Taxltr@Up*>9J4Qm(9TdumQn6 zOAy%5W^tA2wj#n69SkEPq}l#aY2(m#%a68i8m=ugC?RP6$G`P{2oa-XX_gGL0=bnD z66q`+&`H$k%5~|^zXRQQ8rqJGRRloG3(%51TNKZhq_BmF#IR>q=MU1q<*(!~;m&)O zNy~y&g#Y(ABzU84BM&=L2+tDK$joJ4hJtvCL$Xoz}dFLO6C#?*#dL6py4WNyhe>L~qns z-$$nRz%o+Ui`v8m>hoKF5VwNKvW>)i!}HuBDL>jQR&!`FJSB2Rqf_Ba8Q+r;#!#{2 z&SH(v&4e$(NhNVu7;kAjM4Qe-%ormCqYa!zlJP`JtOY;6NJI<^8UG$#nzmzRoS(v+ zKLtywG1|&5y@1Yl)L1f zr3eJLx^-nzuHLFtZ@uEjv@y9>QM-KV?QgvEjf9O3HanDnQ*wshU2?En33eyF-6>CL z(i2*F?&gcDt=p5W+u7~ia&V6l+>`X~p^4+NT+^%IY*7$tTjKJX$CsGDvisWZW$V>_ ziG7q|UasjVmdjxYe=r$1xK>%W9Dd(>9mgc0 zl%iB=Rl;?z#^Nbu4Y*fp@dg*4;aW-3%^O@6($-Rj@c#i3Gs273Pfh-z7YYoJQJ_~S znY58*>m5C8)axx2&OpV4#bG_f73%%lt*e!6jH=eEP=KiTBNpag;1-2XZRW+=IGMKF zM@~T{m?Cg^k^&M3qyq@r-JG@!qi?tt{xHSJ&P{rTf|Hc<6a|bOr|m+3SmJ8A*9H$` zMrS2r2-%8&(VQe*VkVN5?{86xNFezp%3;QRC7m~ie<&t{N9EvAC3tl4DBr;R8aCf6 zj&3@MvoTc`G9IjxaDQGF!o&(C=9U{1N6o?cb)2yL9)W(b zZYSM(_#vG_ZM5xleES>Q@5W@#e@bP4A6e2i^42;hjUf)JB8GS*4>DPgxhhW=qMD`? zsnV6EJ!4$vA+-8ClzfTM>Mu|VOo<+f7?0Q;=B3?X)v~`+@pqbbhu!s-T{(IU&N)(o z>yA*mDiB|%Z8XYmsoDZ357~`sciln74HEw0^as=L&t9M9JA&@G2Ugt!vU|JY-j3Zt z9^YF#ukKuW0b7SoCQETDvYuV~!h*(4pk3;ff#9sMSlBWO9%&S(q42-6I18F$XDw$f zXWZC6Qu?NCv{3A4+h+uEK&-)b5}UY9tjD)q+)kTZa0c%V5t~UB<>M=@$F*=RqR#Gtuuzh2j(ZIa0=nbA+~7zAZt@+T=l?8 z$O!x`@zrF~T}fma{J>-sO&W@9PPWE;o^q;d%#eY(0VrUY^b7i(D~*(stvs`ZXj*xG zP&G9fiN3^-F=7U2+3hJWv-Ri+T6)S}MBYG>toMH%k;mCI0_M>&rV=x@xdX7tFSfZu z_4&XychL00F1EQto$BJWxkFtrW1Blvy}WuF@F#BF?h0mE%{qzoPXQWWYCmfvPHuP) z?|b|QnH{fAH^Hl+& z0m`&V-O!NT;E>($klEM(=@TDLrx+b!Hut1OF|a};7_qV34Ja^8YU>;=mERXf{weH? zX-dF)l8%t)5ixX2p|AV(6ISjq?)sG}+PHLHg;B({4L&-L8c0_s9>mp}Ag)duh^vz* z;z9HeyAW5W&rb_K2C4a8hTLTALZu<(iZ@A_L(l}*qly>l!TEPrPUkJUFR^#iF*Ta-=1sp@*Ax-(T(r&Mi8 z@$|}CrLyf_nI{0xGzk8N0-V~OHE(4mC$vbIAGY^B0=A883t&{GLtsixY}6Y#a4T+| zD7aMc3QEP;*dbn0#1biirD&@@~Ml6$=I8LSXQ!)M_)n`VT+(si08 zV2L%EvY!q|FNWdAZ!7b$*SBTM_JLS1lP3pL{2Wu5WfVgQh6@Z07(#rDu;MWhf`G(; z5R_oHYtJGCuh@T2$nek5I2cC2uwm0j&9Z-!;wMWRY*GtCbE|DYgWh-P5Zr6w!~JY6 zKgYj$8WV@LlY8Mx?Has=HM8ViIoPKJ`;y*1h8qOysnY777jmpnUy+?xe&i^?ore+r z$3qT)mpZ`%z}1Nv$dIccQi0M0;5xaM0sGG%!1EFCSQ9N;=)v1aD~aQZ1z4W-;FWrr z6L1Eb8UbhU%D{I6Y)FQH)3_Pnl@iQbd9v_I)%w>2tyfiOZTWGiPxkjK{(b`216BsF znmU#saCg$v$RMysCg*Znlisa52;>C%=RlsB9Uy75{)>b_J%J?xuEI3pKRb!d3xTCz z8?aWT!XV?sW5G=7dQivogp5iu;K~Pe3>+WM{AQqz#>xP7l&~I^dfT-GcpBac$y#Js3VN~K%vZ5$yUBO-@p+Rya|QE zu*tKRai)iT5!p_uvoy*yDIbiyfa(1?e1m}(FmWVNbv}pX7KQ>O$k>`(&O+sU8R30A z@=7Q`FJTwr>e~@lRg;M4<+Ss27Q@F?w+f+&ak3QvdjYN)UlZdv)d>f5gqaxvc|~Gk zEmO@vtR+`V8HWrxy1IT6QJ+LLk3vyE!~Jp=ic%IL3MIdCPlX=B`z%0ws*0 zhw&g=?{6t3a&MHl?(Ur|Cl`=f$>Z1*;@vJVcUx2nTjCV#1g& zwU5KobJ5GOT63-Rl1ps&iSRhwABl8OO8C-5I4mMg12R2+X>xjgIy5sseL5`B8_eZ! zsV5*Yft$!ux)5W=CrCz&L`th6Qw}oYU`86x48AaS{KS!wp(Do!kDcV=k2ZU1ET2(- z!R7Z12_wYUj|;PHh;7=~h&ZYH{|@znM2ESfT$&k)z5|HJB|{3rz>pFcx>sm-`93dczGuTXJdu{vrUHk}E4BP3WY_I_g3ZNy zD=zYqf@IWiJm@v*!qo5S4@BSI3 zDg#0hmNPxU|BlGx(N53;k`LHrqD;9gp^jqWIU)NT;;MLoxTYD>vx+*pgo9`F)Aj}? zZTJGkWNwh@vAp-B8Km{7(U~DuM5%bbTxDCVWxYH4l1_0<@pAngo4^^)XtIt;1CR&$ zb6f{huJ`6x_rp*jw+)?y62FF_z*3I&LeN2k9BHhsgWx%9lXco*#W~ES zS^9r`(f_+Z_6HsaqELpO!OBuJ|CBGXDSv(HuV2$UV_N?+P2{HO*R*bIx=Y)>#mtI% z1e-IVEMR~PL{Rz2brc0Ez?^gi8Ov# z)q@-65dtm4JVFUE)4m1c%+70hfDq=77{ZX+p!2hm&%!sovVWW6-$rzPn9E`ZRiVH6FocrI zfS#OPV{;NilMSE~LpxelGN2Oyk^!A4A=db?xrjCQ1;VBusMyr;S>b2Tt;A*jfZ`t@ zY#QR&r0Ley%Hh3{Z*NU_aK`R(@l}|sEWdK|xz+l;wE!8f}`Q zAk*qpcV_998Hed7tQ=|9Afc|$q5WKt=d7Ww-=>qI3(ge0Z9u8K{M>_DvXNpk5O82# zQ}!|0$iVOt>xl&)>wWSR@E%r-AwN2pwV4$bVAi(_t~p^0$TqD~@JXRmM99KM*iMj6 zBaAgcwifuny_cjg+H$@x_C$V&9~VWlzd)UIs6I}bh)6BUCed&||GfXzB)`h1n@(2AghwkPWk-7dX7f4c|~E{(0bW@VrNG!gt) z3V=?a3v@_b7(iTON%hmGZt`4@8swz_QYEnT?}O-4H3~4mwN!(Y*pBt#7^axv8FKHL z51+5<@p)GgC!3V)((pNx!11|K!)LX~hhZ{vB=Go{%m_fOxs~Z6!d~^gvE~i5_syRJ z#!?Ru#_q&-=I9sCuA~R6Z(xWYm+{SASKhtcqEv55R_?xe>ejZK&mgic#xj56>GDjw zp|ZRHhrma}muX!n!Ym~XY%(nkFr5B}(6&BoR@by6|EVl179U|*0jyIOHWmxS!WlST z)l$d+TEkFNSvi_(JqDvJ8!Jo2Y3w}KVRfV&zf`6eT#IUP0TJ0`)Xntgsvg@^i=2JR z|9@>)8xzNw-)ELxc3=ngeOX{(VR`ZLVlWVl?LuN=Y=;Ls;au?s;jD=+Ro6C7_DT)Y`3Z;Ne{3FHX zd@ohL$34lDDFj=kiNB;oJh50ji_EWS&&zrqK`j1e(+3_7Lu((_jTU8yl#m+}l8 z!d6Y6;fJSlUJt+PT);-V@gv5OpBpzEWS51MNnSha0V^@q@}d5vLgw{5LOP4v|3C}o zzAgppc0Nm=zM2Ytck=ciS;(SxFpz%sy>uljk^YtIk@v+6PLa~>1`fB}=F1p&z6KU} zDoV6up42W5Ey5++vZAnsZsHkGtH^zh?AX9`Ehn=52$R;ab=-Be#Ab+#doV< z6{Pt1DzL1wFq-Rnm=eX;>d)~{|78V4PV7(y7*;NkS6*ruL8VGny_@#G_fE<53Ua>p zmnHk&wVS+mXb-5o&T+(9`ovwLoxb@#A=^mB`@f)NVBx8FNY8HC1$|N~y@H%~=o9yD z@-EfG`3CIqgy}FwIG)@28`ECPQ$5cJE(~RtemePKO1gMk=B0v};4AU0=2OkNvgKUX zC(#{$k*9d^oc+6L$-Lu$>^BbtYqBRy))GjI(CHV;l{e=?uaM=Kf}gcU*5?jPc$aSF z;GN)CZsk%T3vDWuddmi%zw|tpwBOb_mmO6{H6RNN?q`Tsk4 zIz=$sN`(wtYmAVkMojH)#zCnk5^{O&IRSI)zsnm_*|~`Rplvz!v-aAyO08YYrUhCc zZ~qEf>1)mPg)>IFD0i3PwmuIQ&Kh)t$$pJn!&t@lU_q@^-~B(&_J#ANvi2J8-8}bF z`;6G;|E;xtw{GEL&i6{c;a-?CT+r+?pL1Vwqy}?$IoBP>rRqC%`J!Lep0FL0VL_~D9mSobO2V)3$*x3Pbko@DG;4k zNuQI8PK20tL1~)g~jrIBo!M{^PCbhwMgHPc$t;-GHlxFAV z-_h09d>hfy{9M{Kmzy-we^6M*9Gz(Br!7>uw3FMJUxREsPCbar8+OLAU7F+aM$p=Z$D$nWPWqGn)z-D{#qtaUJOeO^ z!MJ-!;qZi+&!;}0&!>{{`G5zZEpICpS*k9ar?xVB?mSheFE6OkzI9ih?CN9w6N+zA z^-ap+B+66)%l3^MLd&|)vQoWLEekD*Fr*4YvM>ZQa1f2#5E|BnhEz`q`ehmvp-&b1 zWTEd1e{1Tr+BT^8_pAQ>i-Hzv{4k<~_Aa_`P~`P5RWA2Gs9vguQE^{$Dz5mtR9_bi z73xB(i@YXO+!ybPW@`l7lrvCNqB3hgn&8&+UcLme@>O0D`c;99&Qs)yyA{cH=x2eQ zAt)O$D6LDKsxPJpEvnFhni#pjlwkxWhG6aBX(;;O>e5x5QIl%pJ#=WrBum;CM=>}y z#MrtROZ6#Yn<}=+>@w1LVXryA^3gf3O+l7+5p#!x7ewU=ljwq^}0KK0Z- za4or@%%MICg$xn@1Iy4OSVA`%Z3-kC?|AD(|Oy)>OGusi(z?R&Rj)sYGeg+2CyC;{&px;Lon`N>2 z`HCBOa<=+I|=MHo?q5m^|?X7uQdhi^PMzjQu3)W8iY zhLTr598z0`71xOB8iC&4iViK@vJsB2hvO^WU)Fw7`*Hn~dL=xlh6fkNpZX(Y+;eeE z6ZMunu86Iw*eZ*y24!5gKOw^eg;;fe;_k$9;AfGaM1I`(xKR<~su-8WI2=!_YL;Ce zzOJ^tq*NVNs}65M2YCnS4|l2YgG$XIwdN4?hZmOQ(+g{tKYK^n|BAZ*6(u~bhR3N? z4XVF?73V%9s(MsV=u3^1+vN)n&US-p7lDWx z*t5d_vf`79k6lk(O5g=G@WMvm(0bsI5*Stk!;2NfEez9HPsO^YB8+K%^sNuRwQ~Ej zv47~0dnS~&NwsZK5vNpfYSU3hvX%hwI&aHbLWuQ;^seOavda@umw2Kv8I&vZerMk@ zNpdk})@E|CuNwN8*Oj0%7dvn)qqywEl3Y+ILLVu*zVaBkh#3J?_RYY=0?pJEm52#n znW^m4f-yFjsl*-5j5kVVDzWxSejC6{B@U&0YPtT^!O~^lRRuY)kDKOfTJ#0f;Vz~= zU9Tgn5~~3#Fe{&rVzV-_A~eu#69Ii=RDHc6?xT!I8-RVekwd1ap$s)vGnN zY8_o#XRp>8*IM>yLkG3KflN)vfhTDZ*jGo|zpZe!gL5Ci?i;jbIZT_^Kp}U&M)l3j0ph1A) zd6?Xz1ZFB5%Cs9`q6)gk95#5)kr#8(5?goW;+LC3(!yEKpZQ&+dOg!W8ACKLMm&w6eGeEnaVfeE>@XrfKtgHy3VvN1C~L`Fl*eQo81%lq2|M-X)RjE3?N^eVU)k)J?<+W+o_;pfat7~ulLkf9~Bk8i^M<%6Vs@eg9vjj}#&@pn&5X=%>Cb&Uxn;=2(9>F5P zj|lD){F>lD3BDunbo_C67sh*9h1&BUL47`%#)n?4?d`P<^N3zsbdR6PO}9(i+Be97*hT>#^aM zy$xwgN`JDq!u6#veEr6y?_QgIQ96Slhy?b0f#aaTlIJs(9N!{yvApXU=T5LcjdLZ~ zpT<=r*q_N!m0*8bF7Q5?vs@b2EL*Q>*wq6-qId6j^v#$x&9RDgW zbK~YKV{=fdy93clalbk6Rr3cmdk2*1ny+W!2z0XH`d`iI%W#!E3;`RUg<2I8g9d;m<{~tJ4A^9@!#w9}*1S!) zup{P&KL8C_?ct%{(F*NOp0)xk5axo7DTfkh(*pI&vky*YoDP1NMtA{u%J@TA+*m*? z;|~zc45F7W$5*Ze;&%Qel*|Iv)?4OV?cf_Jb2E4xd^gd|;BoS_vtfb20N;?|3SpCI zTRD$w{863~D~_9tzGe1(&31(6$DqEq^naVW-|ow6O~dF(0{ z$4y4xGW#C0RZ^v`Q0L}hyQmO0iMEyVX!TIILf9nQR?Z_1yIzae7q7p6V{6^N>RIbif}?71bXOj7Fpf*#wbSf)dhEreM0(Xo zZ^m2Uq1g~F=Z~RN3ed-eB1`8qd%0?F)a*{x9yHLU+8Z*?GDmc)%n`E5oG%mN>Z2Lw zEYH_uxDxnU*{eLwm;(G`8yBpH)G%e#z_JJ!h>RkXQ6n-6A|o#zxwX;9qBSfF<*-pG zdo4oY!EEEJpijF1mIIG#H;ImY4#TtZ`#cZ9>f*S`=v!vrm+ekIN^`~xVXn3@<2c9j zFxFK9zi%s}X=Vk?aXeA2(8rL>>hY_fjfWh;wyKk0aKeVts^0K_A)c&?q51 rU!yUZtIw2=m-ASm7ROCS-zwqDR7ro{D~ulCK0i?PvQYLLClCBT8h#xn literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/base.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/base.py new file mode 100644 index 0000000..e7c998b --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/base.py @@ -0,0 +1,14 @@ +# 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 cryptography.hazmat.bindings._rust import openssl as rust_openssl + +load_pem_private_key = rust_openssl.keys.load_pem_private_key +load_der_private_key = rust_openssl.keys.load_der_private_key + +load_pem_public_key = rust_openssl.keys.load_pem_public_key +load_der_public_key = rust_openssl.keys.load_der_public_key + +load_pem_parameters = rust_openssl.dh.from_pem_parameters +load_der_parameters = rust_openssl.dh.from_der_parameters diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py new file mode 100644 index 0000000..549e1f9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py @@ -0,0 +1,156 @@ +# 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 annotations + +import typing + +from cryptography import x509 +from cryptography.hazmat.bindings._rust import pkcs12 as rust_pkcs12 +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives._serialization import PBES as PBES +from cryptography.hazmat.primitives.asymmetric import ( + dsa, + ec, + ed448, + ed25519, + rsa, +) +from cryptography.hazmat.primitives.asymmetric.types import PrivateKeyTypes + +__all__ = [ + "PBES", + "PKCS12Certificate", + "PKCS12KeyAndCertificates", + "PKCS12PrivateKeyTypes", + "load_key_and_certificates", + "load_pkcs12", + "serialize_key_and_certificates", +] + +PKCS12PrivateKeyTypes = typing.Union[ + rsa.RSAPrivateKey, + dsa.DSAPrivateKey, + ec.EllipticCurvePrivateKey, + ed25519.Ed25519PrivateKey, + ed448.Ed448PrivateKey, +] + + +PKCS12Certificate = rust_pkcs12.PKCS12Certificate + + +class PKCS12KeyAndCertificates: + def __init__( + self, + key: PrivateKeyTypes | None, + cert: PKCS12Certificate | None, + additional_certs: list[PKCS12Certificate], + ): + if key is not None and not isinstance( + key, + ( + rsa.RSAPrivateKey, + dsa.DSAPrivateKey, + ec.EllipticCurvePrivateKey, + ed25519.Ed25519PrivateKey, + ed448.Ed448PrivateKey, + ), + ): + raise TypeError( + "Key must be RSA, DSA, EllipticCurve, ED25519, or ED448" + " private key, or None." + ) + if cert is not None and not isinstance(cert, PKCS12Certificate): + raise TypeError("cert must be a PKCS12Certificate object or None") + if not all( + isinstance(add_cert, PKCS12Certificate) + for add_cert in additional_certs + ): + raise TypeError( + "all values in additional_certs must be PKCS12Certificate" + " objects" + ) + self._key = key + self._cert = cert + self._additional_certs = additional_certs + + @property + def key(self) -> PrivateKeyTypes | None: + return self._key + + @property + def cert(self) -> PKCS12Certificate | None: + return self._cert + + @property + def additional_certs(self) -> list[PKCS12Certificate]: + return self._additional_certs + + def __eq__(self, other: object) -> bool: + if not isinstance(other, PKCS12KeyAndCertificates): + return NotImplemented + + return ( + self.key == other.key + and self.cert == other.cert + and self.additional_certs == other.additional_certs + ) + + def __hash__(self) -> int: + return hash((self.key, self.cert, tuple(self.additional_certs))) + + def __repr__(self) -> str: + fmt = ( + "" + ) + return fmt.format(self.key, self.cert, self.additional_certs) + + +load_key_and_certificates = rust_pkcs12.load_key_and_certificates +load_pkcs12 = rust_pkcs12.load_pkcs12 + + +_PKCS12CATypes = typing.Union[ + x509.Certificate, + PKCS12Certificate, +] + + +def serialize_key_and_certificates( + name: bytes | None, + key: PKCS12PrivateKeyTypes | None, + cert: x509.Certificate | None, + cas: typing.Iterable[_PKCS12CATypes] | None, + encryption_algorithm: serialization.KeySerializationEncryption, +) -> bytes: + if key is not None and not isinstance( + key, + ( + rsa.RSAPrivateKey, + dsa.DSAPrivateKey, + ec.EllipticCurvePrivateKey, + ed25519.Ed25519PrivateKey, + ed448.Ed448PrivateKey, + ), + ): + raise TypeError( + "Key must be RSA, DSA, EllipticCurve, ED25519, or ED448" + " private key, or None." + ) + + if not isinstance( + encryption_algorithm, serialization.KeySerializationEncryption + ): + raise TypeError( + "Key encryption algorithm must be a " + "KeySerializationEncryption instance" + ) + + if key is None and cert is None and not cas: + raise ValueError("You must supply at least one of key, cert, or cas") + + return rust_pkcs12.serialize_key_and_certificates( + name, key, cert, cas, encryption_algorithm + ) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py new file mode 100644 index 0000000..882e345 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py @@ -0,0 +1,369 @@ +# 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 annotations + +import email.base64mime +import email.generator +import email.message +import email.policy +import io +import typing + +from cryptography import utils, x509 +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.bindings._rust import pkcs7 as rust_pkcs7 +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import ec, padding, rsa +from cryptography.utils import _check_byteslike + +load_pem_pkcs7_certificates = rust_pkcs7.load_pem_pkcs7_certificates + +load_der_pkcs7_certificates = rust_pkcs7.load_der_pkcs7_certificates + +serialize_certificates = rust_pkcs7.serialize_certificates + +PKCS7HashTypes = typing.Union[ + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, +] + +PKCS7PrivateKeyTypes = typing.Union[ + rsa.RSAPrivateKey, ec.EllipticCurvePrivateKey +] + + +class PKCS7Options(utils.Enum): + Text = "Add text/plain MIME type" + Binary = "Don't translate input data into canonical MIME format" + DetachedSignature = "Don't embed data in the PKCS7 structure" + NoCapabilities = "Don't embed SMIME capabilities" + NoAttributes = "Don't embed authenticatedAttributes" + NoCerts = "Don't embed signer certificate" + + +class PKCS7SignatureBuilder: + def __init__( + self, + data: bytes | None = None, + signers: list[ + tuple[ + x509.Certificate, + PKCS7PrivateKeyTypes, + PKCS7HashTypes, + padding.PSS | padding.PKCS1v15 | None, + ] + ] = [], + additional_certs: list[x509.Certificate] = [], + ): + self._data = data + self._signers = signers + self._additional_certs = additional_certs + + def set_data(self, data: bytes) -> PKCS7SignatureBuilder: + _check_byteslike("data", data) + if self._data is not None: + raise ValueError("data may only be set once") + + return PKCS7SignatureBuilder(data, self._signers) + + def add_signer( + self, + certificate: x509.Certificate, + private_key: PKCS7PrivateKeyTypes, + hash_algorithm: PKCS7HashTypes, + *, + rsa_padding: padding.PSS | padding.PKCS1v15 | None = None, + ) -> PKCS7SignatureBuilder: + if not isinstance( + hash_algorithm, + ( + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, + ), + ): + raise TypeError( + "hash_algorithm must be one of hashes.SHA224, " + "SHA256, SHA384, or SHA512" + ) + if not isinstance(certificate, x509.Certificate): + raise TypeError("certificate must be a x509.Certificate") + + if not isinstance( + private_key, (rsa.RSAPrivateKey, ec.EllipticCurvePrivateKey) + ): + raise TypeError("Only RSA & EC keys are supported at this time.") + + if rsa_padding is not None: + if not isinstance(rsa_padding, (padding.PSS, padding.PKCS1v15)): + raise TypeError("Padding must be PSS or PKCS1v15") + if not isinstance(private_key, rsa.RSAPrivateKey): + raise TypeError("Padding is only supported for RSA keys") + + return PKCS7SignatureBuilder( + self._data, + [ + *self._signers, + (certificate, private_key, hash_algorithm, rsa_padding), + ], + ) + + def add_certificate( + self, certificate: x509.Certificate + ) -> PKCS7SignatureBuilder: + if not isinstance(certificate, x509.Certificate): + raise TypeError("certificate must be a x509.Certificate") + + return PKCS7SignatureBuilder( + self._data, self._signers, [*self._additional_certs, certificate] + ) + + def sign( + self, + encoding: serialization.Encoding, + options: typing.Iterable[PKCS7Options], + backend: typing.Any = None, + ) -> bytes: + if len(self._signers) == 0: + raise ValueError("Must have at least one signer") + if self._data is None: + raise ValueError("You must add data to sign") + options = list(options) + if not all(isinstance(x, PKCS7Options) for x in options): + raise ValueError("options must be from the PKCS7Options enum") + if encoding not in ( + serialization.Encoding.PEM, + serialization.Encoding.DER, + serialization.Encoding.SMIME, + ): + raise ValueError( + "Must be PEM, DER, or SMIME from the Encoding enum" + ) + + # Text is a meaningless option unless it is accompanied by + # DetachedSignature + if ( + PKCS7Options.Text in options + and PKCS7Options.DetachedSignature not in options + ): + raise ValueError( + "When passing the Text option you must also pass " + "DetachedSignature" + ) + + if PKCS7Options.Text in options and encoding in ( + serialization.Encoding.DER, + serialization.Encoding.PEM, + ): + raise ValueError( + "The Text option is only available for SMIME serialization" + ) + + # No attributes implies no capabilities so we'll error if you try to + # pass both. + if ( + PKCS7Options.NoAttributes in options + and PKCS7Options.NoCapabilities in options + ): + raise ValueError( + "NoAttributes is a superset of NoCapabilities. Do not pass " + "both values." + ) + + return rust_pkcs7.sign_and_serialize(self, encoding, options) + + +class PKCS7EnvelopeBuilder: + def __init__( + self, + *, + _data: bytes | None = None, + _recipients: list[x509.Certificate] | None = None, + ): + from cryptography.hazmat.backends.openssl.backend import ( + backend as ossl, + ) + + if not ossl.rsa_encryption_supported(padding=padding.PKCS1v15()): + raise UnsupportedAlgorithm( + "RSA with PKCS1 v1.5 padding is not supported by this version" + " of OpenSSL.", + _Reasons.UNSUPPORTED_PADDING, + ) + self._data = _data + self._recipients = _recipients if _recipients is not None else [] + + def set_data(self, data: bytes) -> PKCS7EnvelopeBuilder: + _check_byteslike("data", data) + if self._data is not None: + raise ValueError("data may only be set once") + + return PKCS7EnvelopeBuilder(_data=data, _recipients=self._recipients) + + def add_recipient( + self, + certificate: x509.Certificate, + ) -> PKCS7EnvelopeBuilder: + if not isinstance(certificate, x509.Certificate): + raise TypeError("certificate must be a x509.Certificate") + + if not isinstance(certificate.public_key(), rsa.RSAPublicKey): + raise TypeError("Only RSA keys are supported at this time.") + + return PKCS7EnvelopeBuilder( + _data=self._data, + _recipients=[ + *self._recipients, + certificate, + ], + ) + + def encrypt( + self, + encoding: serialization.Encoding, + options: typing.Iterable[PKCS7Options], + ) -> bytes: + if len(self._recipients) == 0: + raise ValueError("Must have at least one recipient") + if self._data is None: + raise ValueError("You must add data to encrypt") + options = list(options) + if not all(isinstance(x, PKCS7Options) for x in options): + raise ValueError("options must be from the PKCS7Options enum") + if encoding not in ( + serialization.Encoding.PEM, + serialization.Encoding.DER, + serialization.Encoding.SMIME, + ): + raise ValueError( + "Must be PEM, DER, or SMIME from the Encoding enum" + ) + + # Only allow options that make sense for encryption + if any( + opt not in [PKCS7Options.Text, PKCS7Options.Binary] + for opt in options + ): + raise ValueError( + "Only the following options are supported for encryption: " + "Text, Binary" + ) + elif PKCS7Options.Text in options and PKCS7Options.Binary in options: + # OpenSSL accepts both options at the same time, but ignores Text. + # We fail defensively to avoid unexpected outputs. + raise ValueError( + "Cannot use Binary and Text options at the same time" + ) + + return rust_pkcs7.encrypt_and_serialize(self, encoding, options) + + +pkcs7_decrypt_der = rust_pkcs7.decrypt_der +pkcs7_decrypt_pem = rust_pkcs7.decrypt_pem +pkcs7_decrypt_smime = rust_pkcs7.decrypt_smime + + +def _smime_signed_encode( + data: bytes, signature: bytes, micalg: str, text_mode: bool +) -> bytes: + # This function works pretty hard to replicate what OpenSSL does + # precisely. For good and for ill. + + m = email.message.Message() + m.add_header("MIME-Version", "1.0") + m.add_header( + "Content-Type", + "multipart/signed", + protocol="application/x-pkcs7-signature", + micalg=micalg, + ) + + m.preamble = "This is an S/MIME signed message\n" + + msg_part = OpenSSLMimePart() + msg_part.set_payload(data) + if text_mode: + msg_part.add_header("Content-Type", "text/plain") + m.attach(msg_part) + + sig_part = email.message.MIMEPart() + sig_part.add_header( + "Content-Type", "application/x-pkcs7-signature", name="smime.p7s" + ) + sig_part.add_header("Content-Transfer-Encoding", "base64") + sig_part.add_header( + "Content-Disposition", "attachment", filename="smime.p7s" + ) + sig_part.set_payload( + email.base64mime.body_encode(signature, maxlinelen=65) + ) + del sig_part["MIME-Version"] + m.attach(sig_part) + + fp = io.BytesIO() + g = email.generator.BytesGenerator( + fp, + maxheaderlen=0, + mangle_from_=False, + policy=m.policy.clone(linesep="\r\n"), + ) + g.flatten(m) + return fp.getvalue() + + +def _smime_enveloped_encode(data: bytes) -> bytes: + m = email.message.Message() + m.add_header("MIME-Version", "1.0") + m.add_header("Content-Disposition", "attachment", filename="smime.p7m") + m.add_header( + "Content-Type", + "application/pkcs7-mime", + smime_type="enveloped-data", + name="smime.p7m", + ) + m.add_header("Content-Transfer-Encoding", "base64") + + m.set_payload(email.base64mime.body_encode(data, maxlinelen=65)) + + return m.as_bytes(policy=m.policy.clone(linesep="\n", max_line_length=0)) + + +def _smime_enveloped_decode(data: bytes) -> bytes: + m = email.message_from_bytes(data) + if m.get_content_type() not in { + "application/x-pkcs7-mime", + "application/pkcs7-mime", + }: + raise ValueError("Not an S/MIME enveloped message") + return bytes(m.get_payload(decode=True)) + + +def _smime_remove_text_headers(data: bytes) -> bytes: + m = email.message_from_bytes(data) + # Using get() instead of get_content_type() since it has None as default, + # where the latter has "text/plain". Both methods are case-insensitive. + content_type = m.get("content-type") + if content_type is None: + raise ValueError( + "Decrypted MIME data has no 'Content-Type' header. " + "Please remove the 'Text' option to parse it manually." + ) + if "text/plain" not in content_type: + raise ValueError( + f"Decrypted MIME data content type is '{content_type}', not " + "'text/plain'. Remove the 'Text' option to parse it manually." + ) + return bytes(m.get_payload(decode=True)) + + +class OpenSSLMimePart(email.message.MIMEPart): + # A MIMEPart subclass that replicates OpenSSL's behavior of not including + # a newline if there are no headers. + def _write_headers(self, generator) -> None: + if list(self.raw_items()): + generator._write_headers(self) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/ssh.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/ssh.py new file mode 100644 index 0000000..c01afb0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/serialization/ssh.py @@ -0,0 +1,1569 @@ +# 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 annotations + +import binascii +import enum +import os +import re +import typing +import warnings +from base64 import encodebytes as _base64_encode +from dataclasses import dataclass + +from cryptography import utils +from cryptography.exceptions import UnsupportedAlgorithm +from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives.asymmetric import ( + dsa, + ec, + ed25519, + padding, + rsa, +) +from cryptography.hazmat.primitives.asymmetric import utils as asym_utils +from cryptography.hazmat.primitives.ciphers import ( + AEADDecryptionContext, + Cipher, + algorithms, + modes, +) +from cryptography.hazmat.primitives.serialization import ( + Encoding, + KeySerializationEncryption, + NoEncryption, + PrivateFormat, + PublicFormat, + _KeySerializationEncryption, +) + +try: + from bcrypt import kdf as _bcrypt_kdf + + _bcrypt_supported = True +except ImportError: + _bcrypt_supported = False + + def _bcrypt_kdf( + password: bytes, + salt: bytes, + desired_key_bytes: int, + rounds: int, + ignore_few_rounds: bool = False, + ) -> bytes: + raise UnsupportedAlgorithm("Need bcrypt module") + + +_SSH_ED25519 = b"ssh-ed25519" +_SSH_RSA = b"ssh-rsa" +_SSH_DSA = b"ssh-dss" +_ECDSA_NISTP256 = b"ecdsa-sha2-nistp256" +_ECDSA_NISTP384 = b"ecdsa-sha2-nistp384" +_ECDSA_NISTP521 = b"ecdsa-sha2-nistp521" +_CERT_SUFFIX = b"-cert-v01@openssh.com" + +# U2F application string suffixed pubkey +_SK_SSH_ED25519 = b"sk-ssh-ed25519@openssh.com" +_SK_SSH_ECDSA_NISTP256 = b"sk-ecdsa-sha2-nistp256@openssh.com" + +# These are not key types, only algorithms, so they cannot appear +# as a public key type +_SSH_RSA_SHA256 = b"rsa-sha2-256" +_SSH_RSA_SHA512 = b"rsa-sha2-512" + +_SSH_PUBKEY_RC = re.compile(rb"\A(\S+)[ \t]+(\S+)") +_SK_MAGIC = b"openssh-key-v1\0" +_SK_START = b"-----BEGIN OPENSSH PRIVATE KEY-----" +_SK_END = b"-----END OPENSSH PRIVATE KEY-----" +_BCRYPT = b"bcrypt" +_NONE = b"none" +_DEFAULT_CIPHER = b"aes256-ctr" +_DEFAULT_ROUNDS = 16 + +# re is only way to work on bytes-like data +_PEM_RC = re.compile(_SK_START + b"(.*?)" + _SK_END, re.DOTALL) + +# padding for max blocksize +_PADDING = memoryview(bytearray(range(1, 1 + 16))) + + +@dataclass +class _SSHCipher: + alg: type[algorithms.AES] + key_len: int + mode: type[modes.CTR] | type[modes.CBC] | type[modes.GCM] + block_len: int + iv_len: int + tag_len: int | None + is_aead: bool + + +# ciphers that are actually used in key wrapping +_SSH_CIPHERS: dict[bytes, _SSHCipher] = { + b"aes256-ctr": _SSHCipher( + alg=algorithms.AES, + key_len=32, + mode=modes.CTR, + block_len=16, + iv_len=16, + tag_len=None, + is_aead=False, + ), + b"aes256-cbc": _SSHCipher( + alg=algorithms.AES, + key_len=32, + mode=modes.CBC, + block_len=16, + iv_len=16, + tag_len=None, + is_aead=False, + ), + b"aes256-gcm@openssh.com": _SSHCipher( + alg=algorithms.AES, + key_len=32, + mode=modes.GCM, + block_len=16, + iv_len=12, + tag_len=16, + is_aead=True, + ), +} + +# map local curve name to key type +_ECDSA_KEY_TYPE = { + "secp256r1": _ECDSA_NISTP256, + "secp384r1": _ECDSA_NISTP384, + "secp521r1": _ECDSA_NISTP521, +} + + +def _get_ssh_key_type(key: SSHPrivateKeyTypes | SSHPublicKeyTypes) -> bytes: + if isinstance(key, ec.EllipticCurvePrivateKey): + key_type = _ecdsa_key_type(key.public_key()) + elif isinstance(key, ec.EllipticCurvePublicKey): + key_type = _ecdsa_key_type(key) + elif isinstance(key, (rsa.RSAPrivateKey, rsa.RSAPublicKey)): + key_type = _SSH_RSA + elif isinstance(key, (dsa.DSAPrivateKey, dsa.DSAPublicKey)): + key_type = _SSH_DSA + elif isinstance( + key, (ed25519.Ed25519PrivateKey, ed25519.Ed25519PublicKey) + ): + key_type = _SSH_ED25519 + else: + raise ValueError("Unsupported key type") + + return key_type + + +def _ecdsa_key_type(public_key: ec.EllipticCurvePublicKey) -> bytes: + """Return SSH key_type and curve_name for private key.""" + curve = public_key.curve + if curve.name not in _ECDSA_KEY_TYPE: + raise ValueError( + f"Unsupported curve for ssh private key: {curve.name!r}" + ) + return _ECDSA_KEY_TYPE[curve.name] + + +def _ssh_pem_encode( + data: bytes, + prefix: bytes = _SK_START + b"\n", + suffix: bytes = _SK_END + b"\n", +) -> bytes: + return b"".join([prefix, _base64_encode(data), suffix]) + + +def _check_block_size(data: bytes, block_len: int) -> None: + """Require data to be full blocks""" + if not data or len(data) % block_len != 0: + raise ValueError("Corrupt data: missing padding") + + +def _check_empty(data: bytes) -> None: + """All data should have been parsed.""" + if data: + raise ValueError("Corrupt data: unparsed data") + + +def _init_cipher( + ciphername: bytes, + password: bytes | None, + salt: bytes, + rounds: int, +) -> Cipher[modes.CBC | modes.CTR | modes.GCM]: + """Generate key + iv and return cipher.""" + if not password: + raise ValueError("Key is password-protected.") + + ciph = _SSH_CIPHERS[ciphername] + seed = _bcrypt_kdf( + password, salt, ciph.key_len + ciph.iv_len, rounds, True + ) + return Cipher( + ciph.alg(seed[: ciph.key_len]), + ciph.mode(seed[ciph.key_len :]), + ) + + +def _get_u32(data: memoryview) -> tuple[int, memoryview]: + """Uint32""" + if len(data) < 4: + raise ValueError("Invalid data") + return int.from_bytes(data[:4], byteorder="big"), data[4:] + + +def _get_u64(data: memoryview) -> tuple[int, memoryview]: + """Uint64""" + if len(data) < 8: + raise ValueError("Invalid data") + return int.from_bytes(data[:8], byteorder="big"), data[8:] + + +def _get_sshstr(data: memoryview) -> tuple[memoryview, memoryview]: + """Bytes with u32 length prefix""" + n, data = _get_u32(data) + if n > len(data): + raise ValueError("Invalid data") + return data[:n], data[n:] + + +def _get_mpint(data: memoryview) -> tuple[int, memoryview]: + """Big integer.""" + val, data = _get_sshstr(data) + if val and val[0] > 0x7F: + raise ValueError("Invalid data") + return int.from_bytes(val, "big"), data + + +def _to_mpint(val: int) -> bytes: + """Storage format for signed bigint.""" + if val < 0: + raise ValueError("negative mpint not allowed") + if not val: + return b"" + nbytes = (val.bit_length() + 8) // 8 + return utils.int_to_bytes(val, nbytes) + + +class _FragList: + """Build recursive structure without data copy.""" + + flist: list[bytes] + + def __init__(self, init: list[bytes] | None = None) -> None: + self.flist = [] + if init: + self.flist.extend(init) + + def put_raw(self, val: bytes) -> None: + """Add plain bytes""" + self.flist.append(val) + + def put_u32(self, val: int) -> None: + """Big-endian uint32""" + self.flist.append(val.to_bytes(length=4, byteorder="big")) + + def put_u64(self, val: int) -> None: + """Big-endian uint64""" + self.flist.append(val.to_bytes(length=8, byteorder="big")) + + def put_sshstr(self, val: bytes | _FragList) -> None: + """Bytes prefixed with u32 length""" + if isinstance(val, (bytes, memoryview, bytearray)): + self.put_u32(len(val)) + self.flist.append(val) + else: + self.put_u32(val.size()) + self.flist.extend(val.flist) + + def put_mpint(self, val: int) -> None: + """Big-endian bigint prefixed with u32 length""" + self.put_sshstr(_to_mpint(val)) + + def size(self) -> int: + """Current number of bytes""" + return sum(map(len, self.flist)) + + def render(self, dstbuf: memoryview, pos: int = 0) -> int: + """Write into bytearray""" + for frag in self.flist: + flen = len(frag) + start, pos = pos, pos + flen + dstbuf[start:pos] = frag + return pos + + def tobytes(self) -> bytes: + """Return as bytes""" + buf = memoryview(bytearray(self.size())) + self.render(buf) + return buf.tobytes() + + +class _SSHFormatRSA: + """Format for RSA keys. + + Public: + mpint e, n + Private: + mpint n, e, d, iqmp, p, q + """ + + def get_public( + self, data: memoryview + ) -> tuple[tuple[int, int], memoryview]: + """RSA public fields""" + e, data = _get_mpint(data) + n, data = _get_mpint(data) + return (e, n), data + + def load_public( + self, data: memoryview + ) -> tuple[rsa.RSAPublicKey, memoryview]: + """Make RSA public key from data.""" + (e, n), data = self.get_public(data) + public_numbers = rsa.RSAPublicNumbers(e, n) + public_key = public_numbers.public_key() + return public_key, data + + def load_private( + self, data: memoryview, pubfields + ) -> tuple[rsa.RSAPrivateKey, memoryview]: + """Make RSA private key from data.""" + n, data = _get_mpint(data) + e, data = _get_mpint(data) + d, data = _get_mpint(data) + iqmp, data = _get_mpint(data) + p, data = _get_mpint(data) + q, data = _get_mpint(data) + + if (e, n) != pubfields: + raise ValueError("Corrupt data: rsa field mismatch") + dmp1 = rsa.rsa_crt_dmp1(d, p) + dmq1 = rsa.rsa_crt_dmq1(d, q) + public_numbers = rsa.RSAPublicNumbers(e, n) + private_numbers = rsa.RSAPrivateNumbers( + p, q, d, dmp1, dmq1, iqmp, public_numbers + ) + private_key = private_numbers.private_key() + return private_key, data + + def encode_public( + self, public_key: rsa.RSAPublicKey, f_pub: _FragList + ) -> None: + """Write RSA public key""" + pubn = public_key.public_numbers() + f_pub.put_mpint(pubn.e) + f_pub.put_mpint(pubn.n) + + def encode_private( + self, private_key: rsa.RSAPrivateKey, f_priv: _FragList + ) -> None: + """Write RSA private key""" + private_numbers = private_key.private_numbers() + public_numbers = private_numbers.public_numbers + + f_priv.put_mpint(public_numbers.n) + f_priv.put_mpint(public_numbers.e) + + f_priv.put_mpint(private_numbers.d) + f_priv.put_mpint(private_numbers.iqmp) + f_priv.put_mpint(private_numbers.p) + f_priv.put_mpint(private_numbers.q) + + +class _SSHFormatDSA: + """Format for DSA keys. + + Public: + mpint p, q, g, y + Private: + mpint p, q, g, y, x + """ + + def get_public(self, data: memoryview) -> tuple[tuple, memoryview]: + """DSA public fields""" + p, data = _get_mpint(data) + q, data = _get_mpint(data) + g, data = _get_mpint(data) + y, data = _get_mpint(data) + return (p, q, g, y), data + + def load_public( + self, data: memoryview + ) -> tuple[dsa.DSAPublicKey, memoryview]: + """Make DSA public key from data.""" + (p, q, g, y), data = self.get_public(data) + parameter_numbers = dsa.DSAParameterNumbers(p, q, g) + public_numbers = dsa.DSAPublicNumbers(y, parameter_numbers) + self._validate(public_numbers) + public_key = public_numbers.public_key() + return public_key, data + + def load_private( + self, data: memoryview, pubfields + ) -> tuple[dsa.DSAPrivateKey, memoryview]: + """Make DSA private key from data.""" + (p, q, g, y), data = self.get_public(data) + x, data = _get_mpint(data) + + if (p, q, g, y) != pubfields: + raise ValueError("Corrupt data: dsa field mismatch") + parameter_numbers = dsa.DSAParameterNumbers(p, q, g) + public_numbers = dsa.DSAPublicNumbers(y, parameter_numbers) + self._validate(public_numbers) + private_numbers = dsa.DSAPrivateNumbers(x, public_numbers) + private_key = private_numbers.private_key() + return private_key, data + + def encode_public( + self, public_key: dsa.DSAPublicKey, f_pub: _FragList + ) -> None: + """Write DSA public key""" + public_numbers = public_key.public_numbers() + parameter_numbers = public_numbers.parameter_numbers + self._validate(public_numbers) + + f_pub.put_mpint(parameter_numbers.p) + f_pub.put_mpint(parameter_numbers.q) + f_pub.put_mpint(parameter_numbers.g) + f_pub.put_mpint(public_numbers.y) + + def encode_private( + self, private_key: dsa.DSAPrivateKey, f_priv: _FragList + ) -> None: + """Write DSA private key""" + self.encode_public(private_key.public_key(), f_priv) + f_priv.put_mpint(private_key.private_numbers().x) + + def _validate(self, public_numbers: dsa.DSAPublicNumbers) -> None: + parameter_numbers = public_numbers.parameter_numbers + if parameter_numbers.p.bit_length() != 1024: + raise ValueError("SSH supports only 1024 bit DSA keys") + + +class _SSHFormatECDSA: + """Format for ECDSA keys. + + Public: + str curve + bytes point + Private: + str curve + bytes point + mpint secret + """ + + def __init__(self, ssh_curve_name: bytes, curve: ec.EllipticCurve): + self.ssh_curve_name = ssh_curve_name + self.curve = curve + + def get_public( + self, data: memoryview + ) -> tuple[tuple[memoryview, memoryview], memoryview]: + """ECDSA public fields""" + curve, data = _get_sshstr(data) + point, data = _get_sshstr(data) + if curve != self.ssh_curve_name: + raise ValueError("Curve name mismatch") + if point[0] != 4: + raise NotImplementedError("Need uncompressed point") + return (curve, point), data + + def load_public( + self, data: memoryview + ) -> tuple[ec.EllipticCurvePublicKey, memoryview]: + """Make ECDSA public key from data.""" + (_, point), data = self.get_public(data) + public_key = ec.EllipticCurvePublicKey.from_encoded_point( + self.curve, point.tobytes() + ) + return public_key, data + + def load_private( + self, data: memoryview, pubfields + ) -> tuple[ec.EllipticCurvePrivateKey, memoryview]: + """Make ECDSA private key from data.""" + (curve_name, point), data = self.get_public(data) + secret, data = _get_mpint(data) + + if (curve_name, point) != pubfields: + raise ValueError("Corrupt data: ecdsa field mismatch") + private_key = ec.derive_private_key(secret, self.curve) + return private_key, data + + def encode_public( + self, public_key: ec.EllipticCurvePublicKey, f_pub: _FragList + ) -> None: + """Write ECDSA public key""" + point = public_key.public_bytes( + Encoding.X962, PublicFormat.UncompressedPoint + ) + f_pub.put_sshstr(self.ssh_curve_name) + f_pub.put_sshstr(point) + + def encode_private( + self, private_key: ec.EllipticCurvePrivateKey, f_priv: _FragList + ) -> None: + """Write ECDSA private key""" + public_key = private_key.public_key() + private_numbers = private_key.private_numbers() + + self.encode_public(public_key, f_priv) + f_priv.put_mpint(private_numbers.private_value) + + +class _SSHFormatEd25519: + """Format for Ed25519 keys. + + Public: + bytes point + Private: + bytes point + bytes secret_and_point + """ + + def get_public( + self, data: memoryview + ) -> tuple[tuple[memoryview], memoryview]: + """Ed25519 public fields""" + point, data = _get_sshstr(data) + return (point,), data + + def load_public( + self, data: memoryview + ) -> tuple[ed25519.Ed25519PublicKey, memoryview]: + """Make Ed25519 public key from data.""" + (point,), data = self.get_public(data) + public_key = ed25519.Ed25519PublicKey.from_public_bytes( + point.tobytes() + ) + return public_key, data + + def load_private( + self, data: memoryview, pubfields + ) -> tuple[ed25519.Ed25519PrivateKey, memoryview]: + """Make Ed25519 private key from data.""" + (point,), data = self.get_public(data) + keypair, data = _get_sshstr(data) + + secret = keypair[:32] + point2 = keypair[32:] + if point != point2 or (point,) != pubfields: + raise ValueError("Corrupt data: ed25519 field mismatch") + private_key = ed25519.Ed25519PrivateKey.from_private_bytes(secret) + return private_key, data + + def encode_public( + self, public_key: ed25519.Ed25519PublicKey, f_pub: _FragList + ) -> None: + """Write Ed25519 public key""" + raw_public_key = public_key.public_bytes( + Encoding.Raw, PublicFormat.Raw + ) + f_pub.put_sshstr(raw_public_key) + + def encode_private( + self, private_key: ed25519.Ed25519PrivateKey, f_priv: _FragList + ) -> None: + """Write Ed25519 private key""" + public_key = private_key.public_key() + raw_private_key = private_key.private_bytes( + Encoding.Raw, PrivateFormat.Raw, NoEncryption() + ) + raw_public_key = public_key.public_bytes( + Encoding.Raw, PublicFormat.Raw + ) + f_keypair = _FragList([raw_private_key, raw_public_key]) + + self.encode_public(public_key, f_priv) + f_priv.put_sshstr(f_keypair) + + +def load_application(data) -> tuple[memoryview, memoryview]: + """ + U2F application strings + """ + application, data = _get_sshstr(data) + if not application.tobytes().startswith(b"ssh:"): + raise ValueError( + "U2F application string does not start with b'ssh:' " + f"({application})" + ) + return application, data + + +class _SSHFormatSKEd25519: + """ + The format of a sk-ssh-ed25519@openssh.com public key is: + + string "sk-ssh-ed25519@openssh.com" + string public key + string application (user-specified, but typically "ssh:") + """ + + def load_public( + self, data: memoryview + ) -> tuple[ed25519.Ed25519PublicKey, memoryview]: + """Make Ed25519 public key from data.""" + public_key, data = _lookup_kformat(_SSH_ED25519).load_public(data) + _, data = load_application(data) + return public_key, data + + +class _SSHFormatSKECDSA: + """ + The format of a sk-ecdsa-sha2-nistp256@openssh.com public key is: + + string "sk-ecdsa-sha2-nistp256@openssh.com" + string curve name + ec_point Q + string application (user-specified, but typically "ssh:") + """ + + def load_public( + self, data: memoryview + ) -> tuple[ec.EllipticCurvePublicKey, memoryview]: + """Make ECDSA public key from data.""" + public_key, data = _lookup_kformat(_ECDSA_NISTP256).load_public(data) + _, data = load_application(data) + return public_key, data + + +_KEY_FORMATS = { + _SSH_RSA: _SSHFormatRSA(), + _SSH_DSA: _SSHFormatDSA(), + _SSH_ED25519: _SSHFormatEd25519(), + _ECDSA_NISTP256: _SSHFormatECDSA(b"nistp256", ec.SECP256R1()), + _ECDSA_NISTP384: _SSHFormatECDSA(b"nistp384", ec.SECP384R1()), + _ECDSA_NISTP521: _SSHFormatECDSA(b"nistp521", ec.SECP521R1()), + _SK_SSH_ED25519: _SSHFormatSKEd25519(), + _SK_SSH_ECDSA_NISTP256: _SSHFormatSKECDSA(), +} + + +def _lookup_kformat(key_type: bytes): + """Return valid format or throw error""" + if not isinstance(key_type, bytes): + key_type = memoryview(key_type).tobytes() + if key_type in _KEY_FORMATS: + return _KEY_FORMATS[key_type] + raise UnsupportedAlgorithm(f"Unsupported key type: {key_type!r}") + + +SSHPrivateKeyTypes = typing.Union[ + ec.EllipticCurvePrivateKey, + rsa.RSAPrivateKey, + dsa.DSAPrivateKey, + ed25519.Ed25519PrivateKey, +] + + +def load_ssh_private_key( + data: bytes, + password: bytes | None, + backend: typing.Any = None, +) -> SSHPrivateKeyTypes: + """Load private key from OpenSSH custom encoding.""" + utils._check_byteslike("data", data) + if password is not None: + utils._check_bytes("password", password) + + m = _PEM_RC.search(data) + if not m: + raise ValueError("Not OpenSSH private key format") + p1 = m.start(1) + p2 = m.end(1) + data = binascii.a2b_base64(memoryview(data)[p1:p2]) + if not data.startswith(_SK_MAGIC): + raise ValueError("Not OpenSSH private key format") + data = memoryview(data)[len(_SK_MAGIC) :] + + # parse header + ciphername, data = _get_sshstr(data) + kdfname, data = _get_sshstr(data) + kdfoptions, data = _get_sshstr(data) + nkeys, data = _get_u32(data) + if nkeys != 1: + raise ValueError("Only one key supported") + + # load public key data + pubdata, data = _get_sshstr(data) + pub_key_type, pubdata = _get_sshstr(pubdata) + kformat = _lookup_kformat(pub_key_type) + pubfields, pubdata = kformat.get_public(pubdata) + _check_empty(pubdata) + + if (ciphername, kdfname) != (_NONE, _NONE): + ciphername_bytes = ciphername.tobytes() + if ciphername_bytes not in _SSH_CIPHERS: + raise UnsupportedAlgorithm( + f"Unsupported cipher: {ciphername_bytes!r}" + ) + if kdfname != _BCRYPT: + raise UnsupportedAlgorithm(f"Unsupported KDF: {kdfname!r}") + blklen = _SSH_CIPHERS[ciphername_bytes].block_len + tag_len = _SSH_CIPHERS[ciphername_bytes].tag_len + # load secret data + edata, data = _get_sshstr(data) + # see https://bugzilla.mindrot.org/show_bug.cgi?id=3553 for + # information about how OpenSSH handles AEAD tags + if _SSH_CIPHERS[ciphername_bytes].is_aead: + tag = bytes(data) + if len(tag) != tag_len: + raise ValueError("Corrupt data: invalid tag length for cipher") + else: + _check_empty(data) + _check_block_size(edata, blklen) + salt, kbuf = _get_sshstr(kdfoptions) + rounds, kbuf = _get_u32(kbuf) + _check_empty(kbuf) + ciph = _init_cipher(ciphername_bytes, password, salt.tobytes(), rounds) + dec = ciph.decryptor() + edata = memoryview(dec.update(edata)) + if _SSH_CIPHERS[ciphername_bytes].is_aead: + assert isinstance(dec, AEADDecryptionContext) + _check_empty(dec.finalize_with_tag(tag)) + else: + # _check_block_size requires data to be a full block so there + # should be no output from finalize + _check_empty(dec.finalize()) + else: + # load secret data + edata, data = _get_sshstr(data) + _check_empty(data) + blklen = 8 + _check_block_size(edata, blklen) + ck1, edata = _get_u32(edata) + ck2, edata = _get_u32(edata) + if ck1 != ck2: + raise ValueError("Corrupt data: broken checksum") + + # load per-key struct + key_type, edata = _get_sshstr(edata) + if key_type != pub_key_type: + raise ValueError("Corrupt data: key type mismatch") + private_key, edata = kformat.load_private(edata, pubfields) + # We don't use the comment + _, edata = _get_sshstr(edata) + + # yes, SSH does padding check *after* all other parsing is done. + # need to follow as it writes zero-byte padding too. + if edata != _PADDING[: len(edata)]: + raise ValueError("Corrupt data: invalid padding") + + if isinstance(private_key, dsa.DSAPrivateKey): + warnings.warn( + "SSH DSA keys are deprecated and will be removed in a future " + "release.", + utils.DeprecatedIn40, + stacklevel=2, + ) + + return private_key + + +def _serialize_ssh_private_key( + private_key: SSHPrivateKeyTypes, + password: bytes, + encryption_algorithm: KeySerializationEncryption, +) -> bytes: + """Serialize private key with OpenSSH custom encoding.""" + utils._check_bytes("password", password) + if isinstance(private_key, dsa.DSAPrivateKey): + warnings.warn( + "SSH DSA key support is deprecated and will be " + "removed in a future release", + utils.DeprecatedIn40, + stacklevel=4, + ) + + key_type = _get_ssh_key_type(private_key) + kformat = _lookup_kformat(key_type) + + # setup parameters + f_kdfoptions = _FragList() + if password: + ciphername = _DEFAULT_CIPHER + blklen = _SSH_CIPHERS[ciphername].block_len + kdfname = _BCRYPT + rounds = _DEFAULT_ROUNDS + if ( + isinstance(encryption_algorithm, _KeySerializationEncryption) + and encryption_algorithm._kdf_rounds is not None + ): + rounds = encryption_algorithm._kdf_rounds + salt = os.urandom(16) + f_kdfoptions.put_sshstr(salt) + f_kdfoptions.put_u32(rounds) + ciph = _init_cipher(ciphername, password, salt, rounds) + else: + ciphername = kdfname = _NONE + blklen = 8 + ciph = None + nkeys = 1 + checkval = os.urandom(4) + comment = b"" + + # encode public and private parts together + f_public_key = _FragList() + f_public_key.put_sshstr(key_type) + kformat.encode_public(private_key.public_key(), f_public_key) + + f_secrets = _FragList([checkval, checkval]) + f_secrets.put_sshstr(key_type) + kformat.encode_private(private_key, f_secrets) + f_secrets.put_sshstr(comment) + f_secrets.put_raw(_PADDING[: blklen - (f_secrets.size() % blklen)]) + + # top-level structure + f_main = _FragList() + f_main.put_raw(_SK_MAGIC) + f_main.put_sshstr(ciphername) + f_main.put_sshstr(kdfname) + f_main.put_sshstr(f_kdfoptions) + f_main.put_u32(nkeys) + f_main.put_sshstr(f_public_key) + f_main.put_sshstr(f_secrets) + + # copy result info bytearray + slen = f_secrets.size() + mlen = f_main.size() + buf = memoryview(bytearray(mlen + blklen)) + f_main.render(buf) + ofs = mlen - slen + + # encrypt in-place + if ciph is not None: + ciph.encryptor().update_into(buf[ofs:mlen], buf[ofs:]) + + return _ssh_pem_encode(buf[:mlen]) + + +SSHPublicKeyTypes = typing.Union[ + ec.EllipticCurvePublicKey, + rsa.RSAPublicKey, + dsa.DSAPublicKey, + ed25519.Ed25519PublicKey, +] + +SSHCertPublicKeyTypes = typing.Union[ + ec.EllipticCurvePublicKey, + rsa.RSAPublicKey, + ed25519.Ed25519PublicKey, +] + + +class SSHCertificateType(enum.Enum): + USER = 1 + HOST = 2 + + +class SSHCertificate: + def __init__( + self, + _nonce: memoryview, + _public_key: SSHPublicKeyTypes, + _serial: int, + _cctype: int, + _key_id: memoryview, + _valid_principals: list[bytes], + _valid_after: int, + _valid_before: int, + _critical_options: dict[bytes, bytes], + _extensions: dict[bytes, bytes], + _sig_type: memoryview, + _sig_key: memoryview, + _inner_sig_type: memoryview, + _signature: memoryview, + _tbs_cert_body: memoryview, + _cert_key_type: bytes, + _cert_body: memoryview, + ): + self._nonce = _nonce + self._public_key = _public_key + self._serial = _serial + try: + self._type = SSHCertificateType(_cctype) + except ValueError: + raise ValueError("Invalid certificate type") + self._key_id = _key_id + self._valid_principals = _valid_principals + self._valid_after = _valid_after + self._valid_before = _valid_before + self._critical_options = _critical_options + self._extensions = _extensions + self._sig_type = _sig_type + self._sig_key = _sig_key + self._inner_sig_type = _inner_sig_type + self._signature = _signature + self._cert_key_type = _cert_key_type + self._cert_body = _cert_body + self._tbs_cert_body = _tbs_cert_body + + @property + def nonce(self) -> bytes: + return bytes(self._nonce) + + def public_key(self) -> SSHCertPublicKeyTypes: + # make mypy happy until we remove DSA support entirely and + # the underlying union won't have a disallowed type + return typing.cast(SSHCertPublicKeyTypes, self._public_key) + + @property + def serial(self) -> int: + return self._serial + + @property + def type(self) -> SSHCertificateType: + return self._type + + @property + def key_id(self) -> bytes: + return bytes(self._key_id) + + @property + def valid_principals(self) -> list[bytes]: + return self._valid_principals + + @property + def valid_before(self) -> int: + return self._valid_before + + @property + def valid_after(self) -> int: + return self._valid_after + + @property + def critical_options(self) -> dict[bytes, bytes]: + return self._critical_options + + @property + def extensions(self) -> dict[bytes, bytes]: + return self._extensions + + def signature_key(self) -> SSHCertPublicKeyTypes: + sigformat = _lookup_kformat(self._sig_type) + signature_key, sigkey_rest = sigformat.load_public(self._sig_key) + _check_empty(sigkey_rest) + return signature_key + + def public_bytes(self) -> bytes: + return ( + bytes(self._cert_key_type) + + b" " + + binascii.b2a_base64(bytes(self._cert_body), newline=False) + ) + + def verify_cert_signature(self) -> None: + signature_key = self.signature_key() + if isinstance(signature_key, ed25519.Ed25519PublicKey): + signature_key.verify( + bytes(self._signature), bytes(self._tbs_cert_body) + ) + elif isinstance(signature_key, ec.EllipticCurvePublicKey): + # The signature is encoded as a pair of big-endian integers + r, data = _get_mpint(self._signature) + s, data = _get_mpint(data) + _check_empty(data) + computed_sig = asym_utils.encode_dss_signature(r, s) + hash_alg = _get_ec_hash_alg(signature_key.curve) + signature_key.verify( + computed_sig, bytes(self._tbs_cert_body), ec.ECDSA(hash_alg) + ) + else: + assert isinstance(signature_key, rsa.RSAPublicKey) + if self._inner_sig_type == _SSH_RSA: + hash_alg = hashes.SHA1() + elif self._inner_sig_type == _SSH_RSA_SHA256: + hash_alg = hashes.SHA256() + else: + assert self._inner_sig_type == _SSH_RSA_SHA512 + hash_alg = hashes.SHA512() + signature_key.verify( + bytes(self._signature), + bytes(self._tbs_cert_body), + padding.PKCS1v15(), + hash_alg, + ) + + +def _get_ec_hash_alg(curve: ec.EllipticCurve) -> hashes.HashAlgorithm: + if isinstance(curve, ec.SECP256R1): + return hashes.SHA256() + elif isinstance(curve, ec.SECP384R1): + return hashes.SHA384() + else: + assert isinstance(curve, ec.SECP521R1) + return hashes.SHA512() + + +def _load_ssh_public_identity( + data: bytes, + _legacy_dsa_allowed=False, +) -> SSHCertificate | SSHPublicKeyTypes: + utils._check_byteslike("data", data) + + m = _SSH_PUBKEY_RC.match(data) + if not m: + raise ValueError("Invalid line format") + key_type = orig_key_type = m.group(1) + key_body = m.group(2) + with_cert = False + if key_type.endswith(_CERT_SUFFIX): + with_cert = True + key_type = key_type[: -len(_CERT_SUFFIX)] + if key_type == _SSH_DSA and not _legacy_dsa_allowed: + raise UnsupportedAlgorithm( + "DSA keys aren't supported in SSH certificates" + ) + kformat = _lookup_kformat(key_type) + + try: + rest = memoryview(binascii.a2b_base64(key_body)) + except (TypeError, binascii.Error): + raise ValueError("Invalid format") + + if with_cert: + cert_body = rest + inner_key_type, rest = _get_sshstr(rest) + if inner_key_type != orig_key_type: + raise ValueError("Invalid key format") + if with_cert: + nonce, rest = _get_sshstr(rest) + public_key, rest = kformat.load_public(rest) + if with_cert: + serial, rest = _get_u64(rest) + cctype, rest = _get_u32(rest) + key_id, rest = _get_sshstr(rest) + principals, rest = _get_sshstr(rest) + valid_principals = [] + while principals: + principal, principals = _get_sshstr(principals) + valid_principals.append(bytes(principal)) + valid_after, rest = _get_u64(rest) + valid_before, rest = _get_u64(rest) + crit_options, rest = _get_sshstr(rest) + critical_options = _parse_exts_opts(crit_options) + exts, rest = _get_sshstr(rest) + extensions = _parse_exts_opts(exts) + # Get the reserved field, which is unused. + _, rest = _get_sshstr(rest) + sig_key_raw, rest = _get_sshstr(rest) + sig_type, sig_key = _get_sshstr(sig_key_raw) + if sig_type == _SSH_DSA and not _legacy_dsa_allowed: + raise UnsupportedAlgorithm( + "DSA signatures aren't supported in SSH certificates" + ) + # Get the entire cert body and subtract the signature + tbs_cert_body = cert_body[: -len(rest)] + signature_raw, rest = _get_sshstr(rest) + _check_empty(rest) + inner_sig_type, sig_rest = _get_sshstr(signature_raw) + # RSA certs can have multiple algorithm types + if ( + sig_type == _SSH_RSA + and inner_sig_type + not in [_SSH_RSA_SHA256, _SSH_RSA_SHA512, _SSH_RSA] + ) or (sig_type != _SSH_RSA and inner_sig_type != sig_type): + raise ValueError("Signature key type does not match") + signature, sig_rest = _get_sshstr(sig_rest) + _check_empty(sig_rest) + return SSHCertificate( + nonce, + public_key, + serial, + cctype, + key_id, + valid_principals, + valid_after, + valid_before, + critical_options, + extensions, + sig_type, + sig_key, + inner_sig_type, + signature, + tbs_cert_body, + orig_key_type, + cert_body, + ) + else: + _check_empty(rest) + return public_key + + +def load_ssh_public_identity( + data: bytes, +) -> SSHCertificate | SSHPublicKeyTypes: + return _load_ssh_public_identity(data) + + +def _parse_exts_opts(exts_opts: memoryview) -> dict[bytes, bytes]: + result: dict[bytes, bytes] = {} + last_name = None + while exts_opts: + name, exts_opts = _get_sshstr(exts_opts) + bname: bytes = bytes(name) + if bname in result: + raise ValueError("Duplicate name") + if last_name is not None and bname < last_name: + raise ValueError("Fields not lexically sorted") + value, exts_opts = _get_sshstr(exts_opts) + if len(value) > 0: + value, extra = _get_sshstr(value) + if len(extra) > 0: + raise ValueError("Unexpected extra data after value") + result[bname] = bytes(value) + last_name = bname + return result + + +def load_ssh_public_key( + data: bytes, backend: typing.Any = None +) -> SSHPublicKeyTypes: + cert_or_key = _load_ssh_public_identity(data, _legacy_dsa_allowed=True) + public_key: SSHPublicKeyTypes + if isinstance(cert_or_key, SSHCertificate): + public_key = cert_or_key.public_key() + else: + public_key = cert_or_key + + if isinstance(public_key, dsa.DSAPublicKey): + warnings.warn( + "SSH DSA keys are deprecated and will be removed in a future " + "release.", + utils.DeprecatedIn40, + stacklevel=2, + ) + return public_key + + +def serialize_ssh_public_key(public_key: SSHPublicKeyTypes) -> bytes: + """One-line public key format for OpenSSH""" + if isinstance(public_key, dsa.DSAPublicKey): + warnings.warn( + "SSH DSA key support is deprecated and will be " + "removed in a future release", + utils.DeprecatedIn40, + stacklevel=4, + ) + key_type = _get_ssh_key_type(public_key) + kformat = _lookup_kformat(key_type) + + f_pub = _FragList() + f_pub.put_sshstr(key_type) + kformat.encode_public(public_key, f_pub) + + pub = binascii.b2a_base64(f_pub.tobytes()).strip() + return b"".join([key_type, b" ", pub]) + + +SSHCertPrivateKeyTypes = typing.Union[ + ec.EllipticCurvePrivateKey, + rsa.RSAPrivateKey, + ed25519.Ed25519PrivateKey, +] + + +# This is an undocumented limit enforced in the openssh codebase for sshd and +# ssh-keygen, but it is undefined in the ssh certificates spec. +_SSHKEY_CERT_MAX_PRINCIPALS = 256 + + +class SSHCertificateBuilder: + def __init__( + self, + _public_key: SSHCertPublicKeyTypes | None = None, + _serial: int | None = None, + _type: SSHCertificateType | None = None, + _key_id: bytes | None = None, + _valid_principals: list[bytes] = [], + _valid_for_all_principals: bool = False, + _valid_before: int | None = None, + _valid_after: int | None = None, + _critical_options: list[tuple[bytes, bytes]] = [], + _extensions: list[tuple[bytes, bytes]] = [], + ): + self._public_key = _public_key + self._serial = _serial + self._type = _type + self._key_id = _key_id + self._valid_principals = _valid_principals + self._valid_for_all_principals = _valid_for_all_principals + self._valid_before = _valid_before + self._valid_after = _valid_after + self._critical_options = _critical_options + self._extensions = _extensions + + def public_key( + self, public_key: SSHCertPublicKeyTypes + ) -> SSHCertificateBuilder: + if not isinstance( + public_key, + ( + ec.EllipticCurvePublicKey, + rsa.RSAPublicKey, + ed25519.Ed25519PublicKey, + ), + ): + raise TypeError("Unsupported key type") + if self._public_key is not None: + raise ValueError("public_key already set") + + return SSHCertificateBuilder( + _public_key=public_key, + _serial=self._serial, + _type=self._type, + _key_id=self._key_id, + _valid_principals=self._valid_principals, + _valid_for_all_principals=self._valid_for_all_principals, + _valid_before=self._valid_before, + _valid_after=self._valid_after, + _critical_options=self._critical_options, + _extensions=self._extensions, + ) + + def serial(self, serial: int) -> SSHCertificateBuilder: + if not isinstance(serial, int): + raise TypeError("serial must be an integer") + if not 0 <= serial < 2**64: + raise ValueError("serial must be between 0 and 2**64") + if self._serial is not None: + raise ValueError("serial already set") + + return SSHCertificateBuilder( + _public_key=self._public_key, + _serial=serial, + _type=self._type, + _key_id=self._key_id, + _valid_principals=self._valid_principals, + _valid_for_all_principals=self._valid_for_all_principals, + _valid_before=self._valid_before, + _valid_after=self._valid_after, + _critical_options=self._critical_options, + _extensions=self._extensions, + ) + + def type(self, type: SSHCertificateType) -> SSHCertificateBuilder: + if not isinstance(type, SSHCertificateType): + raise TypeError("type must be an SSHCertificateType") + if self._type is not None: + raise ValueError("type already set") + + return SSHCertificateBuilder( + _public_key=self._public_key, + _serial=self._serial, + _type=type, + _key_id=self._key_id, + _valid_principals=self._valid_principals, + _valid_for_all_principals=self._valid_for_all_principals, + _valid_before=self._valid_before, + _valid_after=self._valid_after, + _critical_options=self._critical_options, + _extensions=self._extensions, + ) + + def key_id(self, key_id: bytes) -> SSHCertificateBuilder: + if not isinstance(key_id, bytes): + raise TypeError("key_id must be bytes") + if self._key_id is not None: + raise ValueError("key_id already set") + + return SSHCertificateBuilder( + _public_key=self._public_key, + _serial=self._serial, + _type=self._type, + _key_id=key_id, + _valid_principals=self._valid_principals, + _valid_for_all_principals=self._valid_for_all_principals, + _valid_before=self._valid_before, + _valid_after=self._valid_after, + _critical_options=self._critical_options, + _extensions=self._extensions, + ) + + def valid_principals( + self, valid_principals: list[bytes] + ) -> SSHCertificateBuilder: + if self._valid_for_all_principals: + raise ValueError( + "Principals can't be set because the cert is valid " + "for all principals" + ) + if ( + not all(isinstance(x, bytes) for x in valid_principals) + or not valid_principals + ): + raise TypeError( + "principals must be a list of bytes and can't be empty" + ) + if self._valid_principals: + raise ValueError("valid_principals already set") + + if len(valid_principals) > _SSHKEY_CERT_MAX_PRINCIPALS: + raise ValueError( + "Reached or exceeded the maximum number of valid_principals" + ) + + return SSHCertificateBuilder( + _public_key=self._public_key, + _serial=self._serial, + _type=self._type, + _key_id=self._key_id, + _valid_principals=valid_principals, + _valid_for_all_principals=self._valid_for_all_principals, + _valid_before=self._valid_before, + _valid_after=self._valid_after, + _critical_options=self._critical_options, + _extensions=self._extensions, + ) + + def valid_for_all_principals(self): + if self._valid_principals: + raise ValueError( + "valid_principals already set, can't set " + "valid_for_all_principals" + ) + if self._valid_for_all_principals: + raise ValueError("valid_for_all_principals already set") + + return SSHCertificateBuilder( + _public_key=self._public_key, + _serial=self._serial, + _type=self._type, + _key_id=self._key_id, + _valid_principals=self._valid_principals, + _valid_for_all_principals=True, + _valid_before=self._valid_before, + _valid_after=self._valid_after, + _critical_options=self._critical_options, + _extensions=self._extensions, + ) + + def valid_before(self, valid_before: int | float) -> SSHCertificateBuilder: + if not isinstance(valid_before, (int, float)): + raise TypeError("valid_before must be an int or float") + valid_before = int(valid_before) + if valid_before < 0 or valid_before >= 2**64: + raise ValueError("valid_before must [0, 2**64)") + if self._valid_before is not None: + raise ValueError("valid_before already set") + + return SSHCertificateBuilder( + _public_key=self._public_key, + _serial=self._serial, + _type=self._type, + _key_id=self._key_id, + _valid_principals=self._valid_principals, + _valid_for_all_principals=self._valid_for_all_principals, + _valid_before=valid_before, + _valid_after=self._valid_after, + _critical_options=self._critical_options, + _extensions=self._extensions, + ) + + def valid_after(self, valid_after: int | float) -> SSHCertificateBuilder: + if not isinstance(valid_after, (int, float)): + raise TypeError("valid_after must be an int or float") + valid_after = int(valid_after) + if valid_after < 0 or valid_after >= 2**64: + raise ValueError("valid_after must [0, 2**64)") + if self._valid_after is not None: + raise ValueError("valid_after already set") + + return SSHCertificateBuilder( + _public_key=self._public_key, + _serial=self._serial, + _type=self._type, + _key_id=self._key_id, + _valid_principals=self._valid_principals, + _valid_for_all_principals=self._valid_for_all_principals, + _valid_before=self._valid_before, + _valid_after=valid_after, + _critical_options=self._critical_options, + _extensions=self._extensions, + ) + + def add_critical_option( + self, name: bytes, value: bytes + ) -> SSHCertificateBuilder: + if not isinstance(name, bytes) or not isinstance(value, bytes): + raise TypeError("name and value must be bytes") + # This is O(n**2) + if name in [name for name, _ in self._critical_options]: + raise ValueError("Duplicate critical option name") + + return SSHCertificateBuilder( + _public_key=self._public_key, + _serial=self._serial, + _type=self._type, + _key_id=self._key_id, + _valid_principals=self._valid_principals, + _valid_for_all_principals=self._valid_for_all_principals, + _valid_before=self._valid_before, + _valid_after=self._valid_after, + _critical_options=[*self._critical_options, (name, value)], + _extensions=self._extensions, + ) + + def add_extension( + self, name: bytes, value: bytes + ) -> SSHCertificateBuilder: + if not isinstance(name, bytes) or not isinstance(value, bytes): + raise TypeError("name and value must be bytes") + # This is O(n**2) + if name in [name for name, _ in self._extensions]: + raise ValueError("Duplicate extension name") + + return SSHCertificateBuilder( + _public_key=self._public_key, + _serial=self._serial, + _type=self._type, + _key_id=self._key_id, + _valid_principals=self._valid_principals, + _valid_for_all_principals=self._valid_for_all_principals, + _valid_before=self._valid_before, + _valid_after=self._valid_after, + _critical_options=self._critical_options, + _extensions=[*self._extensions, (name, value)], + ) + + def sign(self, private_key: SSHCertPrivateKeyTypes) -> SSHCertificate: + if not isinstance( + private_key, + ( + ec.EllipticCurvePrivateKey, + rsa.RSAPrivateKey, + ed25519.Ed25519PrivateKey, + ), + ): + raise TypeError("Unsupported private key type") + + if self._public_key is None: + raise ValueError("public_key must be set") + + # Not required + serial = 0 if self._serial is None else self._serial + + if self._type is None: + raise ValueError("type must be set") + + # Not required + key_id = b"" if self._key_id is None else self._key_id + + # A zero length list is valid, but means the certificate + # is valid for any principal of the specified type. We require + # the user to explicitly set valid_for_all_principals to get + # that behavior. + if not self._valid_principals and not self._valid_for_all_principals: + raise ValueError( + "valid_principals must be set if valid_for_all_principals " + "is False" + ) + + if self._valid_before is None: + raise ValueError("valid_before must be set") + + if self._valid_after is None: + raise ValueError("valid_after must be set") + + if self._valid_after > self._valid_before: + raise ValueError("valid_after must be earlier than valid_before") + + # lexically sort our byte strings + self._critical_options.sort(key=lambda x: x[0]) + self._extensions.sort(key=lambda x: x[0]) + + key_type = _get_ssh_key_type(self._public_key) + cert_prefix = key_type + _CERT_SUFFIX + + # Marshal the bytes to be signed + nonce = os.urandom(32) + kformat = _lookup_kformat(key_type) + f = _FragList() + f.put_sshstr(cert_prefix) + f.put_sshstr(nonce) + kformat.encode_public(self._public_key, f) + f.put_u64(serial) + f.put_u32(self._type.value) + f.put_sshstr(key_id) + fprincipals = _FragList() + for p in self._valid_principals: + fprincipals.put_sshstr(p) + f.put_sshstr(fprincipals.tobytes()) + f.put_u64(self._valid_after) + f.put_u64(self._valid_before) + fcrit = _FragList() + for name, value in self._critical_options: + fcrit.put_sshstr(name) + if len(value) > 0: + foptval = _FragList() + foptval.put_sshstr(value) + fcrit.put_sshstr(foptval.tobytes()) + else: + fcrit.put_sshstr(value) + f.put_sshstr(fcrit.tobytes()) + fext = _FragList() + for name, value in self._extensions: + fext.put_sshstr(name) + if len(value) > 0: + fextval = _FragList() + fextval.put_sshstr(value) + fext.put_sshstr(fextval.tobytes()) + else: + fext.put_sshstr(value) + f.put_sshstr(fext.tobytes()) + f.put_sshstr(b"") # RESERVED FIELD + # encode CA public key + ca_type = _get_ssh_key_type(private_key) + caformat = _lookup_kformat(ca_type) + caf = _FragList() + caf.put_sshstr(ca_type) + caformat.encode_public(private_key.public_key(), caf) + f.put_sshstr(caf.tobytes()) + # Sigs according to the rules defined for the CA's public key + # (RFC4253 section 6.6 for ssh-rsa, RFC5656 for ECDSA, + # and RFC8032 for Ed25519). + if isinstance(private_key, ed25519.Ed25519PrivateKey): + signature = private_key.sign(f.tobytes()) + fsig = _FragList() + fsig.put_sshstr(ca_type) + fsig.put_sshstr(signature) + f.put_sshstr(fsig.tobytes()) + elif isinstance(private_key, ec.EllipticCurvePrivateKey): + hash_alg = _get_ec_hash_alg(private_key.curve) + signature = private_key.sign(f.tobytes(), ec.ECDSA(hash_alg)) + r, s = asym_utils.decode_dss_signature(signature) + fsig = _FragList() + fsig.put_sshstr(ca_type) + fsigblob = _FragList() + fsigblob.put_mpint(r) + fsigblob.put_mpint(s) + fsig.put_sshstr(fsigblob.tobytes()) + f.put_sshstr(fsig.tobytes()) + + else: + assert isinstance(private_key, rsa.RSAPrivateKey) + # Just like Golang, we're going to use SHA512 for RSA + # https://cs.opensource.google/go/x/crypto/+/refs/tags/ + # v0.4.0:ssh/certs.go;l=445 + # RFC 8332 defines SHA256 and 512 as options + fsig = _FragList() + fsig.put_sshstr(_SSH_RSA_SHA512) + signature = private_key.sign( + f.tobytes(), padding.PKCS1v15(), hashes.SHA512() + ) + fsig.put_sshstr(signature) + f.put_sshstr(fsig.tobytes()) + + cert_data = binascii.b2a_base64(f.tobytes()).strip() + # load_ssh_public_identity returns a union, but this is + # guaranteed to be an SSHCertificate, so we cast to make + # mypy happy. + return typing.cast( + SSHCertificate, + load_ssh_public_identity(b"".join([cert_prefix, b" ", cert_data])), + ) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__init__.py new file mode 100644 index 0000000..c1af423 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__init__.py @@ -0,0 +1,9 @@ +# 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 annotations + + +class InvalidToken(Exception): + pass diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e54b8f1cf1068da2369e1d4947c37a92d036e0e7 GIT binary patch literal 530 zcmZutyH3L}6unLgO3UjXVCq0E#Ds*HK!|}ZFm^3fm9ULc6CI&VZHvRyF_ysz}n68WZ)ryH|KoYTusolW62#bU?_$J^$-FN z_JMiVz5z^JKD+Rw95`HjD3XAxCLnK1y+CW@jOD!G5m$wt%-a6 J_$O3-_X$!9g{%Mo literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f50fae3428bb92bfc5ca323284d5daebf20ed179 GIT binary patch literal 5638 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 str: + parameters = [ + ("digits", hotp._length), + ("secret", base64.b32encode(hotp._key)), + ("algorithm", hotp._algorithm.name.upper()), + ] + + if issuer is not None: + parameters.append(("issuer", issuer)) + + parameters.extend(extra_parameters) + + label = ( + f"{quote(issuer)}:{quote(account_name)}" + if issuer + else quote(account_name) + ) + return f"otpauth://{type_name}/{label}?{urlencode(parameters)}" + + +class HOTP: + def __init__( + self, + key: bytes, + length: int, + algorithm: HOTPHashTypes, + backend: typing.Any = None, + enforce_key_length: bool = True, + ) -> None: + if len(key) < 16 and enforce_key_length is True: + raise ValueError("Key length has to be at least 128 bits.") + + if not isinstance(length, int): + raise TypeError("Length parameter must be an integer type.") + + if length < 6 or length > 8: + raise ValueError("Length of HOTP has to be between 6 and 8.") + + if not isinstance(algorithm, (SHA1, SHA256, SHA512)): + raise TypeError("Algorithm must be SHA1, SHA256 or SHA512.") + + self._key = key + self._length = length + self._algorithm = algorithm + + def generate(self, counter: int) -> bytes: + if not isinstance(counter, int): + raise TypeError("Counter parameter must be an integer type.") + + truncated_value = self._dynamic_truncate(counter) + hotp = truncated_value % (10**self._length) + return "{0:0{1}}".format(hotp, self._length).encode() + + def verify(self, hotp: bytes, counter: int) -> None: + if not constant_time.bytes_eq(self.generate(counter), hotp): + raise InvalidToken("Supplied HOTP value does not match.") + + def _dynamic_truncate(self, counter: int) -> int: + ctx = hmac.HMAC(self._key, self._algorithm) + + try: + ctx.update(counter.to_bytes(length=8, byteorder="big")) + except OverflowError: + raise ValueError(f"Counter must be between 0 and {2 ** 64 - 1}.") + + hmac_value = ctx.finalize() + + offset = hmac_value[len(hmac_value) - 1] & 0b1111 + p = hmac_value[offset : offset + 4] + return int.from_bytes(p, byteorder="big") & 0x7FFFFFFF + + def get_provisioning_uri( + self, account_name: str, counter: int, issuer: str | None + ) -> str: + return _generate_uri( + self, "hotp", account_name, issuer, [("counter", int(counter))] + ) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/totp.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/totp.py new file mode 100644 index 0000000..b9ed734 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/twofactor/totp.py @@ -0,0 +1,55 @@ +# 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 annotations + +import typing + +from cryptography.hazmat.primitives import constant_time +from cryptography.hazmat.primitives.twofactor import InvalidToken +from cryptography.hazmat.primitives.twofactor.hotp import ( + HOTP, + HOTPHashTypes, + _generate_uri, +) + + +class TOTP: + def __init__( + self, + key: bytes, + length: int, + algorithm: HOTPHashTypes, + time_step: int, + backend: typing.Any = None, + enforce_key_length: bool = True, + ): + self._time_step = time_step + self._hotp = HOTP( + key, length, algorithm, enforce_key_length=enforce_key_length + ) + + def generate(self, time: int | float) -> bytes: + if not isinstance(time, (int, float)): + raise TypeError( + "Time parameter must be an integer type or float type." + ) + + counter = int(time / self._time_step) + return self._hotp.generate(counter) + + def verify(self, totp: bytes, time: int) -> None: + if not constant_time.bytes_eq(self.generate(time), totp): + raise InvalidToken("Supplied TOTP value does not match.") + + def get_provisioning_uri( + self, account_name: str, issuer: str | None + ) -> str: + return _generate_uri( + self._hotp, + "totp", + account_name, + issuer, + [("period", int(self._time_step))], + ) diff --git a/venv/lib/python3.11/site-packages/cryptography/py.typed b/venv/lib/python3.11/site-packages/cryptography/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/cryptography/utils.py b/venv/lib/python3.11/site-packages/cryptography/utils.py new file mode 100644 index 0000000..706d0ae --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/utils.py @@ -0,0 +1,127 @@ +# 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 annotations + +import enum +import sys +import types +import typing +import warnings + + +# We use a UserWarning subclass, instead of DeprecationWarning, because CPython +# decided deprecation warnings should be invisible by default. +class CryptographyDeprecationWarning(UserWarning): + pass + + +# Several APIs were deprecated with no specific end-of-life date because of the +# ubiquity of their use. They should not be removed until we agree on when that +# cycle ends. +DeprecatedIn36 = CryptographyDeprecationWarning +DeprecatedIn37 = CryptographyDeprecationWarning +DeprecatedIn40 = CryptographyDeprecationWarning +DeprecatedIn41 = CryptographyDeprecationWarning +DeprecatedIn42 = CryptographyDeprecationWarning +DeprecatedIn43 = CryptographyDeprecationWarning + + +def _check_bytes(name: str, value: bytes) -> None: + if not isinstance(value, bytes): + raise TypeError(f"{name} must be bytes") + + +def _check_byteslike(name: str, value: bytes) -> None: + try: + memoryview(value) + except TypeError: + raise TypeError(f"{name} must be bytes-like") + + +def int_to_bytes(integer: int, length: int | None = None) -> bytes: + if length == 0: + raise ValueError("length argument can't be 0") + return integer.to_bytes( + length or (integer.bit_length() + 7) // 8 or 1, "big" + ) + + +class InterfaceNotImplemented(Exception): + pass + + +class _DeprecatedValue: + def __init__(self, value: object, message: str, warning_class): + self.value = value + self.message = message + self.warning_class = warning_class + + +class _ModuleWithDeprecations(types.ModuleType): + def __init__(self, module: types.ModuleType): + super().__init__(module.__name__) + self.__dict__["_module"] = module + + def __getattr__(self, attr: str) -> object: + obj = getattr(self._module, attr) + if isinstance(obj, _DeprecatedValue): + warnings.warn(obj.message, obj.warning_class, stacklevel=2) + obj = obj.value + return obj + + def __setattr__(self, attr: str, value: object) -> None: + setattr(self._module, attr, value) + + def __delattr__(self, attr: str) -> None: + obj = getattr(self._module, attr) + if isinstance(obj, _DeprecatedValue): + warnings.warn(obj.message, obj.warning_class, stacklevel=2) + + delattr(self._module, attr) + + def __dir__(self) -> typing.Sequence[str]: + return ["_module", *dir(self._module)] + + +def deprecated( + value: object, + module_name: str, + message: str, + warning_class: type[Warning], + name: str | None = None, +) -> _DeprecatedValue: + module = sys.modules[module_name] + if not isinstance(module, _ModuleWithDeprecations): + sys.modules[module_name] = module = _ModuleWithDeprecations(module) + dv = _DeprecatedValue(value, message, warning_class) + # Maintain backwards compatibility with `name is None` for pyOpenSSL. + if name is not None: + setattr(module, name, dv) + return dv + + +def cached_property(func: typing.Callable) -> property: + cached_name = f"_cached_{func}" + sentinel = object() + + def inner(instance: object): + cache = getattr(instance, cached_name, sentinel) + if cache is not sentinel: + return cache + result = func(instance) + setattr(instance, cached_name, result) + return result + + return property(inner) + + +# Python 3.10 changed representation of enums. We use well-defined object +# representation and string representation from Python 3.9. +class Enum(enum.Enum): + def __repr__(self) -> str: + return f"<{self.__class__.__name__}.{self._name_}: {self._value_!r}>" + + def __str__(self) -> str: + return f"{self.__class__.__name__}.{self._name_}" diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/__init__.py b/venv/lib/python3.11/site-packages/cryptography/x509/__init__.py new file mode 100644 index 0000000..8a89d67 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/x509/__init__.py @@ -0,0 +1,267 @@ +# 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 annotations + +from cryptography.x509 import certificate_transparency, verification +from cryptography.x509.base import ( + Attribute, + AttributeNotFound, + Attributes, + Certificate, + CertificateBuilder, + CertificateRevocationList, + CertificateRevocationListBuilder, + CertificateSigningRequest, + CertificateSigningRequestBuilder, + InvalidVersion, + RevokedCertificate, + RevokedCertificateBuilder, + Version, + load_der_x509_certificate, + load_der_x509_crl, + load_der_x509_csr, + load_pem_x509_certificate, + load_pem_x509_certificates, + load_pem_x509_crl, + load_pem_x509_csr, + random_serial_number, +) +from cryptography.x509.extensions import ( + AccessDescription, + Admission, + Admissions, + AuthorityInformationAccess, + AuthorityKeyIdentifier, + BasicConstraints, + CertificateIssuer, + CertificatePolicies, + CRLDistributionPoints, + CRLNumber, + CRLReason, + DeltaCRLIndicator, + DistributionPoint, + DuplicateExtension, + ExtendedKeyUsage, + Extension, + ExtensionNotFound, + Extensions, + ExtensionType, + FreshestCRL, + GeneralNames, + InhibitAnyPolicy, + InvalidityDate, + IssuerAlternativeName, + IssuingDistributionPoint, + KeyUsage, + MSCertificateTemplate, + NameConstraints, + NamingAuthority, + NoticeReference, + OCSPAcceptableResponses, + OCSPNoCheck, + OCSPNonce, + PolicyConstraints, + PolicyInformation, + PrecertificateSignedCertificateTimestamps, + PrecertPoison, + ProfessionInfo, + ReasonFlags, + SignedCertificateTimestamps, + SubjectAlternativeName, + SubjectInformationAccess, + SubjectKeyIdentifier, + TLSFeature, + TLSFeatureType, + UnrecognizedExtension, + UserNotice, +) +from cryptography.x509.general_name import ( + DirectoryName, + DNSName, + GeneralName, + IPAddress, + OtherName, + RegisteredID, + RFC822Name, + UniformResourceIdentifier, + UnsupportedGeneralNameType, +) +from cryptography.x509.name import ( + Name, + NameAttribute, + RelativeDistinguishedName, +) +from cryptography.x509.oid import ( + AuthorityInformationAccessOID, + CertificatePoliciesOID, + CRLEntryExtensionOID, + ExtendedKeyUsageOID, + ExtensionOID, + NameOID, + ObjectIdentifier, + PublicKeyAlgorithmOID, + SignatureAlgorithmOID, +) + +OID_AUTHORITY_INFORMATION_ACCESS = ExtensionOID.AUTHORITY_INFORMATION_ACCESS +OID_AUTHORITY_KEY_IDENTIFIER = ExtensionOID.AUTHORITY_KEY_IDENTIFIER +OID_BASIC_CONSTRAINTS = ExtensionOID.BASIC_CONSTRAINTS +OID_CERTIFICATE_POLICIES = ExtensionOID.CERTIFICATE_POLICIES +OID_CRL_DISTRIBUTION_POINTS = ExtensionOID.CRL_DISTRIBUTION_POINTS +OID_EXTENDED_KEY_USAGE = ExtensionOID.EXTENDED_KEY_USAGE +OID_FRESHEST_CRL = ExtensionOID.FRESHEST_CRL +OID_INHIBIT_ANY_POLICY = ExtensionOID.INHIBIT_ANY_POLICY +OID_ISSUER_ALTERNATIVE_NAME = ExtensionOID.ISSUER_ALTERNATIVE_NAME +OID_KEY_USAGE = ExtensionOID.KEY_USAGE +OID_NAME_CONSTRAINTS = ExtensionOID.NAME_CONSTRAINTS +OID_OCSP_NO_CHECK = ExtensionOID.OCSP_NO_CHECK +OID_POLICY_CONSTRAINTS = ExtensionOID.POLICY_CONSTRAINTS +OID_POLICY_MAPPINGS = ExtensionOID.POLICY_MAPPINGS +OID_SUBJECT_ALTERNATIVE_NAME = ExtensionOID.SUBJECT_ALTERNATIVE_NAME +OID_SUBJECT_DIRECTORY_ATTRIBUTES = ExtensionOID.SUBJECT_DIRECTORY_ATTRIBUTES +OID_SUBJECT_INFORMATION_ACCESS = ExtensionOID.SUBJECT_INFORMATION_ACCESS +OID_SUBJECT_KEY_IDENTIFIER = ExtensionOID.SUBJECT_KEY_IDENTIFIER + +OID_DSA_WITH_SHA1 = SignatureAlgorithmOID.DSA_WITH_SHA1 +OID_DSA_WITH_SHA224 = SignatureAlgorithmOID.DSA_WITH_SHA224 +OID_DSA_WITH_SHA256 = SignatureAlgorithmOID.DSA_WITH_SHA256 +OID_ECDSA_WITH_SHA1 = SignatureAlgorithmOID.ECDSA_WITH_SHA1 +OID_ECDSA_WITH_SHA224 = SignatureAlgorithmOID.ECDSA_WITH_SHA224 +OID_ECDSA_WITH_SHA256 = SignatureAlgorithmOID.ECDSA_WITH_SHA256 +OID_ECDSA_WITH_SHA384 = SignatureAlgorithmOID.ECDSA_WITH_SHA384 +OID_ECDSA_WITH_SHA512 = SignatureAlgorithmOID.ECDSA_WITH_SHA512 +OID_RSA_WITH_MD5 = SignatureAlgorithmOID.RSA_WITH_MD5 +OID_RSA_WITH_SHA1 = SignatureAlgorithmOID.RSA_WITH_SHA1 +OID_RSA_WITH_SHA224 = SignatureAlgorithmOID.RSA_WITH_SHA224 +OID_RSA_WITH_SHA256 = SignatureAlgorithmOID.RSA_WITH_SHA256 +OID_RSA_WITH_SHA384 = SignatureAlgorithmOID.RSA_WITH_SHA384 +OID_RSA_WITH_SHA512 = SignatureAlgorithmOID.RSA_WITH_SHA512 +OID_RSASSA_PSS = SignatureAlgorithmOID.RSASSA_PSS + +OID_COMMON_NAME = NameOID.COMMON_NAME +OID_COUNTRY_NAME = NameOID.COUNTRY_NAME +OID_DOMAIN_COMPONENT = NameOID.DOMAIN_COMPONENT +OID_DN_QUALIFIER = NameOID.DN_QUALIFIER +OID_EMAIL_ADDRESS = NameOID.EMAIL_ADDRESS +OID_GENERATION_QUALIFIER = NameOID.GENERATION_QUALIFIER +OID_GIVEN_NAME = NameOID.GIVEN_NAME +OID_LOCALITY_NAME = NameOID.LOCALITY_NAME +OID_ORGANIZATIONAL_UNIT_NAME = NameOID.ORGANIZATIONAL_UNIT_NAME +OID_ORGANIZATION_NAME = NameOID.ORGANIZATION_NAME +OID_PSEUDONYM = NameOID.PSEUDONYM +OID_SERIAL_NUMBER = NameOID.SERIAL_NUMBER +OID_STATE_OR_PROVINCE_NAME = NameOID.STATE_OR_PROVINCE_NAME +OID_SURNAME = NameOID.SURNAME +OID_TITLE = NameOID.TITLE + +OID_CLIENT_AUTH = ExtendedKeyUsageOID.CLIENT_AUTH +OID_CODE_SIGNING = ExtendedKeyUsageOID.CODE_SIGNING +OID_EMAIL_PROTECTION = ExtendedKeyUsageOID.EMAIL_PROTECTION +OID_OCSP_SIGNING = ExtendedKeyUsageOID.OCSP_SIGNING +OID_SERVER_AUTH = ExtendedKeyUsageOID.SERVER_AUTH +OID_TIME_STAMPING = ExtendedKeyUsageOID.TIME_STAMPING + +OID_ANY_POLICY = CertificatePoliciesOID.ANY_POLICY +OID_CPS_QUALIFIER = CertificatePoliciesOID.CPS_QUALIFIER +OID_CPS_USER_NOTICE = CertificatePoliciesOID.CPS_USER_NOTICE + +OID_CERTIFICATE_ISSUER = CRLEntryExtensionOID.CERTIFICATE_ISSUER +OID_CRL_REASON = CRLEntryExtensionOID.CRL_REASON +OID_INVALIDITY_DATE = CRLEntryExtensionOID.INVALIDITY_DATE + +OID_CA_ISSUERS = AuthorityInformationAccessOID.CA_ISSUERS +OID_OCSP = AuthorityInformationAccessOID.OCSP + +__all__ = [ + "OID_CA_ISSUERS", + "OID_OCSP", + "AccessDescription", + "Admission", + "Admissions", + "Attribute", + "AttributeNotFound", + "Attributes", + "AuthorityInformationAccess", + "AuthorityKeyIdentifier", + "BasicConstraints", + "CRLDistributionPoints", + "CRLNumber", + "CRLReason", + "Certificate", + "CertificateBuilder", + "CertificateIssuer", + "CertificatePolicies", + "CertificateRevocationList", + "CertificateRevocationListBuilder", + "CertificateSigningRequest", + "CertificateSigningRequestBuilder", + "DNSName", + "DeltaCRLIndicator", + "DirectoryName", + "DistributionPoint", + "DuplicateExtension", + "ExtendedKeyUsage", + "Extension", + "ExtensionNotFound", + "ExtensionType", + "Extensions", + "FreshestCRL", + "GeneralName", + "GeneralNames", + "IPAddress", + "InhibitAnyPolicy", + "InvalidVersion", + "InvalidityDate", + "IssuerAlternativeName", + "IssuingDistributionPoint", + "KeyUsage", + "MSCertificateTemplate", + "Name", + "NameAttribute", + "NameConstraints", + "NameOID", + "NamingAuthority", + "NoticeReference", + "OCSPAcceptableResponses", + "OCSPNoCheck", + "OCSPNonce", + "ObjectIdentifier", + "OtherName", + "PolicyConstraints", + "PolicyInformation", + "PrecertPoison", + "PrecertificateSignedCertificateTimestamps", + "ProfessionInfo", + "PublicKeyAlgorithmOID", + "RFC822Name", + "ReasonFlags", + "RegisteredID", + "RelativeDistinguishedName", + "RevokedCertificate", + "RevokedCertificateBuilder", + "SignatureAlgorithmOID", + "SignedCertificateTimestamps", + "SubjectAlternativeName", + "SubjectInformationAccess", + "SubjectKeyIdentifier", + "TLSFeature", + "TLSFeatureType", + "UniformResourceIdentifier", + "UnrecognizedExtension", + "UnsupportedGeneralNameType", + "UserNotice", + "Version", + "certificate_transparency", + "load_der_x509_certificate", + "load_der_x509_crl", + "load_der_x509_csr", + "load_pem_x509_certificate", + "load_pem_x509_certificates", + "load_pem_x509_crl", + "load_pem_x509_csr", + "random_serial_number", + "verification", + "verification", +] diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..acd30aa35bf9a22938233cfb3096f72d26ee36ea GIT binary patch literal 8322 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/base.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/base.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96f65ffdc06be7b01ec97ab6b22c7e2033906ebe GIT binary patch literal 34155 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 aH@qiN{JRY21$@#c%MW4w%^R@L@c#hihE_lT literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/certificate_transparency.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/certificate_transparency.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ea1f04352854fd79b63cc01159921638c3a65fc GIT binary patch literal 1570 zcmaJ>&2Jk;6rb^~zt&D0LcfSav`Q;cAG(W6(~7972*yQ`ii2Vom6gzHvOBid>=!d* ztM17M4oGm|fK(1WgMfd5Kf>IiJt1+*%~5jdiFxZfcAcv8@!L1=y?OKIy*K;&%8G_$ z`|qv^1LQmCh`eU9E{Kr6XWea8e>+7zrZ0 zDCBaP?F-KbLVddR;m6Kw7ku$_flsbT;yI$o!Y;BhF18dmW2vqp&8kWHQPio2f(={4 zn6iviJ%WvmN;WCjc1Qwh+lgk|LFD#*pv$)XU7z@`B&$#4v39M#-`ah+Tia>XlZ#*O z*B2Ropc8Q9rEhklfSNtmj9Jv9j^Jh#4D18qeA|!B0SyPH?;V)&P;{g4Bcob1xhLqY zSjtIZw}v@6fcKQhE7THUs1+o9@3~aDk>|2A*ekDrzV*}m0f^UdcZ1B zU@HY!@pmOGxK-3fpF*GNgX)_d+LV%IhajI;)>W;Xo3-+8PCA%R)|y@?B%;sgj^Bxx zC%VD2v8Ky*CeX=D!gbLlLYE=b2gLVWy&W;VS!;1aOSiPTl+#p9pAtv-L#a=7E(=5_ zd~WdUB;5=3{f9Mu>-L?y`pwp(rd~B}S6&%wQo60*?+Ov~ZPRp#ENCVZO_||Q(KaI1 zG2O^9yCU#S)^@Lm>i|m3vaSfDJ&-=Z`;zMtl#2J zW3Tb`7kiJJiL&3^NtDkdWa~BgSh;1RX^kPO>q;AB!>ENP|!Yjcrhbjh=T2;;yDT`%l#!)ARh82rML zB9JybgG8-|{a{+~X?ekUiPCgLvJPpcZf*WfT3$f8AVIuz)t80)(+B>5-H_Yi55WJC zFi|kZ6Aj_(W3;(A{zV((*T*6HWc>P=s9{{1p!4tp{i$~h l{L{IxP{tP~=sf&-`NjG%@K5K$4YcvWi*LqgeLB*V{0~bKf7bv2 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/extensions.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/extensions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba94037b09915ba1f1bb7ab635d5cec5b663dde1 GIT binary patch literal 119420 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/general_name.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/general_name.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c45ed414907c44ca85bc6b660985009a4b4d415 GIT binary patch literal 14626 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/oid.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/oid.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd2a4bb35fb64dc34c74dc422a555c5df18f87b1 GIT binary patch literal 882 zcmd6kKabNe6u|BNOWP#9O5B~05DYMNpyq^bI0+$D<%SA$t*$~yUZON{Q{TmLm5HtBwwv(Ffz%>C08a9g{ru$L%kwAK?IJVYfBhNdb%egd;?Jnv zPVn`)nS4MY3UQ1CrWnJ#7S}|b)qliZ61_rjr-t{ZX!0QgK~OlBHCl zN*e_M%QDzL95bc)k_WzKGa2)MvnswnK7VzZXjPnEX_jQ>Xvn@(twI*QWX0>uk1B(+ zlVY9uq6+t?iwhR$NyriqFje-azf6^+((Rf`%k%s=_Po#N+DOpN8?usuk&BR|N}xVW}K{|6qpHq`PP?<{!KzA66~TQBaa literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/verification.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/x509/__pycache__/verification.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9a48c0dd2a348d4899fe5a81492966afebc9411 GIT binary patch literal 843 zcmZvZJCD;q5XX0&IDX`u#HR>21QbVsjKJoED3Ad0ENG&WA}HJ#C*C*?erdf9n94m@ z(9t3a5FHVm9HTJHdGT-~H|E>|^$;rl|<*{g2=Nr5Zv%Ih+_U zH+=LR^ds_+heH%$8)M!VLctcGt%bFyZi}n2df130TZ&{`#>hvW_!-*@5htrX_*%9~ zgh`Y4xDkoSBVlI^p!OEb)lSgXfLa@B0kt>O2I_361EgIet-FR$Nl$zIo*R)$dA|S1^C-zOL#kR&!hpo=C85D6AhgoOypJdkQBU=23ki+Y{E|ZxS$MU@> z@$!&7pci0641e|oWLd))FI9xE&d}~@KSWx&`VP^<*;!wp`?LS~vMx7;B|4E(T6U4L zeb6q&h1xl|@!`!UWp>_}tJh0up None: + super().__init__(msg) + self.oid = oid + + +def _reject_duplicate_extension( + extension: Extension[ExtensionType], + extensions: list[Extension[ExtensionType]], +) -> None: + # This is quadratic in the number of extensions + for e in extensions: + if e.oid == extension.oid: + raise ValueError("This extension has already been set.") + + +def _reject_duplicate_attribute( + oid: ObjectIdentifier, + attributes: list[tuple[ObjectIdentifier, bytes, int | None]], +) -> None: + # This is quadratic in the number of attributes + for attr_oid, _, _ in attributes: + if attr_oid == oid: + raise ValueError("This attribute has already been set.") + + +def _convert_to_naive_utc_time(time: datetime.datetime) -> datetime.datetime: + """Normalizes a datetime to a naive datetime in UTC. + + time -- datetime to normalize. Assumed to be in UTC if not timezone + aware. + """ + if time.tzinfo is not None: + offset = time.utcoffset() + offset = offset if offset else datetime.timedelta() + return time.replace(tzinfo=None) - offset + else: + return time + + +class Attribute: + def __init__( + self, + oid: ObjectIdentifier, + value: bytes, + _type: int = _ASN1Type.UTF8String.value, + ) -> None: + self._oid = oid + self._value = value + self._type = _type + + @property + def oid(self) -> ObjectIdentifier: + return self._oid + + @property + def value(self) -> bytes: + return self._value + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Attribute): + return NotImplemented + + return ( + self.oid == other.oid + and self.value == other.value + and self._type == other._type + ) + + def __hash__(self) -> int: + return hash((self.oid, self.value, self._type)) + + +class Attributes: + def __init__( + self, + attributes: typing.Iterable[Attribute], + ) -> None: + self._attributes = list(attributes) + + __len__, __iter__, __getitem__ = _make_sequence_methods("_attributes") + + def __repr__(self) -> str: + return f"" + + def get_attribute_for_oid(self, oid: ObjectIdentifier) -> Attribute: + for attr in self: + if attr.oid == oid: + return attr + + raise AttributeNotFound(f"No {oid} attribute was found", oid) + + +class Version(utils.Enum): + v1 = 0 + v3 = 2 + + +class InvalidVersion(Exception): + def __init__(self, msg: str, parsed_version: int) -> None: + super().__init__(msg) + self.parsed_version = parsed_version + + +Certificate = rust_x509.Certificate + + +class RevokedCertificate(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def serial_number(self) -> int: + """ + Returns the serial number of the revoked certificate. + """ + + @property + @abc.abstractmethod + def revocation_date(self) -> datetime.datetime: + """ + Returns the date of when this certificate was revoked. + """ + + @property + @abc.abstractmethod + def revocation_date_utc(self) -> datetime.datetime: + """ + Returns the date of when this certificate was revoked as a non-naive + UTC datetime. + """ + + @property + @abc.abstractmethod + def extensions(self) -> Extensions: + """ + Returns an Extensions object containing a list of Revoked extensions. + """ + + +# Runtime isinstance checks need this since the rust class is not a subclass. +RevokedCertificate.register(rust_x509.RevokedCertificate) + + +class _RawRevokedCertificate(RevokedCertificate): + def __init__( + self, + serial_number: int, + revocation_date: datetime.datetime, + extensions: Extensions, + ): + self._serial_number = serial_number + self._revocation_date = revocation_date + self._extensions = extensions + + @property + def serial_number(self) -> int: + return self._serial_number + + @property + def revocation_date(self) -> datetime.datetime: + warnings.warn( + "Properties that return a naïve datetime object have been " + "deprecated. Please switch to revocation_date_utc.", + utils.DeprecatedIn42, + stacklevel=2, + ) + return self._revocation_date + + @property + def revocation_date_utc(self) -> datetime.datetime: + return self._revocation_date.replace(tzinfo=datetime.timezone.utc) + + @property + def extensions(self) -> Extensions: + return self._extensions + + +CertificateRevocationList = rust_x509.CertificateRevocationList +CertificateSigningRequest = rust_x509.CertificateSigningRequest + + +load_pem_x509_certificate = rust_x509.load_pem_x509_certificate +load_der_x509_certificate = rust_x509.load_der_x509_certificate + +load_pem_x509_certificates = rust_x509.load_pem_x509_certificates + +load_pem_x509_csr = rust_x509.load_pem_x509_csr +load_der_x509_csr = rust_x509.load_der_x509_csr + +load_pem_x509_crl = rust_x509.load_pem_x509_crl +load_der_x509_crl = rust_x509.load_der_x509_crl + + +class CertificateSigningRequestBuilder: + def __init__( + self, + subject_name: Name | None = None, + extensions: list[Extension[ExtensionType]] = [], + attributes: list[tuple[ObjectIdentifier, bytes, int | None]] = [], + ): + """ + Creates an empty X.509 certificate request (v1). + """ + self._subject_name = subject_name + self._extensions = extensions + self._attributes = attributes + + def subject_name(self, name: Name) -> CertificateSigningRequestBuilder: + """ + Sets the certificate requestor's distinguished name. + """ + if not isinstance(name, Name): + raise TypeError("Expecting x509.Name object.") + if self._subject_name is not None: + raise ValueError("The subject name may only be set once.") + return CertificateSigningRequestBuilder( + name, self._extensions, self._attributes + ) + + def add_extension( + self, extval: ExtensionType, critical: bool + ) -> CertificateSigningRequestBuilder: + """ + Adds an X.509 extension to the certificate request. + """ + if not isinstance(extval, ExtensionType): + raise TypeError("extension must be an ExtensionType") + + extension = Extension(extval.oid, critical, extval) + _reject_duplicate_extension(extension, self._extensions) + + return CertificateSigningRequestBuilder( + self._subject_name, + [*self._extensions, extension], + self._attributes, + ) + + def add_attribute( + self, + oid: ObjectIdentifier, + value: bytes, + *, + _tag: _ASN1Type | None = None, + ) -> CertificateSigningRequestBuilder: + """ + Adds an X.509 attribute with an OID and associated value. + """ + if not isinstance(oid, ObjectIdentifier): + raise TypeError("oid must be an ObjectIdentifier") + + if not isinstance(value, bytes): + raise TypeError("value must be bytes") + + if _tag is not None and not isinstance(_tag, _ASN1Type): + raise TypeError("tag must be _ASN1Type") + + _reject_duplicate_attribute(oid, self._attributes) + + if _tag is not None: + tag = _tag.value + else: + tag = None + + return CertificateSigningRequestBuilder( + self._subject_name, + self._extensions, + [*self._attributes, (oid, value, tag)], + ) + + def sign( + self, + private_key: CertificateIssuerPrivateKeyTypes, + algorithm: _AllowedHashTypes | None, + backend: typing.Any = None, + *, + rsa_padding: padding.PSS | padding.PKCS1v15 | None = None, + ) -> CertificateSigningRequest: + """ + Signs the request using the requestor's private key. + """ + if self._subject_name is None: + raise ValueError("A CertificateSigningRequest must have a subject") + + if rsa_padding is not None: + if not isinstance(rsa_padding, (padding.PSS, padding.PKCS1v15)): + raise TypeError("Padding must be PSS or PKCS1v15") + if not isinstance(private_key, rsa.RSAPrivateKey): + raise TypeError("Padding is only supported for RSA keys") + + return rust_x509.create_x509_csr( + self, private_key, algorithm, rsa_padding + ) + + +class CertificateBuilder: + _extensions: list[Extension[ExtensionType]] + + def __init__( + self, + issuer_name: Name | None = None, + subject_name: Name | None = None, + public_key: CertificatePublicKeyTypes | None = None, + serial_number: int | None = None, + not_valid_before: datetime.datetime | None = None, + not_valid_after: datetime.datetime | None = None, + extensions: list[Extension[ExtensionType]] = [], + ) -> None: + self._version = Version.v3 + self._issuer_name = issuer_name + self._subject_name = subject_name + self._public_key = public_key + self._serial_number = serial_number + self._not_valid_before = not_valid_before + self._not_valid_after = not_valid_after + self._extensions = extensions + + def issuer_name(self, name: Name) -> CertificateBuilder: + """ + Sets the CA's distinguished name. + """ + if not isinstance(name, Name): + raise TypeError("Expecting x509.Name object.") + if self._issuer_name is not None: + raise ValueError("The issuer name may only be set once.") + return CertificateBuilder( + name, + self._subject_name, + self._public_key, + self._serial_number, + self._not_valid_before, + self._not_valid_after, + self._extensions, + ) + + def subject_name(self, name: Name) -> CertificateBuilder: + """ + Sets the requestor's distinguished name. + """ + if not isinstance(name, Name): + raise TypeError("Expecting x509.Name object.") + if self._subject_name is not None: + raise ValueError("The subject name may only be set once.") + return CertificateBuilder( + self._issuer_name, + name, + self._public_key, + self._serial_number, + self._not_valid_before, + self._not_valid_after, + self._extensions, + ) + + def public_key( + self, + key: CertificatePublicKeyTypes, + ) -> CertificateBuilder: + """ + Sets the requestor's public key (as found in the signing request). + """ + if not isinstance( + key, + ( + dsa.DSAPublicKey, + rsa.RSAPublicKey, + ec.EllipticCurvePublicKey, + ed25519.Ed25519PublicKey, + ed448.Ed448PublicKey, + x25519.X25519PublicKey, + x448.X448PublicKey, + ), + ): + raise TypeError( + "Expecting one of DSAPublicKey, RSAPublicKey," + " EllipticCurvePublicKey, Ed25519PublicKey," + " Ed448PublicKey, X25519PublicKey, or " + "X448PublicKey." + ) + if self._public_key is not None: + raise ValueError("The public key may only be set once.") + return CertificateBuilder( + self._issuer_name, + self._subject_name, + key, + self._serial_number, + self._not_valid_before, + self._not_valid_after, + self._extensions, + ) + + def serial_number(self, number: int) -> CertificateBuilder: + """ + Sets the certificate serial number. + """ + if not isinstance(number, int): + raise TypeError("Serial number must be of integral type.") + if self._serial_number is not None: + raise ValueError("The serial number may only be set once.") + if number <= 0: + raise ValueError("The serial number should be positive.") + + # ASN.1 integers are always signed, so most significant bit must be + # zero. + if number.bit_length() >= 160: # As defined in RFC 5280 + raise ValueError( + "The serial number should not be more than 159 bits." + ) + return CertificateBuilder( + self._issuer_name, + self._subject_name, + self._public_key, + number, + self._not_valid_before, + self._not_valid_after, + self._extensions, + ) + + def not_valid_before(self, time: datetime.datetime) -> CertificateBuilder: + """ + Sets the certificate activation time. + """ + if not isinstance(time, datetime.datetime): + raise TypeError("Expecting datetime object.") + if self._not_valid_before is not None: + raise ValueError("The not valid before may only be set once.") + time = _convert_to_naive_utc_time(time) + if time < _EARLIEST_UTC_TIME: + raise ValueError( + "The not valid before date must be on or after" + " 1950 January 1)." + ) + if self._not_valid_after is not None and time > self._not_valid_after: + raise ValueError( + "The not valid before date must be before the not valid after " + "date." + ) + return CertificateBuilder( + self._issuer_name, + self._subject_name, + self._public_key, + self._serial_number, + time, + self._not_valid_after, + self._extensions, + ) + + def not_valid_after(self, time: datetime.datetime) -> CertificateBuilder: + """ + Sets the certificate expiration time. + """ + if not isinstance(time, datetime.datetime): + raise TypeError("Expecting datetime object.") + if self._not_valid_after is not None: + raise ValueError("The not valid after may only be set once.") + time = _convert_to_naive_utc_time(time) + if time < _EARLIEST_UTC_TIME: + raise ValueError( + "The not valid after date must be on or after" + " 1950 January 1." + ) + if ( + self._not_valid_before is not None + and time < self._not_valid_before + ): + raise ValueError( + "The not valid after date must be after the not valid before " + "date." + ) + return CertificateBuilder( + self._issuer_name, + self._subject_name, + self._public_key, + self._serial_number, + self._not_valid_before, + time, + self._extensions, + ) + + def add_extension( + self, extval: ExtensionType, critical: bool + ) -> CertificateBuilder: + """ + Adds an X.509 extension to the certificate. + """ + if not isinstance(extval, ExtensionType): + raise TypeError("extension must be an ExtensionType") + + extension = Extension(extval.oid, critical, extval) + _reject_duplicate_extension(extension, self._extensions) + + return CertificateBuilder( + self._issuer_name, + self._subject_name, + self._public_key, + self._serial_number, + self._not_valid_before, + self._not_valid_after, + [*self._extensions, extension], + ) + + def sign( + self, + private_key: CertificateIssuerPrivateKeyTypes, + algorithm: _AllowedHashTypes | None, + backend: typing.Any = None, + *, + rsa_padding: padding.PSS | padding.PKCS1v15 | None = None, + ) -> Certificate: + """ + Signs the certificate using the CA's private key. + """ + if self._subject_name is None: + raise ValueError("A certificate must have a subject name") + + if self._issuer_name is None: + raise ValueError("A certificate must have an issuer name") + + if self._serial_number is None: + raise ValueError("A certificate must have a serial number") + + if self._not_valid_before is None: + raise ValueError("A certificate must have a not valid before time") + + if self._not_valid_after is None: + raise ValueError("A certificate must have a not valid after time") + + if self._public_key is None: + raise ValueError("A certificate must have a public key") + + if rsa_padding is not None: + if not isinstance(rsa_padding, (padding.PSS, padding.PKCS1v15)): + raise TypeError("Padding must be PSS or PKCS1v15") + if not isinstance(private_key, rsa.RSAPrivateKey): + raise TypeError("Padding is only supported for RSA keys") + + return rust_x509.create_x509_certificate( + self, private_key, algorithm, rsa_padding + ) + + +class CertificateRevocationListBuilder: + _extensions: list[Extension[ExtensionType]] + _revoked_certificates: list[RevokedCertificate] + + def __init__( + self, + issuer_name: Name | None = None, + last_update: datetime.datetime | None = None, + next_update: datetime.datetime | None = None, + extensions: list[Extension[ExtensionType]] = [], + revoked_certificates: list[RevokedCertificate] = [], + ): + self._issuer_name = issuer_name + self._last_update = last_update + self._next_update = next_update + self._extensions = extensions + self._revoked_certificates = revoked_certificates + + def issuer_name( + self, issuer_name: Name + ) -> CertificateRevocationListBuilder: + if not isinstance(issuer_name, Name): + raise TypeError("Expecting x509.Name object.") + if self._issuer_name is not None: + raise ValueError("The issuer name may only be set once.") + return CertificateRevocationListBuilder( + issuer_name, + self._last_update, + self._next_update, + self._extensions, + self._revoked_certificates, + ) + + def last_update( + self, last_update: datetime.datetime + ) -> CertificateRevocationListBuilder: + if not isinstance(last_update, datetime.datetime): + raise TypeError("Expecting datetime object.") + if self._last_update is not None: + raise ValueError("Last update may only be set once.") + last_update = _convert_to_naive_utc_time(last_update) + if last_update < _EARLIEST_UTC_TIME: + raise ValueError( + "The last update date must be on or after 1950 January 1." + ) + if self._next_update is not None and last_update > self._next_update: + raise ValueError( + "The last update date must be before the next update date." + ) + return CertificateRevocationListBuilder( + self._issuer_name, + last_update, + self._next_update, + self._extensions, + self._revoked_certificates, + ) + + def next_update( + self, next_update: datetime.datetime + ) -> CertificateRevocationListBuilder: + if not isinstance(next_update, datetime.datetime): + raise TypeError("Expecting datetime object.") + if self._next_update is not None: + raise ValueError("Last update may only be set once.") + next_update = _convert_to_naive_utc_time(next_update) + if next_update < _EARLIEST_UTC_TIME: + raise ValueError( + "The last update date must be on or after 1950 January 1." + ) + if self._last_update is not None and next_update < self._last_update: + raise ValueError( + "The next update date must be after the last update date." + ) + return CertificateRevocationListBuilder( + self._issuer_name, + self._last_update, + next_update, + self._extensions, + self._revoked_certificates, + ) + + def add_extension( + self, extval: ExtensionType, critical: bool + ) -> CertificateRevocationListBuilder: + """ + Adds an X.509 extension to the certificate revocation list. + """ + if not isinstance(extval, ExtensionType): + raise TypeError("extension must be an ExtensionType") + + extension = Extension(extval.oid, critical, extval) + _reject_duplicate_extension(extension, self._extensions) + return CertificateRevocationListBuilder( + self._issuer_name, + self._last_update, + self._next_update, + [*self._extensions, extension], + self._revoked_certificates, + ) + + def add_revoked_certificate( + self, revoked_certificate: RevokedCertificate + ) -> CertificateRevocationListBuilder: + """ + Adds a revoked certificate to the CRL. + """ + if not isinstance(revoked_certificate, RevokedCertificate): + raise TypeError("Must be an instance of RevokedCertificate") + + return CertificateRevocationListBuilder( + self._issuer_name, + self._last_update, + self._next_update, + self._extensions, + [*self._revoked_certificates, revoked_certificate], + ) + + def sign( + self, + private_key: CertificateIssuerPrivateKeyTypes, + algorithm: _AllowedHashTypes | None, + backend: typing.Any = None, + *, + rsa_padding: padding.PSS | padding.PKCS1v15 | None = None, + ) -> CertificateRevocationList: + if self._issuer_name is None: + raise ValueError("A CRL must have an issuer name") + + if self._last_update is None: + raise ValueError("A CRL must have a last update time") + + if self._next_update is None: + raise ValueError("A CRL must have a next update time") + + if rsa_padding is not None: + if not isinstance(rsa_padding, (padding.PSS, padding.PKCS1v15)): + raise TypeError("Padding must be PSS or PKCS1v15") + if not isinstance(private_key, rsa.RSAPrivateKey): + raise TypeError("Padding is only supported for RSA keys") + + return rust_x509.create_x509_crl( + self, private_key, algorithm, rsa_padding + ) + + +class RevokedCertificateBuilder: + def __init__( + self, + serial_number: int | None = None, + revocation_date: datetime.datetime | None = None, + extensions: list[Extension[ExtensionType]] = [], + ): + self._serial_number = serial_number + self._revocation_date = revocation_date + self._extensions = extensions + + def serial_number(self, number: int) -> RevokedCertificateBuilder: + if not isinstance(number, int): + raise TypeError("Serial number must be of integral type.") + if self._serial_number is not None: + raise ValueError("The serial number may only be set once.") + if number <= 0: + raise ValueError("The serial number should be positive") + + # ASN.1 integers are always signed, so most significant bit must be + # zero. + if number.bit_length() >= 160: # As defined in RFC 5280 + raise ValueError( + "The serial number should not be more than 159 bits." + ) + return RevokedCertificateBuilder( + number, self._revocation_date, self._extensions + ) + + def revocation_date( + self, time: datetime.datetime + ) -> RevokedCertificateBuilder: + if not isinstance(time, datetime.datetime): + raise TypeError("Expecting datetime object.") + if self._revocation_date is not None: + raise ValueError("The revocation date may only be set once.") + time = _convert_to_naive_utc_time(time) + if time < _EARLIEST_UTC_TIME: + raise ValueError( + "The revocation date must be on or after 1950 January 1." + ) + return RevokedCertificateBuilder( + self._serial_number, time, self._extensions + ) + + def add_extension( + self, extval: ExtensionType, critical: bool + ) -> RevokedCertificateBuilder: + if not isinstance(extval, ExtensionType): + raise TypeError("extension must be an ExtensionType") + + extension = Extension(extval.oid, critical, extval) + _reject_duplicate_extension(extension, self._extensions) + return RevokedCertificateBuilder( + self._serial_number, + self._revocation_date, + [*self._extensions, extension], + ) + + def build(self, backend: typing.Any = None) -> RevokedCertificate: + if self._serial_number is None: + raise ValueError("A revoked certificate must have a serial number") + if self._revocation_date is None: + raise ValueError( + "A revoked certificate must have a revocation date" + ) + return _RawRevokedCertificate( + self._serial_number, + self._revocation_date, + Extensions(self._extensions), + ) + + +def random_serial_number() -> int: + return int.from_bytes(os.urandom(20), "big") >> 1 diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/certificate_transparency.py b/venv/lib/python3.11/site-packages/cryptography/x509/certificate_transparency.py new file mode 100644 index 0000000..fb66cc6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/x509/certificate_transparency.py @@ -0,0 +1,35 @@ +# 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 annotations + +from cryptography import utils +from cryptography.hazmat.bindings._rust import x509 as rust_x509 + + +class LogEntryType(utils.Enum): + X509_CERTIFICATE = 0 + PRE_CERTIFICATE = 1 + + +class Version(utils.Enum): + v1 = 0 + + +class SignatureAlgorithm(utils.Enum): + """ + Signature algorithms that are valid for SCTs. + + These are exactly the same as SignatureAlgorithm in RFC 5246 (TLS 1.2). + + See: + """ + + ANONYMOUS = 0 + RSA = 1 + DSA = 2 + ECDSA = 3 + + +SignedCertificateTimestamp = rust_x509.Sct diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/extensions.py b/venv/lib/python3.11/site-packages/cryptography/x509/extensions.py new file mode 100644 index 0000000..fc3e773 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/x509/extensions.py @@ -0,0 +1,2477 @@ +# 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 annotations + +import abc +import datetime +import hashlib +import ipaddress +import typing + +from cryptography import utils +from cryptography.hazmat.bindings._rust import asn1 +from cryptography.hazmat.bindings._rust import x509 as rust_x509 +from cryptography.hazmat.primitives import constant_time, serialization +from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePublicKey +from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey +from cryptography.hazmat.primitives.asymmetric.types import ( + CertificateIssuerPublicKeyTypes, + CertificatePublicKeyTypes, +) +from cryptography.x509.certificate_transparency import ( + SignedCertificateTimestamp, +) +from cryptography.x509.general_name import ( + DirectoryName, + DNSName, + GeneralName, + IPAddress, + OtherName, + RegisteredID, + RFC822Name, + UniformResourceIdentifier, + _IPAddressTypes, +) +from cryptography.x509.name import Name, RelativeDistinguishedName +from cryptography.x509.oid import ( + CRLEntryExtensionOID, + ExtensionOID, + ObjectIdentifier, + OCSPExtensionOID, +) + +ExtensionTypeVar = typing.TypeVar( + "ExtensionTypeVar", bound="ExtensionType", covariant=True +) + + +def _key_identifier_from_public_key( + public_key: CertificatePublicKeyTypes, +) -> bytes: + if isinstance(public_key, RSAPublicKey): + data = public_key.public_bytes( + serialization.Encoding.DER, + serialization.PublicFormat.PKCS1, + ) + elif isinstance(public_key, EllipticCurvePublicKey): + data = public_key.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.UncompressedPoint, + ) + else: + # This is a very slow way to do this. + serialized = public_key.public_bytes( + serialization.Encoding.DER, + serialization.PublicFormat.SubjectPublicKeyInfo, + ) + data = asn1.parse_spki_for_data(serialized) + + return hashlib.sha1(data).digest() + + +def _make_sequence_methods(field_name: str): + def len_method(self) -> int: + return len(getattr(self, field_name)) + + def iter_method(self): + return iter(getattr(self, field_name)) + + def getitem_method(self, idx): + return getattr(self, field_name)[idx] + + return len_method, iter_method, getitem_method + + +class DuplicateExtension(Exception): + def __init__(self, msg: str, oid: ObjectIdentifier) -> None: + super().__init__(msg) + self.oid = oid + + +class ExtensionNotFound(Exception): + def __init__(self, msg: str, oid: ObjectIdentifier) -> None: + super().__init__(msg) + self.oid = oid + + +class ExtensionType(metaclass=abc.ABCMeta): + oid: typing.ClassVar[ObjectIdentifier] + + def public_bytes(self) -> bytes: + """ + Serializes the extension type to DER. + """ + raise NotImplementedError( + f"public_bytes is not implemented for extension type {self!r}" + ) + + +class Extensions: + def __init__( + self, extensions: typing.Iterable[Extension[ExtensionType]] + ) -> None: + self._extensions = list(extensions) + + def get_extension_for_oid( + self, oid: ObjectIdentifier + ) -> Extension[ExtensionType]: + for ext in self: + if ext.oid == oid: + return ext + + raise ExtensionNotFound(f"No {oid} extension was found", oid) + + def get_extension_for_class( + self, extclass: type[ExtensionTypeVar] + ) -> Extension[ExtensionTypeVar]: + if extclass is UnrecognizedExtension: + raise TypeError( + "UnrecognizedExtension can't be used with " + "get_extension_for_class because more than one instance of the" + " class may be present." + ) + + for ext in self: + if isinstance(ext.value, extclass): + return ext + + raise ExtensionNotFound( + f"No {extclass} extension was found", extclass.oid + ) + + __len__, __iter__, __getitem__ = _make_sequence_methods("_extensions") + + def __repr__(self) -> str: + return f"" + + +class CRLNumber(ExtensionType): + oid = ExtensionOID.CRL_NUMBER + + def __init__(self, crl_number: int) -> None: + if not isinstance(crl_number, int): + raise TypeError("crl_number must be an integer") + + self._crl_number = crl_number + + def __eq__(self, other: object) -> bool: + if not isinstance(other, CRLNumber): + return NotImplemented + + return self.crl_number == other.crl_number + + def __hash__(self) -> int: + return hash(self.crl_number) + + def __repr__(self) -> str: + return f"" + + @property + def crl_number(self) -> int: + return self._crl_number + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class AuthorityKeyIdentifier(ExtensionType): + oid = ExtensionOID.AUTHORITY_KEY_IDENTIFIER + + def __init__( + self, + key_identifier: bytes | None, + authority_cert_issuer: typing.Iterable[GeneralName] | None, + authority_cert_serial_number: int | None, + ) -> None: + if (authority_cert_issuer is None) != ( + authority_cert_serial_number is None + ): + raise ValueError( + "authority_cert_issuer and authority_cert_serial_number " + "must both be present or both None" + ) + + if authority_cert_issuer is not None: + authority_cert_issuer = list(authority_cert_issuer) + if not all( + isinstance(x, GeneralName) for x in authority_cert_issuer + ): + raise TypeError( + "authority_cert_issuer must be a list of GeneralName " + "objects" + ) + + if authority_cert_serial_number is not None and not isinstance( + authority_cert_serial_number, int + ): + raise TypeError("authority_cert_serial_number must be an integer") + + self._key_identifier = key_identifier + self._authority_cert_issuer = authority_cert_issuer + self._authority_cert_serial_number = authority_cert_serial_number + + # This takes a subset of CertificatePublicKeyTypes because an issuer + # cannot have an X25519/X448 key. This introduces some unfortunate + # asymmetry that requires typing users to explicitly + # narrow their type, but we should make this accurate and not just + # convenient. + @classmethod + def from_issuer_public_key( + cls, public_key: CertificateIssuerPublicKeyTypes + ) -> AuthorityKeyIdentifier: + digest = _key_identifier_from_public_key(public_key) + return cls( + key_identifier=digest, + authority_cert_issuer=None, + authority_cert_serial_number=None, + ) + + @classmethod + def from_issuer_subject_key_identifier( + cls, ski: SubjectKeyIdentifier + ) -> AuthorityKeyIdentifier: + return cls( + key_identifier=ski.digest, + authority_cert_issuer=None, + authority_cert_serial_number=None, + ) + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, AuthorityKeyIdentifier): + return NotImplemented + + return ( + self.key_identifier == other.key_identifier + and self.authority_cert_issuer == other.authority_cert_issuer + and self.authority_cert_serial_number + == other.authority_cert_serial_number + ) + + def __hash__(self) -> int: + if self.authority_cert_issuer is None: + aci = None + else: + aci = tuple(self.authority_cert_issuer) + return hash( + (self.key_identifier, aci, self.authority_cert_serial_number) + ) + + @property + def key_identifier(self) -> bytes | None: + return self._key_identifier + + @property + def authority_cert_issuer( + self, + ) -> list[GeneralName] | None: + return self._authority_cert_issuer + + @property + def authority_cert_serial_number(self) -> int | None: + return self._authority_cert_serial_number + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class SubjectKeyIdentifier(ExtensionType): + oid = ExtensionOID.SUBJECT_KEY_IDENTIFIER + + def __init__(self, digest: bytes) -> None: + self._digest = digest + + @classmethod + def from_public_key( + cls, public_key: CertificatePublicKeyTypes + ) -> SubjectKeyIdentifier: + return cls(_key_identifier_from_public_key(public_key)) + + @property + def digest(self) -> bytes: + return self._digest + + @property + def key_identifier(self) -> bytes: + return self._digest + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, SubjectKeyIdentifier): + return NotImplemented + + return constant_time.bytes_eq(self.digest, other.digest) + + def __hash__(self) -> int: + return hash(self.digest) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class AuthorityInformationAccess(ExtensionType): + oid = ExtensionOID.AUTHORITY_INFORMATION_ACCESS + + def __init__( + self, descriptions: typing.Iterable[AccessDescription] + ) -> None: + descriptions = list(descriptions) + if not all(isinstance(x, AccessDescription) for x in descriptions): + raise TypeError( + "Every item in the descriptions list must be an " + "AccessDescription" + ) + + self._descriptions = descriptions + + __len__, __iter__, __getitem__ = _make_sequence_methods("_descriptions") + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, AuthorityInformationAccess): + return NotImplemented + + return self._descriptions == other._descriptions + + def __hash__(self) -> int: + return hash(tuple(self._descriptions)) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class SubjectInformationAccess(ExtensionType): + oid = ExtensionOID.SUBJECT_INFORMATION_ACCESS + + def __init__( + self, descriptions: typing.Iterable[AccessDescription] + ) -> None: + descriptions = list(descriptions) + if not all(isinstance(x, AccessDescription) for x in descriptions): + raise TypeError( + "Every item in the descriptions list must be an " + "AccessDescription" + ) + + self._descriptions = descriptions + + __len__, __iter__, __getitem__ = _make_sequence_methods("_descriptions") + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, SubjectInformationAccess): + return NotImplemented + + return self._descriptions == other._descriptions + + def __hash__(self) -> int: + return hash(tuple(self._descriptions)) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class AccessDescription: + def __init__( + self, access_method: ObjectIdentifier, access_location: GeneralName + ) -> None: + if not isinstance(access_method, ObjectIdentifier): + raise TypeError("access_method must be an ObjectIdentifier") + + if not isinstance(access_location, GeneralName): + raise TypeError("access_location must be a GeneralName") + + self._access_method = access_method + self._access_location = access_location + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, AccessDescription): + return NotImplemented + + return ( + self.access_method == other.access_method + and self.access_location == other.access_location + ) + + def __hash__(self) -> int: + return hash((self.access_method, self.access_location)) + + @property + def access_method(self) -> ObjectIdentifier: + return self._access_method + + @property + def access_location(self) -> GeneralName: + return self._access_location + + +class BasicConstraints(ExtensionType): + oid = ExtensionOID.BASIC_CONSTRAINTS + + def __init__(self, ca: bool, path_length: int | None) -> None: + if not isinstance(ca, bool): + raise TypeError("ca must be a boolean value") + + if path_length is not None and not ca: + raise ValueError("path_length must be None when ca is False") + + if path_length is not None and ( + not isinstance(path_length, int) or path_length < 0 + ): + raise TypeError( + "path_length must be a non-negative integer or None" + ) + + self._ca = ca + self._path_length = path_length + + @property + def ca(self) -> bool: + return self._ca + + @property + def path_length(self) -> int | None: + return self._path_length + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, BasicConstraints): + return NotImplemented + + return self.ca == other.ca and self.path_length == other.path_length + + def __hash__(self) -> int: + return hash((self.ca, self.path_length)) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class DeltaCRLIndicator(ExtensionType): + oid = ExtensionOID.DELTA_CRL_INDICATOR + + def __init__(self, crl_number: int) -> None: + if not isinstance(crl_number, int): + raise TypeError("crl_number must be an integer") + + self._crl_number = crl_number + + @property + def crl_number(self) -> int: + return self._crl_number + + def __eq__(self, other: object) -> bool: + if not isinstance(other, DeltaCRLIndicator): + return NotImplemented + + return self.crl_number == other.crl_number + + def __hash__(self) -> int: + return hash(self.crl_number) + + def __repr__(self) -> str: + return f"" + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class CRLDistributionPoints(ExtensionType): + oid = ExtensionOID.CRL_DISTRIBUTION_POINTS + + def __init__( + self, distribution_points: typing.Iterable[DistributionPoint] + ) -> None: + distribution_points = list(distribution_points) + if not all( + isinstance(x, DistributionPoint) for x in distribution_points + ): + raise TypeError( + "distribution_points must be a list of DistributionPoint " + "objects" + ) + + self._distribution_points = distribution_points + + __len__, __iter__, __getitem__ = _make_sequence_methods( + "_distribution_points" + ) + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, CRLDistributionPoints): + return NotImplemented + + return self._distribution_points == other._distribution_points + + def __hash__(self) -> int: + return hash(tuple(self._distribution_points)) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class FreshestCRL(ExtensionType): + oid = ExtensionOID.FRESHEST_CRL + + def __init__( + self, distribution_points: typing.Iterable[DistributionPoint] + ) -> None: + distribution_points = list(distribution_points) + if not all( + isinstance(x, DistributionPoint) for x in distribution_points + ): + raise TypeError( + "distribution_points must be a list of DistributionPoint " + "objects" + ) + + self._distribution_points = distribution_points + + __len__, __iter__, __getitem__ = _make_sequence_methods( + "_distribution_points" + ) + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, FreshestCRL): + return NotImplemented + + return self._distribution_points == other._distribution_points + + def __hash__(self) -> int: + return hash(tuple(self._distribution_points)) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class DistributionPoint: + def __init__( + self, + full_name: typing.Iterable[GeneralName] | None, + relative_name: RelativeDistinguishedName | None, + reasons: frozenset[ReasonFlags] | None, + crl_issuer: typing.Iterable[GeneralName] | None, + ) -> None: + if full_name and relative_name: + raise ValueError( + "You cannot provide both full_name and relative_name, at " + "least one must be None." + ) + if not full_name and not relative_name and not crl_issuer: + raise ValueError( + "Either full_name, relative_name or crl_issuer must be " + "provided." + ) + + if full_name is not None: + full_name = list(full_name) + if not all(isinstance(x, GeneralName) for x in full_name): + raise TypeError( + "full_name must be a list of GeneralName objects" + ) + + if relative_name: + if not isinstance(relative_name, RelativeDistinguishedName): + raise TypeError( + "relative_name must be a RelativeDistinguishedName" + ) + + if crl_issuer is not None: + crl_issuer = list(crl_issuer) + if not all(isinstance(x, GeneralName) for x in crl_issuer): + raise TypeError( + "crl_issuer must be None or a list of general names" + ) + + if reasons and ( + not isinstance(reasons, frozenset) + or not all(isinstance(x, ReasonFlags) for x in reasons) + ): + raise TypeError("reasons must be None or frozenset of ReasonFlags") + + if reasons and ( + ReasonFlags.unspecified in reasons + or ReasonFlags.remove_from_crl in reasons + ): + raise ValueError( + "unspecified and remove_from_crl are not valid reasons in a " + "DistributionPoint" + ) + + self._full_name = full_name + self._relative_name = relative_name + self._reasons = reasons + self._crl_issuer = crl_issuer + + def __repr__(self) -> str: + return ( + "".format(self) + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, DistributionPoint): + return NotImplemented + + return ( + self.full_name == other.full_name + and self.relative_name == other.relative_name + and self.reasons == other.reasons + and self.crl_issuer == other.crl_issuer + ) + + def __hash__(self) -> int: + if self.full_name is not None: + fn: tuple[GeneralName, ...] | None = tuple(self.full_name) + else: + fn = None + + if self.crl_issuer is not None: + crl_issuer: tuple[GeneralName, ...] | None = tuple(self.crl_issuer) + else: + crl_issuer = None + + return hash((fn, self.relative_name, self.reasons, crl_issuer)) + + @property + def full_name(self) -> list[GeneralName] | None: + return self._full_name + + @property + def relative_name(self) -> RelativeDistinguishedName | None: + return self._relative_name + + @property + def reasons(self) -> frozenset[ReasonFlags] | None: + return self._reasons + + @property + def crl_issuer(self) -> list[GeneralName] | None: + return self._crl_issuer + + +class ReasonFlags(utils.Enum): + unspecified = "unspecified" + key_compromise = "keyCompromise" + ca_compromise = "cACompromise" + affiliation_changed = "affiliationChanged" + superseded = "superseded" + cessation_of_operation = "cessationOfOperation" + certificate_hold = "certificateHold" + privilege_withdrawn = "privilegeWithdrawn" + aa_compromise = "aACompromise" + remove_from_crl = "removeFromCRL" + + +# These are distribution point bit string mappings. Not to be confused with +# CRLReason reason flags bit string mappings. +# ReasonFlags ::= BIT STRING { +# unused (0), +# keyCompromise (1), +# cACompromise (2), +# affiliationChanged (3), +# superseded (4), +# cessationOfOperation (5), +# certificateHold (6), +# privilegeWithdrawn (7), +# aACompromise (8) } +_REASON_BIT_MAPPING = { + 1: ReasonFlags.key_compromise, + 2: ReasonFlags.ca_compromise, + 3: ReasonFlags.affiliation_changed, + 4: ReasonFlags.superseded, + 5: ReasonFlags.cessation_of_operation, + 6: ReasonFlags.certificate_hold, + 7: ReasonFlags.privilege_withdrawn, + 8: ReasonFlags.aa_compromise, +} + +_CRLREASONFLAGS = { + ReasonFlags.key_compromise: 1, + ReasonFlags.ca_compromise: 2, + ReasonFlags.affiliation_changed: 3, + ReasonFlags.superseded: 4, + ReasonFlags.cessation_of_operation: 5, + ReasonFlags.certificate_hold: 6, + ReasonFlags.privilege_withdrawn: 7, + ReasonFlags.aa_compromise: 8, +} + +# CRLReason ::= ENUMERATED { +# unspecified (0), +# keyCompromise (1), +# cACompromise (2), +# affiliationChanged (3), +# superseded (4), +# cessationOfOperation (5), +# certificateHold (6), +# -- value 7 is not used +# removeFromCRL (8), +# privilegeWithdrawn (9), +# aACompromise (10) } +_CRL_ENTRY_REASON_ENUM_TO_CODE = { + ReasonFlags.unspecified: 0, + ReasonFlags.key_compromise: 1, + ReasonFlags.ca_compromise: 2, + ReasonFlags.affiliation_changed: 3, + ReasonFlags.superseded: 4, + ReasonFlags.cessation_of_operation: 5, + ReasonFlags.certificate_hold: 6, + ReasonFlags.remove_from_crl: 8, + ReasonFlags.privilege_withdrawn: 9, + ReasonFlags.aa_compromise: 10, +} + + +class PolicyConstraints(ExtensionType): + oid = ExtensionOID.POLICY_CONSTRAINTS + + def __init__( + self, + require_explicit_policy: int | None, + inhibit_policy_mapping: int | None, + ) -> None: + if require_explicit_policy is not None and not isinstance( + require_explicit_policy, int + ): + raise TypeError( + "require_explicit_policy must be a non-negative integer or " + "None" + ) + + if inhibit_policy_mapping is not None and not isinstance( + inhibit_policy_mapping, int + ): + raise TypeError( + "inhibit_policy_mapping must be a non-negative integer or None" + ) + + if inhibit_policy_mapping is None and require_explicit_policy is None: + raise ValueError( + "At least one of require_explicit_policy and " + "inhibit_policy_mapping must not be None" + ) + + self._require_explicit_policy = require_explicit_policy + self._inhibit_policy_mapping = inhibit_policy_mapping + + def __repr__(self) -> str: + return ( + "".format(self) + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, PolicyConstraints): + return NotImplemented + + return ( + self.require_explicit_policy == other.require_explicit_policy + and self.inhibit_policy_mapping == other.inhibit_policy_mapping + ) + + def __hash__(self) -> int: + return hash( + (self.require_explicit_policy, self.inhibit_policy_mapping) + ) + + @property + def require_explicit_policy(self) -> int | None: + return self._require_explicit_policy + + @property + def inhibit_policy_mapping(self) -> int | None: + return self._inhibit_policy_mapping + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class CertificatePolicies(ExtensionType): + oid = ExtensionOID.CERTIFICATE_POLICIES + + def __init__(self, policies: typing.Iterable[PolicyInformation]) -> None: + policies = list(policies) + if not all(isinstance(x, PolicyInformation) for x in policies): + raise TypeError( + "Every item in the policies list must be a " + "PolicyInformation" + ) + + self._policies = policies + + __len__, __iter__, __getitem__ = _make_sequence_methods("_policies") + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, CertificatePolicies): + return NotImplemented + + return self._policies == other._policies + + def __hash__(self) -> int: + return hash(tuple(self._policies)) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class PolicyInformation: + def __init__( + self, + policy_identifier: ObjectIdentifier, + policy_qualifiers: typing.Iterable[str | UserNotice] | None, + ) -> None: + if not isinstance(policy_identifier, ObjectIdentifier): + raise TypeError("policy_identifier must be an ObjectIdentifier") + + self._policy_identifier = policy_identifier + + if policy_qualifiers is not None: + policy_qualifiers = list(policy_qualifiers) + if not all( + isinstance(x, (str, UserNotice)) for x in policy_qualifiers + ): + raise TypeError( + "policy_qualifiers must be a list of strings and/or " + "UserNotice objects or None" + ) + + self._policy_qualifiers = policy_qualifiers + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, PolicyInformation): + return NotImplemented + + return ( + self.policy_identifier == other.policy_identifier + and self.policy_qualifiers == other.policy_qualifiers + ) + + def __hash__(self) -> int: + if self.policy_qualifiers is not None: + pq = tuple(self.policy_qualifiers) + else: + pq = None + + return hash((self.policy_identifier, pq)) + + @property + def policy_identifier(self) -> ObjectIdentifier: + return self._policy_identifier + + @property + def policy_qualifiers( + self, + ) -> list[str | UserNotice] | None: + return self._policy_qualifiers + + +class UserNotice: + def __init__( + self, + notice_reference: NoticeReference | None, + explicit_text: str | None, + ) -> None: + if notice_reference and not isinstance( + notice_reference, NoticeReference + ): + raise TypeError( + "notice_reference must be None or a NoticeReference" + ) + + self._notice_reference = notice_reference + self._explicit_text = explicit_text + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, UserNotice): + return NotImplemented + + return ( + self.notice_reference == other.notice_reference + and self.explicit_text == other.explicit_text + ) + + def __hash__(self) -> int: + return hash((self.notice_reference, self.explicit_text)) + + @property + def notice_reference(self) -> NoticeReference | None: + return self._notice_reference + + @property + def explicit_text(self) -> str | None: + return self._explicit_text + + +class NoticeReference: + def __init__( + self, + organization: str | None, + notice_numbers: typing.Iterable[int], + ) -> None: + self._organization = organization + notice_numbers = list(notice_numbers) + if not all(isinstance(x, int) for x in notice_numbers): + raise TypeError("notice_numbers must be a list of integers") + + self._notice_numbers = notice_numbers + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, NoticeReference): + return NotImplemented + + return ( + self.organization == other.organization + and self.notice_numbers == other.notice_numbers + ) + + def __hash__(self) -> int: + return hash((self.organization, tuple(self.notice_numbers))) + + @property + def organization(self) -> str | None: + return self._organization + + @property + def notice_numbers(self) -> list[int]: + return self._notice_numbers + + +class ExtendedKeyUsage(ExtensionType): + oid = ExtensionOID.EXTENDED_KEY_USAGE + + def __init__(self, usages: typing.Iterable[ObjectIdentifier]) -> None: + usages = list(usages) + if not all(isinstance(x, ObjectIdentifier) for x in usages): + raise TypeError( + "Every item in the usages list must be an ObjectIdentifier" + ) + + self._usages = usages + + __len__, __iter__, __getitem__ = _make_sequence_methods("_usages") + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, ExtendedKeyUsage): + return NotImplemented + + return self._usages == other._usages + + def __hash__(self) -> int: + return hash(tuple(self._usages)) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class OCSPNoCheck(ExtensionType): + oid = ExtensionOID.OCSP_NO_CHECK + + def __eq__(self, other: object) -> bool: + if not isinstance(other, OCSPNoCheck): + return NotImplemented + + return True + + def __hash__(self) -> int: + return hash(OCSPNoCheck) + + def __repr__(self) -> str: + return "" + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class PrecertPoison(ExtensionType): + oid = ExtensionOID.PRECERT_POISON + + def __eq__(self, other: object) -> bool: + if not isinstance(other, PrecertPoison): + return NotImplemented + + return True + + def __hash__(self) -> int: + return hash(PrecertPoison) + + def __repr__(self) -> str: + return "" + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class TLSFeature(ExtensionType): + oid = ExtensionOID.TLS_FEATURE + + def __init__(self, features: typing.Iterable[TLSFeatureType]) -> None: + features = list(features) + if ( + not all(isinstance(x, TLSFeatureType) for x in features) + or len(features) == 0 + ): + raise TypeError( + "features must be a list of elements from the TLSFeatureType " + "enum" + ) + + self._features = features + + __len__, __iter__, __getitem__ = _make_sequence_methods("_features") + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, TLSFeature): + return NotImplemented + + return self._features == other._features + + def __hash__(self) -> int: + return hash(tuple(self._features)) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class TLSFeatureType(utils.Enum): + # status_request is defined in RFC 6066 and is used for what is commonly + # called OCSP Must-Staple when present in the TLS Feature extension in an + # X.509 certificate. + status_request = 5 + # status_request_v2 is defined in RFC 6961 and allows multiple OCSP + # responses to be provided. It is not currently in use by clients or + # servers. + status_request_v2 = 17 + + +_TLS_FEATURE_TYPE_TO_ENUM = {x.value: x for x in TLSFeatureType} + + +class InhibitAnyPolicy(ExtensionType): + oid = ExtensionOID.INHIBIT_ANY_POLICY + + def __init__(self, skip_certs: int) -> None: + if not isinstance(skip_certs, int): + raise TypeError("skip_certs must be an integer") + + if skip_certs < 0: + raise ValueError("skip_certs must be a non-negative integer") + + self._skip_certs = skip_certs + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, InhibitAnyPolicy): + return NotImplemented + + return self.skip_certs == other.skip_certs + + def __hash__(self) -> int: + return hash(self.skip_certs) + + @property + def skip_certs(self) -> int: + return self._skip_certs + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class KeyUsage(ExtensionType): + oid = ExtensionOID.KEY_USAGE + + def __init__( + self, + digital_signature: bool, + content_commitment: bool, + key_encipherment: bool, + data_encipherment: bool, + key_agreement: bool, + key_cert_sign: bool, + crl_sign: bool, + encipher_only: bool, + decipher_only: bool, + ) -> None: + if not key_agreement and (encipher_only or decipher_only): + raise ValueError( + "encipher_only and decipher_only can only be true when " + "key_agreement is true" + ) + + self._digital_signature = digital_signature + self._content_commitment = content_commitment + self._key_encipherment = key_encipherment + self._data_encipherment = data_encipherment + self._key_agreement = key_agreement + self._key_cert_sign = key_cert_sign + self._crl_sign = crl_sign + self._encipher_only = encipher_only + self._decipher_only = decipher_only + + @property + def digital_signature(self) -> bool: + return self._digital_signature + + @property + def content_commitment(self) -> bool: + return self._content_commitment + + @property + def key_encipherment(self) -> bool: + return self._key_encipherment + + @property + def data_encipherment(self) -> bool: + return self._data_encipherment + + @property + def key_agreement(self) -> bool: + return self._key_agreement + + @property + def key_cert_sign(self) -> bool: + return self._key_cert_sign + + @property + def crl_sign(self) -> bool: + return self._crl_sign + + @property + def encipher_only(self) -> bool: + if not self.key_agreement: + raise ValueError( + "encipher_only is undefined unless key_agreement is true" + ) + else: + return self._encipher_only + + @property + def decipher_only(self) -> bool: + if not self.key_agreement: + raise ValueError( + "decipher_only is undefined unless key_agreement is true" + ) + else: + return self._decipher_only + + def __repr__(self) -> str: + try: + encipher_only = self.encipher_only + decipher_only = self.decipher_only + except ValueError: + # Users found None confusing because even though encipher/decipher + # have no meaning unless key_agreement is true, to construct an + # instance of the class you still need to pass False. + encipher_only = False + decipher_only = False + + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, KeyUsage): + return NotImplemented + + return ( + self.digital_signature == other.digital_signature + and self.content_commitment == other.content_commitment + and self.key_encipherment == other.key_encipherment + and self.data_encipherment == other.data_encipherment + and self.key_agreement == other.key_agreement + and self.key_cert_sign == other.key_cert_sign + and self.crl_sign == other.crl_sign + and self._encipher_only == other._encipher_only + and self._decipher_only == other._decipher_only + ) + + def __hash__(self) -> int: + return hash( + ( + self.digital_signature, + self.content_commitment, + self.key_encipherment, + self.data_encipherment, + self.key_agreement, + self.key_cert_sign, + self.crl_sign, + self._encipher_only, + self._decipher_only, + ) + ) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class NameConstraints(ExtensionType): + oid = ExtensionOID.NAME_CONSTRAINTS + + def __init__( + self, + permitted_subtrees: typing.Iterable[GeneralName] | None, + excluded_subtrees: typing.Iterable[GeneralName] | None, + ) -> None: + if permitted_subtrees is not None: + permitted_subtrees = list(permitted_subtrees) + if not permitted_subtrees: + raise ValueError( + "permitted_subtrees must be a non-empty list or None" + ) + if not all(isinstance(x, GeneralName) for x in permitted_subtrees): + raise TypeError( + "permitted_subtrees must be a list of GeneralName objects " + "or None" + ) + + self._validate_tree(permitted_subtrees) + + if excluded_subtrees is not None: + excluded_subtrees = list(excluded_subtrees) + if not excluded_subtrees: + raise ValueError( + "excluded_subtrees must be a non-empty list or None" + ) + if not all(isinstance(x, GeneralName) for x in excluded_subtrees): + raise TypeError( + "excluded_subtrees must be a list of GeneralName objects " + "or None" + ) + + self._validate_tree(excluded_subtrees) + + if permitted_subtrees is None and excluded_subtrees is None: + raise ValueError( + "At least one of permitted_subtrees and excluded_subtrees " + "must not be None" + ) + + self._permitted_subtrees = permitted_subtrees + self._excluded_subtrees = excluded_subtrees + + def __eq__(self, other: object) -> bool: + if not isinstance(other, NameConstraints): + return NotImplemented + + return ( + self.excluded_subtrees == other.excluded_subtrees + and self.permitted_subtrees == other.permitted_subtrees + ) + + def _validate_tree(self, tree: typing.Iterable[GeneralName]) -> None: + self._validate_ip_name(tree) + self._validate_dns_name(tree) + + def _validate_ip_name(self, tree: typing.Iterable[GeneralName]) -> None: + if any( + isinstance(name, IPAddress) + and not isinstance( + name.value, (ipaddress.IPv4Network, ipaddress.IPv6Network) + ) + for name in tree + ): + raise TypeError( + "IPAddress name constraints must be an IPv4Network or" + " IPv6Network object" + ) + + def _validate_dns_name(self, tree: typing.Iterable[GeneralName]) -> None: + if any( + isinstance(name, DNSName) and "*" in name.value for name in tree + ): + raise ValueError( + "DNSName name constraints must not contain the '*' wildcard" + " character" + ) + + def __repr__(self) -> str: + return ( + f"" + ) + + def __hash__(self) -> int: + if self.permitted_subtrees is not None: + ps: tuple[GeneralName, ...] | None = tuple(self.permitted_subtrees) + else: + ps = None + + if self.excluded_subtrees is not None: + es: tuple[GeneralName, ...] | None = tuple(self.excluded_subtrees) + else: + es = None + + return hash((ps, es)) + + @property + def permitted_subtrees( + self, + ) -> list[GeneralName] | None: + return self._permitted_subtrees + + @property + def excluded_subtrees( + self, + ) -> list[GeneralName] | None: + return self._excluded_subtrees + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class Extension(typing.Generic[ExtensionTypeVar]): + def __init__( + self, oid: ObjectIdentifier, critical: bool, value: ExtensionTypeVar + ) -> None: + if not isinstance(oid, ObjectIdentifier): + raise TypeError( + "oid argument must be an ObjectIdentifier instance." + ) + + if not isinstance(critical, bool): + raise TypeError("critical must be a boolean value") + + self._oid = oid + self._critical = critical + self._value = value + + @property + def oid(self) -> ObjectIdentifier: + return self._oid + + @property + def critical(self) -> bool: + return self._critical + + @property + def value(self) -> ExtensionTypeVar: + return self._value + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Extension): + return NotImplemented + + return ( + self.oid == other.oid + and self.critical == other.critical + and self.value == other.value + ) + + def __hash__(self) -> int: + return hash((self.oid, self.critical, self.value)) + + +class GeneralNames: + def __init__(self, general_names: typing.Iterable[GeneralName]) -> None: + general_names = list(general_names) + if not all(isinstance(x, GeneralName) for x in general_names): + raise TypeError( + "Every item in the general_names list must be an " + "object conforming to the GeneralName interface" + ) + + self._general_names = general_names + + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") + + @typing.overload + def get_values_for_type( + self, + type: type[DNSName] + | type[UniformResourceIdentifier] + | type[RFC822Name], + ) -> list[str]: ... + + @typing.overload + def get_values_for_type( + self, + type: type[DirectoryName], + ) -> list[Name]: ... + + @typing.overload + def get_values_for_type( + self, + type: type[RegisteredID], + ) -> list[ObjectIdentifier]: ... + + @typing.overload + def get_values_for_type( + self, type: type[IPAddress] + ) -> list[_IPAddressTypes]: ... + + @typing.overload + def get_values_for_type( + self, type: type[OtherName] + ) -> list[OtherName]: ... + + def get_values_for_type( + self, + type: type[DNSName] + | type[DirectoryName] + | type[IPAddress] + | type[OtherName] + | type[RFC822Name] + | type[RegisteredID] + | type[UniformResourceIdentifier], + ) -> ( + list[_IPAddressTypes] + | list[str] + | list[OtherName] + | list[Name] + | list[ObjectIdentifier] + ): + # Return the value of each GeneralName, except for OtherName instances + # which we return directly because it has two important properties not + # just one value. + objs = (i for i in self if isinstance(i, type)) + if type != OtherName: + return [i.value for i in objs] + return list(objs) + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, GeneralNames): + return NotImplemented + + return self._general_names == other._general_names + + def __hash__(self) -> int: + return hash(tuple(self._general_names)) + + +class SubjectAlternativeName(ExtensionType): + oid = ExtensionOID.SUBJECT_ALTERNATIVE_NAME + + def __init__(self, general_names: typing.Iterable[GeneralName]) -> None: + self._general_names = GeneralNames(general_names) + + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") + + @typing.overload + def get_values_for_type( + self, + type: type[DNSName] + | type[UniformResourceIdentifier] + | type[RFC822Name], + ) -> list[str]: ... + + @typing.overload + def get_values_for_type( + self, + type: type[DirectoryName], + ) -> list[Name]: ... + + @typing.overload + def get_values_for_type( + self, + type: type[RegisteredID], + ) -> list[ObjectIdentifier]: ... + + @typing.overload + def get_values_for_type( + self, type: type[IPAddress] + ) -> list[_IPAddressTypes]: ... + + @typing.overload + def get_values_for_type( + self, type: type[OtherName] + ) -> list[OtherName]: ... + + def get_values_for_type( + self, + type: type[DNSName] + | type[DirectoryName] + | type[IPAddress] + | type[OtherName] + | type[RFC822Name] + | type[RegisteredID] + | type[UniformResourceIdentifier], + ) -> ( + list[_IPAddressTypes] + | list[str] + | list[OtherName] + | list[Name] + | list[ObjectIdentifier] + ): + return self._general_names.get_values_for_type(type) + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, SubjectAlternativeName): + return NotImplemented + + return self._general_names == other._general_names + + def __hash__(self) -> int: + return hash(self._general_names) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class IssuerAlternativeName(ExtensionType): + oid = ExtensionOID.ISSUER_ALTERNATIVE_NAME + + def __init__(self, general_names: typing.Iterable[GeneralName]) -> None: + self._general_names = GeneralNames(general_names) + + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") + + @typing.overload + def get_values_for_type( + self, + type: type[DNSName] + | type[UniformResourceIdentifier] + | type[RFC822Name], + ) -> list[str]: ... + + @typing.overload + def get_values_for_type( + self, + type: type[DirectoryName], + ) -> list[Name]: ... + + @typing.overload + def get_values_for_type( + self, + type: type[RegisteredID], + ) -> list[ObjectIdentifier]: ... + + @typing.overload + def get_values_for_type( + self, type: type[IPAddress] + ) -> list[_IPAddressTypes]: ... + + @typing.overload + def get_values_for_type( + self, type: type[OtherName] + ) -> list[OtherName]: ... + + def get_values_for_type( + self, + type: type[DNSName] + | type[DirectoryName] + | type[IPAddress] + | type[OtherName] + | type[RFC822Name] + | type[RegisteredID] + | type[UniformResourceIdentifier], + ) -> ( + list[_IPAddressTypes] + | list[str] + | list[OtherName] + | list[Name] + | list[ObjectIdentifier] + ): + return self._general_names.get_values_for_type(type) + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, IssuerAlternativeName): + return NotImplemented + + return self._general_names == other._general_names + + def __hash__(self) -> int: + return hash(self._general_names) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class CertificateIssuer(ExtensionType): + oid = CRLEntryExtensionOID.CERTIFICATE_ISSUER + + def __init__(self, general_names: typing.Iterable[GeneralName]) -> None: + self._general_names = GeneralNames(general_names) + + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") + + @typing.overload + def get_values_for_type( + self, + type: type[DNSName] + | type[UniformResourceIdentifier] + | type[RFC822Name], + ) -> list[str]: ... + + @typing.overload + def get_values_for_type( + self, + type: type[DirectoryName], + ) -> list[Name]: ... + + @typing.overload + def get_values_for_type( + self, + type: type[RegisteredID], + ) -> list[ObjectIdentifier]: ... + + @typing.overload + def get_values_for_type( + self, type: type[IPAddress] + ) -> list[_IPAddressTypes]: ... + + @typing.overload + def get_values_for_type( + self, type: type[OtherName] + ) -> list[OtherName]: ... + + def get_values_for_type( + self, + type: type[DNSName] + | type[DirectoryName] + | type[IPAddress] + | type[OtherName] + | type[RFC822Name] + | type[RegisteredID] + | type[UniformResourceIdentifier], + ) -> ( + list[_IPAddressTypes] + | list[str] + | list[OtherName] + | list[Name] + | list[ObjectIdentifier] + ): + return self._general_names.get_values_for_type(type) + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, CertificateIssuer): + return NotImplemented + + return self._general_names == other._general_names + + def __hash__(self) -> int: + return hash(self._general_names) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class CRLReason(ExtensionType): + oid = CRLEntryExtensionOID.CRL_REASON + + def __init__(self, reason: ReasonFlags) -> None: + if not isinstance(reason, ReasonFlags): + raise TypeError("reason must be an element from ReasonFlags") + + self._reason = reason + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, CRLReason): + return NotImplemented + + return self.reason == other.reason + + def __hash__(self) -> int: + return hash(self.reason) + + @property + def reason(self) -> ReasonFlags: + return self._reason + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class InvalidityDate(ExtensionType): + oid = CRLEntryExtensionOID.INVALIDITY_DATE + + def __init__(self, invalidity_date: datetime.datetime) -> None: + if not isinstance(invalidity_date, datetime.datetime): + raise TypeError("invalidity_date must be a datetime.datetime") + + self._invalidity_date = invalidity_date + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, InvalidityDate): + return NotImplemented + + return self.invalidity_date == other.invalidity_date + + def __hash__(self) -> int: + return hash(self.invalidity_date) + + @property + def invalidity_date(self) -> datetime.datetime: + return self._invalidity_date + + @property + def invalidity_date_utc(self) -> datetime.datetime: + if self._invalidity_date.tzinfo is None: + return self._invalidity_date.replace(tzinfo=datetime.timezone.utc) + else: + return self._invalidity_date.astimezone(tz=datetime.timezone.utc) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class PrecertificateSignedCertificateTimestamps(ExtensionType): + oid = ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS + + def __init__( + self, + signed_certificate_timestamps: typing.Iterable[ + SignedCertificateTimestamp + ], + ) -> None: + signed_certificate_timestamps = list(signed_certificate_timestamps) + if not all( + isinstance(sct, SignedCertificateTimestamp) + for sct in signed_certificate_timestamps + ): + raise TypeError( + "Every item in the signed_certificate_timestamps list must be " + "a SignedCertificateTimestamp" + ) + self._signed_certificate_timestamps = signed_certificate_timestamps + + __len__, __iter__, __getitem__ = _make_sequence_methods( + "_signed_certificate_timestamps" + ) + + def __repr__(self) -> str: + return f"" + + def __hash__(self) -> int: + return hash(tuple(self._signed_certificate_timestamps)) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, PrecertificateSignedCertificateTimestamps): + return NotImplemented + + return ( + self._signed_certificate_timestamps + == other._signed_certificate_timestamps + ) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class SignedCertificateTimestamps(ExtensionType): + oid = ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS + + def __init__( + self, + signed_certificate_timestamps: typing.Iterable[ + SignedCertificateTimestamp + ], + ) -> None: + signed_certificate_timestamps = list(signed_certificate_timestamps) + if not all( + isinstance(sct, SignedCertificateTimestamp) + for sct in signed_certificate_timestamps + ): + raise TypeError( + "Every item in the signed_certificate_timestamps list must be " + "a SignedCertificateTimestamp" + ) + self._signed_certificate_timestamps = signed_certificate_timestamps + + __len__, __iter__, __getitem__ = _make_sequence_methods( + "_signed_certificate_timestamps" + ) + + def __repr__(self) -> str: + return f"" + + def __hash__(self) -> int: + return hash(tuple(self._signed_certificate_timestamps)) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, SignedCertificateTimestamps): + return NotImplemented + + return ( + self._signed_certificate_timestamps + == other._signed_certificate_timestamps + ) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class OCSPNonce(ExtensionType): + oid = OCSPExtensionOID.NONCE + + def __init__(self, nonce: bytes) -> None: + if not isinstance(nonce, bytes): + raise TypeError("nonce must be bytes") + + self._nonce = nonce + + def __eq__(self, other: object) -> bool: + if not isinstance(other, OCSPNonce): + return NotImplemented + + return self.nonce == other.nonce + + def __hash__(self) -> int: + return hash(self.nonce) + + def __repr__(self) -> str: + return f"" + + @property + def nonce(self) -> bytes: + return self._nonce + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class OCSPAcceptableResponses(ExtensionType): + oid = OCSPExtensionOID.ACCEPTABLE_RESPONSES + + def __init__(self, responses: typing.Iterable[ObjectIdentifier]) -> None: + responses = list(responses) + if any(not isinstance(r, ObjectIdentifier) for r in responses): + raise TypeError("All responses must be ObjectIdentifiers") + + self._responses = responses + + def __eq__(self, other: object) -> bool: + if not isinstance(other, OCSPAcceptableResponses): + return NotImplemented + + return self._responses == other._responses + + def __hash__(self) -> int: + return hash(tuple(self._responses)) + + def __repr__(self) -> str: + return f"" + + def __iter__(self) -> typing.Iterator[ObjectIdentifier]: + return iter(self._responses) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class IssuingDistributionPoint(ExtensionType): + oid = ExtensionOID.ISSUING_DISTRIBUTION_POINT + + def __init__( + self, + full_name: typing.Iterable[GeneralName] | None, + relative_name: RelativeDistinguishedName | None, + only_contains_user_certs: bool, + only_contains_ca_certs: bool, + only_some_reasons: frozenset[ReasonFlags] | None, + indirect_crl: bool, + only_contains_attribute_certs: bool, + ) -> None: + if full_name is not None: + full_name = list(full_name) + + if only_some_reasons and ( + not isinstance(only_some_reasons, frozenset) + or not all(isinstance(x, ReasonFlags) for x in only_some_reasons) + ): + raise TypeError( + "only_some_reasons must be None or frozenset of ReasonFlags" + ) + + if only_some_reasons and ( + ReasonFlags.unspecified in only_some_reasons + or ReasonFlags.remove_from_crl in only_some_reasons + ): + raise ValueError( + "unspecified and remove_from_crl are not valid reasons in an " + "IssuingDistributionPoint" + ) + + if not ( + isinstance(only_contains_user_certs, bool) + and isinstance(only_contains_ca_certs, bool) + and isinstance(indirect_crl, bool) + and isinstance(only_contains_attribute_certs, bool) + ): + raise TypeError( + "only_contains_user_certs, only_contains_ca_certs, " + "indirect_crl and only_contains_attribute_certs " + "must all be boolean." + ) + + # Per RFC5280 Section 5.2.5, the Issuing Distribution Point extension + # in a CRL can have only one of onlyContainsUserCerts, + # onlyContainsCACerts, onlyContainsAttributeCerts set to TRUE. + crl_constraints = [ + only_contains_user_certs, + only_contains_ca_certs, + only_contains_attribute_certs, + ] + + if len([x for x in crl_constraints if x]) > 1: + raise ValueError( + "Only one of the following can be set to True: " + "only_contains_user_certs, only_contains_ca_certs, " + "only_contains_attribute_certs" + ) + + if not any( + [ + only_contains_user_certs, + only_contains_ca_certs, + indirect_crl, + only_contains_attribute_certs, + full_name, + relative_name, + only_some_reasons, + ] + ): + raise ValueError( + "Cannot create empty extension: " + "if only_contains_user_certs, only_contains_ca_certs, " + "indirect_crl, and only_contains_attribute_certs are all False" + ", then either full_name, relative_name, or only_some_reasons " + "must have a value." + ) + + self._only_contains_user_certs = only_contains_user_certs + self._only_contains_ca_certs = only_contains_ca_certs + self._indirect_crl = indirect_crl + self._only_contains_attribute_certs = only_contains_attribute_certs + self._only_some_reasons = only_some_reasons + self._full_name = full_name + self._relative_name = relative_name + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, IssuingDistributionPoint): + return NotImplemented + + return ( + self.full_name == other.full_name + and self.relative_name == other.relative_name + and self.only_contains_user_certs == other.only_contains_user_certs + and self.only_contains_ca_certs == other.only_contains_ca_certs + and self.only_some_reasons == other.only_some_reasons + and self.indirect_crl == other.indirect_crl + and self.only_contains_attribute_certs + == other.only_contains_attribute_certs + ) + + def __hash__(self) -> int: + return hash( + ( + self.full_name, + self.relative_name, + self.only_contains_user_certs, + self.only_contains_ca_certs, + self.only_some_reasons, + self.indirect_crl, + self.only_contains_attribute_certs, + ) + ) + + @property + def full_name(self) -> list[GeneralName] | None: + return self._full_name + + @property + def relative_name(self) -> RelativeDistinguishedName | None: + return self._relative_name + + @property + def only_contains_user_certs(self) -> bool: + return self._only_contains_user_certs + + @property + def only_contains_ca_certs(self) -> bool: + return self._only_contains_ca_certs + + @property + def only_some_reasons( + self, + ) -> frozenset[ReasonFlags] | None: + return self._only_some_reasons + + @property + def indirect_crl(self) -> bool: + return self._indirect_crl + + @property + def only_contains_attribute_certs(self) -> bool: + return self._only_contains_attribute_certs + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class MSCertificateTemplate(ExtensionType): + oid = ExtensionOID.MS_CERTIFICATE_TEMPLATE + + def __init__( + self, + template_id: ObjectIdentifier, + major_version: int | None, + minor_version: int | None, + ) -> None: + if not isinstance(template_id, ObjectIdentifier): + raise TypeError("oid must be an ObjectIdentifier") + self._template_id = template_id + if ( + major_version is not None and not isinstance(major_version, int) + ) or ( + minor_version is not None and not isinstance(minor_version, int) + ): + raise TypeError( + "major_version and minor_version must be integers or None" + ) + self._major_version = major_version + self._minor_version = minor_version + + @property + def template_id(self) -> ObjectIdentifier: + return self._template_id + + @property + def major_version(self) -> int | None: + return self._major_version + + @property + def minor_version(self) -> int | None: + return self._minor_version + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, MSCertificateTemplate): + return NotImplemented + + return ( + self.template_id == other.template_id + and self.major_version == other.major_version + and self.minor_version == other.minor_version + ) + + def __hash__(self) -> int: + return hash((self.template_id, self.major_version, self.minor_version)) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class NamingAuthority: + def __init__( + self, + id: ObjectIdentifier | None, + url: str | None, + text: str | None, + ) -> None: + if id is not None and not isinstance(id, ObjectIdentifier): + raise TypeError("id must be an ObjectIdentifier") + + if url is not None and not isinstance(url, str): + raise TypeError("url must be a str") + + if text is not None and not isinstance(text, str): + raise TypeError("text must be a str") + + self._id = id + self._url = url + self._text = text + + @property + def id(self) -> ObjectIdentifier | None: + return self._id + + @property + def url(self) -> str | None: + return self._url + + @property + def text(self) -> str | None: + return self._text + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, NamingAuthority): + return NotImplemented + + return ( + self.id == other.id + and self.url == other.url + and self.text == other.text + ) + + def __hash__(self) -> int: + return hash( + ( + self.id, + self.url, + self.text, + ) + ) + + +class ProfessionInfo: + def __init__( + self, + naming_authority: NamingAuthority | None, + profession_items: typing.Iterable[str], + profession_oids: typing.Iterable[ObjectIdentifier] | None, + registration_number: str | None, + add_profession_info: bytes | None, + ) -> None: + if naming_authority is not None and not isinstance( + naming_authority, NamingAuthority + ): + raise TypeError("naming_authority must be a NamingAuthority") + + profession_items = list(profession_items) + if not all(isinstance(item, str) for item in profession_items): + raise TypeError( + "Every item in the profession_items list must be a str" + ) + + if profession_oids is not None: + profession_oids = list(profession_oids) + if not all( + isinstance(oid, ObjectIdentifier) for oid in profession_oids + ): + raise TypeError( + "Every item in the profession_oids list must be an " + "ObjectIdentifier" + ) + + if registration_number is not None and not isinstance( + registration_number, str + ): + raise TypeError("registration_number must be a str") + + if add_profession_info is not None and not isinstance( + add_profession_info, bytes + ): + raise TypeError("add_profession_info must be bytes") + + self._naming_authority = naming_authority + self._profession_items = profession_items + self._profession_oids = profession_oids + self._registration_number = registration_number + self._add_profession_info = add_profession_info + + @property + def naming_authority(self) -> NamingAuthority | None: + return self._naming_authority + + @property + def profession_items(self) -> list[str]: + return self._profession_items + + @property + def profession_oids(self) -> list[ObjectIdentifier] | None: + return self._profession_oids + + @property + def registration_number(self) -> str | None: + return self._registration_number + + @property + def add_profession_info(self) -> bytes | None: + return self._add_profession_info + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, ProfessionInfo): + return NotImplemented + + return ( + self.naming_authority == other.naming_authority + and self.profession_items == other.profession_items + and self.profession_oids == other.profession_oids + and self.registration_number == other.registration_number + and self.add_profession_info == other.add_profession_info + ) + + def __hash__(self) -> int: + if self.profession_oids is not None: + profession_oids = tuple(self.profession_oids) + else: + profession_oids = None + return hash( + ( + self.naming_authority, + tuple(self.profession_items), + profession_oids, + self.registration_number, + self.add_profession_info, + ) + ) + + +class Admission: + def __init__( + self, + admission_authority: GeneralName | None, + naming_authority: NamingAuthority | None, + profession_infos: typing.Iterable[ProfessionInfo], + ) -> None: + if admission_authority is not None and not isinstance( + admission_authority, GeneralName + ): + raise TypeError("admission_authority must be a GeneralName") + + if naming_authority is not None and not isinstance( + naming_authority, NamingAuthority + ): + raise TypeError("naming_authority must be a NamingAuthority") + + profession_infos = list(profession_infos) + if not all( + isinstance(info, ProfessionInfo) for info in profession_infos + ): + raise TypeError( + "Every item in the profession_infos list must be a " + "ProfessionInfo" + ) + + self._admission_authority = admission_authority + self._naming_authority = naming_authority + self._profession_infos = profession_infos + + @property + def admission_authority(self) -> GeneralName | None: + return self._admission_authority + + @property + def naming_authority(self) -> NamingAuthority | None: + return self._naming_authority + + @property + def profession_infos(self) -> list[ProfessionInfo]: + return self._profession_infos + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Admission): + return NotImplemented + + return ( + self.admission_authority == other.admission_authority + and self.naming_authority == other.naming_authority + and self.profession_infos == other.profession_infos + ) + + def __hash__(self) -> int: + return hash( + ( + self.admission_authority, + self.naming_authority, + tuple(self.profession_infos), + ) + ) + + +class Admissions(ExtensionType): + oid = ExtensionOID.ADMISSIONS + + def __init__( + self, + authority: GeneralName | None, + admissions: typing.Iterable[Admission], + ) -> None: + if authority is not None and not isinstance(authority, GeneralName): + raise TypeError("authority must be a GeneralName") + + admissions = list(admissions) + if not all( + isinstance(admission, Admission) for admission in admissions + ): + raise TypeError( + "Every item in the contents_of_admissions list must be an " + "Admission" + ) + + self._authority = authority + self._admissions = admissions + + __len__, __iter__, __getitem__ = _make_sequence_methods("_admissions") + + @property + def authority(self) -> GeneralName | None: + return self._authority + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Admissions): + return NotImplemented + + return ( + self.authority == other.authority + and self._admissions == other._admissions + ) + + def __hash__(self) -> int: + return hash((self.authority, tuple(self._admissions))) + + def public_bytes(self) -> bytes: + return rust_x509.encode_extension_value(self) + + +class UnrecognizedExtension(ExtensionType): + def __init__(self, oid: ObjectIdentifier, value: bytes) -> None: + if not isinstance(oid, ObjectIdentifier): + raise TypeError("oid must be an ObjectIdentifier") + self._oid = oid + self._value = value + + @property + def oid(self) -> ObjectIdentifier: # type: ignore[override] + return self._oid + + @property + def value(self) -> bytes: + return self._value + + def __repr__(self) -> str: + return ( + f"" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, UnrecognizedExtension): + return NotImplemented + + return self.oid == other.oid and self.value == other.value + + def __hash__(self) -> int: + return hash((self.oid, self.value)) + + def public_bytes(self) -> bytes: + return self.value diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/general_name.py b/venv/lib/python3.11/site-packages/cryptography/x509/general_name.py new file mode 100644 index 0000000..672f287 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/x509/general_name.py @@ -0,0 +1,281 @@ +# 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 annotations + +import abc +import ipaddress +import typing +from email.utils import parseaddr + +from cryptography.x509.name import Name +from cryptography.x509.oid import ObjectIdentifier + +_IPAddressTypes = typing.Union[ + ipaddress.IPv4Address, + ipaddress.IPv6Address, + ipaddress.IPv4Network, + ipaddress.IPv6Network, +] + + +class UnsupportedGeneralNameType(Exception): + pass + + +class GeneralName(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def value(self) -> typing.Any: + """ + Return the value of the object + """ + + +class RFC822Name(GeneralName): + def __init__(self, value: str) -> None: + if isinstance(value, str): + try: + value.encode("ascii") + except UnicodeEncodeError: + raise ValueError( + "RFC822Name values should be passed as an A-label string. " + "This means unicode characters should be encoded via " + "a library like idna." + ) + else: + raise TypeError("value must be string") + + name, address = parseaddr(value) + if name or not address: + # parseaddr has found a name (e.g. Name ) or the entire + # value is an empty string. + raise ValueError("Invalid rfc822name value") + + self._value = value + + @property + def value(self) -> str: + return self._value + + @classmethod + def _init_without_validation(cls, value: str) -> RFC822Name: + instance = cls.__new__(cls) + instance._value = value + return instance + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, RFC822Name): + return NotImplemented + + return self.value == other.value + + def __hash__(self) -> int: + return hash(self.value) + + +class DNSName(GeneralName): + def __init__(self, value: str) -> None: + if isinstance(value, str): + try: + value.encode("ascii") + except UnicodeEncodeError: + raise ValueError( + "DNSName values should be passed as an A-label string. " + "This means unicode characters should be encoded via " + "a library like idna." + ) + else: + raise TypeError("value must be string") + + self._value = value + + @property + def value(self) -> str: + return self._value + + @classmethod + def _init_without_validation(cls, value: str) -> DNSName: + instance = cls.__new__(cls) + instance._value = value + return instance + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, DNSName): + return NotImplemented + + return self.value == other.value + + def __hash__(self) -> int: + return hash(self.value) + + +class UniformResourceIdentifier(GeneralName): + def __init__(self, value: str) -> None: + if isinstance(value, str): + try: + value.encode("ascii") + except UnicodeEncodeError: + raise ValueError( + "URI values should be passed as an A-label string. " + "This means unicode characters should be encoded via " + "a library like idna." + ) + else: + raise TypeError("value must be string") + + self._value = value + + @property + def value(self) -> str: + return self._value + + @classmethod + def _init_without_validation(cls, value: str) -> UniformResourceIdentifier: + instance = cls.__new__(cls) + instance._value = value + return instance + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, UniformResourceIdentifier): + return NotImplemented + + return self.value == other.value + + def __hash__(self) -> int: + return hash(self.value) + + +class DirectoryName(GeneralName): + def __init__(self, value: Name) -> None: + if not isinstance(value, Name): + raise TypeError("value must be a Name") + + self._value = value + + @property + def value(self) -> Name: + return self._value + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, DirectoryName): + return NotImplemented + + return self.value == other.value + + def __hash__(self) -> int: + return hash(self.value) + + +class RegisteredID(GeneralName): + def __init__(self, value: ObjectIdentifier) -> None: + if not isinstance(value, ObjectIdentifier): + raise TypeError("value must be an ObjectIdentifier") + + self._value = value + + @property + def value(self) -> ObjectIdentifier: + return self._value + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, RegisteredID): + return NotImplemented + + return self.value == other.value + + def __hash__(self) -> int: + return hash(self.value) + + +class IPAddress(GeneralName): + def __init__(self, value: _IPAddressTypes) -> None: + if not isinstance( + value, + ( + ipaddress.IPv4Address, + ipaddress.IPv6Address, + ipaddress.IPv4Network, + ipaddress.IPv6Network, + ), + ): + raise TypeError( + "value must be an instance of ipaddress.IPv4Address, " + "ipaddress.IPv6Address, ipaddress.IPv4Network, or " + "ipaddress.IPv6Network" + ) + + self._value = value + + @property + def value(self) -> _IPAddressTypes: + return self._value + + def _packed(self) -> bytes: + if isinstance( + self.value, (ipaddress.IPv4Address, ipaddress.IPv6Address) + ): + return self.value.packed + else: + return ( + self.value.network_address.packed + self.value.netmask.packed + ) + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, IPAddress): + return NotImplemented + + return self.value == other.value + + def __hash__(self) -> int: + return hash(self.value) + + +class OtherName(GeneralName): + def __init__(self, type_id: ObjectIdentifier, value: bytes) -> None: + if not isinstance(type_id, ObjectIdentifier): + raise TypeError("type_id must be an ObjectIdentifier") + if not isinstance(value, bytes): + raise TypeError("value must be a binary string") + + self._type_id = type_id + self._value = value + + @property + def type_id(self) -> ObjectIdentifier: + return self._type_id + + @property + def value(self) -> bytes: + return self._value + + def __repr__(self) -> str: + return f"" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, OtherName): + return NotImplemented + + return self.type_id == other.type_id and self.value == other.value + + def __hash__(self) -> int: + return hash((self.type_id, self.value)) diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/name.py b/venv/lib/python3.11/site-packages/cryptography/x509/name.py new file mode 100644 index 0000000..1b6b89d --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/x509/name.py @@ -0,0 +1,465 @@ +# 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 annotations + +import binascii +import re +import sys +import typing +import warnings + +from cryptography import utils +from cryptography.hazmat.bindings._rust import x509 as rust_x509 +from cryptography.x509.oid import NameOID, ObjectIdentifier + + +class _ASN1Type(utils.Enum): + BitString = 3 + OctetString = 4 + UTF8String = 12 + NumericString = 18 + PrintableString = 19 + T61String = 20 + IA5String = 22 + UTCTime = 23 + GeneralizedTime = 24 + VisibleString = 26 + UniversalString = 28 + BMPString = 30 + + +_ASN1_TYPE_TO_ENUM = {i.value: i for i in _ASN1Type} +_NAMEOID_DEFAULT_TYPE: dict[ObjectIdentifier, _ASN1Type] = { + NameOID.COUNTRY_NAME: _ASN1Type.PrintableString, + NameOID.JURISDICTION_COUNTRY_NAME: _ASN1Type.PrintableString, + NameOID.SERIAL_NUMBER: _ASN1Type.PrintableString, + NameOID.DN_QUALIFIER: _ASN1Type.PrintableString, + NameOID.EMAIL_ADDRESS: _ASN1Type.IA5String, + NameOID.DOMAIN_COMPONENT: _ASN1Type.IA5String, +} + +# Type alias +_OidNameMap = typing.Mapping[ObjectIdentifier, str] +_NameOidMap = typing.Mapping[str, ObjectIdentifier] + +#: Short attribute names from RFC 4514: +#: https://tools.ietf.org/html/rfc4514#page-7 +_NAMEOID_TO_NAME: _OidNameMap = { + NameOID.COMMON_NAME: "CN", + NameOID.LOCALITY_NAME: "L", + NameOID.STATE_OR_PROVINCE_NAME: "ST", + NameOID.ORGANIZATION_NAME: "O", + NameOID.ORGANIZATIONAL_UNIT_NAME: "OU", + NameOID.COUNTRY_NAME: "C", + NameOID.STREET_ADDRESS: "STREET", + NameOID.DOMAIN_COMPONENT: "DC", + NameOID.USER_ID: "UID", +} +_NAME_TO_NAMEOID = {v: k for k, v in _NAMEOID_TO_NAME.items()} + +_NAMEOID_LENGTH_LIMIT = { + NameOID.COUNTRY_NAME: (2, 2), + NameOID.JURISDICTION_COUNTRY_NAME: (2, 2), + NameOID.COMMON_NAME: (1, 64), +} + + +def _escape_dn_value(val: str | bytes) -> str: + """Escape special characters in RFC4514 Distinguished Name value.""" + + if not val: + return "" + + # RFC 4514 Section 2.4 defines the value as being the # (U+0023) character + # followed by the hexadecimal encoding of the octets. + if isinstance(val, bytes): + return "#" + binascii.hexlify(val).decode("utf8") + + # See https://tools.ietf.org/html/rfc4514#section-2.4 + val = val.replace("\\", "\\\\") + val = val.replace('"', '\\"') + val = val.replace("+", "\\+") + val = val.replace(",", "\\,") + val = val.replace(";", "\\;") + val = val.replace("<", "\\<") + val = val.replace(">", "\\>") + val = val.replace("\0", "\\00") + + if val[0] in ("#", " "): + val = "\\" + val + if val[-1] == " ": + val = val[:-1] + "\\ " + + return val + + +def _unescape_dn_value(val: str) -> str: + if not val: + return "" + + # See https://tools.ietf.org/html/rfc4514#section-3 + + # special = escaped / SPACE / SHARP / EQUALS + # escaped = DQUOTE / PLUS / COMMA / SEMI / LANGLE / RANGLE + def sub(m): + val = m.group(1) + # Regular escape + if len(val) == 1: + return val + # Hex-value scape + return chr(int(val, 16)) + + return _RFC4514NameParser._PAIR_RE.sub(sub, val) + + +class NameAttribute: + def __init__( + self, + oid: ObjectIdentifier, + value: str | bytes, + _type: _ASN1Type | None = None, + *, + _validate: bool = True, + ) -> None: + if not isinstance(oid, ObjectIdentifier): + raise TypeError( + "oid argument must be an ObjectIdentifier instance." + ) + if _type == _ASN1Type.BitString: + if oid != NameOID.X500_UNIQUE_IDENTIFIER: + raise TypeError( + "oid must be X500_UNIQUE_IDENTIFIER for BitString type." + ) + if not isinstance(value, bytes): + raise TypeError("value must be bytes for BitString") + else: + if not isinstance(value, str): + raise TypeError("value argument must be a str") + + length_limits = _NAMEOID_LENGTH_LIMIT.get(oid) + if length_limits is not None: + min_length, max_length = length_limits + assert isinstance(value, str) + c_len = len(value.encode("utf8")) + if c_len < min_length or c_len > max_length: + msg = ( + f"Attribute's length must be >= {min_length} and " + f"<= {max_length}, but it was {c_len}" + ) + if _validate is True: + raise ValueError(msg) + else: + warnings.warn(msg, stacklevel=2) + + # The appropriate ASN1 string type varies by OID and is defined across + # multiple RFCs including 2459, 3280, and 5280. In general UTF8String + # is preferred (2459), but 3280 and 5280 specify several OIDs with + # alternate types. This means when we see the sentinel value we need + # to look up whether the OID has a non-UTF8 type. If it does, set it + # to that. Otherwise, UTF8! + if _type is None: + _type = _NAMEOID_DEFAULT_TYPE.get(oid, _ASN1Type.UTF8String) + + if not isinstance(_type, _ASN1Type): + raise TypeError("_type must be from the _ASN1Type enum") + + self._oid = oid + self._value = value + self._type = _type + + @property + def oid(self) -> ObjectIdentifier: + return self._oid + + @property + def value(self) -> str | bytes: + return self._value + + @property + def rfc4514_attribute_name(self) -> str: + """ + The short attribute name (for example "CN") if available, + otherwise the OID dotted string. + """ + return _NAMEOID_TO_NAME.get(self.oid, self.oid.dotted_string) + + def rfc4514_string( + self, attr_name_overrides: _OidNameMap | None = None + ) -> str: + """ + Format as RFC4514 Distinguished Name string. + + Use short attribute name if available, otherwise fall back to OID + dotted string. + """ + attr_name = ( + attr_name_overrides.get(self.oid) if attr_name_overrides else None + ) + if attr_name is None: + attr_name = self.rfc4514_attribute_name + + return f"{attr_name}={_escape_dn_value(self.value)}" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, NameAttribute): + return NotImplemented + + return self.oid == other.oid and self.value == other.value + + def __hash__(self) -> int: + return hash((self.oid, self.value)) + + def __repr__(self) -> str: + return f"" + + +class RelativeDistinguishedName: + def __init__(self, attributes: typing.Iterable[NameAttribute]): + attributes = list(attributes) + if not attributes: + raise ValueError("a relative distinguished name cannot be empty") + if not all(isinstance(x, NameAttribute) for x in attributes): + raise TypeError("attributes must be an iterable of NameAttribute") + + # Keep list and frozenset to preserve attribute order where it matters + self._attributes = attributes + self._attribute_set = frozenset(attributes) + + if len(self._attribute_set) != len(attributes): + raise ValueError("duplicate attributes are not allowed") + + def get_attributes_for_oid( + self, oid: ObjectIdentifier + ) -> list[NameAttribute]: + return [i for i in self if i.oid == oid] + + def rfc4514_string( + self, attr_name_overrides: _OidNameMap | None = None + ) -> str: + """ + Format as RFC4514 Distinguished Name string. + + Within each RDN, attributes are joined by '+', although that is rarely + used in certificates. + """ + return "+".join( + attr.rfc4514_string(attr_name_overrides) + for attr in self._attributes + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, RelativeDistinguishedName): + return NotImplemented + + return self._attribute_set == other._attribute_set + + def __hash__(self) -> int: + return hash(self._attribute_set) + + def __iter__(self) -> typing.Iterator[NameAttribute]: + return iter(self._attributes) + + def __len__(self) -> int: + return len(self._attributes) + + def __repr__(self) -> str: + return f"" + + +class Name: + @typing.overload + def __init__(self, attributes: typing.Iterable[NameAttribute]) -> None: ... + + @typing.overload + def __init__( + self, attributes: typing.Iterable[RelativeDistinguishedName] + ) -> None: ... + + def __init__( + self, + attributes: typing.Iterable[NameAttribute | RelativeDistinguishedName], + ) -> None: + attributes = list(attributes) + if all(isinstance(x, NameAttribute) for x in attributes): + self._attributes = [ + RelativeDistinguishedName([typing.cast(NameAttribute, x)]) + for x in attributes + ] + elif all(isinstance(x, RelativeDistinguishedName) for x in attributes): + self._attributes = typing.cast( + typing.List[RelativeDistinguishedName], attributes + ) + else: + raise TypeError( + "attributes must be a list of NameAttribute" + " or a list RelativeDistinguishedName" + ) + + @classmethod + def from_rfc4514_string( + cls, + data: str, + attr_name_overrides: _NameOidMap | None = None, + ) -> Name: + return _RFC4514NameParser(data, attr_name_overrides or {}).parse() + + def rfc4514_string( + self, attr_name_overrides: _OidNameMap | None = None + ) -> str: + """ + Format as RFC4514 Distinguished Name string. + For example 'CN=foobar.com,O=Foo Corp,C=US' + + An X.509 name is a two-level structure: a list of sets of attributes. + Each list element is separated by ',' and within each list element, set + elements are separated by '+'. The latter is almost never used in + real world certificates. According to RFC4514 section 2.1 the + RDNSequence must be reversed when converting to string representation. + """ + return ",".join( + attr.rfc4514_string(attr_name_overrides) + for attr in reversed(self._attributes) + ) + + def get_attributes_for_oid( + self, oid: ObjectIdentifier + ) -> list[NameAttribute]: + return [i for i in self if i.oid == oid] + + @property + def rdns(self) -> list[RelativeDistinguishedName]: + return self._attributes + + def public_bytes(self, backend: typing.Any = None) -> bytes: + return rust_x509.encode_name_bytes(self) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Name): + return NotImplemented + + return self._attributes == other._attributes + + def __hash__(self) -> int: + # TODO: this is relatively expensive, if this looks like a bottleneck + # for you, consider optimizing! + return hash(tuple(self._attributes)) + + def __iter__(self) -> typing.Iterator[NameAttribute]: + for rdn in self._attributes: + yield from rdn + + def __len__(self) -> int: + return sum(len(rdn) for rdn in self._attributes) + + def __repr__(self) -> str: + rdns = ",".join(attr.rfc4514_string() for attr in self._attributes) + return f"" + + +class _RFC4514NameParser: + _OID_RE = re.compile(r"(0|([1-9]\d*))(\.(0|([1-9]\d*)))+") + _DESCR_RE = re.compile(r"[a-zA-Z][a-zA-Z\d-]*") + + _PAIR = r"\\([\\ #=\"\+,;<>]|[\da-zA-Z]{2})" + _PAIR_RE = re.compile(_PAIR) + _LUTF1 = r"[\x01-\x1f\x21\x24-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]" + _SUTF1 = r"[\x01-\x21\x23-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]" + _TUTF1 = r"[\x01-\x1F\x21\x23-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]" + _UTFMB = rf"[\x80-{chr(sys.maxunicode)}]" + _LEADCHAR = rf"{_LUTF1}|{_UTFMB}" + _STRINGCHAR = rf"{_SUTF1}|{_UTFMB}" + _TRAILCHAR = rf"{_TUTF1}|{_UTFMB}" + _STRING_RE = re.compile( + rf""" + ( + ({_LEADCHAR}|{_PAIR}) + ( + ({_STRINGCHAR}|{_PAIR})* + ({_TRAILCHAR}|{_PAIR}) + )? + )? + """, + re.VERBOSE, + ) + _HEXSTRING_RE = re.compile(r"#([\da-zA-Z]{2})+") + + def __init__(self, data: str, attr_name_overrides: _NameOidMap) -> None: + self._data = data + self._idx = 0 + + self._attr_name_overrides = attr_name_overrides + + def _has_data(self) -> bool: + return self._idx < len(self._data) + + def _peek(self) -> str | None: + if self._has_data(): + return self._data[self._idx] + return None + + def _read_char(self, ch: str) -> None: + if self._peek() != ch: + raise ValueError + self._idx += 1 + + def _read_re(self, pat) -> str: + match = pat.match(self._data, pos=self._idx) + if match is None: + raise ValueError + val = match.group() + self._idx += len(val) + return val + + def parse(self) -> Name: + """ + Parses the `data` string and converts it to a Name. + + According to RFC4514 section 2.1 the RDNSequence must be + reversed when converting to string representation. So, when + we parse it, we need to reverse again to get the RDNs on the + correct order. + """ + + if not self._has_data(): + return Name([]) + + rdns = [self._parse_rdn()] + + while self._has_data(): + self._read_char(",") + rdns.append(self._parse_rdn()) + + return Name(reversed(rdns)) + + def _parse_rdn(self) -> RelativeDistinguishedName: + nas = [self._parse_na()] + while self._peek() == "+": + self._read_char("+") + nas.append(self._parse_na()) + + return RelativeDistinguishedName(nas) + + def _parse_na(self) -> NameAttribute: + try: + oid_value = self._read_re(self._OID_RE) + except ValueError: + name = self._read_re(self._DESCR_RE) + oid = self._attr_name_overrides.get( + name, _NAME_TO_NAMEOID.get(name) + ) + if oid is None: + raise ValueError + else: + oid = ObjectIdentifier(oid_value) + + self._read_char("=") + if self._peek() == "#": + value = self._read_re(self._HEXSTRING_RE) + value = binascii.unhexlify(value[1:]).decode() + else: + raw_value = self._read_re(self._STRING_RE) + value = _unescape_dn_value(raw_value) + + return NameAttribute(oid, value) diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/ocsp.py b/venv/lib/python3.11/site-packages/cryptography/x509/ocsp.py new file mode 100644 index 0000000..5a011c4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/x509/ocsp.py @@ -0,0 +1,344 @@ +# 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 annotations + +import datetime +import typing + +from cryptography import utils, x509 +from cryptography.hazmat.bindings._rust import ocsp +from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives.asymmetric.types import ( + CertificateIssuerPrivateKeyTypes, +) +from cryptography.x509.base import ( + _EARLIEST_UTC_TIME, + _convert_to_naive_utc_time, + _reject_duplicate_extension, +) + + +class OCSPResponderEncoding(utils.Enum): + HASH = "By Hash" + NAME = "By Name" + + +class OCSPResponseStatus(utils.Enum): + SUCCESSFUL = 0 + MALFORMED_REQUEST = 1 + INTERNAL_ERROR = 2 + TRY_LATER = 3 + SIG_REQUIRED = 5 + UNAUTHORIZED = 6 + + +_ALLOWED_HASHES = ( + hashes.SHA1, + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, +) + + +def _verify_algorithm(algorithm: hashes.HashAlgorithm) -> None: + if not isinstance(algorithm, _ALLOWED_HASHES): + raise ValueError( + "Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512" + ) + + +class OCSPCertStatus(utils.Enum): + GOOD = 0 + REVOKED = 1 + UNKNOWN = 2 + + +class _SingleResponse: + def __init__( + self, + cert: x509.Certificate, + issuer: x509.Certificate, + algorithm: hashes.HashAlgorithm, + cert_status: OCSPCertStatus, + this_update: datetime.datetime, + next_update: datetime.datetime | None, + revocation_time: datetime.datetime | None, + revocation_reason: x509.ReasonFlags | None, + ): + if not isinstance(cert, x509.Certificate) or not isinstance( + issuer, x509.Certificate + ): + raise TypeError("cert and issuer must be a Certificate") + + _verify_algorithm(algorithm) + if not isinstance(this_update, datetime.datetime): + raise TypeError("this_update must be a datetime object") + if next_update is not None and not isinstance( + next_update, datetime.datetime + ): + raise TypeError("next_update must be a datetime object or None") + + self._cert = cert + self._issuer = issuer + self._algorithm = algorithm + self._this_update = this_update + self._next_update = next_update + + if not isinstance(cert_status, OCSPCertStatus): + raise TypeError( + "cert_status must be an item from the OCSPCertStatus enum" + ) + if cert_status is not OCSPCertStatus.REVOKED: + if revocation_time is not None: + raise ValueError( + "revocation_time can only be provided if the certificate " + "is revoked" + ) + if revocation_reason is not None: + raise ValueError( + "revocation_reason can only be provided if the certificate" + " is revoked" + ) + else: + if not isinstance(revocation_time, datetime.datetime): + raise TypeError("revocation_time must be a datetime object") + + revocation_time = _convert_to_naive_utc_time(revocation_time) + if revocation_time < _EARLIEST_UTC_TIME: + raise ValueError( + "The revocation_time must be on or after" + " 1950 January 1." + ) + + if revocation_reason is not None and not isinstance( + revocation_reason, x509.ReasonFlags + ): + raise TypeError( + "revocation_reason must be an item from the ReasonFlags " + "enum or None" + ) + + self._cert_status = cert_status + self._revocation_time = revocation_time + self._revocation_reason = revocation_reason + + +OCSPRequest = ocsp.OCSPRequest +OCSPResponse = ocsp.OCSPResponse +OCSPSingleResponse = ocsp.OCSPSingleResponse + + +class OCSPRequestBuilder: + def __init__( + self, + request: tuple[ + x509.Certificate, x509.Certificate, hashes.HashAlgorithm + ] + | None = None, + request_hash: tuple[bytes, bytes, int, hashes.HashAlgorithm] + | None = None, + extensions: list[x509.Extension[x509.ExtensionType]] = [], + ) -> None: + self._request = request + self._request_hash = request_hash + self._extensions = extensions + + def add_certificate( + self, + cert: x509.Certificate, + issuer: x509.Certificate, + algorithm: hashes.HashAlgorithm, + ) -> OCSPRequestBuilder: + if self._request is not None or self._request_hash is not None: + raise ValueError("Only one certificate can be added to a request") + + _verify_algorithm(algorithm) + if not isinstance(cert, x509.Certificate) or not isinstance( + issuer, x509.Certificate + ): + raise TypeError("cert and issuer must be a Certificate") + + return OCSPRequestBuilder( + (cert, issuer, algorithm), self._request_hash, self._extensions + ) + + def add_certificate_by_hash( + self, + issuer_name_hash: bytes, + issuer_key_hash: bytes, + serial_number: int, + algorithm: hashes.HashAlgorithm, + ) -> OCSPRequestBuilder: + if self._request is not None or self._request_hash is not None: + raise ValueError("Only one certificate can be added to a request") + + if not isinstance(serial_number, int): + raise TypeError("serial_number must be an integer") + + _verify_algorithm(algorithm) + utils._check_bytes("issuer_name_hash", issuer_name_hash) + utils._check_bytes("issuer_key_hash", issuer_key_hash) + if algorithm.digest_size != len( + issuer_name_hash + ) or algorithm.digest_size != len(issuer_key_hash): + raise ValueError( + "issuer_name_hash and issuer_key_hash must be the same length " + "as the digest size of the algorithm" + ) + + return OCSPRequestBuilder( + self._request, + (issuer_name_hash, issuer_key_hash, serial_number, algorithm), + self._extensions, + ) + + def add_extension( + self, extval: x509.ExtensionType, critical: bool + ) -> OCSPRequestBuilder: + if not isinstance(extval, x509.ExtensionType): + raise TypeError("extension must be an ExtensionType") + + extension = x509.Extension(extval.oid, critical, extval) + _reject_duplicate_extension(extension, self._extensions) + + return OCSPRequestBuilder( + self._request, self._request_hash, [*self._extensions, extension] + ) + + def build(self) -> OCSPRequest: + if self._request is None and self._request_hash is None: + raise ValueError("You must add a certificate before building") + + return ocsp.create_ocsp_request(self) + + +class OCSPResponseBuilder: + def __init__( + self, + response: _SingleResponse | None = None, + responder_id: tuple[x509.Certificate, OCSPResponderEncoding] + | None = None, + certs: list[x509.Certificate] | None = None, + extensions: list[x509.Extension[x509.ExtensionType]] = [], + ): + self._response = response + self._responder_id = responder_id + self._certs = certs + self._extensions = extensions + + def add_response( + self, + cert: x509.Certificate, + issuer: x509.Certificate, + algorithm: hashes.HashAlgorithm, + cert_status: OCSPCertStatus, + this_update: datetime.datetime, + next_update: datetime.datetime | None, + revocation_time: datetime.datetime | None, + revocation_reason: x509.ReasonFlags | None, + ) -> OCSPResponseBuilder: + if self._response is not None: + raise ValueError("Only one response per OCSPResponse.") + + singleresp = _SingleResponse( + cert, + issuer, + algorithm, + cert_status, + this_update, + next_update, + revocation_time, + revocation_reason, + ) + return OCSPResponseBuilder( + singleresp, + self._responder_id, + self._certs, + self._extensions, + ) + + def responder_id( + self, encoding: OCSPResponderEncoding, responder_cert: x509.Certificate + ) -> OCSPResponseBuilder: + if self._responder_id is not None: + raise ValueError("responder_id can only be set once") + if not isinstance(responder_cert, x509.Certificate): + raise TypeError("responder_cert must be a Certificate") + if not isinstance(encoding, OCSPResponderEncoding): + raise TypeError( + "encoding must be an element from OCSPResponderEncoding" + ) + + return OCSPResponseBuilder( + self._response, + (responder_cert, encoding), + self._certs, + self._extensions, + ) + + def certificates( + self, certs: typing.Iterable[x509.Certificate] + ) -> OCSPResponseBuilder: + if self._certs is not None: + raise ValueError("certificates may only be set once") + certs = list(certs) + if len(certs) == 0: + raise ValueError("certs must not be an empty list") + if not all(isinstance(x, x509.Certificate) for x in certs): + raise TypeError("certs must be a list of Certificates") + return OCSPResponseBuilder( + self._response, + self._responder_id, + certs, + self._extensions, + ) + + def add_extension( + self, extval: x509.ExtensionType, critical: bool + ) -> OCSPResponseBuilder: + if not isinstance(extval, x509.ExtensionType): + raise TypeError("extension must be an ExtensionType") + + extension = x509.Extension(extval.oid, critical, extval) + _reject_duplicate_extension(extension, self._extensions) + + return OCSPResponseBuilder( + self._response, + self._responder_id, + self._certs, + [*self._extensions, extension], + ) + + def sign( + self, + private_key: CertificateIssuerPrivateKeyTypes, + algorithm: hashes.HashAlgorithm | None, + ) -> OCSPResponse: + if self._response is None: + raise ValueError("You must add a response before signing") + if self._responder_id is None: + raise ValueError("You must add a responder_id before signing") + + return ocsp.create_ocsp_response( + OCSPResponseStatus.SUCCESSFUL, self, private_key, algorithm + ) + + @classmethod + def build_unsuccessful( + cls, response_status: OCSPResponseStatus + ) -> OCSPResponse: + if not isinstance(response_status, OCSPResponseStatus): + raise TypeError( + "response_status must be an item from OCSPResponseStatus" + ) + if response_status is OCSPResponseStatus.SUCCESSFUL: + raise ValueError("response_status cannot be SUCCESSFUL") + + return ocsp.create_ocsp_response(response_status, None, None, None) + + +load_der_ocsp_request = ocsp.load_der_ocsp_request +load_der_ocsp_response = ocsp.load_der_ocsp_response diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/oid.py b/venv/lib/python3.11/site-packages/cryptography/x509/oid.py new file mode 100644 index 0000000..d4e409e --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/x509/oid.py @@ -0,0 +1,35 @@ +# 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 annotations + +from cryptography.hazmat._oid import ( + AttributeOID, + AuthorityInformationAccessOID, + CertificatePoliciesOID, + CRLEntryExtensionOID, + ExtendedKeyUsageOID, + ExtensionOID, + NameOID, + ObjectIdentifier, + OCSPExtensionOID, + PublicKeyAlgorithmOID, + SignatureAlgorithmOID, + SubjectInformationAccessOID, +) + +__all__ = [ + "AttributeOID", + "AuthorityInformationAccessOID", + "CRLEntryExtensionOID", + "CertificatePoliciesOID", + "ExtendedKeyUsageOID", + "ExtensionOID", + "NameOID", + "OCSPExtensionOID", + "ObjectIdentifier", + "PublicKeyAlgorithmOID", + "SignatureAlgorithmOID", + "SubjectInformationAccessOID", +] diff --git a/venv/lib/python3.11/site-packages/cryptography/x509/verification.py b/venv/lib/python3.11/site-packages/cryptography/x509/verification.py new file mode 100644 index 0000000..b836506 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/x509/verification.py @@ -0,0 +1,28 @@ +# 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 annotations + +import typing + +from cryptography.hazmat.bindings._rust import x509 as rust_x509 +from cryptography.x509.general_name import DNSName, IPAddress + +__all__ = [ + "ClientVerifier", + "PolicyBuilder", + "ServerVerifier", + "Store", + "Subject", + "VerificationError", + "VerifiedClient", +] + +Store = rust_x509.Store +Subject = typing.Union[DNSName, IPAddress] +VerifiedClient = rust_x509.VerifiedClient +ClientVerifier = rust_x509.ClientVerifier +ServerVerifier = rust_x509.ServerVerifier +PolicyBuilder = rust_x509.PolicyBuilder +VerificationError = rust_x509.VerificationError diff --git a/venv/lib/python3.11/site-packages/distutils-precedence.pth b/venv/lib/python3.11/site-packages/distutils-precedence.pth new file mode 100644 index 0000000..7f009fe --- /dev/null +++ b/venv/lib/python3.11/site-packages/distutils-precedence.pth @@ -0,0 +1 @@ +import os; var = 'SETUPTOOLS_USE_DISTUTILS'; enabled = os.environ.get(var, 'local') == 'local'; enabled and __import__('_distutils_hack').add_shim(); diff --git a/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/LICENSE b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/LICENSE new file mode 100755 index 0000000..1a71c0f --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Christopher Goes + +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.11/site-packages/getmac-0.9.5.dist-info/METADATA b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/METADATA new file mode 100755 index 0000000..015e180 --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/METADATA @@ -0,0 +1,714 @@ +Metadata-Version: 2.1 +Name: getmac +Version: 0.9.5 +Summary: Get MAC addresses of remote hosts and local interfaces +Home-page: https://github.com/GhostofGoes/getmac +Author: Christopher Goes +Author-email: ghostofgoes@gmail.com +License: MIT +Project-URL: Changelog, https://github.com/GhostofGoes/getmac/blob/main/CHANGELOG.md +Project-URL: Issue tracker, https://github.com/GhostofGoes/getmac/issues +Project-URL: Source, https://github.com/GhostofGoes/getmac +Project-URL: Discord server, https://discord.gg/python +Keywords: getmac,get-mac,macaddress,mac-address,mac,ethernet,mac-48,networking,network,networking,layer2,layer-2,802.3 +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Console +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: POSIX +Classifier: Operating System :: MacOS +Classifier: Programming Language :: Python +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 :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Programming Language :: Python :: Implementation :: IronPython +Classifier: Programming Language :: Python :: Implementation :: Jython +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: System Administrators +Classifier: Intended Audience :: Information Technology +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Software Development :: Libraries +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: System :: Networking +Classifier: Topic :: Utilities +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* +Description-Content-Type: text/markdown +License-File: LICENSE + + +[![Latest version on PyPI](https://badge.fury.io/py/getmac.svg)](https://pypi.org/project/getmac/) +[![Coverage Status](https://coveralls.io/repos/github/GhostofGoes/getmac/badge.svg?branch=main)](https://coveralls.io/github/GhostofGoes/getmac?branch=main) +[![GitHub Actions Pipeline Status](https://github.com/ghostofgoes/getmac/actions/workflows/ci.yml/badge.svg)](https://github.com/GhostofGoes/getmac/actions) +[![Weekly PyPI downloads](https://pepy.tech/badge/getmac/week)](https://pepy.tech/project/getmac) +[![PyPI downloads](https://pepy.tech/badge/getmac)](https://pepy.tech/project/getmac) +[![PyPI downloadss of the old name](https://pepy.tech/badge/get-mac)](https://pepy.tech/project/get-mac) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) + +Pure-Python package to get the MAC address of network interfaces and hosts on the local network. + +It provides a platform-independent interface to get the MAC addresses of: + +- System network interfaces (by interface name) +- Remote hosts on the local network (by IPv4/IPv6 address or hostname) + +It provides one function: `get_mac_address()` + +[![asciicast](https://asciinema.org/a/rk6dUACUcZY18taCuIBE5Ssus.png)](https://asciinema.org/a/rk6dUACUcZY18taCuIBE5Ssus) + +[![asciicast](https://asciinema.org/a/n3insrxfyECch6wxtJEl3LHfv.png)](https://asciinema.org/a/n3insrxfyECch6wxtJEl3LHfv) + + +## Should you use this package? +If you only need the addresses of network interfaces, have a limited set of platforms to support, and are able to handle C-extension modules, then you should instead check out the excellent [netifaces](https://pypi.org/project/netifaces/) package by Alastair Houghton ([@al45tair](https://github.com/al45tair)). It's significantly faster (thanks to it being C-code) and has been around a long time and seen widespread usage. However, unfortunately it is no longer maintained as of [May 2021](https://github.com/al45tair/netifaces/commit/ec55b59e27542776f55e0f9e3213a75bf8e0f367), so it may not be a great choice for new projects. Another great option that fits these requirements is the well-known and battle-hardened [psutil](https://github.com/giampaolo/psutil) package by Giampaolo Rodola. + +If the only system you need to run on is Linux, you can run as root, and C-extensions modules are fine, then you should instead check out the [arpreq](https://pypi.org/project/arpreq/) package by Sebastian Schrader. In some cases it can be significantly faster. + +If you want to use `psutil`, `scapy`, or `netifaces`, I have examples of how to do so in a [GitHub Gist](https://gist.github.com/GhostofGoes/0a8e82930e75afcefbd879a825ba4c26). + +## Installation +Stable release from PyPI + +```bash +pip install getmac +``` + +Latest development version + +```bash +pip install https://github.com/ghostofgoes/getmac/archive/main.tar.gz +``` + +## Python examples +```python +from getmac import get_mac_address +eth_mac = get_mac_address(interface="eth0") +win_mac = get_mac_address(interface="Ethernet 3") +ip_mac = get_mac_address(ip="192.168.0.1") +ip6_mac = get_mac_address(ip6="::1") +host_mac = get_mac_address(hostname="localhost") +updated_mac = get_mac_address(ip="10.0.0.1", network_request=True) + +# Enable debugging +from getmac import getmac +getmac.DEBUG = 2 # DEBUG level 2 +print(getmac.get_mac_address(interface="Ethernet 3")) + +# Change the UDP port used for updating the ARP table (UDP packet) +from getmac import getmac +getmac.PORT = 44444 # Default is 55555 +print(getmac.get_mac_address(ip="192.168.0.1", network_request=True)) +``` + +## Terminal examples +**Python 2 users**: use `getmac2` or `python -m getmac` instead of `getmac`. +```bash +getmac --help +getmac --version + +# Invoking with no arguments will return MAC of the default interface +getmac + +# Usage as a module +python3 -m getmac + +# Interface names, IPv4/IPv6 addresses, or Hostnames can be specified +getmac --interface ens33 +getmac --ip 192.168.0.1 +getmac --ip6 ::1 +getmac --hostname home.router + +# Running as a Python module with shorthands for the arguments +python -m getmac -i 'Ethernet 4' +python -m getmac -4 192.168.0.1 +python -m getmac -6 ::1 +python -m getmac -n home.router + +# Getting the MAC address of a remote host requires the ARP table to be populated. +# By default, getmac will populate the table by sending a UDP packet to a high port on the host (defaults to 55555). +# This can be disabled with --no-network-request, as shown here: +getmac --no-network-request --ip 192.168.0.1 +python -m getmac --no-network-request -n home.router + +# Enable output messages +getmac --verbose + +# Debug levels can be specified with '-d' +getmac -v --debug +python -m getmac -v -d -i enp11s4 +python -m getmac -v -dd -n home.router + +# Change the UDP port used for populating the ARP table when getting the MAC of a remote host +getmac --ip 192.168.0.1 --override-port 9001 + +# The platform detected by getmac can be overridden via '--override-platform'. +# This is useful when debugging issues or if you know a method +# for a different platform works on the current platform. +# Any values returned by platform.system() are valid. +getmac -i eth0 --override-platform linux +getmac --ip 192.168.0.1 --override-platform windows + +# Force a specific method to be used, regardless of the consequences or if it even works +getmac -v -dddd --ip 192.168.0.1 --force-method ctypeshost +``` + +## Function: get_mac_address() +- `interface`: Name of a network interface on the system +- `ip`: IPv4 address of a remote host +- `ip6`: IPv6 address of a remote host +- `hostname`: Hostname of a remote host +- `network_request`: If an network request should be made to update and populate the ARP/NDP table of remote hosts used to lookup MACs in most circumstances. Disable this if you want to just use what's already in the table, or if you have requirements to prevent network traffic. The network request is a empty UDP packet sent to a high port, `55555` by default. This can be changed by setting `getmac.PORT` to the desired integer value. Additionally, on Windows, this will send a UDP packet to `1.1.1.1:53` to attempt to determine the default interface (Note: the IP is [CloudFlare's DNS server](https://www.cloudflare.com/learning/dns/what-is-1.1.1.1/)). + +## Configuration +- `logging.getLogger("getmac")`: Runtime messages and errors are recorded to the `getmac` logger using Python's [logging](https://docs.python.org/3/library/logging.html) module. They can be configured by using [logging.basicConfig()](https://docs.python.org/3/library/logging.html#logging.basicConfig) or adding handlers to the `"getmac"` logger. +- `getmac.getmac.DEBUG`: integer value that controls debugging output. The higher the value, the more output you get. +- `getmac.getmac.PORT`: UDP port used to populate the ARP/NDP table (see the documentation of the `network_request` argument in `get_mac_address()` for details) +- `getmac.getmac.OVERRIDE_PLATFORM`: Override the platform detection with the given value (e.g. `"linux"`, `"windows"`, `"freebsd"`, etc.'). Any values returned by `platform.system()` are valid. +- `getmac.getmac.FORCE_METHOD`: Force a specific method to be used, e.g. 'IpNeighborShow'. This will be used regardless of it's method type or platform compatibility, and `Method.test()` will NOT be checked! The list of available methods is in `getmac.getmac.METHODS`. + +## Features +- Pure-Python (no compiled C-extensions required!) +- Python 2.7 and 3.4+ +- Lightweight, with no dependencies and a small package size +- Can be dropped into a project as a standalone .py file +- Supports most interpreters: CPython, pypy, pypy3, IronPython 2.7, and Jython 2.7 +- Provides a simple command line tool (when installed as a package) +- MIT licensed! + +## Legacy Python versions +If you are running a old Python (2.6/3.3 and older) or interpreter, then you can install an older version of `getmac` that supported that version. The wheels are available in the [GitHub releases](https://github.com/GhostofGoes/getmac/releases), or from PyPI with a current version of `pip` and some special arguments. + +- Python 2.5: get-mac 0.5.0 +- Python 2.6: getmac 0.6.0 +- Python 3.2: get-mac 0.3.0 +- Python 3.3: get-mac 0.3.0 + +NOTE: these versions do not have many of the performance improvements, platform support, and bug fixes that came with later releases. They generally work, just not as well. However, if you're using such an old Python, you probably don't care about all that :) + +## Notes +- Python 3.10 and 3.11 should work, but are not automatically tested at the moment due to having to support 2.7 +- If none of the arguments are selected, the default network interface for the system will be used. If the default network interface cannot be determined, then it will attempt to fallback to typical defaults for the platform (`Ethernet` on Windows, `em0` on BSD, `en0` on OSX/Darwin, and `eth0` otherwise). If that fails, then it will fallback to `lo` on POSIX systems. +- "Remote hosts" refer to hosts in your local layer 2 network, also commonly referred to as a "broadcast domain", "LAN", or "VLAN". As far as I know, there is not a reliable method to get a MAC address for a remote host external to the LAN. If you know any methods otherwise, please [open a GitHub issue](https://github.com/GhostofGoes/getmac/issues) or shoot me an email, I'd love to be wrong about this. +- The first four arguments are mutually exclusive. `network_request` does not have any functionality when the `interface` argument is specified, and can be safely set if using in a script. +- The physical transport is assumed to be Ethernet (802.3). Others, such as Wi-Fi (802.11), are currently not tested or considered. I plan to address this in the future, and am definitely open to pull requests or issues related to this, including error reports. +- **Exceptions will be handled silently and returned as a None.** If you run into problems, you can set `DEBUG` to true and get more information about what's happening. If you're still having issues, please create an [issue on GitHub](https://github.com/GhostofGoes/getmac/issues) and include the output with `DEBUG` enabled. + +## Commands and techniques by platform +- Windows + - Commands: `getmac.exe`, `ipconfig.exe`, `arp.exe`, `wmic.exe` + - Libraries: `uuid`, `ctypes`, `socket` +- Linux/Unix + - Commands: `arp`, `ip`, `ifconfig`, `netstat`, `ip link`, `lanscan` + - Libraries: `uuid`, `fcntl`, `socket` + - Files: `/sys/class/net/{iface}/address`, `/proc/net/arp` + - Default interfaces: `/proc/net/route`, `route`, `ip route list` +- Mac OSX (Darwin) + - `networksetup` + - Same commands as Linux +- WSL + - Windows commands are used for remote hosts + - Unix commands are used for interfaces +- OpenBSD + - Commands: `ifconfig`, `arp` + - Default interfaces: `route` +- FreeBSD + - Commands: `ifconfig`, `arp` + - Default interfaces: `netstat` +- Android + - Commands: `ip link` + +## Platforms currently supported +All or almost all features should work on "supported" platforms. While other versions of the same family or distro may work, they are untested and may have bugs or missing features. + +- Windows + - Desktop: 7, 8, 8.1, 10, 11 (thanks @StevenLooman for testing Windows 11!) + - Server: TBD + - Partially supported (untested): 2000, XP, Vista +- Linux distros + - CentOS/RHEL 6+ + - Ubuntu 16.04+ (15.10 and older should work, but are untested) + - Fedora (24+) +- Mac OSX (Darwin) + - The latest two versions probably (TBD) +- Android (6+) +- Windows Subsystem for Linux (WSL) +- FreeBSD (11+) +- OpenBSD +- Docker + +## Docker +Add `-v /proc/1/net/arp:/host/arp -e ARP_PATH=/host/arp` to access arp table of host inside container in bridge network mode. + +```bash +docker build -f packaging/Dockerfile -t getmac . +docker run -it getmac:latest --help +docker run -it getmac:latest --version +docker run -it getmac:latest -n localhost +docker run --rm -it -v /proc/1/net/arp:/host/arp -e ARP_PATH=/host/arp getmac:latest -n 192.168.0.1 +``` + +## Caveats +- Depending on the platform, there could be a performance detriment, due to heavy usage of regular expressions. +- Platform test coverage is imperfect. If you're having issues, then you might be using a platform I haven't been able to test. Keep calm, open a GitHub issue, and I'd be more than happy to help. + +## Known Issues +- Linux, WSL: Getting the mac of a local interface IP does not currently work (`getmac --ip 10.0.0.4` will fail if `10.0.0.4` is the IP address of a local interface). This issue may be present on other POSIX systems as well. +- Hostnames for IPv6 devices are not yet supported. +- Windows: the "default" (used when no arguments set or specified) of selecting the default route interface only works effectively if `network_request` is enabled. If not, `Ethernet` is used as the default. +- IPv6 support is good but lags behind IPv4 in some places and isn't as well-tested across the supported platform set. + +## Background and history +The Python standard library has a robust set of networking functionality, such as `urllib`, `ipaddress`, `ftplib`, `telnetlib`, `ssl`, and more. Imagine my surprise, then, when I discovered there was not a way to get a seemingly simple piece of information: a MAC address. This package was born out of a need to get the MAC address of hosts on the network without needing admin permissions, and a cross-platform way get the addresses of local interfaces. + +In Fall 2018 the package name changed to `getmac` from `get-mac`. This affected the package name, the CLI script, and some of the documentation. There were no changes to the core library code. While both package names will updated on PyPI, the use of `getmac` is preferred. + +In Summer 2020, the code was significantly refactored, moving to a class-based structure and significantly improving performance and accuracy. See [docs/rewrite.md](docs/rewrite.md) for details. + +## Contributing +Contributors are more than welcome! See the [contribution guide](CONTRIBUTING.md) to get started, and checkout the [todo list](TODO.md) for a full list of tasks and bugs. + +Before submitting a PR, please make sure you've completed the [pull request checklist](CONTRIBUTING.md#Code_requirements)! + +The [Python Discord server](https://discord.gg/python) is a good place to ask questions or discuss the project (Handle: @KnownError#0001). + +### Contributors +- Christopher Goes (@ghostofgoes) - Author and maintainer +- Calvin Tran (@cyberhobbes) - Windows interface detection improvements +- Daniel Flanagan (@FlantasticDan) - Code cleanup +- @emadmahdi - Android fixes +- Izra Faturrahman (@Frizz925) - Unit tests using the platform samples +- Jose Gonzalez (@Komish) - Docker container and Docker testing +- @fortunate-man - Awesome usage videos +- @martmists - legacy Python compatibility improvements +- @hargoniX - scripts and specfiles for RPM packaging +- Ville Skyttä (@scop) - arping lookup support +- Tomasz Duda (@tomaszduda23) - support for docker in network bridge mode +- Steven Looman (@StevenLooman) - Windows 11 testing +- Reimund Renner (@raymanP) - macOS fixes + +## Sources +Many of the methods used to acquire an address and the core logic framework are attributed to the CPython project's UUID implementation. + +- https://github.com/python/cpython/blob/master/Lib/uuid.py +- https://github.com/python/cpython/blob/2.7/Lib/uuid.py + +### Other notable sources +- [_unix_fcntl_by_interface](https://stackoverflow.com/a/4789267/2214380) +- [_windows_get_remote_mac_ctypes](goo.gl/ymhZ9p) +- [String joining](https://stackoverflow.com/a/3258612/2214380) + +## License +MIT. Feel free to copy, modify, and use to your heart's content. Enjoy :) + + +# Changelog + +**NOTE**: if any changes significantly impact your project or use case, please open an issue on [GitHub](https://github.com/GhostofGoes/getmac/issues) or email me (see git commit author info for address). + +**Announcement**: Compatibility with Python versions older than 3.7 (2.7, 3.4, 3.5, and 3.6) is deprecated and will be removed in getmac 1.0.0. If you are stuck on an unsupported Python, consider loosely pinning the version of this package in your dependency list, e.g. `getmac<1.0.0` or `getmac~=0.9.0`. + +## 0.9.5 (07/15/2024) + +### Changed +* Fixed macOS arp when MAC has one character sections in specific cases (Fixes issue #92) + +## 0.9.4 (06/01/2023) + +### Added +* Support BusyBox's ``arping`` + +### Changed +* Improve how ARP is handled. If ``ArpFile`` method succeeds, use it instead of ``ArpingHost`` (this should fix [#86](https://github.com/GhostofGoes/getmac/issues/86), for realsies this time). +* Speed up the first call to ``ArpingHost`` +* Fix FORCE_METHOD not being respected for IPv4 macs + +## 0.9.3 (03/16/2023) + +### Changed +* Fix `ArpFile` method being used for IPv6 (`/proc/net/arp`, and ARP in general, is IPv4-only) + +## 0.9.2 (02/03/2023) + +### Changed +* Fix flakiness with UuidArpGetNode on MacOS by making it the last method attempted (Fixes issue [#82](https://github.com/GhostofGoes/getmac/issues/82)) + +## 0.9.1 (01/24/2023) + +### Changed +* Deprecate Python 3.6 support (support will be removed in getmac 1.0.0) + +### Dev +* Fix links in README and PyPI metadata to use "main" instead of "master" for primary branch +* Remove "Documentation" link from PyPI (the ReadTheDocs site is broken and hasn't been updated since 0.5.0) +* Add PyPI classifiers for 3.10 and 3.11 +* Some cleanup of CHANGELOG + + +## 0.9.0 (01/23/2023) +This release is a *complete rewrite of getmac from the ground up*. The public API of `getmac` is **unchanged** as part of this rewrite. `get_mac_address()` is still the primary way of getting a MAC address, it's just the "under the hood" internals that have changed completely. + + It's passing tests and seems to be operable. However, with a change this large there are inevitably issues that the tests or I don't catch, so I'm doing a series of pre-releases until I'm 99% confident in it's stability. Refer to `docs/rewrite.md` for a in-depth explanation of the rewrite changes. + +The new system has a number of benefits +- Reduction of false-positives and false-negatives by improving method selection accuracy (platform, validity, etc.) +- *Significantly* faster overall +- "Misses" have the same performance as "Hits" +- Easier to test, since each method can be tested directly via it's class +- Easier to type annotate and analyze with mypy +- Easier to read, improving reviewability and ease of contributing for newcomers +- Extensible! Custom methods can be defined and added at runtime (which is perfect if you have some particular edge case but aren't able to open-source it). + +### Added +* Fully support Python 3.9 (automated tests in CI) +* Tentatively support Python 3.10 and 3.11 (unable to test due to the need to be able to still test 2.7) +* Added default interface detection for MacOS (command: `route get default`) +* Added initial support for Solaris/SunOS. There were a few existing methods that worked as-is, so just added indicators that those methods support `sunos` (Which applies to any system where `platform.system() == SunOS`). +* `arping` (POSIX) or `SendARP` (Windows) will now *always* be used instead of sending a UDP packet when looking for the MAC of a IPv4 host, if they're available and operable (otherwise, UDP + ARP table check will be used like before). +* The amount of time taken to get a result (in seconds) will now be recorded and logged if debugging is enabled (`DEBUG>=1` or `-d`) +* Added command line argument to override the UDP port for network requests: `--override-port` (this was already possible in Python via `getmac.getmac.PORT`, but wasn't configurable via the CLI. Now it is!). +* Added ability to override the detected platform via `--override-platform` argument (CLI) or `getmac.getmac.OVERRIDE_PLATFORM` variable (Python). This will force methods for that platform to be used, regardless of the actual platform. Here's an example forcing `linux` to be used as the platform: `getmac -i eth0 --override-platform linux`. In version 1.0.0, this feature will added as an argument to `get_mac_address()`. +* Added ability to force a specific method to be used via `--force-method` argument (CLI) or `getmac.getmac.FORCE_METHOD` variable (Python). This is useful for troubleshooting issues, general debugging, and testing changes. Example: `getmac -v -dddd --ip 192.168.0.1 --force-method ctypeshost` + +### Changed +* **Complete rewrite of `getmac` from the ground up. Refer to `docs/rewrite.md` for a in-depth explanation of the rewrite changes** +* Fixed a failure to look up a hostname now returns `None`, as expected, instead of raising an exception (`socket.gaierror`). +* Fixed numerous false-negative and false-positive bugs +* Improved overall performance +* Performance for cases where no MAC is found is now the same as cases where a MAC is found (speed of "misses" now equals that of "hits") +* Improved the reliability and performance of many methods +* Fixed `netstat` on older Linux distros (such as Ubuntu 12.04) +* Overhauled `ifconfig` parsing. It should now be far more reliable and accurate across all platforms. +* Improved Android support. Note that newer devices are locked down and the amount of information that's obtainable by an unprivileged process is quite limited (Android 7/9 and newer, not sure exactly when they changed this, I'm not an Android guy). That being said, the normal Linux methods should work fine, provided you have the proper permissions (usually, `root`). +* Fixed bug with `/proc/net/route` parsing (this affected Android and potentially other platforms) +* Improve default interface detection for FreeBSD (command: `route get default`) + +### Removed +* Removed man pages from distribution (`getmac.1`/`getmac2.1`). They were severely out of date and unused. May re-add at a later date. + +### Dev +* Migrate CI to GitHub Actions, remove TravisCI and Appveyor +* Add flake8 plugins: `flake8-pytest-style` and `flake8-annotations` +* Add additional samples and tests for WSL1 (with the Ubuntu 18.04 distro) +* Add additional samples for Windows 10 +* Add additional samples for MacOS +* Add samples and tests for Ubuntu 12.04 +* Add samples for NetBSD 8 (support coming in a future release) +* Add samples for Solaris 10 (support TBD) +* Add samples for several versions of Android +* Add new tests +* Improve existing tests +* Consolidate everything related to RPM packaging to `packaging/rpm/`. This stuff hasn't been updated since 0.6.0, may remove in the future and leave distro packaging to distro maintainers. + + +## 0.8.3 (12/10/2021) + +### Changed +* Added support for Thomas Habets' version of `arping` in addition to the existing iputils one (contributed by Ville Skyttä (@scop) in [#52](https://github.com/GhostofGoes/getmac/pull/52) and [#54](https://github.com/GhostofGoes/getmac/pull/54)) +* Added support for docker in network bridge mode (contributed by Tomasz Duda (@tomaszduda23) in [#57](https://github.com/GhostofGoes/getmac/pull/57)) +* Add CHANGELOG URL to PyPI metadata (contributed by Ville Skyttä (@scop) in [#58](https://github.com/GhostofGoes/getmac/pull/58)) +* Fixed code quality test suite errors (includes changes by Daniel Flanagan (@FlantasticDan) in [#67](https://github.com/GhostofGoes/getmac/pull/67)) +* Improved Android support (contributed by @emadmahdi in [#71](https://github.com/GhostofGoes/getmac/pull/71)) +* Minor code quality fixes (2 years of neglecting master branch) +* Add [Code of Conduct](https://github.com/GhostofGoes/getmac/blob/main/CODE_OF_CONDUCT.md) for project contributors +* Add [SECURITY.md](https://github.com/GhostofGoes/getmac/blob/main/SECURITY.md) for reporting security issues (e.g. vulnerabilities) +* Deprecate Python 3.4 and 3.5 +* Issue deprecation message as a warning in addition to a log message + + +## 0.8.2 (12/07/2019) + +### Changed +* Added warning about Python 2 compatibility being dropped in 1.0.0 +* Officially support Python 3.8 +* Documented a known issue with looking up IP of a local interface on Linux/WSL (See the "Known Issues" section in the README) +* Added remote host lookup using `arping` as last resort + +### Dev +* Standardized formatting on [Black](https://github.com/psf/black) +* Lint additions: `vulture`, several Flake8 plugins +* Pinned test dependencies (pytest 5 dropped Python 2 support) +* Various quality-of-life improvements for contributors/developers + + +## 0.8.1 (05/14/2019) + +### Changed +* Fixed sockets being opened and not closed when `ip` or `ip6` were used, +which could lead to a `ResourceWarning` (GH-42) + + +## 0.8.0 (04/09/2019) + +### Added +* OpenBSD support +* FreeBSD support +* Python logging is now used instead of `print` (logger: `getmac`) +* Include tests in the source distribution +* (CLI) Added aliases for `--no-network-requests`: `-N` and `--no-net` +* (CLI) New argument: `-v`/`--verbose` + +### Changed +* Errors are now logged instead of raising a `RuntimeWarning` +* Improved Ubuntu support +* Performance improvements + +### Development +* Significant increase in overall test coverage +* Fixed and migrated the sample tests to `pytest` +* Added tests for the CLI + + +## 0.7.0 (01/27/2019) + +### Added +* Type annotations (PEP 484) + +### Removed +* Dropped support for Python 2.6 +* Removed the usage of third-party packages (`netifaces`, `psutil`, `scapy`, and `arpreq`). +This should improve the performance of lookups of non-existent interfaces +or hosts, since this feature was punishing that path without providing much value. +If you want to use these packages directly, I have a guide on how to do so on a +[GitHub Gist](https://gist.github.com/GhostofGoes/0a8e82930e75afcefbd879a825ba4c26). + +### Changed +* Significantly improved the performance of the common cases on Linux +for interfaces and remote hosts +* Improved POSIX interface performance. Commands specific to OSX +will be run only on that platform, and vice-versa. +* Significantly improved the speed and accuracy of determining +the default interface on Linux +* Python 2 will install an executor named getmac2 and Python 3 an +executor named getmac so they do not conflict when both RPMs are +installed on the same system (Credit: @hargoniX) +* The `warnings` module will only be imported if a error/warning +occurs (improve compatibility with some freezers, notably PyInstaller) +* Improved system platform detection +* Various other minor performance improvements + +### Development +* Added unit tests for the samples (Credit: @Frizz925) +* Scripts for building RPMs in the /scripts directory (Credit: @hargoniX) +* Improved code quality and health checks +* Include the CHANGELOG on the PyPI project page +* Using `pytest` for all tests now instead of `unittest` + +### Documentation +* Added instructions on how to build a Debian package (Credit: @kofrezo) + + +## 0.6.0 (10/06/2018) +### Added +* Windows default interface detection if `network_request` is enabled (Credit: @cyberhobbes) +* Docker container (Credit: @Komish) + +### Changed +* Changed project name to `getmac`. This applies to the +command line tool, GitHub, and the documentation. +* Use proper Python 2-compatible print functions (Credit: @martmists) + +### Removed +* Support for Python 2.5. It is not feasible to test, and potentially +breaks some useful language features, such as `__future__` +* Variables PORT and DEBUG from top-level package imports, since changing +them would have no actual effect on execution. Instead, use `getmac.getmac.DEBUG`. + +### Dev +* Added example videos demonstrating usage (Credit: @fortunate-man) +* Added contribution guide +* Added documentation on ReadTheDocs +* Added a manpage + + +## 0.5.0 (09/24/2018) +### Added +* Full support for Windows Subsystem for Linux (WSL). This is working for +all features, including default interface selection! The only edge case +is lookup of remote host IP addresses that are actually local interfaces +will not resolve to a MAC (which should be ff-ff-ff-ff-ff-ff). +### Changed +* Require `argparse` if Python version is 2.6 or older +### Dev +* Updated tox tests: added Jython and IronPython, removed 2.6 + + +## 0.4.0 (09/21/2018) +### Added +* New methods for remote host MACs + * Windows: `arp` + * POSIX: `arpreq` package +* New methods for interface MACs + * Windows: `wmic nic` +* DEBUG levels: DEBUG value is now an integer, and increasing it will +increase the amount and verbosity of output. On the CLI, it can be +configured by increasing the amount of characters for the debug argument, +e.g. '-dd' for DEBUG level 2. +* Jython support (Note: on Windows Jython currently only works with interfaces) +* IronPython support + +### Changed +* **Significant** performance improvement for remote hosts. Previously, +the average for `get_mac_address(ip='10.0.0.100')` was 1.71 seconds. +Now, the average is `12.7 miliseconds`, with the special case of a unpopulated +arp table being only slightly higher. This was brought about by changes in +how the arp table is populated. The original method was to use the +host's `ping` command to send an ICMP packet to the host. This took time, +which heavily delayed the ability to actually get an address. The solution +is to instead simply send a empty UDP packet to a high port. The port +this packet is sent to can be configured using the module variable `getmac.PORT`. +* "Fixed" resolution of localhost/127.0.0.1 by hardcoding the response. +This should resolve a lot of problematic edge cases. I'm ok with this +for now since I don't know of a case when it isn't all zeroes. +* Greatly increased the reliability of getting host and interface MACs on Windows +* Improved debugging output +* Tightened up the size of `getmac.py` +* Various minor stability and performance improvements +* Add LICENSE to PyPI package + +### Removed +* Support for Python 3.2 and 3.3. The total downloads from PyPI with +those versions in August was ~53k and ~407K, respectfully. The majority +of those are likely from automated testing (e.g. TravisCI) and not +actual users. Therefore, I've decided to drop support to simplify +development, especially since before 3.4 the 3.x series was still +very much a "work in progress". + +### Dev +* Added automated tests for Windows using Appveyor +* Tox runner for tests +* Added github.io page +* Improved TravisCI testing + + +## 0.3.0 (08/30/2018) +### Added +* Attempt to use Python modules if they're installed. This is useful +for larger projects that already have them installed as dependencies, +as they provide a more reliable means of getting information. + * `psutil`: Interface MACs on all platforms + * `scapy`: Interface MACs and Remote MACs on all platforms + * `netifaces`: Interface MACs on Non-Windows platforms +* New methods for remote MACs + * POSIX: `ip neighbor show`, Abuse of `uuid._arp_getnode()` +* New methods for Interface MACs + * POSIX: `lanscan -ai` (HP-UX) + +### Changed +* Certain critical failures that should never happen will now warn +instead of failing silently. +* Added a sanity check to the `ip6` argument (IPv6 addresses) +* Improved performance in some areas +* Improved debugging output + +### Fixed +* Major Bugfix: search of `proc/net/arp` would return shorter addresses in the +same subnet if they came earlier in the sequence. Example: a search for +`192.168.16.2` on Linux would instead return the MAC address of +`192.168.16.254` with no errors or warning whatsoever. +* Significantly improved default interface detection. Default +interfaces are now properly detected on Linux and most other +POSIX platforms with `ip` or `route` commands available, or the +`netifaces` Python module. + +### Dev +* Makefile +* Vagrantfile to spin up testing VMs for various platforms using [Vagrant](https://www.vagrantup.com/docs/) +* Added more samples of command output on platforms (Ubuntu 18.04 LTS) + + +## 0.2.4 (08/26/2018) +### Fixed +* Fixed identification of remote host on OSX +* Resolved hangs and noticeable lag that occurred when "network_request" +was True (the default) + + +## 0.2.3 (08/07/2018) +### Fixed +* Remote host for Python 3 on Windows + + +## 0.2.2 +### Added +* Short versions of CLI arguments (e.g. "-i" for "--interface") + +### Changed +* Improved usage of "ping" across platforms and IP versions +* Various minor tweaks for performance +* Improved Windows detection + +### Fixed +* Use of ping command with hostname + +### Dev: +* Improvements to internal code + + +## 0.2.1 +Nothing changed. PyPI just won't let me push changes without a new version. + + +## 0.2.0 (04/15/2018) +### Added +* Checks for default interface on Linux systems +* New methods of hunting for addresses on Windows, Mac OS X, and Linux + +### Changed +* CLI will output nothing if it failed, instead of "None" +* CLI will return with 1 on failure, 0 on success +* No CLI arguments now implies the default host network interface +* Added an argumnent for debugging: `--debug` +* Removed `-d` option from `--no-network-requests` + +### Fixed +* Interfaces on Windows and Linux (including Bash for Windows) +* Many bugs + +### Removed +* Support for Python 2.6 on the CLI + +### Dev +* Overhaul of internals + + +## 0.1.0 (04/15/2018): +### Added +* Addition of a terminal command: `get-mac` +* Ability to run as a module from the command line: `python -m getmac` + +### Changed +* `arp_request` argument was renamed to `network_request` +* Updated docstring +* Slight reduction in the size of getmac.py + +### Dev +* Overhauled the README +* Moved tests into their own folder +* Added Python 3.7 to list of supported snakes + + +## 0.0.4 (11/12/2017): +* Python 2.6 compatibility + + +## 0.0.3 (11/11/2017): +* Fixed some addresses returning without colons +* Added more rigorous checks on addresses before returning them + + +## 0.0.2 (11/11/2017): +* Remove print statements and other debugging output + + +## 0.0.1 (10/23/2017): +* Initial pre-alpha diff --git a/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/RECORD b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/RECORD new file mode 100644 index 0000000..60c092e --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/RECORD @@ -0,0 +1,18 @@ +../../../bin/getmac,sha256=VmsnnGpCM_xyFj18MYLZrVur4tUcN-tigdQBMy7CExo,243 +getmac-0.9.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +getmac-0.9.5.dist-info/LICENSE,sha256=g40ddyY_UIM21AC3gNuG2ru7dE1ga5RZHSihIyHH9tM,1073 +getmac-0.9.5.dist-info/METADATA,sha256=CHJC1_JQo8yLQ9VfzZfToB2QgjhNcZeVe3UaLbbNbsw,35805 +getmac-0.9.5.dist-info/RECORD,, +getmac-0.9.5.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +getmac-0.9.5.dist-info/WHEEL,sha256=pWvVuNuBTVmNV7Lp2jMAgt1NplTICeFdl1SW8U3MWN4,109 +getmac-0.9.5.dist-info/entry_points.txt,sha256=Ev4dZVZ6911AEb1hxaI2uFkB5Ws2fnoZL-_VcR__FxE,48 +getmac-0.9.5.dist-info/top_level.txt,sha256=wENs4GpTOmefJt6z0_QmTc7fzgwCejZGL9cublI131Y,7 +getmac-0.9.5.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +getmac/__init__.py,sha256=iunkDFEtpGaRw1Y0lzr9OZ7LsZ-GH81E836ZJQC25Vg,80 +getmac/__main__.py,sha256=PTkcTMZSbvJ-qwMyVuo-Bf-RKI47y7Kwxqroo92EVS4,3547 +getmac/__pycache__/__init__.cpython-311.pyc,, +getmac/__pycache__/__main__.cpython-311.pyc,, +getmac/__pycache__/getmac.cpython-311.pyc,, +getmac/__pycache__/shutilwhich.cpython-311.pyc,, +getmac/getmac.py,sha256=bFYx0WNBojEtNbIWKfNMm4mWI1Q2YLOx67Qluhs-fWU,64504 +getmac/shutilwhich.py,sha256=cTd3vGTZqKB44FOQhk7UG5M-Vb3qKg9HmuIy6hxkus0,2627 diff --git a/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/REQUESTED b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/WHEEL b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/WHEEL new file mode 100755 index 0000000..4f35440 --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: setuptools (70.3.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/entry_points.txt b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/entry_points.txt new file mode 100755 index 0000000..ea59c7e --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +getmac = getmac.__main__:main diff --git a/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/top_level.txt new file mode 100755 index 0000000..e3581d8 --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/top_level.txt @@ -0,0 +1 @@ +getmac diff --git a/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/zip-safe b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/zip-safe new file mode 100755 index 0000000..8b13789 --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac-0.9.5.dist-info/zip-safe @@ -0,0 +1 @@ + diff --git a/venv/lib/python3.11/site-packages/getmac/__init__.py b/venv/lib/python3.11/site-packages/getmac/__init__.py new file mode 100755 index 0000000..d0e9a04 --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac/__init__.py @@ -0,0 +1,3 @@ +from .getmac import __version__, get_mac_address + +__all__ = ["get_mac_address"] diff --git a/venv/lib/python3.11/site-packages/getmac/__main__.py b/venv/lib/python3.11/site-packages/getmac/__main__.py new file mode 100755 index 0000000..2b51733 --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac/__main__.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from __future__ import print_function + +import argparse +import logging +import sys + +from . import getmac + + +def main(): # type: () -> None + parser = argparse.ArgumentParser( + "getmac", + description="Get the MAC address of system network " + "interfaces or remote hosts on the LAN", + ) + parser.add_argument( + "--version", action="version", version="getmac %s" % getmac.__version__ + ) + parser.add_argument( + "-v", "--verbose", action="store_true", help="Enable output messages" + ) + parser.add_argument( + "-d", + "--debug", + action="count", + help="Enable debugging output. Add characters to " + "increase verbosity of output, e.g. '-dd'.", + ) + parser.add_argument( + "-N", + "--no-net", + "--no-network-requests", + action="store_true", + dest="NO_NET", + help="Do not use arping or send a UDP packet to refresh the ARP table", + ) + parser.add_argument( + "--override-port", + type=int, + metavar="PORT", + help="Override the default UDP port used to refresh the ARP table " + "if network requests are enabled and arping is unavailable", + ) + parser.add_argument( + "--override-platform", + type=str, + default=None, + metavar="PLATFORM", + help="Override the platform detection with the given value " + "(e.g. 'linux', 'windows', 'freebsd', etc.'). " + "Any values returned by platform.system() are valid.", + ) + parser.add_argument( + "--force-method", + type=str, + default=None, + metavar="METHOD", + help="Force a specific method to be used, e.g. 'IpNeighborShow'. " + "This will be used regardless of it's method type or platform " + "compatibility, and Method.test() will NOT be checked!", + ) + + group = parser.add_mutually_exclusive_group(required=False) + group.add_argument( + "-i", + "--interface", + type=str, + default=None, + help="Name of a network interface on the system", + ) + group.add_argument( + "-4", "--ip", type=str, default=None, help="IPv4 address of a remote host" + ) + group.add_argument( + "-6", "--ip6", type=str, default=None, help="IPv6 address of a remote host" + ) + group.add_argument( + "-n", "--hostname", type=str, default=None, help="Hostname of a remote host" + ) + + args = parser.parse_args() + + if args.debug or args.verbose: + logging.basicConfig( + format="%(levelname)-8s %(message)s", level=logging.DEBUG, stream=sys.stderr + ) + + if args.debug: + getmac.DEBUG = args.debug + + if args.override_port: + port = int(args.override_port) + getmac.log.debug( + "Using UDP port %d (overriding the default port %d)", port, getmac.PORT + ) + getmac.PORT = port + + if args.override_platform: + getmac.OVERRIDE_PLATFORM = args.override_platform.strip().lower() + + if args.force_method: + getmac.FORCE_METHOD = args.force_method.strip().lower() + + mac = getmac.get_mac_address( + interface=args.interface, + ip=args.ip, + ip6=args.ip6, + hostname=args.hostname, + network_request=not args.NO_NET, + ) + + if mac is not None: + print(mac) # noqa: T001, T201 + sys.exit(0) # Exit success! + else: + sys.exit(1) # Exit with error since it failed to find a MAC + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.11/site-packages/getmac/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/getmac/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7de93d72dd27c53a0437e8b80e30d31af2e879f3 GIT binary patch literal 304 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 Li$4X^%)I{rHt%~) literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/getmac/__pycache__/getmac.cpython-311.pyc b/venv/lib/python3.11/site-packages/getmac/__pycache__/getmac.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83e84b07d8f135c75f034b43ef91a515986b8e86 GIT binary patch literal 73913 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/getmac/__pycache__/shutilwhich.cpython-311.pyc b/venv/lib/python3.11/site-packages/getmac/__pycache__/shutilwhich.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..791e658d8082d98f68d3b0d6608c10b57e21609c GIT binary patch literal 3011 zcmbsqTWr%-^xAniP5L5jRq;?UFv>F8WTh014T{RT0izVO@WDd}T-!-q5<9!sZ2>u` zA81QaCo)vlelRH?8{;*>$0qHANenUZ8&{F2EFmFHeC#h1nuPe;xlZHO1*T2Aj&F|7 z>z?=hzOF8aU?uMTnfwr--|0tnu?xWS9RSQA2}w)}9jp8^#~2xnR5=j9o~qb64gqI^ zmDmf+F|WkLQN;5HB@T)X4}AIIrQgr#{sq;~TtHb5iww^sGMHc;VPx8Cv|A*J!97-?}cOhVS`_VNp z{gz{X)@S%IG zEb|#bALhr06>&Jo!xA+$q2V;)b!~g4Bepf7pz=dtWC zh^I$0F({_7SV|d+WzOoun%W)h>WUFXmpd~+7m_lGK@QS_7$d`@x{|VMD4IEI)t#&y zd{P{i#nb23R0um#nkb}5Z`4I?14BqJY!m27!-}c#OXn}1pB*wA)|DF86&vE;4SlQJ zW$*Tz?b}Q3+X3<0`iGkybw21U9{SYW9WU*U7klHyK>RsqK$e%5gXJ4n)b1^qx@d6} z^U;yR780Gn0-jzTcA`HA;0iN?lE^?Oc4nDLwg8w{mwQYVmg;ht4W{70O98j6yG-tU zFv)(!PW8so4Fn1DrL=JwTLD>>2(8{59*d2>YkA}|y5$km5}|d(^Ang(ub06cDabQ4 zd#3l?%4I=bBy|BRp;z#W2~-Rpto&xXugC8ky?OM;@!Q8AclOP7_TAs`DDoik>*j}> z&CbD6=OFOqyB&T^$CfLE^iH!wNR#J;a3u}lzYD}UkOS9O#Sv}>Fv4Iu%yBDhE;sRN z!2E-MTd6=hY}CK@fy(dac!4Z>Xl{DXq1c`bMj9}6z~UCBiRFP(wm2A3b_e-LCZ)hP z{UCD2@{qH{3S?4(PG_U#7e_I4l;u}cB4bDmk#+2+`T{D@MS;kcN021TJEAFSB!pK1 z4b!{F=EC$QsVJw3<zVU(Qz!pm0kbfM=ol$)2g6iT?S9rZVDuyuIZ-PwE?|l8@`#=IYyKiCMp)RKFqT znGeuC*m=_P1+=>=#f z(C!4Atyp literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/getmac/getmac.py b/venv/lib/python3.11/site-packages/getmac/getmac.py new file mode 100755 index 0000000..7587ec1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac/getmac.py @@ -0,0 +1,1900 @@ +# -*- coding: utf-8 -*- +# http://web.archive.org/web/20140718071917/http://multivax.com/last_question.html + +""" +Get the MAC address of remote hosts or network interfaces. + +It provides a platform-independent interface to get the MAC addresses of: + +- System network interfaces (by interface name) +- Remote hosts on the local network (by IPv4/IPv6 address or hostname) + +It provides one function: ``get_mac_address()`` + +.. code-block:: python + :caption: Examples + + from getmac import get_mac_address + eth_mac = get_mac_address(interface="eth0") + win_mac = get_mac_address(interface="Ethernet 3") + ip_mac = get_mac_address(ip="192.168.0.1") + ip6_mac = get_mac_address(ip6="::1") + host_mac = get_mac_address(hostname="localhost") + updated_mac = get_mac_address(ip="10.0.0.1", network_request=True) + +""" +import ctypes +import logging +import os +import platform +import re +import shlex +import socket +import struct +import sys +import traceback +import warnings +from subprocess import CalledProcessError, check_output + +try: # Python 3 + from subprocess import DEVNULL # type: ignore +except ImportError: # Python 2 + DEVNULL = open(os.devnull, "wb") # type: ignore + +# Used for mypy (a data type analysis tool) +# If you're copying the code, this section can be safely removed +try: + from typing import TYPE_CHECKING + + if TYPE_CHECKING: + from typing import Dict, List, Optional, Set, Tuple, Type, Union +except ImportError: + pass + +# Configure logging +log = logging.getLogger("getmac") # type: logging.Logger +if not log.handlers: + log.addHandler(logging.NullHandler()) + +__version__ = "0.9.5" + +PY2 = sys.version_info[0] == 2 # type: bool + +# Configurable settings +DEBUG = 0 # type: int +PORT = 55555 # type: int + +# Monkeypatch shutil.which for python 2.7 (TODO(python3): remove shutilwhich.py) +if PY2: + from .shutilwhich import which +else: + from shutil import which + +# Platform identifiers +if PY2: + _UNAME = platform.uname() # type: Tuple[str, str, str, str, str, str] + _SYST = _UNAME[0] # type: str +else: + _UNAME = platform.uname() # type: platform.uname_result + _SYST = _UNAME.system # type: str +if _SYST == "Java": + try: + import java.lang + + _SYST = str(java.lang.System.getProperty("os.name")) + except ImportError: + _java_err_msg = "Can't determine OS: couldn't import java.lang on Jython" + log.critical(_java_err_msg) + warnings.warn(_java_err_msg, RuntimeWarning) + +WINDOWS = _SYST == "Windows" # type: bool +DARWIN = _SYST == "Darwin" # type: bool + +OPENBSD = _SYST == "OpenBSD" # type: bool +FREEBSD = _SYST == "FreeBSD" # type: bool +NETBSD = _SYST == "NetBSD" # type: bool +SOLARIS = _SYST == "SunOS" # type: bool + +# Not including Darwin or Solaris as a "BSD" +BSD = OPENBSD or FREEBSD or NETBSD # type: bool + +# Windows Subsystem for Linux (WSL) +WSL = False # type: bool +LINUX = False # type: bool +if _SYST == "Linux": + if "Microsoft" in platform.version(): + WSL = True + else: + LINUX = True + +# NOTE: "Linux" methods apply to Android without modifications +# If there's Android-specific stuff then we can add a platform +# identifier for it. +ANDROID = ( + hasattr(sys, "getandroidapilevel") or "ANDROID_STORAGE" in os.environ +) # type: bool + +# Generic platform identifier used for filtering methods +PLATFORM = _SYST.lower() # type: str +if PLATFORM == "linux" and "Microsoft" in platform.version(): + PLATFORM = "wsl" + +# User-configurable override to force a specific platform +# This will change to a function argument in 1.0.0 +OVERRIDE_PLATFORM = "" # type: str + +# Force a specific method to be used for all lookups +# Used for debugging and testing +FORCE_METHOD = "" # type: str + +# Get and cache the configured system PATH on import +# The process environment does not change after a process is started +PATH = os.environ.get("PATH", os.defpath).split(os.pathsep) # type: List[str] +if not WINDOWS: + PATH.extend(("/sbin", "/usr/sbin")) +else: + # TODO: Prevent edge case on Windows where our script "getmac.exe" + # gets added to the path ahead of the actual Windows getmac.exe + # This just handles case where it's in a virtualenv, won't work /w global scripts + PATH = [p for p in PATH if "\\getmac\\Scripts" not in p] +# Build the str after modifications are made +PATH_STR = os.pathsep.join(PATH) # type: str + +# Use a copy of the environment so we don't +# modify the process's current environment. +ENV = dict(os.environ) # type: Dict[str, str] +ENV["LC_ALL"] = "C" # Ensure ASCII output so we parse correctly + +# Constants +IP4 = 0 +IP6 = 1 +INTERFACE = 2 +HOSTNAME = 3 + +MAC_RE_COLON = r"([0-9a-fA-F]{2}(?::[0-9a-fA-F]{2}){5})" +MAC_RE_DASH = r"([0-9a-fA-F]{2}(?:-[0-9a-fA-F]{2}){5})" +# On OSX, some MACs in arp output may have a single digit instead of two +# Examples: "18:4f:32:5a:64:5", "14:cc:20:1a:99:0" +# This can also happen on other platforms, like Solaris +MAC_RE_SHORT = r"([0-9a-fA-F]{1,2}(?::[0-9a-fA-F]{1,2}){5})" + +# Ensure we only log the Python 2 warning once +WARNED_UNSUPPORTED_PYTHONS = False + +# Cache of commands that have been checked for existence by check_command() +CHECK_COMMAND_CACHE = {} # type: Dict[str, bool] + + +def check_command(command): + # type: (str) -> bool + if command not in CHECK_COMMAND_CACHE: + CHECK_COMMAND_CACHE[command] = bool(which(command, path=PATH_STR)) + return CHECK_COMMAND_CACHE[command] + + +def check_path(filepath): + # type: (str) -> bool + return os.path.exists(filepath) and os.access(filepath, os.R_OK) + + +def _clean_mac(mac): + # type: (Optional[str]) -> Optional[str] + """Check and format a string result to be lowercase colon-separated MAC.""" + if mac is None: + return None + + # Handle cases where it's bytes (which are the same as str in PY2) + mac = str(mac) + if not PY2: # Strip bytestring conversion artifacts + # TODO(python3): check for bytes and decode instead of this weird hack + for garbage_string in ["b'", "'", "\\n", "\\r"]: + mac = mac.replace(garbage_string, "") + + # Remove trailing whitespace, make lowercase, remove spaces, + # and replace dashes '-' with colons ':'. + mac = mac.strip().lower().replace(" ", "").replace("-", ":") + + # Fix cases where there are no colons + if ":" not in mac and len(mac) == 12: + log.debug("Adding colons to MAC %s", mac) + mac = ":".join(mac[i : i + 2] for i in range(0, len(mac), 2)) + + # Pad single-character octets with a leading zero (e.g. Darwin's ARP output) + elif len(mac) < 17: + log.debug( + "Length of MAC %s is %d, padding single-character octets with zeros", + mac, + len(mac), + ) + parts = mac.split(":") + new_mac = [] + for part in parts: + if len(part) == 1: + new_mac.append("0" + part) + else: + new_mac.append(part) + mac = ":".join(new_mac) + + # MAC address should ALWAYS be 17 characters before being returned + if len(mac) != 17: + log.warning("MAC address %s is not 17 characters long!", mac) + mac = None + elif mac.count(":") != 5: + log.warning("MAC address %s is missing colon (':') characters", mac) + mac = None + return mac + + +def _read_file(filepath): + # type: (str) -> Optional[str] + try: + with open(filepath) as f: + return f.read() + # This is IOError on Python 2.7 + except (OSError, IOError): # noqa: B014 + log.debug("Could not find file: '%s'", filepath) + return None + + +def _search(regex, text, group_index=0, flags=0): + # type: (str, str, int, int) -> Optional[str] + if not text: + if DEBUG: + log.debug("No text to _search()") + return None + + match = re.search(regex, text, flags) + if match: + return match.groups()[group_index] + + return None + + +def _popen(command, args): + # type: (str, str) -> str + for directory in PATH: + executable = os.path.join(directory, command) + if ( + os.path.exists(executable) + and os.access(executable, os.F_OK | os.X_OK) + and not os.path.isdir(executable) + ): + break + else: + executable = command + + if DEBUG >= 3: + log.debug("Running: '%s %s'", executable, args) + + return _call_proc(executable, args) + + +def _call_proc(executable, args): + # type: (str, str) -> str + if WINDOWS: + cmd = executable + " " + args # type: ignore + else: + cmd = [executable] + shlex.split(args) # type: ignore + + output = check_output(cmd, stderr=DEVNULL, env=ENV) + + if DEBUG >= 4: + log.debug("Output from '%s' command: %s", executable, str(output)) + + if not PY2 and isinstance(output, bytes): + return str(output, "utf-8") + else: + return str(output) + + +def _uuid_convert(mac): + # type: (int) -> str + return ":".join(("%012X" % mac)[i : i + 2] for i in range(0, 12, 2)) + + +def _fetch_ip_using_dns(): + # type: () -> str + """ + Determines the IP address of the default network interface. + + Sends a UDP packet to Cloudflare's DNS (``1.1.1.1``), which should go through + the default interface. This populates the source address of the socket, + which we then inspect and return. + """ + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(("1.1.1.1", 53)) + ip = s.getsockname()[0] + s.close() # NOTE: sockets don't have context manager in 2.7 :( + return ip + + +class Method: + #: Valid platform identifier strings + VALID_PLATFORM_NAMES = { + "android", + "darwin", + "linux", + "windows", + "wsl", + "openbsd", + "freebsd", + "sunos", + "other", + } + + #: Platforms supported by a method + platforms = set() # type: Set[str] + + #: The type of method, e.g. does it get the MAC of a interface? + #: Allowed values: {ip, ip4, ip6, iface, default_iface} + method_type = "" # type: str + + #: If the method makes a network request as part of the check + network_request = False # type: bool + + #: Marks the method as unable to be used, e.g. if there was a runtime + #: error indicating the method won't work on the current platform. + unusable = False # type: bool + + def test(self): # type: () -> bool # noqa: T484 + """Low-impact test that the method is feasible, e.g. command exists.""" + pass # pragma: no cover + + # TODO: automatically clean MAC on return + def get(self, arg): # type: (str) -> Optional[str] + """ + Core logic of the method that performs the lookup. + + .. warning:: + If the method itself fails to function an exception will be raised! + (for instance, if some command arguments are invalid, or there's an + internal error with the command, or a bug in the code). + + Args: + arg (str): What the method should get, such as an IP address + or interface name. In the case of default_iface methods, + this is not used and defaults to an empty string. + + Returns: + Lowercase colon-separated MAC address, or None if one could + not be found. + """ + pass # pragma: no cover + + @classmethod + def __str__(cls): # type: () -> str + return cls.__name__ + + +# TODO(python3): do we want to keep this around? It calls 3 commands and is +# quite inefficient. We should just take the methods and use directly. +class UuidArpGetNode(Method): + platforms = {"linux", "darwin", "sunos", "other"} + method_type = "ip" + + def test(self): # type: () -> bool + try: + from uuid import _arp_getnode # type: ignore + + return True + except Exception: + return False + + def get(self, arg): # type: (str) -> Optional[str] + from uuid import _arp_getnode # type: ignore + + backup = socket.gethostbyname + try: + socket.gethostbyname = lambda x: arg # noqa: F841 + mac1 = _arp_getnode() + if mac1 is not None: + mac1 = _uuid_convert(mac1) + mac2 = _arp_getnode() + mac2 = _uuid_convert(mac2) + if mac1 == mac2: + return mac1 + except Exception: + raise + finally: + socket.gethostbyname = backup + + return None + + +class ArpFile(Method): + platforms = {"linux"} + method_type = "ip4" + _path = os.environ.get("ARP_PATH", "/proc/net/arp") # type: str + + def test(self): # type: () -> bool + return check_path(self._path) + + def get(self, arg): # type: (str) -> Optional[str] + if not arg: + return None + + data = _read_file(self._path) + + if data is None: + self.unusable = True + return None + + if data is not None and len(data) > 1: + # Need a space, otherwise a search for 192.168.16.2 + # will match 192.168.16.254 if it comes first! + return _search(re.escape(arg) + r" .+" + MAC_RE_COLON, data) + + return None + + +class ArpFreebsd(Method): + platforms = {"freebsd"} + method_type = "ip" + + def test(self): # type: () -> bool + return check_command("arp") + + def get(self, arg): # type: (str) -> Optional[str] + regex = r"\(" + re.escape(arg) + r"\)\s+at\s+" + MAC_RE_COLON + return _search(regex, _popen("arp", arg)) + + +class ArpOpenbsd(Method): + platforms = {"openbsd"} + method_type = "ip" + _regex = r"[ ]+" + MAC_RE_COLON # type: str + + def test(self): # type: () -> bool + return check_command("arp") + + def get(self, arg): # type: (str) -> Optional[str] + return _search(re.escape(arg) + self._regex, _popen("arp", "-an")) + + +class ArpVariousArgs(Method): + platforms = {"linux", "darwin", "freebsd", "sunos", "other"} + method_type = "ip" + _regex_std = r"\)\s+at\s+" + MAC_RE_COLON # type: str + _regex_darwin = r"\)\s+at\s+" + MAC_RE_SHORT # type: str + _args = ( + ("", True), # "arp 192.168.1.1" + # Linux + ("-an", False), # "arp -an" + ("-an", True), # "arp -an 192.168.1.1" + # Darwin, WSL, Linux distros??? + ("-a", False), # "arp -a" + ("-a", True), # "arp -a 192.168.1.1" + ) + _args_tested = False # type: bool + _good_pair = () # type: Union[Tuple, Tuple[str, bool]] + + def test(self): # type: () -> bool + return check_command("arp") + + def get(self, arg): # type: (str) -> Optional[str] + if not arg: + return None + + # Ensure output from testing command on first call isn't wasted + command_output = "" + + # Test which arguments are valid to the command + # This will NOT test which regex is valid + if not self._args_tested: + for pair_to_test in self._args: + try: + cmd_args = [pair_to_test[0]] + + # if True, then include IP as a command argument + if pair_to_test[1]: + cmd_args.append(arg) + + command_output = _popen("arp", " ".join(cmd_args)) + self._good_pair = pair_to_test + break + except CalledProcessError as ex: + if DEBUG: + log.debug( + "ArpVariousArgs pair test failed for (%s, %s): %s", + pair_to_test[0], + pair_to_test[1], + str(ex), + ) + + if not self._good_pair: + self.unusable = True + return None + self._args_tested = True + + if not command_output: + # if True, then include IP as a command argument + cmd_args = [self._good_pair[0]] + + if self._good_pair[1]: + cmd_args.append(arg) + + command_output = _popen("arp", " ".join(cmd_args)) + + escaped = re.escape(arg) + _good_regex = ( + self._regex_darwin if DARWIN or SOLARIS else self._regex_std + ) # type: str + return _search(r"\(" + escaped + _good_regex, command_output) + + +class ArpExe(Method): + """ + Query the Windows ARP table using ``arp.exe`` to find the MAC address of a remote host. + This only works for IPv4, since the ARP table is IPv4-only. + + Microsoft Documentation: `arp ` + """ # noqa: E501 + + platforms = {"windows", "wsl"} + method_type = "ip4" + + def test(self): # type: () -> bool + # NOTE: specifying "arp.exe" instead of "arp" lets this work + # seamlessly on WSL1 as well. On WSL2 it doesn't matter, since + # it's basically just a Linux VM with some lipstick. + return check_command("arp.exe") + + def get(self, arg): # type: (str) -> Optional[str] + return _search(MAC_RE_DASH, _popen("arp.exe", "-a %s" % arg)) + + +class ArpingHost(Method): + """ + Use ``arping`` command to determine the MAC of a host. + + Supports three variants of ``arping`` + + - "habets" arping by Thomas Habets + (`GitHub `__) + On Debian-based distros, ``apt install arping`` will install + Habets arping. + - "iputils" arping, from the ``iputils-arping`` + `package `__ + - "busybox" arping, included with BusyBox (a small executable "distro") + (`further reading `__) + + BusyBox's arping quite similar to iputils-arping. The arguments for + our purposes are the same, and the output is also the same. + There's even a TODO in busybox's arping code referencing iputils arping. + There are several differences: + - The return code from bad arguments is 1, not 2 like for iputils-arping + - The MAC address in output is lowercase (vs. uppercase in iputils-arping) + + This was a pain to obtain samples for busybox on Windows. I recommend + using WSL and arping'ing the Docker gateway (for WSL2 distros). + NOTE: it must be run as root using ``sudo busybox arping``. + """ + + platforms = {"linux", "darwin"} + method_type = "ip4" + network_request = True + _is_iputils = True # type: bool + _habets_args = "-r -C 1 -c 1 %s" # type: str + _iputils_args = "-f -c 1 %s" # type: str + + def test(self): # type: () -> bool + return check_command("arping") + + def get(self, arg): # type: (str) -> Optional[str] + # If busybox or iputils, this will just work, and if host ping fails, + # then it'll exit with code 1 and this function will return None. + # + # If it's Habets, then it'll exit code 1 and have "invalid option" + # and/or the help message in the output. + # In the case of Habets, set self._is_iputils to False, + # then re-try with Habets args. + try: + if self._is_iputils: + command_output = _popen("arping", self._iputils_args % arg) + if command_output: + return _search( + r" from %s \[(%s)\]" % (re.escape(arg), MAC_RE_COLON), + command_output, + ) + else: + return self._call_habets(arg) + except CalledProcessError as ex: + if ex.output and self._is_iputils: + if not PY2 and isinstance(ex.output, bytes): + output = str(ex.output, "utf-8").lower() + else: + output = str(ex.output).lower() + + if "habets" in output or "invalid option" in output: + if DEBUG: + log.debug("Falling back to Habets arping") + self._is_iputils = False + try: + return self._call_habets(arg) + except CalledProcessError: + pass + + return None + + def _call_habets(self, arg): # type: (str) -> Optional[str] + command_output = _popen("arping", self._habets_args % arg) + if command_output: + return command_output.strip() + else: + return None + + +class CtypesHost(Method): + """ + Uses ``SendARP`` from the Windows ``Iphlpapi`` to get the MAC address + of a remote IPv4 host. + + Microsoft Documentation: `SendARP function (iphlpapi.h) `__ + """ # noqa: E501 + + platforms = {"windows"} + method_type = "ip4" + network_request = True + + def test(self): # type: () -> bool + try: + return ctypes.windll.wsock32.inet_addr(b"127.0.0.1") > 0 # noqa: T484 + except Exception: + return False + + def get(self, arg): # type: (str) -> Optional[str] + if not PY2: # Convert to bytes on Python 3+ (Fixes GitHub issue #7) + arg = arg.encode() # type: ignore + + try: + inetaddr = ctypes.windll.wsock32.inet_addr(arg) # type: ignore + if inetaddr in (0, -1): + raise Exception + except Exception: + # TODO: this assumes failure is due to arg being a hostname + # We should be explicit about only accepting ipv4 addresses + # and handle any hostname resolution in calling code + hostip = socket.gethostbyname(arg) + inetaddr = ctypes.windll.wsock32.inet_addr(hostip) # type: ignore + + buffer = ctypes.c_buffer(6) + addlen = ctypes.c_ulong(ctypes.sizeof(buffer)) + + # https://docs.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-sendarp + send_arp = ctypes.windll.Iphlpapi.SendARP # type: ignore + if send_arp(inetaddr, 0, ctypes.byref(buffer), ctypes.byref(addlen)) != 0: + return None + + # Convert binary data into a string. + macaddr = "" + for intval in struct.unpack("BBBBBB", buffer): # type: ignore + if intval > 15: + replacestr = "0x" + else: + replacestr = "x" + macaddr = "".join([macaddr, hex(intval).replace(replacestr, "")]) + + return macaddr + + +class IpNeighborShow(Method): + platforms = {"linux", "other"} + method_type = "ip" # IPv6 and IPv4 + + def test(self): # type: () -> bool + return check_command("ip") + + def get(self, arg): # type: (str) -> Optional[str] + output = _popen("ip", "neighbor show %s" % arg) + if not output: + return None + + try: + # NOTE: the space prevents accidental matching of partial IPs + return ( + output.partition(arg + " ")[2].partition("lladdr")[2].strip().split()[0] + ) + except IndexError as ex: + log.debug("IpNeighborShow failed with exception: %s", str(ex)) + return None + + +class SysIfaceFile(Method): + platforms = {"linux", "wsl"} + method_type = "iface" + _path = "/sys/class/net/" # type: str + + def test(self): # type: () -> bool + # Imperfect, but should work well enough + return check_path(self._path) + + def get(self, arg): # type: (str) -> Optional[str] + data = _read_file(self._path + arg + "/address") + + # NOTE: if "/sys/class/net/" exists, but interface file doesn't, + # then that means the interface doesn't exist + # Sometimes this can be empty or a single newline character + return None if data is not None and len(data) < 17 else data + + +class UuidLanscan(Method): + platforms = {"other"} + method_type = "iface" + + def test(self): # type: () -> bool + try: + from uuid import _find_mac # noqa: T484 + + return check_command("lanscan") + except Exception: + return False + + def get(self, arg): # type: (str) -> Optional[str] + from uuid import _find_mac # type: ignore + + if not PY2: + arg = bytes(arg, "utf-8") # type: ignore + + mac = _find_mac("lanscan", "-ai", [arg], lambda i: 0) + + if mac: + return _uuid_convert(mac) + + return None + + +class FcntlIface(Method): + platforms = {"linux", "wsl"} + method_type = "iface" + + def test(self): # type: () -> bool + try: + import fcntl + + return True + except Exception: # Broad except to handle unknown effects + return False + + def get(self, arg): # type: (str) -> Optional[str] + import fcntl + + if not PY2: + arg = arg.encode() # type: ignore + + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + + # 0x8927 = SIOCGIFADDR + info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack("256s", arg[:15])) + + if PY2: + return ":".join(["%02x" % ord(char) for char in info[18:24]]) + else: + return ":".join(["%02x" % ord(chr(char)) for char in info[18:24]]) + + +class GetmacExe(Method): + """ + Uses Windows-builtin ``getmac.exe`` to get a interface's MAC address. + + Microsoft Documentation: `getmac `__ + """ # noqa: E501 + + platforms = {"windows"} + method_type = "iface" + _regexes = [ + # Connection Name + (r"\r\n", r".*" + MAC_RE_DASH + r".*\r\n"), + # Network Adapter (the human-readable name) + (r"\r\n.*", r".*" + MAC_RE_DASH + r".*\r\n"), + ] # type: List[Tuple[str, str]] + _champ = () # type: Union[tuple, Tuple[str, str]] + + def test(self): # type: () -> bool + # NOTE: the scripts from this library (getmac) are excluded from the + # path used for checking variables, in getmac.getmac.PATH (defined + # at the top of this file). Otherwise, this would get messy quickly :) + return check_command("getmac.exe") + + def get(self, arg): # type: (str) -> Optional[str] + try: + # /nh: Suppresses table headers + # /v: Verbose + command_output = _popen("getmac.exe", "/NH /V") + except CalledProcessError as ex: + # This shouldn't cause an exception if it's valid command + log.error("getmac.exe failed, marking unusable. Exception: %s", str(ex)) + self.unusable = True + return None + + if self._champ: + return _search(self._champ[0] + arg + self._champ[1], command_output) + + for pair in self._regexes: + result = _search(pair[0] + arg + pair[1], command_output) + if result: + self._champ = pair + return result + + return None + + +class IpconfigExe(Method): + """ + Uses ``ipconfig.exe`` to find interface MAC addresses on Windows. + + This is generally pretty reliable and works across a wide array of + versions and releases. I'm not sure if it works pre-XP though. + + Microsoft Documentation: `ipconfig `__ + """ # noqa: E501 + + platforms = {"windows"} + method_type = "iface" + _regex = ( + r"(?:\n?[^\n]*){1,8}Physical Address[ .:]+" + MAC_RE_DASH + r"\r\n" + ) # type: str + + def test(self): # type: () -> bool + return check_command("ipconfig.exe") + + def get(self, arg): # type: (str) -> Optional[str] + return _search(arg + self._regex, _popen("ipconfig.exe", "/all")) + + +class WmicExe(Method): + """ + Use ``wmic.exe`` on Windows to find the MAC address of a network interface. + + Microsoft Documentation: `wmic `__ + + .. warning:: + WMIC is deprecated as of Windows 10 21H1. This method may not work on + Windows 11 and may stop working at some point on Windows 10 (unlikely, + but possible). + """ # noqa: E501 + + platforms = {"windows"} + method_type = "iface" + + def test(self): # type: () -> bool + return check_command("wmic.exe") + + def get(self, arg): # type: (str) -> Optional[str] + command_output = _popen( + "wmic.exe", + 'nic where "NetConnectionID = \'%s\'" get "MACAddress" /value' % arg, + ) + + # Negative: "No Instance(s) Available" + # Positive: "MACAddress=00:FF:E7:78:95:A0" + # NOTE: .partition() always returns 3 parts, + # therefore it won't cause an IndexError + return command_output.strip().partition("=")[2] + + +class DarwinNetworksetupIface(Method): + """ + Use ``networksetup`` on MacOS (Darwin) to get the MAC address of a specific interface. + + I think that this is or was a BSD utility, but I haven't seen it on other BSDs + (FreeBSD, OpenBSD, etc.). So, I'm treating it as a Darwin-specific utility + until further notice. If you know otherwise, please open a PR :) + + If the command is present, it should always work, though naturally that is contingent + upon the whims of Apple in newer MacOS releases. + + Man page: `networksetup (8) `__ + """ + + platforms = {"darwin"} + method_type = "iface" + + def test(self): # type: () -> bool + return check_command("networksetup") + + def get(self, arg): # type: (str) -> Optional[str] + command_output = _popen("networksetup", "-getmacaddress %s" % arg) + return _search(MAC_RE_COLON, command_output) + + +# This only took 15-20 hours of throwing my brain against a wall multiple times +# over the span of 1-2 years to figure out. It works for almost all conceivable +# output from "ifconfig", and probably netstat too. It can probably be made more +# efficient by someone who actually knows how to write regex. +# [: ]\s?(?:flags=|\s).*?(?:(?:\w+[: ]\s?flags=)|\s(?:ether|address|HWaddr|hwaddr|lladdr)[ :]?\s?([0-9a-fA-F]{2}(?::[0-9a-fA-F]{2}){5})) # noqa: E501 +IFCONFIG_REGEX = ( + r"[: ]\s?(?:flags=|\s).*?(?:" + r"(?:\w+[: ]\s?flags=)|" # Prevent interfaces w/o a MAC from matching + r"\s(?:ether|address|HWaddr|hwaddr|lladdr)[ :]?\s?" # Handle various prefixes + r"([0-9a-fA-F]{2}(?::[0-9a-fA-F]{2}){5}))" # Match the MAC +) + + +def _parse_ifconfig(iface, command_output): + # type: (str, str) -> Optional[str] + if not iface or not command_output: + return None + + # Sanity check on input e.g. if user does "eth0:" as argument + iface = iface.strip(":") + + # "(?:^|\s)": prevent an input of "h0" from matching on "eth0" + search_re = r"(?:^|\s)" + iface + IFCONFIG_REGEX + + return _search(search_re, command_output, flags=re.DOTALL) + + +class IfconfigWithIfaceArg(Method): + """ + ``ifconfig`` command with the interface name as an argument + (e.g. ``ifconfig eth0``). + """ + + platforms = {"linux", "wsl", "freebsd", "openbsd", "other"} + method_type = "iface" + + def test(self): # type: () -> bool + return check_command("ifconfig") + + def get(self, arg): # type: (str) -> Optional[str] + try: + command_output = _popen("ifconfig", arg) + except CalledProcessError as err: + # Return code of 1 means interface doesn't exist + if err.returncode == 1: + return None + else: + raise err # this will cause another method to be used + + return _parse_ifconfig(arg, command_output) + + +# TODO: combine this with IfconfigWithArg/IfconfigNoArg +# (need to do live testing on Darwin) +class IfconfigEther(Method): + platforms = {"darwin"} + method_type = "iface" + _tested_arg = False # type: bool + _iface_arg = False # type: bool + + def test(self): # type: () -> bool + return check_command("ifconfig") + + def get(self, arg): # type: (str) -> Optional[str] + # Check if this version of "ifconfig" accepts an interface argument + command_output = "" + + if not self._tested_arg: + try: + command_output = _popen("ifconfig", arg) + self._iface_arg = True + except CalledProcessError: + self._iface_arg = False + self._tested_arg = True + + if self._iface_arg and not command_output: # Don't repeat work on first run + command_output = _popen("ifconfig", arg) + else: + command_output = _popen("ifconfig", "") + + return _parse_ifconfig(arg, command_output) + + +# TODO: create new methods, IfconfigNoArgs and IfconfigVariousArgs +# TODO: unit tests +class IfconfigOther(Method): + """ + Wild 'Shot in the Dark' attempt at ``ifconfig`` for unknown platforms. + """ + + platforms = {"linux", "other"} + method_type = "iface" + # "-av": Tru64 system? + _args = ( + ("", (r"(?::| ).*?\sether\s", r"(?::| ).*?\sHWaddr\s")), + ("-a", r".*?HWaddr\s"), + ("-v", r".*?HWaddr\s"), + ("-av", r".*?Ether\s"), + ) + _args_tested = False # type: bool + _good_pair = [] # type: List[Union[str, Tuple[str, str]]] + + def test(self): # type: () -> bool + return check_command("ifconfig") + + def get(self, arg): # type: (str) -> Optional[str] + if not arg: + return None + + # Cache output from testing command so first call isn't wasted + command_output = "" + + # Test which arguments are valid to the command + if not self._args_tested: + for pair_to_test in self._args: + try: + command_output = _popen("ifconfig", pair_to_test[0]) + self._good_pair = list(pair_to_test) # noqa: T484 + if isinstance(self._good_pair[1], str): + self._good_pair[1] += MAC_RE_COLON + break + except CalledProcessError as ex: + if DEBUG: + log.debug( + "IfconfigOther pair test failed for (%s, %s): %s", + pair_to_test[0], + pair_to_test[1], + str(ex), + ) + + if not self._good_pair: + self.unusable = True + return None + + self._args_tested = True + + if not command_output and isinstance(self._good_pair[0], str): + command_output = _popen("ifconfig", self._good_pair[0]) + + # Handle the two possible search terms + if isinstance(self._good_pair[1], tuple): + for term in self._good_pair[1]: + regex = term + MAC_RE_COLON + result = _search(re.escape(arg) + regex, command_output) + + if result: + # changes type from tuple to str, so the else statement + # will be hit on the next call to this method + self._good_pair[1] = regex + return result + return None + else: + return _search(re.escape(arg) + self._good_pair[1], command_output) + + +class NetstatIface(Method): + platforms = {"linux", "wsl", "other"} + method_type = "iface" + + # ".*?": non-greedy + # https://docs.python.org/3/howto/regex.html#greedy-versus-non-greedy + _regexes = [ + r": .*?ether " + MAC_RE_COLON, + r": .*?HWaddr " + MAC_RE_COLON, + # Ubuntu 12.04 and other older kernels + r" .*?Link encap:Ethernet HWaddr " + MAC_RE_COLON, + ] # type: List[str] + _working_regex = "" # type: str + + def test(self): # type: () -> bool + return check_command("netstat") + + # TODO: consolidate the parsing logic between IfconfigOther and netstat + def get(self, arg): # type: (str) -> Optional[str] + # NOTE: netstat and ifconfig pull from the same kernel source and + # therefore have the same output format on the same platform. + command_output = _popen("netstat", "-iae") + if not command_output: + log.warning("no netstat output, marking unusable") + self.unusable = True + return None + + if self._working_regex: + # Use regex that worked previously. This can still return None in + # the case of interface not existing, but at least it's a bit faster. + return _search(arg + self._working_regex, command_output, flags=re.DOTALL) + + # See if either regex matches + for regex in self._regexes: + result = _search(arg + regex, command_output, flags=re.DOTALL) + if result: + self._working_regex = regex + return result + + return None + + +# TODO: Add to IpLinkIface +# TODO: New method for "ip addr"? (this would be useful for CentOS and others as a fallback) +# (r"state UP.*\n.*ether " + MAC_RE_COLON, 0, "ip", ["link","addr"]), +# (r"wlan.*\n.*ether " + MAC_RE_COLON, 0, "ip", ["link","addr"]), +# (r"ether " + MAC_RE_COLON, 0, "ip", ["link","addr"]), +# _regexes = ( +# r".*\n.*link/ether " + MAC_RE_COLON, +# # Android 6.0.1+ (and likely other platforms as well) +# r"state UP.*\n.*ether " + MAC_RE_COLON, +# r"wlan.*\n.*ether " + MAC_RE_COLON, +# r"ether " + MAC_RE_COLON, +# ) # type: Tuple[str, str, str, str] + + +class IpLinkIface(Method): + platforms = {"linux", "wsl", "android", "other"} + method_type = "iface" + _regex = r".*\n.*link/ether " + MAC_RE_COLON # type: str + _tested_arg = False # type: bool + _iface_arg = False # type: bool + + def test(self): # type: () -> bool + return check_command("ip") + + def get(self, arg): # type: (str) -> Optional[str] + # Check if this version of "ip link" accepts an interface argument + # Not accepting one is a quirk of older versions of 'iproute2' + # TODO: is it "ip link " on some platforms and "ip link show " on others? + command_output = "" + + if not self._tested_arg: + try: + command_output = _popen("ip", "link show " + arg) + self._iface_arg = True + except CalledProcessError as err: + # Output: 'Command "eth0" is unknown, try "ip link help"' + if err.returncode != 255: + raise err + self._tested_arg = True + + if self._iface_arg: + if not command_output: # Don't repeat work on first run + command_output = _popen("ip", "link show " + arg) + return _search(arg + self._regex, command_output) + else: + # TODO: improve this regex to not need extra portion for no arg + command_output = _popen("ip", "link") + return _search(arg + r":" + self._regex, command_output) + + +class DefaultIfaceLinuxRouteFile(Method): + """ + Get the default interface by parsing the ``/proc/net/route`` file. + + This is the same source as the ``route`` command, however it's much + faster to read this file than to call ``route``. If it fails for whatever + reason, we can fall back on the system commands (e.g for a platform that + has a route command, but doesn't use ``/proc``, such as BSD-based platforms). + """ + + platforms = {"linux", "wsl"} + method_type = "default_iface" + + def test(self): # type: () -> bool + return check_path("/proc/net/route") + + def get(self, arg=""): # type: (str) -> Optional[str] + data = _read_file("/proc/net/route") + + if data is not None and len(data) > 1: + for line in data.split("\n")[1:-1]: + line = line.strip() + if not line: + continue + + # Some have tab separators, some have spaces + if "\t" in line: + sep = "\t" + else: + sep = " " + + iface_name, dest = line.split(sep)[:2] + + if dest == "00000000": + return iface_name + + if DEBUG: + log.debug( + "Failed to find default interface in data from " + "'/proc/net/route', no destination of '00000000' was found" + ) + elif DEBUG: + log.warning("No data from /proc/net/route") + + return None + + +class DefaultIfaceRouteCommand(Method): + platforms = {"linux", "wsl", "other"} + method_type = "default_iface" + + def test(self): # type: () -> bool + return check_command("route") + + def get(self, arg=""): # type: (str) -> Optional[str] + output = _popen("route", "-n") + + try: + return output.partition("0.0.0.0")[2].partition("\n")[0].split()[-1] + except IndexError as ex: # index errors means no default route in output? + log.debug("DefaultIfaceRouteCommand failed for %s: %s", arg, str(ex)) + return None + + +class DefaultIfaceRouteGetCommand(Method): + platforms = {"darwin", "freebsd", "other"} + method_type = "default_iface" + + def test(self): # type: () -> bool + return check_command("route") + + def get(self, arg=""): # type: (str) -> Optional[str] + output = _popen("route", "get default") + + if not output: + return None + + try: + return output.partition("interface: ")[2].strip().split()[0].strip() + except IndexError as ex: + log.debug("DefaultIfaceRouteCommand failed for %s: %s", arg, str(ex)) + return None + + +class DefaultIfaceIpRoute(Method): + # NOTE: this is slightly faster than "route" since + # there is less output than "route -n" + platforms = {"linux", "wsl", "other"} + method_type = "default_iface" + + def test(self): # type: () -> bool + return check_command("ip") + + def get(self, arg=""): # type: (str) -> Optional[str] + output = _popen("ip", "route list 0/0") + + if not output: + if DEBUG: + log.debug("DefaultIfaceIpRoute failed: no output") + return None + + return output.partition("dev")[2].partition("proto")[0].strip() + + +class DefaultIfaceOpenBsd(Method): + platforms = {"openbsd"} + method_type = "default_iface" + + def test(self): # type: () -> bool + return check_command("route") + + def get(self, arg=""): # type: (str) -> Optional[str] + output = _popen("route", "-nq show -inet -gateway -priority 1") + return output.partition("127.0.0.1")[0].strip().rpartition(" ")[2] + + +class DefaultIfaceFreeBsd(Method): + platforms = {"freebsd"} + method_type = "default_iface" + + def test(self): # type: () -> bool + return check_command("netstat") + + def get(self, arg=""): # type: (str) -> Optional[str] + output = _popen("netstat", "-r") + return _search(r"default[ ]+\S+[ ]+\S+[ ]+(\S+)[\r\n]+", output) + + +# TODO: order methods by effectiveness/reliability +# Use a class attribute maybe? e.g. "score", then sort by score in cache +METHODS = [ + # NOTE: CtypesHost is faster than ArpExe because of sub-process startup times :) + CtypesHost, + ArpFile, + ArpingHost, + SysIfaceFile, + FcntlIface, + UuidLanscan, + GetmacExe, + IpconfigExe, + WmicExe, + ArpExe, + DarwinNetworksetupIface, + ArpFreebsd, + ArpOpenbsd, + IfconfigWithIfaceArg, + IfconfigEther, + IfconfigOther, + IpLinkIface, + NetstatIface, + IpNeighborShow, + ArpVariousArgs, + UuidArpGetNode, + DefaultIfaceLinuxRouteFile, + DefaultIfaceIpRoute, + DefaultIfaceRouteCommand, + DefaultIfaceRouteGetCommand, + DefaultIfaceOpenBsd, + DefaultIfaceFreeBsd, +] # type: List[Type[Method]] + +# Primary method to use for a given method type +METHOD_CACHE = { + "ip4": None, + "ip6": None, + "iface": None, + "default_iface": None, +} # type: Dict[str, Optional[Method]] + + +# Order of methods is determined by: +# Platform + version +# Performance (file read > command) +# Reliability (how well I know/understand the command to work) +FALLBACK_CACHE = { + "ip4": [], + "ip6": [], + "iface": [], + "default_iface": [], +} # type: Dict[str, List[Method]] + + +DEFAULT_IFACE = "" # type: str + + +def get_method_by_name(method_name): + # type: (str) -> Optional[Type[Method]] + for method in METHODS: + if method.__name__.lower() == method_name.lower(): + return method + + return None + + +def get_instance_from_cache(method_type, method_name): + # type: (str, str) -> Optional[Method] + """ + Get the class for a named Method from the caches. + + METHOD_CACHE is checked first, and if that fails, + then any entries in FALLBACK_CACHE are checked. + If both fail, None is returned. + + Args: + method_type: method type to initialize the cache for. + Allowed values are: ``ip4`` | ``ip6`` | ``iface`` | ``default_iface`` + """ + + if str(METHOD_CACHE[method_type]) == method_name: + return METHOD_CACHE[method_type] + + for f_meth in FALLBACK_CACHE[method_type]: + if str(f_meth) == method_name: + return f_meth + + return None + + +def _swap_method_fallback(method_type, swap_with): + # type: (str, str) -> bool + if str(METHOD_CACHE[method_type]) == swap_with: + return True + + found = None # type: Optional[Method] + for f_meth in FALLBACK_CACHE[method_type]: + if str(f_meth) == swap_with: + found = f_meth + break + + if not found: + return False + + curr = METHOD_CACHE[method_type] + FALLBACK_CACHE[method_type].remove(found) + METHOD_CACHE[method_type] = found + FALLBACK_CACHE[method_type].insert(0, curr) # noqa: T484 + + return True + + +def _warn_critical(err_msg): + # type: (str) -> None + log.critical(err_msg) + warnings.warn( + "%s. NOTICE: this warning will likely turn into a raised exception in getmac 1.0.0!" + % err_msg, + RuntimeWarning, + ) + + +def initialize_method_cache( + method_type, network_request=True +): # type: (str, bool) -> bool + """ + Initialize the method cache for the given method type. + + Args: + method_type: method type to initialize the cache for. + Allowed values are: ``ip4`` | ``ip6`` | ``iface`` | ``default_iface`` + network_request: if methods that make network requests should be included + (those methods that have the attribute ``network_request`` set to ``True``) + """ + if METHOD_CACHE.get(method_type): + if DEBUG: + log.debug( + "Method cache already initialized for method type '%s'", method_type + ) + return True + + log.debug("Initializing '%s' method cache (platform: '%s')", method_type, PLATFORM) + + if OVERRIDE_PLATFORM: + log.warning( + "Platform override is set, using '%s' as platform " + "instead of detected platform '%s'", + OVERRIDE_PLATFORM, + PLATFORM, + ) + platform = OVERRIDE_PLATFORM + else: + platform = PLATFORM + + if DEBUG >= 4: + meth_strs = ", ".join(m.__name__ for m in METHODS) # type: str + log.debug("%d methods available: %s", len(METHODS), meth_strs) + + # Filter methods by the type of MAC we're looking for, such as "ip" + # for remote host methods or "iface" for local interface methods. + type_methods = [ + method + for method in METHODS + if (method.method_type != "ip" and method.method_type == method_type) + # Methods with a type of "ip" can handle both IPv4 and IPv6 + or (method.method_type == "ip" and method_type in ["ip4", "ip6"]) + ] # type: List[Type[Method]] + + if not type_methods: + _warn_critical("No valid methods matching MAC type '%s'" % method_type) + return False + + if DEBUG >= 2: + type_strs = ", ".join(tm.__name__ for tm in type_methods) # type: str + log.debug( + "%d type-filtered methods for '%s': %s", + len(type_methods), + method_type, + type_strs, + ) + + # Filter methods by the platform we're running on + platform_methods = [ + method for method in type_methods if platform in method.platforms + ] # type: List[Type[Method]] + + if not platform_methods: + # If there isn't a method for the current platform, + # then fallback to the generic platform "other". + warn_msg = ( + "No methods for platform '%s'! Your system may not be supported. " + "Falling back to platform 'other'." % platform + ) + log.warning(warn_msg) + warnings.warn(warn_msg, RuntimeWarning) + platform_methods = [ + method for method in type_methods if "other" in method.platforms + ] + + if DEBUG >= 2: + plat_strs = ", ".join(pm.__name__ for pm in platform_methods) # type: str + log.debug( + "%d platform-filtered methods for '%s' (method_type='%s'): %s", + len(platform_methods), + platform, + method_type, + plat_strs, + ) + + if not platform_methods: + _warn_critical( + "No valid methods found for MAC type '%s' and platform '%s'" + % (method_type, platform) + ) + return False + + filtered_methods = platform_methods # type: List[Type[Method]] + + # If network_request is False, then remove any methods that have network_request=True + if not network_request: + filtered_methods = [m for m in platform_methods if not m.network_request] + + # Determine which methods work on the current system + tested_methods = [] # type: List[Method] + + for method_class in filtered_methods: + method_instance = method_class() # type: Method + try: + test_result = method_instance.test() # type: bool + except Exception: + test_result = False + if test_result: + tested_methods.append(method_instance) + # First successful test goes in the cache + if not METHOD_CACHE[method_type]: + METHOD_CACHE[method_type] = method_instance + elif DEBUG: + log.debug("Test failed for method '%s'", str(method_instance)) + + if not tested_methods: + _warn_critical( + "All %d '%s' methods failed to test!" % (len(filtered_methods), method_type) + ) + return False + + if DEBUG >= 2: + tested_strs = ", ".join(str(ts) for ts in tested_methods) # type: str + log.debug( + "%d tested methods for '%s': %s", + len(tested_methods), + method_type, + tested_strs, + ) + + # Populate fallback cache with all the tested methods, minus the currently active method + if METHOD_CACHE[method_type] and METHOD_CACHE[method_type] in tested_methods: + tested_methods.remove(METHOD_CACHE[method_type]) # noqa: T484 + + FALLBACK_CACHE[method_type] = tested_methods + + if DEBUG: + log.debug( + "Current method cache: %s", + str({k: str(v) for k, v in METHOD_CACHE.items()}), + ) + log.debug( + "Current fallback cache: %s", + str({k: str(v) for k, v in FALLBACK_CACHE.items()}), + ) + log.debug("Finished initializing '%s' method cache", method_type) + + return True + + +def _remove_unusable(method, method_type): # type: (Method, str) -> Optional[Method] + if not FALLBACK_CACHE[method_type]: + log.warning("No fallback method for unusable method '%s'!", str(method)) + METHOD_CACHE[method_type] = None + else: + METHOD_CACHE[method_type] = FALLBACK_CACHE[method_type].pop(0) + log.warning( + "Falling back to '%s' for unusable method '%s'", + str(METHOD_CACHE[method_type]), + str(method), + ) + + return METHOD_CACHE[method_type] + + +def _attempt_method_get( + method, method_type, arg +): # type: (Method, str, str) -> Optional[str] + """ + Attempt to use methods, and if they fail, fallback to the next method in the cache. + """ + if not METHOD_CACHE[method_type] and not FALLBACK_CACHE[method_type]: + _warn_critical("No usable methods found for MAC type '%s'" % method_type) + return None + + if DEBUG: + log.debug( + "Attempting get() (method='%s', method_type='%s', arg='%s')", + str(method), + method_type, + arg, + ) + + result = None + try: + result = method.get(arg) + except CalledProcessError as ex: + # Don't mark return code 1 on a process as unusable! + # Example of return code 1 on ifconfig from WSL: + # Blake:goesc$ ifconfig eth8 + # eth8: error fetching interface information: Device not found + # Blake:goesc$ echo $? + # 1 + # Methods where an exit code of 1 makes it invalid should handle the + # CalledProcessError, inspect the return code, and set self.unusable = True + if ex.returncode != 1: + log.warning( + "Cached Method '%s' failed for '%s' lookup with process exit " + "code '%d' != 1, marking unusable. Exception: %s", + str(method), + method_type, + ex.returncode, + str(ex), + ) + method.unusable = True + except Exception as ex: + log.warning( + "Cached Method '%s' failed for '%s' lookup with unhandled exception: %s", + str(method), + method_type, + str(ex), + ) + method.unusable = True + + # When an unhandled exception occurs (or exit code other than 1), remove + # the method from the cache and reinitialize with next candidate. + if not result and method.unusable: + new_method = _remove_unusable(method, method_type) + + if not new_method: + return None + + return _attempt_method_get(new_method, method_type, arg) + + return result + + +def get_by_method(method_type, arg="", network_request=True): + # type: (str, str, bool) -> Optional[str] + """ + Query for a MAC using a specific method. + + Args: + method_type: the type of lookup being performed. + Allowed values are: ``ip4``, ``ip6``, ``iface``, ``default_iface`` + arg: Argument to pass to the method, e.g. an interface name or IP address + network_request: if methods that make network requests should be included + (those methods that have the attribute ``network_request`` set to ``True``) + """ + if not arg and method_type != "default_iface": + log.error("Empty arg for method '%s' (raw value: %s)", method_type, repr(arg)) + return None + + if FORCE_METHOD: + log.warning( + "Forcing method '%s' to be used for '%s' lookup (arg: '%s')", + FORCE_METHOD, + method_type, + arg, + ) + + forced_method = get_method_by_name(FORCE_METHOD) + + if not forced_method: + log.error("Invalid FORCE_METHOD method name '%s'", FORCE_METHOD) + return None + + return forced_method().get(arg) + + method = METHOD_CACHE.get(method_type) # type: Optional[Method] + + if not method: + # Initialize the cache if it hasn't been already + if not initialize_method_cache(method_type, network_request): + log.error( + "Failed to initialize method cache for method '%s' (arg: '%s')", + method_type, + arg, + ) + return None + + method = METHOD_CACHE[method_type] + + if not method: + log.error( + "Initialization failed for method '%s'. It may not be supported " + "on this platform or another issue occurred.", + method_type, + ) + return None + + # TODO: add a "net_ok" argument, check network_request attribute + # on method in CACHE, if not then keep checking for method in + # FALLBACK_CACHE that has network_request. + result = _attempt_method_get(method, method_type, arg) + + # Log normal get() failures if debugging is enabled + if DEBUG and not result: + log.debug("Method '%s' failed for '%s' lookup", str(method), method_type) + + return result + + +def get_mac_address( # noqa: C901 + interface=None, ip=None, ip6=None, hostname=None, network_request=True +): + # type: (Optional[str], Optional[str], Optional[str], Optional[str], bool) -> Optional[str] + """ + Get an Unicast IEEE 802 MAC-48 address from a local interface or remote host. + + Only ONE of the first four arguments may be used + (``interface``,``ip``, ``ip6``, or ``hostname``). + If none of the arguments are selected, the default network interface for + the system will be used. + + .. warning:: + In getmac 1.0.0, exceptions will be raised if the method cache initialization fails + (in other words, if there are no valid methods found for the type of MAC requested). + + .. warning:: + You MUST provide :class:`str` typed arguments, REGARDLESS of Python version + + .. note:: + ``"localhost"`` or ``"127.0.0.1"`` will always return ``"00:00:00:00:00:00"`` + + .. note:: + It is assumed that you are using Ethernet or Wi-Fi. While other protocols + such as Bluetooth may work, this has not been tested and should not be + relied upon. If you need this functionality, please open an issue + (or better yet, a Pull Request ;))! + + .. note:: + Exceptions raised by methods are handled silently and returned as :obj:`None`. + + Args: + interface (str): Name of a local network interface (e.g "Ethernet 3", "eth0", "ens32") + ip (str): Canonical dotted decimal IPv4 address of a remote host (e.g ``192.168.0.1``) + ip6 (str): Canonical shortened IPv6 address of a remote host (e.g ``ff02::1:ffe7:7f19``) + hostname (str): DNS hostname of a remote host (e.g "router1.mycorp.com", "localhost") + network_request (bool): If network requests should be made when attempting to find the + MAC of a remote host. If the ``arping`` command is available, this will be used. + If not, a UDP packet will be sent to the remote host to populate + the ARP/NDP tables for IPv4/IPv6. The port this packet is sent to can + be configured using the module variable ``getmac.PORT``. + + Returns: + Lowercase colon-separated MAC address, or :obj:`None` if one could not be + found or there was an error. + """ # noqa: E501 + + if DEBUG: + import timeit + + start_time = timeit.default_timer() + + if PY2 or (sys.version_info[0] == 3 and sys.version_info[1] < 7): + global WARNED_UNSUPPORTED_PYTHONS + if not WARNED_UNSUPPORTED_PYTHONS: + warning_string = ( + "Support for Python versions < 3.7 is deprecated and will be " + "removed in getmac 1.0.0. If you are stuck on an unsupported " + "Python, considor loosely pinning the version of this package " + 'in your dependency list, e.g. "getmac<1.0.0" or "getmac~=0.9.0".' + ) + warnings.warn(warning_string, DeprecationWarning) + log.warning(warning_string) # Ensure it appears in any logs + WARNED_UNSUPPORTED_PYTHONS = True + + if (hostname and hostname == "localhost") or (ip and ip == "127.0.0.1"): + return "00:00:00:00:00:00" + + # Resolve hostname to an IP address + if hostname: + # Exceptions will be handled silently and returned as a None + try: + # TODO: can this return a IPv6 address? If so, handle that! + ip = socket.gethostbyname(hostname) + except Exception as ex: + log.error("Could not resolve hostname '%s': %s", hostname, ex) + if DEBUG: + log.debug(traceback.format_exc()) + return None + + if ip6: + if not socket.has_ipv6: + log.error( + "Cannot get the MAC address of a IPv6 host: " + "IPv6 is not supported on this system" + ) + return None + elif ":" not in ip6: + log.error("Invalid IPv6 address (no ':'): %s", ip6) + return None + + mac = None + + if network_request and (ip or ip6): + send_udp_packet = True # type: bool + + # If IPv4, use ArpingHost or CtypesHost if they're available instead + # of populating the ARP table. This provides more reliable results + # and a ARP packet is lower impact than a UDP packet. + if ip: + if not METHOD_CACHE["ip4"]: + initialize_method_cache("ip4", network_request) + + # If ArpFile succeeds, just use that, since it's + # significantly faster than arping (file read vs. + # spawning a process). + if not FORCE_METHOD or FORCE_METHOD.lower() == "arpfile": + af_meth = get_instance_from_cache("ip4", "ArpFile") + if af_meth: + mac = _attempt_method_get(af_meth, "ip4", ip) + + # TODO: add tests for this logic (arpfile => fallback) + # This seems to be a common course of GitHub issues, + # so fixing it for good and adding robust tests is + # probably a good idea. + + if not mac: + for arp_meth in ["CtypesHost", "ArpingHost"]: + if FORCE_METHOD and FORCE_METHOD.lower() != arp_meth: + continue + + if arp_meth == str(METHOD_CACHE["ip4"]): + send_udp_packet = False + break + elif any( + arp_meth == str(x) for x in FALLBACK_CACHE["ip4"] + ) and _swap_method_fallback("ip4", arp_meth): + send_udp_packet = False + break + + # Populate the ARP table by sending an empty UDP packet to a high port + if send_udp_packet and not mac: + if DEBUG: + log.debug( + "Attempting to populate ARP table with UDP packet to %s:%d", + ip if ip else ip6, + PORT, + ) + + if ip: + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + else: + sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) + + try: + if ip: + sock.sendto(b"", (ip, PORT)) + else: + sock.sendto(b"", (ip6, PORT)) + except Exception: + log.error("Failed to send ARP table population packet") + if DEBUG: + log.debug(traceback.format_exc()) + finally: + sock.close() + elif DEBUG: + log.debug( + "Not sending UDP packet, using network request method '%s' instead", + str(METHOD_CACHE["ip4"]), + ) + + # Setup the address hunt based on the arguments specified + if not mac: + if ip6: + mac = get_by_method("ip6", ip6) + elif ip: + mac = get_by_method("ip4", ip) + elif interface: + mac = get_by_method("iface", interface) + else: # Default to searching for interface + # Default to finding MAC of the interface with the default route + if WINDOWS and network_request: + default_iface_ip = _fetch_ip_using_dns() + mac = get_by_method("ip4", default_iface_ip) + elif WINDOWS: + # TODO: implement proper default interface detection on windows + # (add a Method subclass to implement DefaultIface on Windows) + mac = get_by_method("iface", "Ethernet") + else: + global DEFAULT_IFACE + + if not DEFAULT_IFACE: + DEFAULT_IFACE = get_by_method("default_iface") # noqa: T484 + + if DEFAULT_IFACE: + DEFAULT_IFACE = str(DEFAULT_IFACE).strip() + + # TODO: better fallback if default iface lookup fails + if not DEFAULT_IFACE and BSD: + DEFAULT_IFACE = "em0" + elif not DEFAULT_IFACE and DARWIN: # OSX, maybe? + DEFAULT_IFACE = "en0" + elif not DEFAULT_IFACE: + DEFAULT_IFACE = "eth0" + + mac = get_by_method("iface", DEFAULT_IFACE) + + # TODO: hack to fallback to loopback if lookup fails + if not mac: + mac = get_by_method("iface", "lo") + + log.debug("Raw MAC found: %s", mac) + + # Log how long it took + if DEBUG: + duration = timeit.default_timer() - start_time + log.debug("getmac took %.4f seconds", duration) + + return _clean_mac(mac) diff --git a/venv/lib/python3.11/site-packages/getmac/shutilwhich.py b/venv/lib/python3.11/site-packages/getmac/shutilwhich.py new file mode 100755 index 0000000..771335a --- /dev/null +++ b/venv/lib/python3.11/site-packages/getmac/shutilwhich.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# This is a stopgap to maintain Python 2.7 support for the 0.9.0 release. +# +# Code copied from the "shutilwhich" project by Marc Brinkmann (@mbr) +# Source: https://github.com/mbr/shutilwhich +# +# We can't depend on it in setup.py since getmac has the __version__, +# which is imported in setup.py, which requires shutilwhich to be installed, +# leading to the typical problem: which came first, the Python or the Egg? :) +import os +import sys + + +# Everything below this point has been copied verbatim from the Python-3.3 +# sources. +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) + + # Short circuit. If we're given a full path which matches the mode + # and it exists, we're done here. + if _access_check(cmd, mode): + return cmd + + path = (path or os.environ.get("PATH", os.defpath)).split(os.pathsep) + + if sys.platform == "win32": + # The current directory takes precedence on Windows. + if os.curdir not 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". + matches = [cmd for ext in pathext if cmd.lower().endswith(ext.lower())] + # If it does match, only test that one, otherwise we have to try + # others. + files = [cmd] if matches else [cmd + ext.lower() 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: + dir = os.path.normcase(dir) + if dir not in seen: + seen.add(dir) + for thefile in files: + name = os.path.join(dir, thefile) + if _access_check(name, mode): + return name + return None diff --git a/venv/lib/python3.11/site-packages/idna-3.10.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/idna-3.10.dist-info/LICENSE.md b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/LICENSE.md new file mode 100644 index 0000000..19b6b45 --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/LICENSE.md @@ -0,0 +1,31 @@ +BSD 3-Clause License + +Copyright (c) 2013-2024, Kim Davies and contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. 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. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +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. diff --git a/venv/lib/python3.11/site-packages/idna-3.10.dist-info/METADATA b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/METADATA new file mode 100644 index 0000000..c42623e --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/METADATA @@ -0,0 +1,250 @@ +Metadata-Version: 2.1 +Name: idna +Version: 3.10 +Summary: Internationalized Domain Names in Applications (IDNA) +Author-email: Kim Davies +Requires-Python: >=3.6 +Description-Content-Type: text/x-rst +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 :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: Name Service (DNS) +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Utilities +Requires-Dist: ruff >= 0.6.2 ; extra == "all" +Requires-Dist: mypy >= 1.11.2 ; extra == "all" +Requires-Dist: pytest >= 8.3.2 ; extra == "all" +Requires-Dist: flake8 >= 7.1.1 ; extra == "all" +Project-URL: Changelog, https://github.com/kjd/idna/blob/master/HISTORY.rst +Project-URL: Issue tracker, https://github.com/kjd/idna/issues +Project-URL: Source, https://github.com/kjd/idna +Provides-Extra: all + +Internationalized Domain Names in Applications (IDNA) +===================================================== + +Support for the Internationalized 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 which +only supports the older superseded IDNA specification (`RFC 3490 +`_). + +Basic functions are simply executed: + +.. code-block:: pycon + + >>> import idna + >>> idna.encode('ドメイン.テスト') + b'xn--eckwd4c7c.xn--zckzah' + >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah')) + ドメイン.テスト + + +Installation +------------ + +This package is available for installation from PyPI: + +.. code-block:: bash + + $ python3 -m pip install idna + + +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 + + >>> 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 + + >>> import idna.codec + >>> print('домен.испытание'.encode('idna2008')) + b'xn--d1acufc.xn--80akhbyknj4f' + >>> print(b'xn--d1acufc.xn--80akhbyknj4f'.decode('idna2008')) + домен.испытание + +Conversions can be applied at a per-label basis using the ``ulabel`` or +``alabel`` functions if necessary: + +.. code-block:: pycon + + >>> idna.alabel('测试') + b'xn--0zwm56d' + +Compatibility Mapping (UTS #46) ++++++++++++++++++++++++++++++++ + +As described in `RFC 5895 `_, the +IDNA specification does not normalize input from different potential +ways a user may input a domain name. This functionality, known as +a “mapping”, is 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. Strings are +preprocessed according to Section 4.4 “Preprocessing for IDNA2008” +prior to the IDNA operations. + +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 + + >>> import idna + >>> idna.encode('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 + + >>> idna.encode('Königsgäßchen', uts46=True, transitional=True) + 'xn--knigsgsschen-lcb0w' + +Implementers 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 codepoint data from the Unicode repository +and perform the required calculations to identify eligibility. There are +three main modes: + +* ``idna-data make-libdata``. Generates ``idnadata.py`` and + ``uts46data.py``, the pre-calculated lookup tables used for IDNA and + UTS 46 conversions. Implementers 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 be used in computing the table data. For +example, ``idna-data --version 9.0.0 make-libdata`` will generate +library data against Unicode 9.0.0. + + +Additional Notes +---------------- + +* **Packages**. The latest tagged release version is published in the + `Python Package Index `_. + +* **Version support**. This library supports Python 3.6 and higher. + As this library serves as a low-level toolkit for a variety of + applications, many of which strive for broad compatibility with older + Python versions, there is no rush to remove older interpreter support. + Removing support for older versions should be well justified in that the + maintenance burden has become too high. + +* **Python 2**. Python 2 is supported by version 2.x of this library. + Use "idna<3" in your requirements file if you need this library for + a Python 2 application. Be advised that these versions are no longer + actively developed. + +* **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 + `_. + +* **Emoji**. It is an occasional request to support emoji domains in + this library. Encoding of symbols like emoji is expressly prohibited by + the technical standard IDNA 2008 and emoji domains are broadly phased + out across the domain industry due to associated security risks. For + now, applications that need to support these non-compliant labels + may wish to consider trying the encode/decode operation in this library + first, and then falling back to using `encodings.idna`. See `the Github + project `_ for more discussion. + diff --git a/venv/lib/python3.11/site-packages/idna-3.10.dist-info/RECORD b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/RECORD new file mode 100644 index 0000000..4a47b68 --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/RECORD @@ -0,0 +1,22 @@ +idna-3.10.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +idna-3.10.dist-info/LICENSE.md,sha256=pZ8LDvNjWHQQmkRhykT_enDVBpboFHZ7-vch1Mmw2w8,1541 +idna-3.10.dist-info/METADATA,sha256=URR5ZyDfQ1PCEGhkYoojqfi2Ra0tau2--lhwG4XSfjI,10158 +idna-3.10.dist-info/RECORD,, +idna-3.10.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81 +idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868 +idna/__pycache__/__init__.cpython-311.pyc,, +idna/__pycache__/codec.cpython-311.pyc,, +idna/__pycache__/compat.cpython-311.pyc,, +idna/__pycache__/core.cpython-311.pyc,, +idna/__pycache__/idnadata.cpython-311.pyc,, +idna/__pycache__/intranges.cpython-311.pyc,, +idna/__pycache__/package_data.cpython-311.pyc,, +idna/__pycache__/uts46data.cpython-311.pyc,, +idna/codec.py,sha256=PEew3ItwzjW4hymbasnty2N2OXvNcgHB-JjrBuxHPYY,3422 +idna/compat.py,sha256=RzLy6QQCdl9784aFhb2EX9EKGCJjg0P3PilGdeXXcx8,316 +idna/core.py,sha256=YJYyAMnwiQEPjVC4-Fqu_p4CJ6yKKuDGmppBNQNQpFs,13239 +idna/idnadata.py,sha256=W30GcIGvtOWYwAjZj4ZjuouUutC6ffgNuyjJy7fZ-lo,78306 +idna/intranges.py,sha256=amUtkdhYcQG8Zr-CoMM_kVRacxkivC1WgxN1b63KKdU,1898 +idna/package_data.py,sha256=q59S3OXsc5VI8j6vSD0sGBMyk6zZ4vWFREE88yCJYKs,21 +idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +idna/uts46data.py,sha256=rt90K9J40gUSwppDPCrhjgi5AA6pWM65dEGRSf6rIhM,239289 diff --git a/venv/lib/python3.11/site-packages/idna-3.10.dist-info/WHEEL b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/WHEEL new file mode 100644 index 0000000..3b5e64b --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna-3.10.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.9.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/venv/lib/python3.11/site-packages/idna/__init__.py b/venv/lib/python3.11/site-packages/idna/__init__.py new file mode 100644 index 0000000..cfdc030 --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna/__init__.py @@ -0,0 +1,45 @@ +from .core import ( + IDNABidiError, + IDNAError, + InvalidCodepoint, + InvalidCodepointContext, + alabel, + check_bidi, + check_hyphen_ok, + check_initial_combiner, + check_label, + check_nfc, + decode, + encode, + ulabel, + uts46_remap, + valid_contextj, + valid_contexto, + valid_label_length, + valid_string_length, +) +from .intranges import intranges_contain +from .package_data import __version__ + +__all__ = [ + "__version__", + "IDNABidiError", + "IDNAError", + "InvalidCodepoint", + "InvalidCodepointContext", + "alabel", + "check_bidi", + "check_hyphen_ok", + "check_initial_combiner", + "check_label", + "check_nfc", + "decode", + "encode", + "intranges_contain", + "ulabel", + "uts46_remap", + "valid_contextj", + "valid_contexto", + "valid_label_length", + "valid_string_length", +] diff --git a/venv/lib/python3.11/site-packages/idna/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/idna/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b73dc171684cfda31903eec1d89b7a868384a0b GIT binary patch literal 1095 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/idna/__pycache__/compat.cpython-311.pyc b/venv/lib/python3.11/site-packages/idna/__pycache__/compat.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84418cd71aef95124233a47f3a7ea6a4b830883b GIT binary patch literal 1017 zcmbVKy=xRf6rb6z`%2V!Csi6LN-2th3lyls*+*T~+^yJX|;&N4f9aAF~1 zBUq$MN-HJU*xC3;oRC5m1i>oZ$#toGv*$?+LBwI^ea!F8n>W8V@201#1V`u7kL^`T z$am#ThVjc7bF4HF67u923sYMbgMc&0El3J& zMt&Qj+!7$WA_-K~Wawz9HL_9c6L|`IM&6?L{`bxXIi#LLMF}GhsVJk$6lk9`-5nl- zyUW~E@LdRG=JL4rxa|i|x~bcPq~}Iq+fDm&hbPMmOG|DRO1PaO?r%fphAi>jfXAsX z7t(%S+T`mS_Ztmy0kd1UM#^|jzSd^;ZoXQ3y*4nejc|wj|4T#-kKTt;8@U0hV+l0s?b{p-Dq{>k7A>S*56`Njip-M+K9c-LkeGCSeY?#eI< zGq4jshEzamBaxB^JaTAW_qc4tX#_DO64*l_xWLluSj_3F%agO>Dk6%pYz76=R-GH% zc=Wm2JgPPaMzeT@GnHGipN7e{P~8{m2j@n>1&k?CJ->%Yr_sh>Q?;h+Ej literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/idna/__pycache__/core.cpython-311.pyc b/venv/lib/python3.11/site-packages/idna/__pycache__/core.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..061e36aeeb452e056eb11c1e4ee3c73f410f16f8 GIT binary patch literal 19264 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/idna/__pycache__/intranges.cpython-311.pyc b/venv/lib/python3.11/site-packages/idna/__pycache__/intranges.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0266862128d54c3bbb3f7120b873defe852bdaa GIT binary patch literal 2975 zcmai0O>7&-6`uVg>7^-&5-iKHYmH5}5EGh=OeGFdxdrOL24c&p|8h`TtXJG2wbF8z zo?Tj&N;O2$0#u-)D$u|@CcM$X5P&Eo44P4qt9b86~UAL^S=r!VTAs{n7t>|pS*YslSjxvi^vcR(GnH~7$r+A zN{doaUX%r7$V4K_i9JnZC`2ZT5z32$wY+SEe=9GBj0o%;fmb0)K4hq{7B-@s2OU@& z);S9M5hDisBj2|PHjaReQIJs$@it11=|=>F)T`zLVq+a!rt4uRk4@Vn1w!2vF6sus zpgZrZBOM*<=a_`~}WmNaA!lolN69%Pd~oT?6M# z^?sSS+|=1M-Ng@a-@IzteA}UB!L)UYAMmGVAtvmZMS|a(v7Ew8g2$aqrq$={i`+#{l`=GW(ZY;VU1z#9rVlcrd*K?aRXHTm)lv@23I%Dtv!DU z&vOPo$}*h{`61V#9x;4{=fRgOV*4SzR00!zOoJqWOD)(_xTR!>GI09QKv82EhAQA; z`l_WvQLItZBfenzv0Rx_DCod|%X%S8GsfTkJhKd^%&Zuh5_MKc&T}(P@qxCa=T^(5 z4D_7`8OvPCl-40{b~Zgbn{mPB`4a5w@VPRkVe1)4bl^8#TK6aRIW13}B9Dtsg2$uq zx_<>yMgJZ{6DR7&{&@aR=d0JcvC-<4ZhWHp?z7nV$Jw1pti9|bgt`j@gLm}lj zCpDoPJzBfJ^~ONtX*AJ_Cc2}q)MvMU-8i{>vl;*5Zs$z4skhHud^&ouHF~i-Hr1U< zG~R8-KfTes`6T}J-PXCcJ5xWd#k!G^Kg2$YeOzoTG|zO-%{7aE`B~@9tA9Jwe)C#; z@_J|TdONbvi7d1t3*BRrHMORG6CK-`+`6=VsU=UnfO8;U;n?vd_(-|^ih&I_XO;M3 z9LOV7fvaW%_=>Or*Amo+c;h*SoiAWUr(i-^4Z2JVV|t7&jO>xKY$pz+in>SRJGZv3 z)wAvB>6Uz&9*0$5phF#xdF7s2#`~V3`XK^w1K^ft*NSw5o`hYC$-VsW<%bfYr(l{C z=nr6U87hM)0C)x&0FO??&X1S~GtT0P?Tl|--ML?1Xdi#I6@9HGzZL`~0|qq8q8>^M z!z&N&6!EegmM4e2(jNJEYE&~?z4$A|s@AI~A?x!>Zs7ej_m zq-w_U~LtDjZFI zXvu_Y-}9rvs97ZM@lQ%wWhTQEvy-!r=7)HP(R``oxW3E;p)Z+*WzQEhm*toB4tO|L z{rI5b;a>|+H*J~(nOEU;KL=7p-^5<2&o$!hSfUe4RIfZ!$2#h%`umOd+iI$#rmB~F zAry($ZvJMiy7p``(YUgkg;Kuw*?aBDxz6O=Rr0oGGBCz zvPFJE(;&#u<^B^$PZ9*7Cn|#6LyU|dVWb*ke_eFC^`Cyd(1dWJ?lmrdvfe{5-M!n) zK9QPleWh{sFi8o*bbX?SU}$9dup10~et<*-A+>XxEu`vq8`)i{@zy6`64=8eGAhLD cmwO0?-DA6M^YZS)uckTsnSM@Y zl72yDNk)Di&>%zo;>?m%-2$L|VtQ(^er8HuqCS)tpORRTs8>+=i^C>2KczG$)vkyQ cXa~q;#e6{G12ZEd;|)HM25t~6VgU*P03EbBQ2+n{ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/idna/__pycache__/uts46data.cpython-311.pyc b/venv/lib/python3.11/site-packages/idna/__pycache__/uts46data.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3316b2deeafac28363b6f6a526cd2d5589c933f0 GIT binary patch literal 163166 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/idna/codec.py b/venv/lib/python3.11/site-packages/idna/codec.py new file mode 100644 index 0000000..913abfd --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna/codec.py @@ -0,0 +1,122 @@ +import codecs +import re +from typing import Any, Optional, Tuple + +from .core import IDNAError, alabel, decode, encode, ulabel + +_unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]") + + +class Codec(codecs.Codec): + def encode(self, data: str, errors: str = "strict") -> Tuple[bytes, int]: + if errors != "strict": + raise IDNAError('Unsupported error handling "{}"'.format(errors)) + + if not data: + return b"", 0 + + return encode(data), len(data) + + def decode(self, data: bytes, errors: str = "strict") -> Tuple[str, int]: + if errors != "strict": + raise IDNAError('Unsupported error handling "{}"'.format(errors)) + + if not data: + return "", 0 + + return decode(data), len(data) + + +class IncrementalEncoder(codecs.BufferedIncrementalEncoder): + def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[bytes, int]: + if errors != "strict": + raise IDNAError('Unsupported error handling "{}"'.format(errors)) + + if not data: + return b"", 0 + + labels = _unicode_dots_re.split(data) + trailing_dot = b"" + if labels: + if not labels[-1]: + trailing_dot = b"." + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = b"." + + result = [] + size = 0 + for label in labels: + result.append(alabel(label)) + if size: + size += 1 + size += len(label) + + # Join with U+002E + result_bytes = b".".join(result) + trailing_dot + size += len(trailing_dot) + return result_bytes, size + + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, data: Any, errors: str, final: bool) -> Tuple[str, int]: + if errors != "strict": + raise IDNAError('Unsupported error handling "{}"'.format(errors)) + + if not data: + return ("", 0) + + if not isinstance(data, str): + data = str(data, "ascii") + + labels = _unicode_dots_re.split(data) + trailing_dot = "" + 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(ulabel(label)) + if size: + size += 1 + size += len(label) + + result_str = ".".join(result) + trailing_dot + size += len(trailing_dot) + return (result_str, size) + + +class StreamWriter(Codec, codecs.StreamWriter): + pass + + +class StreamReader(Codec, codecs.StreamReader): + pass + + +def search_function(name: str) -> Optional[codecs.CodecInfo]: + if name != "idna2008": + return None + return codecs.CodecInfo( + name=name, + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) + + +codecs.register(search_function) diff --git a/venv/lib/python3.11/site-packages/idna/compat.py b/venv/lib/python3.11/site-packages/idna/compat.py new file mode 100644 index 0000000..1df9f2a --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna/compat.py @@ -0,0 +1,15 @@ +from typing import Any, Union + +from .core import decode, encode + + +def ToASCII(label: str) -> bytes: + return encode(label) + + +def ToUnicode(label: Union[bytes, bytearray]) -> str: + return decode(label) + + +def nameprep(s: Any) -> None: + raise NotImplementedError("IDNA 2008 does not utilise nameprep protocol") diff --git a/venv/lib/python3.11/site-packages/idna/core.py b/venv/lib/python3.11/site-packages/idna/core.py new file mode 100644 index 0000000..9115f12 --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna/core.py @@ -0,0 +1,437 @@ +import bisect +import re +import unicodedata +from typing import Optional, Union + +from . import idnadata +from .intranges import intranges_contain + +_virama_combining_class = 9 +_alabel_prefix = b"xn--" +_unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]") + + +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: int) -> int: + v = unicodedata.combining(chr(cp)) + if v == 0: + if not unicodedata.name(chr(cp)): + raise ValueError("Unknown character in unicodedata") + return v + + +def _is_script(cp: str, script: str) -> bool: + return intranges_contain(ord(cp), idnadata.scripts[script]) + + +def _punycode(s: str) -> bytes: + return s.encode("punycode") + + +def _unot(s: int) -> str: + return "U+{:04X}".format(s) + + +def valid_label_length(label: Union[bytes, str]) -> bool: + if len(label) > 63: + return False + return True + + +def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool: + if len(label) > (254 if trailing_dot else 253): + return False + return True + + +def check_bidi(label: str, check_ltr: bool = False) -> bool: + # 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 {} at position {}".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 {} must be directionality L, R or AL".format(repr(label))) + + valid_ending = False + number_type: Optional[str] = None + for idx, cp in enumerate(label, 1): + direction = unicodedata.bidirectional(cp) + + if rtl: + # Bidi rule 2 + if direction not in [ + "R", + "AL", + "AN", + "EN", + "ES", + "CS", + "ET", + "ON", + "BN", + "NSM", + ]: + raise IDNABidiError("Invalid direction for codepoint at position {} 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 direction not in ["L", "EN", "ES", "CS", "ET", "ON", "BN", "NSM"]: + raise IDNABidiError("Invalid direction for codepoint at position {} 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: str) -> bool: + if unicodedata.category(label[0])[0] == "M": + raise IDNAError("Label begins with an illegal combining character") + return True + + +def check_hyphen_ok(label: str) -> bool: + 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: str) -> None: + if unicodedata.normalize("NFC", label) != label: + raise IDNAError("Label must be in Normalization Form C") + + +def valid_contextj(label: str, pos: int) -> bool: + 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 + elif joining_type in [ord("L"), ord("D")]: + ok = True + break + else: + 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 + elif joining_type in [ord("R"), ord("D")]: + ok = True + break + else: + 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: str, pos: int, exception: bool = False) -> bool: + 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 == "\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 + + return False + + +def check_label(label: Union[str, bytes, bytearray]) -> None: + 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 {} not allowed at position {} in {}".format(_unot(cp_value), pos + 1, repr(label)) + ) + except ValueError: + raise IDNAError( + "Unknown codepoint adjacent to joiner {} at position {} in {}".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 {} not allowed at position {} in {}".format(_unot(cp_value), pos + 1, repr(label)) + ) + else: + raise InvalidCodepoint( + "Codepoint {} at position {} of {} not allowed".format(_unot(cp_value), pos + 1, repr(label)) + ) + + check_bidi(label) + + +def alabel(label: str) -> bytes: + try: + label_bytes = label.encode("ascii") + ulabel(label_bytes) + if not valid_label_length(label_bytes): + raise IDNAError("Label too long") + return label_bytes + except UnicodeEncodeError: + pass + + check_label(label) + label_bytes = _alabel_prefix + _punycode(label) + + if not valid_label_length(label_bytes): + raise IDNAError("Label too long") + + return label_bytes + + +def ulabel(label: Union[str, bytes, bytearray]) -> str: + if not isinstance(label, (bytes, bytearray)): + try: + label_bytes = label.encode("ascii") + except UnicodeEncodeError: + check_label(label) + return label + else: + label_bytes = label + + label_bytes = label_bytes.lower() + if label_bytes.startswith(_alabel_prefix): + label_bytes = label_bytes[len(_alabel_prefix) :] + if not label_bytes: + raise IDNAError("Malformed A-label, no Punycode eligible content found") + if label_bytes.decode("ascii")[-1] == "-": + raise IDNAError("A-label must not end with a hyphen") + else: + check_label(label_bytes) + return label_bytes.decode("ascii") + + try: + label = label_bytes.decode("punycode") + except UnicodeError: + raise IDNAError("Invalid A-label") + check_label(label) + return label + + +def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str: + """Re-map the characters in the string according to UTS46 processing.""" + from .uts46data import uts46data + + output = "" + + for pos, char in enumerate(domain): + code_point = ord(char) + try: + uts46row = uts46data[code_point if code_point < 256 else bisect.bisect_left(uts46data, (code_point, "Z")) - 1] + status = uts46row[1] + replacement: Optional[str] = None + if len(uts46row) == 3: + replacement = uts46row[2] + 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() + except IndexError: + raise InvalidCodepoint( + "Codepoint {} not allowed at position {} in {}".format(_unot(code_point), pos + 1, repr(domain)) + ) + + return unicodedata.normalize("NFC", output) + + +def encode( + s: Union[str, bytes, bytearray], + strict: bool = False, + uts46: bool = False, + std3_rules: bool = False, + transitional: bool = False, +) -> bytes: + if not isinstance(s, str): + try: + s = str(s, "ascii") + except UnicodeDecodeError: + raise IDNAError("should pass a unicode string to the function rather than a byte string.") + 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: Union[str, bytes, bytearray], + strict: bool = False, + uts46: bool = False, + std3_rules: bool = False, +) -> str: + try: + if not isinstance(s, str): + s = str(s, "ascii") + except UnicodeDecodeError: + raise IDNAError("Invalid ASCII in A-label") + 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(".") + 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("") + return ".".join(result) diff --git a/venv/lib/python3.11/site-packages/idna/idnadata.py b/venv/lib/python3.11/site-packages/idna/idnadata.py new file mode 100644 index 0000000..4be6004 --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna/idnadata.py @@ -0,0 +1,4243 @@ +# This file is automatically generated by tools/idna-data + +__version__ = "15.1.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, + 0x340000004DC0, + 0x4E000000A000, + 0xF9000000FA6E, + 0xFA700000FADA, + 0x16FE200016FE4, + 0x16FF000016FF2, + 0x200000002A6E0, + 0x2A7000002B73A, + 0x2B7400002B81E, + 0x2B8200002CEA2, + 0x2CEB00002EBE1, + 0x2EBF00002EE5E, + 0x2F8000002FA1E, + 0x300000003134B, + 0x31350000323B0, + ), + "Hebrew": ( + 0x591000005C8, + 0x5D0000005EB, + 0x5EF000005F5, + 0xFB1D0000FB37, + 0xFB380000FB3D, + 0xFB3E0000FB3F, + 0xFB400000FB42, + 0xFB430000FB45, + 0xFB460000FB50, + ), + "Hiragana": ( + 0x304100003097, + 0x309D000030A0, + 0x1B0010001B120, + 0x1B1320001B133, + 0x1B1500001B153, + 0x1F2000001F201, + ), + "Katakana": ( + 0x30A1000030FB, + 0x30FD00003100, + 0x31F000003200, + 0x32D0000032FF, + 0x330000003358, + 0xFF660000FF70, + 0xFF710000FF9E, + 0x1AFF00001AFF4, + 0x1AFF50001AFFC, + 0x1AFFD0001AFFF, + 0x1B0000001B001, + 0x1B1200001B123, + 0x1B1550001B156, + 0x1B1640001B168, + ), +} +joining_types = { + 0xAD: 84, + 0x300: 84, + 0x301: 84, + 0x302: 84, + 0x303: 84, + 0x304: 84, + 0x305: 84, + 0x306: 84, + 0x307: 84, + 0x308: 84, + 0x309: 84, + 0x30A: 84, + 0x30B: 84, + 0x30C: 84, + 0x30D: 84, + 0x30E: 84, + 0x30F: 84, + 0x310: 84, + 0x311: 84, + 0x312: 84, + 0x313: 84, + 0x314: 84, + 0x315: 84, + 0x316: 84, + 0x317: 84, + 0x318: 84, + 0x319: 84, + 0x31A: 84, + 0x31B: 84, + 0x31C: 84, + 0x31D: 84, + 0x31E: 84, + 0x31F: 84, + 0x320: 84, + 0x321: 84, + 0x322: 84, + 0x323: 84, + 0x324: 84, + 0x325: 84, + 0x326: 84, + 0x327: 84, + 0x328: 84, + 0x329: 84, + 0x32A: 84, + 0x32B: 84, + 0x32C: 84, + 0x32D: 84, + 0x32E: 84, + 0x32F: 84, + 0x330: 84, + 0x331: 84, + 0x332: 84, + 0x333: 84, + 0x334: 84, + 0x335: 84, + 0x336: 84, + 0x337: 84, + 0x338: 84, + 0x339: 84, + 0x33A: 84, + 0x33B: 84, + 0x33C: 84, + 0x33D: 84, + 0x33E: 84, + 0x33F: 84, + 0x340: 84, + 0x341: 84, + 0x342: 84, + 0x343: 84, + 0x344: 84, + 0x345: 84, + 0x346: 84, + 0x347: 84, + 0x348: 84, + 0x349: 84, + 0x34A: 84, + 0x34B: 84, + 0x34C: 84, + 0x34D: 84, + 0x34E: 84, + 0x34F: 84, + 0x350: 84, + 0x351: 84, + 0x352: 84, + 0x353: 84, + 0x354: 84, + 0x355: 84, + 0x356: 84, + 0x357: 84, + 0x358: 84, + 0x359: 84, + 0x35A: 84, + 0x35B: 84, + 0x35C: 84, + 0x35D: 84, + 0x35E: 84, + 0x35F: 84, + 0x360: 84, + 0x361: 84, + 0x362: 84, + 0x363: 84, + 0x364: 84, + 0x365: 84, + 0x366: 84, + 0x367: 84, + 0x368: 84, + 0x369: 84, + 0x36A: 84, + 0x36B: 84, + 0x36C: 84, + 0x36D: 84, + 0x36E: 84, + 0x36F: 84, + 0x483: 84, + 0x484: 84, + 0x485: 84, + 0x486: 84, + 0x487: 84, + 0x488: 84, + 0x489: 84, + 0x591: 84, + 0x592: 84, + 0x593: 84, + 0x594: 84, + 0x595: 84, + 0x596: 84, + 0x597: 84, + 0x598: 84, + 0x599: 84, + 0x59A: 84, + 0x59B: 84, + 0x59C: 84, + 0x59D: 84, + 0x59E: 84, + 0x59F: 84, + 0x5A0: 84, + 0x5A1: 84, + 0x5A2: 84, + 0x5A3: 84, + 0x5A4: 84, + 0x5A5: 84, + 0x5A6: 84, + 0x5A7: 84, + 0x5A8: 84, + 0x5A9: 84, + 0x5AA: 84, + 0x5AB: 84, + 0x5AC: 84, + 0x5AD: 84, + 0x5AE: 84, + 0x5AF: 84, + 0x5B0: 84, + 0x5B1: 84, + 0x5B2: 84, + 0x5B3: 84, + 0x5B4: 84, + 0x5B5: 84, + 0x5B6: 84, + 0x5B7: 84, + 0x5B8: 84, + 0x5B9: 84, + 0x5BA: 84, + 0x5BB: 84, + 0x5BC: 84, + 0x5BD: 84, + 0x5BF: 84, + 0x5C1: 84, + 0x5C2: 84, + 0x5C4: 84, + 0x5C5: 84, + 0x5C7: 84, + 0x610: 84, + 0x611: 84, + 0x612: 84, + 0x613: 84, + 0x614: 84, + 0x615: 84, + 0x616: 84, + 0x617: 84, + 0x618: 84, + 0x619: 84, + 0x61A: 84, + 0x61C: 84, + 0x620: 68, + 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, + 0x64B: 84, + 0x64C: 84, + 0x64D: 84, + 0x64E: 84, + 0x64F: 84, + 0x650: 84, + 0x651: 84, + 0x652: 84, + 0x653: 84, + 0x654: 84, + 0x655: 84, + 0x656: 84, + 0x657: 84, + 0x658: 84, + 0x659: 84, + 0x65A: 84, + 0x65B: 84, + 0x65C: 84, + 0x65D: 84, + 0x65E: 84, + 0x65F: 84, + 0x66E: 68, + 0x66F: 68, + 0x670: 84, + 0x671: 82, + 0x672: 82, + 0x673: 82, + 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, + 0x6D6: 84, + 0x6D7: 84, + 0x6D8: 84, + 0x6D9: 84, + 0x6DA: 84, + 0x6DB: 84, + 0x6DC: 84, + 0x6DF: 84, + 0x6E0: 84, + 0x6E1: 84, + 0x6E2: 84, + 0x6E3: 84, + 0x6E4: 84, + 0x6E7: 84, + 0x6E8: 84, + 0x6EA: 84, + 0x6EB: 84, + 0x6EC: 84, + 0x6ED: 84, + 0x6EE: 82, + 0x6EF: 82, + 0x6FA: 68, + 0x6FB: 68, + 0x6FC: 68, + 0x6FF: 68, + 0x70F: 84, + 0x710: 82, + 0x711: 84, + 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, + 0x730: 84, + 0x731: 84, + 0x732: 84, + 0x733: 84, + 0x734: 84, + 0x735: 84, + 0x736: 84, + 0x737: 84, + 0x738: 84, + 0x739: 84, + 0x73A: 84, + 0x73B: 84, + 0x73C: 84, + 0x73D: 84, + 0x73E: 84, + 0x73F: 84, + 0x740: 84, + 0x741: 84, + 0x742: 84, + 0x743: 84, + 0x744: 84, + 0x745: 84, + 0x746: 84, + 0x747: 84, + 0x748: 84, + 0x749: 84, + 0x74A: 84, + 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, + 0x7A6: 84, + 0x7A7: 84, + 0x7A8: 84, + 0x7A9: 84, + 0x7AA: 84, + 0x7AB: 84, + 0x7AC: 84, + 0x7AD: 84, + 0x7AE: 84, + 0x7AF: 84, + 0x7B0: 84, + 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, + 0x7EB: 84, + 0x7EC: 84, + 0x7ED: 84, + 0x7EE: 84, + 0x7EF: 84, + 0x7F0: 84, + 0x7F1: 84, + 0x7F2: 84, + 0x7F3: 84, + 0x7FA: 67, + 0x7FD: 84, + 0x816: 84, + 0x817: 84, + 0x818: 84, + 0x819: 84, + 0x81B: 84, + 0x81C: 84, + 0x81D: 84, + 0x81E: 84, + 0x81F: 84, + 0x820: 84, + 0x821: 84, + 0x822: 84, + 0x823: 84, + 0x825: 84, + 0x826: 84, + 0x827: 84, + 0x829: 84, + 0x82A: 84, + 0x82B: 84, + 0x82C: 84, + 0x82D: 84, + 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: 82, + 0x857: 82, + 0x858: 82, + 0x859: 84, + 0x85A: 84, + 0x85B: 84, + 0x860: 68, + 0x862: 68, + 0x863: 68, + 0x864: 68, + 0x865: 68, + 0x867: 82, + 0x868: 68, + 0x869: 82, + 0x86A: 82, + 0x870: 82, + 0x871: 82, + 0x872: 82, + 0x873: 82, + 0x874: 82, + 0x875: 82, + 0x876: 82, + 0x877: 82, + 0x878: 82, + 0x879: 82, + 0x87A: 82, + 0x87B: 82, + 0x87C: 82, + 0x87D: 82, + 0x87E: 82, + 0x87F: 82, + 0x880: 82, + 0x881: 82, + 0x882: 82, + 0x883: 67, + 0x884: 67, + 0x885: 67, + 0x886: 68, + 0x889: 68, + 0x88A: 68, + 0x88B: 68, + 0x88C: 68, + 0x88D: 68, + 0x88E: 82, + 0x898: 84, + 0x899: 84, + 0x89A: 84, + 0x89B: 84, + 0x89C: 84, + 0x89D: 84, + 0x89E: 84, + 0x89F: 84, + 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, + 0x8AE: 82, + 0x8AF: 68, + 0x8B0: 68, + 0x8B1: 82, + 0x8B2: 82, + 0x8B3: 68, + 0x8B4: 68, + 0x8B5: 68, + 0x8B6: 68, + 0x8B7: 68, + 0x8B8: 68, + 0x8B9: 82, + 0x8BA: 68, + 0x8BB: 68, + 0x8BC: 68, + 0x8BD: 68, + 0x8BE: 68, + 0x8BF: 68, + 0x8C0: 68, + 0x8C1: 68, + 0x8C2: 68, + 0x8C3: 68, + 0x8C4: 68, + 0x8C5: 68, + 0x8C6: 68, + 0x8C7: 68, + 0x8C8: 68, + 0x8CA: 84, + 0x8CB: 84, + 0x8CC: 84, + 0x8CD: 84, + 0x8CE: 84, + 0x8CF: 84, + 0x8D0: 84, + 0x8D1: 84, + 0x8D2: 84, + 0x8D3: 84, + 0x8D4: 84, + 0x8D5: 84, + 0x8D6: 84, + 0x8D7: 84, + 0x8D8: 84, + 0x8D9: 84, + 0x8DA: 84, + 0x8DB: 84, + 0x8DC: 84, + 0x8DD: 84, + 0x8DE: 84, + 0x8DF: 84, + 0x8E0: 84, + 0x8E1: 84, + 0x8E3: 84, + 0x8E4: 84, + 0x8E5: 84, + 0x8E6: 84, + 0x8E7: 84, + 0x8E8: 84, + 0x8E9: 84, + 0x8EA: 84, + 0x8EB: 84, + 0x8EC: 84, + 0x8ED: 84, + 0x8EE: 84, + 0x8EF: 84, + 0x8F0: 84, + 0x8F1: 84, + 0x8F2: 84, + 0x8F3: 84, + 0x8F4: 84, + 0x8F5: 84, + 0x8F6: 84, + 0x8F7: 84, + 0x8F8: 84, + 0x8F9: 84, + 0x8FA: 84, + 0x8FB: 84, + 0x8FC: 84, + 0x8FD: 84, + 0x8FE: 84, + 0x8FF: 84, + 0x900: 84, + 0x901: 84, + 0x902: 84, + 0x93A: 84, + 0x93C: 84, + 0x941: 84, + 0x942: 84, + 0x943: 84, + 0x944: 84, + 0x945: 84, + 0x946: 84, + 0x947: 84, + 0x948: 84, + 0x94D: 84, + 0x951: 84, + 0x952: 84, + 0x953: 84, + 0x954: 84, + 0x955: 84, + 0x956: 84, + 0x957: 84, + 0x962: 84, + 0x963: 84, + 0x981: 84, + 0x9BC: 84, + 0x9C1: 84, + 0x9C2: 84, + 0x9C3: 84, + 0x9C4: 84, + 0x9CD: 84, + 0x9E2: 84, + 0x9E3: 84, + 0x9FE: 84, + 0xA01: 84, + 0xA02: 84, + 0xA3C: 84, + 0xA41: 84, + 0xA42: 84, + 0xA47: 84, + 0xA48: 84, + 0xA4B: 84, + 0xA4C: 84, + 0xA4D: 84, + 0xA51: 84, + 0xA70: 84, + 0xA71: 84, + 0xA75: 84, + 0xA81: 84, + 0xA82: 84, + 0xABC: 84, + 0xAC1: 84, + 0xAC2: 84, + 0xAC3: 84, + 0xAC4: 84, + 0xAC5: 84, + 0xAC7: 84, + 0xAC8: 84, + 0xACD: 84, + 0xAE2: 84, + 0xAE3: 84, + 0xAFA: 84, + 0xAFB: 84, + 0xAFC: 84, + 0xAFD: 84, + 0xAFE: 84, + 0xAFF: 84, + 0xB01: 84, + 0xB3C: 84, + 0xB3F: 84, + 0xB41: 84, + 0xB42: 84, + 0xB43: 84, + 0xB44: 84, + 0xB4D: 84, + 0xB55: 84, + 0xB56: 84, + 0xB62: 84, + 0xB63: 84, + 0xB82: 84, + 0xBC0: 84, + 0xBCD: 84, + 0xC00: 84, + 0xC04: 84, + 0xC3C: 84, + 0xC3E: 84, + 0xC3F: 84, + 0xC40: 84, + 0xC46: 84, + 0xC47: 84, + 0xC48: 84, + 0xC4A: 84, + 0xC4B: 84, + 0xC4C: 84, + 0xC4D: 84, + 0xC55: 84, + 0xC56: 84, + 0xC62: 84, + 0xC63: 84, + 0xC81: 84, + 0xCBC: 84, + 0xCBF: 84, + 0xCC6: 84, + 0xCCC: 84, + 0xCCD: 84, + 0xCE2: 84, + 0xCE3: 84, + 0xD00: 84, + 0xD01: 84, + 0xD3B: 84, + 0xD3C: 84, + 0xD41: 84, + 0xD42: 84, + 0xD43: 84, + 0xD44: 84, + 0xD4D: 84, + 0xD62: 84, + 0xD63: 84, + 0xD81: 84, + 0xDCA: 84, + 0xDD2: 84, + 0xDD3: 84, + 0xDD4: 84, + 0xDD6: 84, + 0xE31: 84, + 0xE34: 84, + 0xE35: 84, + 0xE36: 84, + 0xE37: 84, + 0xE38: 84, + 0xE39: 84, + 0xE3A: 84, + 0xE47: 84, + 0xE48: 84, + 0xE49: 84, + 0xE4A: 84, + 0xE4B: 84, + 0xE4C: 84, + 0xE4D: 84, + 0xE4E: 84, + 0xEB1: 84, + 0xEB4: 84, + 0xEB5: 84, + 0xEB6: 84, + 0xEB7: 84, + 0xEB8: 84, + 0xEB9: 84, + 0xEBA: 84, + 0xEBB: 84, + 0xEBC: 84, + 0xEC8: 84, + 0xEC9: 84, + 0xECA: 84, + 0xECB: 84, + 0xECC: 84, + 0xECD: 84, + 0xECE: 84, + 0xF18: 84, + 0xF19: 84, + 0xF35: 84, + 0xF37: 84, + 0xF39: 84, + 0xF71: 84, + 0xF72: 84, + 0xF73: 84, + 0xF74: 84, + 0xF75: 84, + 0xF76: 84, + 0xF77: 84, + 0xF78: 84, + 0xF79: 84, + 0xF7A: 84, + 0xF7B: 84, + 0xF7C: 84, + 0xF7D: 84, + 0xF7E: 84, + 0xF80: 84, + 0xF81: 84, + 0xF82: 84, + 0xF83: 84, + 0xF84: 84, + 0xF86: 84, + 0xF87: 84, + 0xF8D: 84, + 0xF8E: 84, + 0xF8F: 84, + 0xF90: 84, + 0xF91: 84, + 0xF92: 84, + 0xF93: 84, + 0xF94: 84, + 0xF95: 84, + 0xF96: 84, + 0xF97: 84, + 0xF99: 84, + 0xF9A: 84, + 0xF9B: 84, + 0xF9C: 84, + 0xF9D: 84, + 0xF9E: 84, + 0xF9F: 84, + 0xFA0: 84, + 0xFA1: 84, + 0xFA2: 84, + 0xFA3: 84, + 0xFA4: 84, + 0xFA5: 84, + 0xFA6: 84, + 0xFA7: 84, + 0xFA8: 84, + 0xFA9: 84, + 0xFAA: 84, + 0xFAB: 84, + 0xFAC: 84, + 0xFAD: 84, + 0xFAE: 84, + 0xFAF: 84, + 0xFB0: 84, + 0xFB1: 84, + 0xFB2: 84, + 0xFB3: 84, + 0xFB4: 84, + 0xFB5: 84, + 0xFB6: 84, + 0xFB7: 84, + 0xFB8: 84, + 0xFB9: 84, + 0xFBA: 84, + 0xFBB: 84, + 0xFBC: 84, + 0xFC6: 84, + 0x102D: 84, + 0x102E: 84, + 0x102F: 84, + 0x1030: 84, + 0x1032: 84, + 0x1033: 84, + 0x1034: 84, + 0x1035: 84, + 0x1036: 84, + 0x1037: 84, + 0x1039: 84, + 0x103A: 84, + 0x103D: 84, + 0x103E: 84, + 0x1058: 84, + 0x1059: 84, + 0x105E: 84, + 0x105F: 84, + 0x1060: 84, + 0x1071: 84, + 0x1072: 84, + 0x1073: 84, + 0x1074: 84, + 0x1082: 84, + 0x1085: 84, + 0x1086: 84, + 0x108D: 84, + 0x109D: 84, + 0x135D: 84, + 0x135E: 84, + 0x135F: 84, + 0x1712: 84, + 0x1713: 84, + 0x1714: 84, + 0x1732: 84, + 0x1733: 84, + 0x1752: 84, + 0x1753: 84, + 0x1772: 84, + 0x1773: 84, + 0x17B4: 84, + 0x17B5: 84, + 0x17B7: 84, + 0x17B8: 84, + 0x17B9: 84, + 0x17BA: 84, + 0x17BB: 84, + 0x17BC: 84, + 0x17BD: 84, + 0x17C6: 84, + 0x17C9: 84, + 0x17CA: 84, + 0x17CB: 84, + 0x17CC: 84, + 0x17CD: 84, + 0x17CE: 84, + 0x17CF: 84, + 0x17D0: 84, + 0x17D1: 84, + 0x17D2: 84, + 0x17D3: 84, + 0x17DD: 84, + 0x1807: 68, + 0x180A: 67, + 0x180B: 84, + 0x180C: 84, + 0x180D: 84, + 0x180F: 84, + 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, + 0x1878: 68, + 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, + 0x18A9: 84, + 0x18AA: 68, + 0x1920: 84, + 0x1921: 84, + 0x1922: 84, + 0x1927: 84, + 0x1928: 84, + 0x1932: 84, + 0x1939: 84, + 0x193A: 84, + 0x193B: 84, + 0x1A17: 84, + 0x1A18: 84, + 0x1A1B: 84, + 0x1A56: 84, + 0x1A58: 84, + 0x1A59: 84, + 0x1A5A: 84, + 0x1A5B: 84, + 0x1A5C: 84, + 0x1A5D: 84, + 0x1A5E: 84, + 0x1A60: 84, + 0x1A62: 84, + 0x1A65: 84, + 0x1A66: 84, + 0x1A67: 84, + 0x1A68: 84, + 0x1A69: 84, + 0x1A6A: 84, + 0x1A6B: 84, + 0x1A6C: 84, + 0x1A73: 84, + 0x1A74: 84, + 0x1A75: 84, + 0x1A76: 84, + 0x1A77: 84, + 0x1A78: 84, + 0x1A79: 84, + 0x1A7A: 84, + 0x1A7B: 84, + 0x1A7C: 84, + 0x1A7F: 84, + 0x1AB0: 84, + 0x1AB1: 84, + 0x1AB2: 84, + 0x1AB3: 84, + 0x1AB4: 84, + 0x1AB5: 84, + 0x1AB6: 84, + 0x1AB7: 84, + 0x1AB8: 84, + 0x1AB9: 84, + 0x1ABA: 84, + 0x1ABB: 84, + 0x1ABC: 84, + 0x1ABD: 84, + 0x1ABE: 84, + 0x1ABF: 84, + 0x1AC0: 84, + 0x1AC1: 84, + 0x1AC2: 84, + 0x1AC3: 84, + 0x1AC4: 84, + 0x1AC5: 84, + 0x1AC6: 84, + 0x1AC7: 84, + 0x1AC8: 84, + 0x1AC9: 84, + 0x1ACA: 84, + 0x1ACB: 84, + 0x1ACC: 84, + 0x1ACD: 84, + 0x1ACE: 84, + 0x1B00: 84, + 0x1B01: 84, + 0x1B02: 84, + 0x1B03: 84, + 0x1B34: 84, + 0x1B36: 84, + 0x1B37: 84, + 0x1B38: 84, + 0x1B39: 84, + 0x1B3A: 84, + 0x1B3C: 84, + 0x1B42: 84, + 0x1B6B: 84, + 0x1B6C: 84, + 0x1B6D: 84, + 0x1B6E: 84, + 0x1B6F: 84, + 0x1B70: 84, + 0x1B71: 84, + 0x1B72: 84, + 0x1B73: 84, + 0x1B80: 84, + 0x1B81: 84, + 0x1BA2: 84, + 0x1BA3: 84, + 0x1BA4: 84, + 0x1BA5: 84, + 0x1BA8: 84, + 0x1BA9: 84, + 0x1BAB: 84, + 0x1BAC: 84, + 0x1BAD: 84, + 0x1BE6: 84, + 0x1BE8: 84, + 0x1BE9: 84, + 0x1BED: 84, + 0x1BEF: 84, + 0x1BF0: 84, + 0x1BF1: 84, + 0x1C2C: 84, + 0x1C2D: 84, + 0x1C2E: 84, + 0x1C2F: 84, + 0x1C30: 84, + 0x1C31: 84, + 0x1C32: 84, + 0x1C33: 84, + 0x1C36: 84, + 0x1C37: 84, + 0x1CD0: 84, + 0x1CD1: 84, + 0x1CD2: 84, + 0x1CD4: 84, + 0x1CD5: 84, + 0x1CD6: 84, + 0x1CD7: 84, + 0x1CD8: 84, + 0x1CD9: 84, + 0x1CDA: 84, + 0x1CDB: 84, + 0x1CDC: 84, + 0x1CDD: 84, + 0x1CDE: 84, + 0x1CDF: 84, + 0x1CE0: 84, + 0x1CE2: 84, + 0x1CE3: 84, + 0x1CE4: 84, + 0x1CE5: 84, + 0x1CE6: 84, + 0x1CE7: 84, + 0x1CE8: 84, + 0x1CED: 84, + 0x1CF4: 84, + 0x1CF8: 84, + 0x1CF9: 84, + 0x1DC0: 84, + 0x1DC1: 84, + 0x1DC2: 84, + 0x1DC3: 84, + 0x1DC4: 84, + 0x1DC5: 84, + 0x1DC6: 84, + 0x1DC7: 84, + 0x1DC8: 84, + 0x1DC9: 84, + 0x1DCA: 84, + 0x1DCB: 84, + 0x1DCC: 84, + 0x1DCD: 84, + 0x1DCE: 84, + 0x1DCF: 84, + 0x1DD0: 84, + 0x1DD1: 84, + 0x1DD2: 84, + 0x1DD3: 84, + 0x1DD4: 84, + 0x1DD5: 84, + 0x1DD6: 84, + 0x1DD7: 84, + 0x1DD8: 84, + 0x1DD9: 84, + 0x1DDA: 84, + 0x1DDB: 84, + 0x1DDC: 84, + 0x1DDD: 84, + 0x1DDE: 84, + 0x1DDF: 84, + 0x1DE0: 84, + 0x1DE1: 84, + 0x1DE2: 84, + 0x1DE3: 84, + 0x1DE4: 84, + 0x1DE5: 84, + 0x1DE6: 84, + 0x1DE7: 84, + 0x1DE8: 84, + 0x1DE9: 84, + 0x1DEA: 84, + 0x1DEB: 84, + 0x1DEC: 84, + 0x1DED: 84, + 0x1DEE: 84, + 0x1DEF: 84, + 0x1DF0: 84, + 0x1DF1: 84, + 0x1DF2: 84, + 0x1DF3: 84, + 0x1DF4: 84, + 0x1DF5: 84, + 0x1DF6: 84, + 0x1DF7: 84, + 0x1DF8: 84, + 0x1DF9: 84, + 0x1DFA: 84, + 0x1DFB: 84, + 0x1DFC: 84, + 0x1DFD: 84, + 0x1DFE: 84, + 0x1DFF: 84, + 0x200B: 84, + 0x200D: 67, + 0x200E: 84, + 0x200F: 84, + 0x202A: 84, + 0x202B: 84, + 0x202C: 84, + 0x202D: 84, + 0x202E: 84, + 0x2060: 84, + 0x2061: 84, + 0x2062: 84, + 0x2063: 84, + 0x2064: 84, + 0x206A: 84, + 0x206B: 84, + 0x206C: 84, + 0x206D: 84, + 0x206E: 84, + 0x206F: 84, + 0x20D0: 84, + 0x20D1: 84, + 0x20D2: 84, + 0x20D3: 84, + 0x20D4: 84, + 0x20D5: 84, + 0x20D6: 84, + 0x20D7: 84, + 0x20D8: 84, + 0x20D9: 84, + 0x20DA: 84, + 0x20DB: 84, + 0x20DC: 84, + 0x20DD: 84, + 0x20DE: 84, + 0x20DF: 84, + 0x20E0: 84, + 0x20E1: 84, + 0x20E2: 84, + 0x20E3: 84, + 0x20E4: 84, + 0x20E5: 84, + 0x20E6: 84, + 0x20E7: 84, + 0x20E8: 84, + 0x20E9: 84, + 0x20EA: 84, + 0x20EB: 84, + 0x20EC: 84, + 0x20ED: 84, + 0x20EE: 84, + 0x20EF: 84, + 0x20F0: 84, + 0x2CEF: 84, + 0x2CF0: 84, + 0x2CF1: 84, + 0x2D7F: 84, + 0x2DE0: 84, + 0x2DE1: 84, + 0x2DE2: 84, + 0x2DE3: 84, + 0x2DE4: 84, + 0x2DE5: 84, + 0x2DE6: 84, + 0x2DE7: 84, + 0x2DE8: 84, + 0x2DE9: 84, + 0x2DEA: 84, + 0x2DEB: 84, + 0x2DEC: 84, + 0x2DED: 84, + 0x2DEE: 84, + 0x2DEF: 84, + 0x2DF0: 84, + 0x2DF1: 84, + 0x2DF2: 84, + 0x2DF3: 84, + 0x2DF4: 84, + 0x2DF5: 84, + 0x2DF6: 84, + 0x2DF7: 84, + 0x2DF8: 84, + 0x2DF9: 84, + 0x2DFA: 84, + 0x2DFB: 84, + 0x2DFC: 84, + 0x2DFD: 84, + 0x2DFE: 84, + 0x2DFF: 84, + 0x302A: 84, + 0x302B: 84, + 0x302C: 84, + 0x302D: 84, + 0x3099: 84, + 0x309A: 84, + 0xA66F: 84, + 0xA670: 84, + 0xA671: 84, + 0xA672: 84, + 0xA674: 84, + 0xA675: 84, + 0xA676: 84, + 0xA677: 84, + 0xA678: 84, + 0xA679: 84, + 0xA67A: 84, + 0xA67B: 84, + 0xA67C: 84, + 0xA67D: 84, + 0xA69E: 84, + 0xA69F: 84, + 0xA6F0: 84, + 0xA6F1: 84, + 0xA802: 84, + 0xA806: 84, + 0xA80B: 84, + 0xA825: 84, + 0xA826: 84, + 0xA82C: 84, + 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, + 0xA8C4: 84, + 0xA8C5: 84, + 0xA8E0: 84, + 0xA8E1: 84, + 0xA8E2: 84, + 0xA8E3: 84, + 0xA8E4: 84, + 0xA8E5: 84, + 0xA8E6: 84, + 0xA8E7: 84, + 0xA8E8: 84, + 0xA8E9: 84, + 0xA8EA: 84, + 0xA8EB: 84, + 0xA8EC: 84, + 0xA8ED: 84, + 0xA8EE: 84, + 0xA8EF: 84, + 0xA8F0: 84, + 0xA8F1: 84, + 0xA8FF: 84, + 0xA926: 84, + 0xA927: 84, + 0xA928: 84, + 0xA929: 84, + 0xA92A: 84, + 0xA92B: 84, + 0xA92C: 84, + 0xA92D: 84, + 0xA947: 84, + 0xA948: 84, + 0xA949: 84, + 0xA94A: 84, + 0xA94B: 84, + 0xA94C: 84, + 0xA94D: 84, + 0xA94E: 84, + 0xA94F: 84, + 0xA950: 84, + 0xA951: 84, + 0xA980: 84, + 0xA981: 84, + 0xA982: 84, + 0xA9B3: 84, + 0xA9B6: 84, + 0xA9B7: 84, + 0xA9B8: 84, + 0xA9B9: 84, + 0xA9BC: 84, + 0xA9BD: 84, + 0xA9E5: 84, + 0xAA29: 84, + 0xAA2A: 84, + 0xAA2B: 84, + 0xAA2C: 84, + 0xAA2D: 84, + 0xAA2E: 84, + 0xAA31: 84, + 0xAA32: 84, + 0xAA35: 84, + 0xAA36: 84, + 0xAA43: 84, + 0xAA4C: 84, + 0xAA7C: 84, + 0xAAB0: 84, + 0xAAB2: 84, + 0xAAB3: 84, + 0xAAB4: 84, + 0xAAB7: 84, + 0xAAB8: 84, + 0xAABE: 84, + 0xAABF: 84, + 0xAAC1: 84, + 0xAAEC: 84, + 0xAAED: 84, + 0xAAF6: 84, + 0xABE5: 84, + 0xABE8: 84, + 0xABED: 84, + 0xFB1E: 84, + 0xFE00: 84, + 0xFE01: 84, + 0xFE02: 84, + 0xFE03: 84, + 0xFE04: 84, + 0xFE05: 84, + 0xFE06: 84, + 0xFE07: 84, + 0xFE08: 84, + 0xFE09: 84, + 0xFE0A: 84, + 0xFE0B: 84, + 0xFE0C: 84, + 0xFE0D: 84, + 0xFE0E: 84, + 0xFE0F: 84, + 0xFE20: 84, + 0xFE21: 84, + 0xFE22: 84, + 0xFE23: 84, + 0xFE24: 84, + 0xFE25: 84, + 0xFE26: 84, + 0xFE27: 84, + 0xFE28: 84, + 0xFE29: 84, + 0xFE2A: 84, + 0xFE2B: 84, + 0xFE2C: 84, + 0xFE2D: 84, + 0xFE2E: 84, + 0xFE2F: 84, + 0xFEFF: 84, + 0xFFF9: 84, + 0xFFFA: 84, + 0xFFFB: 84, + 0x101FD: 84, + 0x102E0: 84, + 0x10376: 84, + 0x10377: 84, + 0x10378: 84, + 0x10379: 84, + 0x1037A: 84, + 0x10A01: 84, + 0x10A02: 84, + 0x10A03: 84, + 0x10A05: 84, + 0x10A06: 84, + 0x10A0C: 84, + 0x10A0D: 84, + 0x10A0E: 84, + 0x10A0F: 84, + 0x10A38: 84, + 0x10A39: 84, + 0x10A3A: 84, + 0x10A3F: 84, + 0x10AC0: 68, + 0x10AC1: 68, + 0x10AC2: 68, + 0x10AC3: 68, + 0x10AC4: 68, + 0x10AC5: 82, + 0x10AC7: 82, + 0x10AC9: 82, + 0x10ACA: 82, + 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, + 0x10AE4: 82, + 0x10AE5: 84, + 0x10AE6: 84, + 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, + 0x10D00: 76, + 0x10D01: 68, + 0x10D02: 68, + 0x10D03: 68, + 0x10D04: 68, + 0x10D05: 68, + 0x10D06: 68, + 0x10D07: 68, + 0x10D08: 68, + 0x10D09: 68, + 0x10D0A: 68, + 0x10D0B: 68, + 0x10D0C: 68, + 0x10D0D: 68, + 0x10D0E: 68, + 0x10D0F: 68, + 0x10D10: 68, + 0x10D11: 68, + 0x10D12: 68, + 0x10D13: 68, + 0x10D14: 68, + 0x10D15: 68, + 0x10D16: 68, + 0x10D17: 68, + 0x10D18: 68, + 0x10D19: 68, + 0x10D1A: 68, + 0x10D1B: 68, + 0x10D1C: 68, + 0x10D1D: 68, + 0x10D1E: 68, + 0x10D1F: 68, + 0x10D20: 68, + 0x10D21: 68, + 0x10D22: 82, + 0x10D23: 68, + 0x10D24: 84, + 0x10D25: 84, + 0x10D26: 84, + 0x10D27: 84, + 0x10EAB: 84, + 0x10EAC: 84, + 0x10EFD: 84, + 0x10EFE: 84, + 0x10EFF: 84, + 0x10F30: 68, + 0x10F31: 68, + 0x10F32: 68, + 0x10F33: 82, + 0x10F34: 68, + 0x10F35: 68, + 0x10F36: 68, + 0x10F37: 68, + 0x10F38: 68, + 0x10F39: 68, + 0x10F3A: 68, + 0x10F3B: 68, + 0x10F3C: 68, + 0x10F3D: 68, + 0x10F3E: 68, + 0x10F3F: 68, + 0x10F40: 68, + 0x10F41: 68, + 0x10F42: 68, + 0x10F43: 68, + 0x10F44: 68, + 0x10F46: 84, + 0x10F47: 84, + 0x10F48: 84, + 0x10F49: 84, + 0x10F4A: 84, + 0x10F4B: 84, + 0x10F4C: 84, + 0x10F4D: 84, + 0x10F4E: 84, + 0x10F4F: 84, + 0x10F50: 84, + 0x10F51: 68, + 0x10F52: 68, + 0x10F53: 68, + 0x10F54: 82, + 0x10F70: 68, + 0x10F71: 68, + 0x10F72: 68, + 0x10F73: 68, + 0x10F74: 82, + 0x10F75: 82, + 0x10F76: 68, + 0x10F77: 68, + 0x10F78: 68, + 0x10F79: 68, + 0x10F7A: 68, + 0x10F7B: 68, + 0x10F7C: 68, + 0x10F7D: 68, + 0x10F7E: 68, + 0x10F7F: 68, + 0x10F80: 68, + 0x10F81: 68, + 0x10F82: 84, + 0x10F83: 84, + 0x10F84: 84, + 0x10F85: 84, + 0x10FB0: 68, + 0x10FB2: 68, + 0x10FB3: 68, + 0x10FB4: 82, + 0x10FB5: 82, + 0x10FB6: 82, + 0x10FB8: 68, + 0x10FB9: 82, + 0x10FBA: 82, + 0x10FBB: 68, + 0x10FBC: 68, + 0x10FBD: 82, + 0x10FBE: 68, + 0x10FBF: 68, + 0x10FC1: 68, + 0x10FC2: 82, + 0x10FC3: 82, + 0x10FC4: 68, + 0x10FC9: 82, + 0x10FCA: 68, + 0x10FCB: 76, + 0x11001: 84, + 0x11038: 84, + 0x11039: 84, + 0x1103A: 84, + 0x1103B: 84, + 0x1103C: 84, + 0x1103D: 84, + 0x1103E: 84, + 0x1103F: 84, + 0x11040: 84, + 0x11041: 84, + 0x11042: 84, + 0x11043: 84, + 0x11044: 84, + 0x11045: 84, + 0x11046: 84, + 0x11070: 84, + 0x11073: 84, + 0x11074: 84, + 0x1107F: 84, + 0x11080: 84, + 0x11081: 84, + 0x110B3: 84, + 0x110B4: 84, + 0x110B5: 84, + 0x110B6: 84, + 0x110B9: 84, + 0x110BA: 84, + 0x110C2: 84, + 0x11100: 84, + 0x11101: 84, + 0x11102: 84, + 0x11127: 84, + 0x11128: 84, + 0x11129: 84, + 0x1112A: 84, + 0x1112B: 84, + 0x1112D: 84, + 0x1112E: 84, + 0x1112F: 84, + 0x11130: 84, + 0x11131: 84, + 0x11132: 84, + 0x11133: 84, + 0x11134: 84, + 0x11173: 84, + 0x11180: 84, + 0x11181: 84, + 0x111B6: 84, + 0x111B7: 84, + 0x111B8: 84, + 0x111B9: 84, + 0x111BA: 84, + 0x111BB: 84, + 0x111BC: 84, + 0x111BD: 84, + 0x111BE: 84, + 0x111C9: 84, + 0x111CA: 84, + 0x111CB: 84, + 0x111CC: 84, + 0x111CF: 84, + 0x1122F: 84, + 0x11230: 84, + 0x11231: 84, + 0x11234: 84, + 0x11236: 84, + 0x11237: 84, + 0x1123E: 84, + 0x11241: 84, + 0x112DF: 84, + 0x112E3: 84, + 0x112E4: 84, + 0x112E5: 84, + 0x112E6: 84, + 0x112E7: 84, + 0x112E8: 84, + 0x112E9: 84, + 0x112EA: 84, + 0x11300: 84, + 0x11301: 84, + 0x1133B: 84, + 0x1133C: 84, + 0x11340: 84, + 0x11366: 84, + 0x11367: 84, + 0x11368: 84, + 0x11369: 84, + 0x1136A: 84, + 0x1136B: 84, + 0x1136C: 84, + 0x11370: 84, + 0x11371: 84, + 0x11372: 84, + 0x11373: 84, + 0x11374: 84, + 0x11438: 84, + 0x11439: 84, + 0x1143A: 84, + 0x1143B: 84, + 0x1143C: 84, + 0x1143D: 84, + 0x1143E: 84, + 0x1143F: 84, + 0x11442: 84, + 0x11443: 84, + 0x11444: 84, + 0x11446: 84, + 0x1145E: 84, + 0x114B3: 84, + 0x114B4: 84, + 0x114B5: 84, + 0x114B6: 84, + 0x114B7: 84, + 0x114B8: 84, + 0x114BA: 84, + 0x114BF: 84, + 0x114C0: 84, + 0x114C2: 84, + 0x114C3: 84, + 0x115B2: 84, + 0x115B3: 84, + 0x115B4: 84, + 0x115B5: 84, + 0x115BC: 84, + 0x115BD: 84, + 0x115BF: 84, + 0x115C0: 84, + 0x115DC: 84, + 0x115DD: 84, + 0x11633: 84, + 0x11634: 84, + 0x11635: 84, + 0x11636: 84, + 0x11637: 84, + 0x11638: 84, + 0x11639: 84, + 0x1163A: 84, + 0x1163D: 84, + 0x1163F: 84, + 0x11640: 84, + 0x116AB: 84, + 0x116AD: 84, + 0x116B0: 84, + 0x116B1: 84, + 0x116B2: 84, + 0x116B3: 84, + 0x116B4: 84, + 0x116B5: 84, + 0x116B7: 84, + 0x1171D: 84, + 0x1171E: 84, + 0x1171F: 84, + 0x11722: 84, + 0x11723: 84, + 0x11724: 84, + 0x11725: 84, + 0x11727: 84, + 0x11728: 84, + 0x11729: 84, + 0x1172A: 84, + 0x1172B: 84, + 0x1182F: 84, + 0x11830: 84, + 0x11831: 84, + 0x11832: 84, + 0x11833: 84, + 0x11834: 84, + 0x11835: 84, + 0x11836: 84, + 0x11837: 84, + 0x11839: 84, + 0x1183A: 84, + 0x1193B: 84, + 0x1193C: 84, + 0x1193E: 84, + 0x11943: 84, + 0x119D4: 84, + 0x119D5: 84, + 0x119D6: 84, + 0x119D7: 84, + 0x119DA: 84, + 0x119DB: 84, + 0x119E0: 84, + 0x11A01: 84, + 0x11A02: 84, + 0x11A03: 84, + 0x11A04: 84, + 0x11A05: 84, + 0x11A06: 84, + 0x11A07: 84, + 0x11A08: 84, + 0x11A09: 84, + 0x11A0A: 84, + 0x11A33: 84, + 0x11A34: 84, + 0x11A35: 84, + 0x11A36: 84, + 0x11A37: 84, + 0x11A38: 84, + 0x11A3B: 84, + 0x11A3C: 84, + 0x11A3D: 84, + 0x11A3E: 84, + 0x11A47: 84, + 0x11A51: 84, + 0x11A52: 84, + 0x11A53: 84, + 0x11A54: 84, + 0x11A55: 84, + 0x11A56: 84, + 0x11A59: 84, + 0x11A5A: 84, + 0x11A5B: 84, + 0x11A8A: 84, + 0x11A8B: 84, + 0x11A8C: 84, + 0x11A8D: 84, + 0x11A8E: 84, + 0x11A8F: 84, + 0x11A90: 84, + 0x11A91: 84, + 0x11A92: 84, + 0x11A93: 84, + 0x11A94: 84, + 0x11A95: 84, + 0x11A96: 84, + 0x11A98: 84, + 0x11A99: 84, + 0x11C30: 84, + 0x11C31: 84, + 0x11C32: 84, + 0x11C33: 84, + 0x11C34: 84, + 0x11C35: 84, + 0x11C36: 84, + 0x11C38: 84, + 0x11C39: 84, + 0x11C3A: 84, + 0x11C3B: 84, + 0x11C3C: 84, + 0x11C3D: 84, + 0x11C3F: 84, + 0x11C92: 84, + 0x11C93: 84, + 0x11C94: 84, + 0x11C95: 84, + 0x11C96: 84, + 0x11C97: 84, + 0x11C98: 84, + 0x11C99: 84, + 0x11C9A: 84, + 0x11C9B: 84, + 0x11C9C: 84, + 0x11C9D: 84, + 0x11C9E: 84, + 0x11C9F: 84, + 0x11CA0: 84, + 0x11CA1: 84, + 0x11CA2: 84, + 0x11CA3: 84, + 0x11CA4: 84, + 0x11CA5: 84, + 0x11CA6: 84, + 0x11CA7: 84, + 0x11CAA: 84, + 0x11CAB: 84, + 0x11CAC: 84, + 0x11CAD: 84, + 0x11CAE: 84, + 0x11CAF: 84, + 0x11CB0: 84, + 0x11CB2: 84, + 0x11CB3: 84, + 0x11CB5: 84, + 0x11CB6: 84, + 0x11D31: 84, + 0x11D32: 84, + 0x11D33: 84, + 0x11D34: 84, + 0x11D35: 84, + 0x11D36: 84, + 0x11D3A: 84, + 0x11D3C: 84, + 0x11D3D: 84, + 0x11D3F: 84, + 0x11D40: 84, + 0x11D41: 84, + 0x11D42: 84, + 0x11D43: 84, + 0x11D44: 84, + 0x11D45: 84, + 0x11D47: 84, + 0x11D90: 84, + 0x11D91: 84, + 0x11D95: 84, + 0x11D97: 84, + 0x11EF3: 84, + 0x11EF4: 84, + 0x11F00: 84, + 0x11F01: 84, + 0x11F36: 84, + 0x11F37: 84, + 0x11F38: 84, + 0x11F39: 84, + 0x11F3A: 84, + 0x11F40: 84, + 0x11F42: 84, + 0x13430: 84, + 0x13431: 84, + 0x13432: 84, + 0x13433: 84, + 0x13434: 84, + 0x13435: 84, + 0x13436: 84, + 0x13437: 84, + 0x13438: 84, + 0x13439: 84, + 0x1343A: 84, + 0x1343B: 84, + 0x1343C: 84, + 0x1343D: 84, + 0x1343E: 84, + 0x1343F: 84, + 0x13440: 84, + 0x13447: 84, + 0x13448: 84, + 0x13449: 84, + 0x1344A: 84, + 0x1344B: 84, + 0x1344C: 84, + 0x1344D: 84, + 0x1344E: 84, + 0x1344F: 84, + 0x13450: 84, + 0x13451: 84, + 0x13452: 84, + 0x13453: 84, + 0x13454: 84, + 0x13455: 84, + 0x16AF0: 84, + 0x16AF1: 84, + 0x16AF2: 84, + 0x16AF3: 84, + 0x16AF4: 84, + 0x16B30: 84, + 0x16B31: 84, + 0x16B32: 84, + 0x16B33: 84, + 0x16B34: 84, + 0x16B35: 84, + 0x16B36: 84, + 0x16F4F: 84, + 0x16F8F: 84, + 0x16F90: 84, + 0x16F91: 84, + 0x16F92: 84, + 0x16FE4: 84, + 0x1BC9D: 84, + 0x1BC9E: 84, + 0x1BCA0: 84, + 0x1BCA1: 84, + 0x1BCA2: 84, + 0x1BCA3: 84, + 0x1CF00: 84, + 0x1CF01: 84, + 0x1CF02: 84, + 0x1CF03: 84, + 0x1CF04: 84, + 0x1CF05: 84, + 0x1CF06: 84, + 0x1CF07: 84, + 0x1CF08: 84, + 0x1CF09: 84, + 0x1CF0A: 84, + 0x1CF0B: 84, + 0x1CF0C: 84, + 0x1CF0D: 84, + 0x1CF0E: 84, + 0x1CF0F: 84, + 0x1CF10: 84, + 0x1CF11: 84, + 0x1CF12: 84, + 0x1CF13: 84, + 0x1CF14: 84, + 0x1CF15: 84, + 0x1CF16: 84, + 0x1CF17: 84, + 0x1CF18: 84, + 0x1CF19: 84, + 0x1CF1A: 84, + 0x1CF1B: 84, + 0x1CF1C: 84, + 0x1CF1D: 84, + 0x1CF1E: 84, + 0x1CF1F: 84, + 0x1CF20: 84, + 0x1CF21: 84, + 0x1CF22: 84, + 0x1CF23: 84, + 0x1CF24: 84, + 0x1CF25: 84, + 0x1CF26: 84, + 0x1CF27: 84, + 0x1CF28: 84, + 0x1CF29: 84, + 0x1CF2A: 84, + 0x1CF2B: 84, + 0x1CF2C: 84, + 0x1CF2D: 84, + 0x1CF30: 84, + 0x1CF31: 84, + 0x1CF32: 84, + 0x1CF33: 84, + 0x1CF34: 84, + 0x1CF35: 84, + 0x1CF36: 84, + 0x1CF37: 84, + 0x1CF38: 84, + 0x1CF39: 84, + 0x1CF3A: 84, + 0x1CF3B: 84, + 0x1CF3C: 84, + 0x1CF3D: 84, + 0x1CF3E: 84, + 0x1CF3F: 84, + 0x1CF40: 84, + 0x1CF41: 84, + 0x1CF42: 84, + 0x1CF43: 84, + 0x1CF44: 84, + 0x1CF45: 84, + 0x1CF46: 84, + 0x1D167: 84, + 0x1D168: 84, + 0x1D169: 84, + 0x1D173: 84, + 0x1D174: 84, + 0x1D175: 84, + 0x1D176: 84, + 0x1D177: 84, + 0x1D178: 84, + 0x1D179: 84, + 0x1D17A: 84, + 0x1D17B: 84, + 0x1D17C: 84, + 0x1D17D: 84, + 0x1D17E: 84, + 0x1D17F: 84, + 0x1D180: 84, + 0x1D181: 84, + 0x1D182: 84, + 0x1D185: 84, + 0x1D186: 84, + 0x1D187: 84, + 0x1D188: 84, + 0x1D189: 84, + 0x1D18A: 84, + 0x1D18B: 84, + 0x1D1AA: 84, + 0x1D1AB: 84, + 0x1D1AC: 84, + 0x1D1AD: 84, + 0x1D242: 84, + 0x1D243: 84, + 0x1D244: 84, + 0x1DA00: 84, + 0x1DA01: 84, + 0x1DA02: 84, + 0x1DA03: 84, + 0x1DA04: 84, + 0x1DA05: 84, + 0x1DA06: 84, + 0x1DA07: 84, + 0x1DA08: 84, + 0x1DA09: 84, + 0x1DA0A: 84, + 0x1DA0B: 84, + 0x1DA0C: 84, + 0x1DA0D: 84, + 0x1DA0E: 84, + 0x1DA0F: 84, + 0x1DA10: 84, + 0x1DA11: 84, + 0x1DA12: 84, + 0x1DA13: 84, + 0x1DA14: 84, + 0x1DA15: 84, + 0x1DA16: 84, + 0x1DA17: 84, + 0x1DA18: 84, + 0x1DA19: 84, + 0x1DA1A: 84, + 0x1DA1B: 84, + 0x1DA1C: 84, + 0x1DA1D: 84, + 0x1DA1E: 84, + 0x1DA1F: 84, + 0x1DA20: 84, + 0x1DA21: 84, + 0x1DA22: 84, + 0x1DA23: 84, + 0x1DA24: 84, + 0x1DA25: 84, + 0x1DA26: 84, + 0x1DA27: 84, + 0x1DA28: 84, + 0x1DA29: 84, + 0x1DA2A: 84, + 0x1DA2B: 84, + 0x1DA2C: 84, + 0x1DA2D: 84, + 0x1DA2E: 84, + 0x1DA2F: 84, + 0x1DA30: 84, + 0x1DA31: 84, + 0x1DA32: 84, + 0x1DA33: 84, + 0x1DA34: 84, + 0x1DA35: 84, + 0x1DA36: 84, + 0x1DA3B: 84, + 0x1DA3C: 84, + 0x1DA3D: 84, + 0x1DA3E: 84, + 0x1DA3F: 84, + 0x1DA40: 84, + 0x1DA41: 84, + 0x1DA42: 84, + 0x1DA43: 84, + 0x1DA44: 84, + 0x1DA45: 84, + 0x1DA46: 84, + 0x1DA47: 84, + 0x1DA48: 84, + 0x1DA49: 84, + 0x1DA4A: 84, + 0x1DA4B: 84, + 0x1DA4C: 84, + 0x1DA4D: 84, + 0x1DA4E: 84, + 0x1DA4F: 84, + 0x1DA50: 84, + 0x1DA51: 84, + 0x1DA52: 84, + 0x1DA53: 84, + 0x1DA54: 84, + 0x1DA55: 84, + 0x1DA56: 84, + 0x1DA57: 84, + 0x1DA58: 84, + 0x1DA59: 84, + 0x1DA5A: 84, + 0x1DA5B: 84, + 0x1DA5C: 84, + 0x1DA5D: 84, + 0x1DA5E: 84, + 0x1DA5F: 84, + 0x1DA60: 84, + 0x1DA61: 84, + 0x1DA62: 84, + 0x1DA63: 84, + 0x1DA64: 84, + 0x1DA65: 84, + 0x1DA66: 84, + 0x1DA67: 84, + 0x1DA68: 84, + 0x1DA69: 84, + 0x1DA6A: 84, + 0x1DA6B: 84, + 0x1DA6C: 84, + 0x1DA75: 84, + 0x1DA84: 84, + 0x1DA9B: 84, + 0x1DA9C: 84, + 0x1DA9D: 84, + 0x1DA9E: 84, + 0x1DA9F: 84, + 0x1DAA1: 84, + 0x1DAA2: 84, + 0x1DAA3: 84, + 0x1DAA4: 84, + 0x1DAA5: 84, + 0x1DAA6: 84, + 0x1DAA7: 84, + 0x1DAA8: 84, + 0x1DAA9: 84, + 0x1DAAA: 84, + 0x1DAAB: 84, + 0x1DAAC: 84, + 0x1DAAD: 84, + 0x1DAAE: 84, + 0x1DAAF: 84, + 0x1E000: 84, + 0x1E001: 84, + 0x1E002: 84, + 0x1E003: 84, + 0x1E004: 84, + 0x1E005: 84, + 0x1E006: 84, + 0x1E008: 84, + 0x1E009: 84, + 0x1E00A: 84, + 0x1E00B: 84, + 0x1E00C: 84, + 0x1E00D: 84, + 0x1E00E: 84, + 0x1E00F: 84, + 0x1E010: 84, + 0x1E011: 84, + 0x1E012: 84, + 0x1E013: 84, + 0x1E014: 84, + 0x1E015: 84, + 0x1E016: 84, + 0x1E017: 84, + 0x1E018: 84, + 0x1E01B: 84, + 0x1E01C: 84, + 0x1E01D: 84, + 0x1E01E: 84, + 0x1E01F: 84, + 0x1E020: 84, + 0x1E021: 84, + 0x1E023: 84, + 0x1E024: 84, + 0x1E026: 84, + 0x1E027: 84, + 0x1E028: 84, + 0x1E029: 84, + 0x1E02A: 84, + 0x1E08F: 84, + 0x1E130: 84, + 0x1E131: 84, + 0x1E132: 84, + 0x1E133: 84, + 0x1E134: 84, + 0x1E135: 84, + 0x1E136: 84, + 0x1E2AE: 84, + 0x1E2EC: 84, + 0x1E2ED: 84, + 0x1E2EE: 84, + 0x1E2EF: 84, + 0x1E4EC: 84, + 0x1E4ED: 84, + 0x1E4EE: 84, + 0x1E4EF: 84, + 0x1E8D0: 84, + 0x1E8D1: 84, + 0x1E8D2: 84, + 0x1E8D3: 84, + 0x1E8D4: 84, + 0x1E8D5: 84, + 0x1E8D6: 84, + 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, + 0x1E944: 84, + 0x1E945: 84, + 0x1E946: 84, + 0x1E947: 84, + 0x1E948: 84, + 0x1E949: 84, + 0x1E94A: 84, + 0x1E94B: 84, + 0xE0001: 84, + 0xE0020: 84, + 0xE0021: 84, + 0xE0022: 84, + 0xE0023: 84, + 0xE0024: 84, + 0xE0025: 84, + 0xE0026: 84, + 0xE0027: 84, + 0xE0028: 84, + 0xE0029: 84, + 0xE002A: 84, + 0xE002B: 84, + 0xE002C: 84, + 0xE002D: 84, + 0xE002E: 84, + 0xE002F: 84, + 0xE0030: 84, + 0xE0031: 84, + 0xE0032: 84, + 0xE0033: 84, + 0xE0034: 84, + 0xE0035: 84, + 0xE0036: 84, + 0xE0037: 84, + 0xE0038: 84, + 0xE0039: 84, + 0xE003A: 84, + 0xE003B: 84, + 0xE003C: 84, + 0xE003D: 84, + 0xE003E: 84, + 0xE003F: 84, + 0xE0040: 84, + 0xE0041: 84, + 0xE0042: 84, + 0xE0043: 84, + 0xE0044: 84, + 0xE0045: 84, + 0xE0046: 84, + 0xE0047: 84, + 0xE0048: 84, + 0xE0049: 84, + 0xE004A: 84, + 0xE004B: 84, + 0xE004C: 84, + 0xE004D: 84, + 0xE004E: 84, + 0xE004F: 84, + 0xE0050: 84, + 0xE0051: 84, + 0xE0052: 84, + 0xE0053: 84, + 0xE0054: 84, + 0xE0055: 84, + 0xE0056: 84, + 0xE0057: 84, + 0xE0058: 84, + 0xE0059: 84, + 0xE005A: 84, + 0xE005B: 84, + 0xE005C: 84, + 0xE005D: 84, + 0xE005E: 84, + 0xE005F: 84, + 0xE0060: 84, + 0xE0061: 84, + 0xE0062: 84, + 0xE0063: 84, + 0xE0064: 84, + 0xE0065: 84, + 0xE0066: 84, + 0xE0067: 84, + 0xE0068: 84, + 0xE0069: 84, + 0xE006A: 84, + 0xE006B: 84, + 0xE006C: 84, + 0xE006D: 84, + 0xE006E: 84, + 0xE006F: 84, + 0xE0070: 84, + 0xE0071: 84, + 0xE0072: 84, + 0xE0073: 84, + 0xE0074: 84, + 0xE0075: 84, + 0xE0076: 84, + 0xE0077: 84, + 0xE0078: 84, + 0xE0079: 84, + 0xE007A: 84, + 0xE007B: 84, + 0xE007C: 84, + 0xE007D: 84, + 0xE007E: 84, + 0xE007F: 84, + 0xE0100: 84, + 0xE0101: 84, + 0xE0102: 84, + 0xE0103: 84, + 0xE0104: 84, + 0xE0105: 84, + 0xE0106: 84, + 0xE0107: 84, + 0xE0108: 84, + 0xE0109: 84, + 0xE010A: 84, + 0xE010B: 84, + 0xE010C: 84, + 0xE010D: 84, + 0xE010E: 84, + 0xE010F: 84, + 0xE0110: 84, + 0xE0111: 84, + 0xE0112: 84, + 0xE0113: 84, + 0xE0114: 84, + 0xE0115: 84, + 0xE0116: 84, + 0xE0117: 84, + 0xE0118: 84, + 0xE0119: 84, + 0xE011A: 84, + 0xE011B: 84, + 0xE011C: 84, + 0xE011D: 84, + 0xE011E: 84, + 0xE011F: 84, + 0xE0120: 84, + 0xE0121: 84, + 0xE0122: 84, + 0xE0123: 84, + 0xE0124: 84, + 0xE0125: 84, + 0xE0126: 84, + 0xE0127: 84, + 0xE0128: 84, + 0xE0129: 84, + 0xE012A: 84, + 0xE012B: 84, + 0xE012C: 84, + 0xE012D: 84, + 0xE012E: 84, + 0xE012F: 84, + 0xE0130: 84, + 0xE0131: 84, + 0xE0132: 84, + 0xE0133: 84, + 0xE0134: 84, + 0xE0135: 84, + 0xE0136: 84, + 0xE0137: 84, + 0xE0138: 84, + 0xE0139: 84, + 0xE013A: 84, + 0xE013B: 84, + 0xE013C: 84, + 0xE013D: 84, + 0xE013E: 84, + 0xE013F: 84, + 0xE0140: 84, + 0xE0141: 84, + 0xE0142: 84, + 0xE0143: 84, + 0xE0144: 84, + 0xE0145: 84, + 0xE0146: 84, + 0xE0147: 84, + 0xE0148: 84, + 0xE0149: 84, + 0xE014A: 84, + 0xE014B: 84, + 0xE014C: 84, + 0xE014D: 84, + 0xE014E: 84, + 0xE014F: 84, + 0xE0150: 84, + 0xE0151: 84, + 0xE0152: 84, + 0xE0153: 84, + 0xE0154: 84, + 0xE0155: 84, + 0xE0156: 84, + 0xE0157: 84, + 0xE0158: 84, + 0xE0159: 84, + 0xE015A: 84, + 0xE015B: 84, + 0xE015C: 84, + 0xE015D: 84, + 0xE015E: 84, + 0xE015F: 84, + 0xE0160: 84, + 0xE0161: 84, + 0xE0162: 84, + 0xE0163: 84, + 0xE0164: 84, + 0xE0165: 84, + 0xE0166: 84, + 0xE0167: 84, + 0xE0168: 84, + 0xE0169: 84, + 0xE016A: 84, + 0xE016B: 84, + 0xE016C: 84, + 0xE016D: 84, + 0xE016E: 84, + 0xE016F: 84, + 0xE0170: 84, + 0xE0171: 84, + 0xE0172: 84, + 0xE0173: 84, + 0xE0174: 84, + 0xE0175: 84, + 0xE0176: 84, + 0xE0177: 84, + 0xE0178: 84, + 0xE0179: 84, + 0xE017A: 84, + 0xE017B: 84, + 0xE017C: 84, + 0xE017D: 84, + 0xE017E: 84, + 0xE017F: 84, + 0xE0180: 84, + 0xE0181: 84, + 0xE0182: 84, + 0xE0183: 84, + 0xE0184: 84, + 0xE0185: 84, + 0xE0186: 84, + 0xE0187: 84, + 0xE0188: 84, + 0xE0189: 84, + 0xE018A: 84, + 0xE018B: 84, + 0xE018C: 84, + 0xE018D: 84, + 0xE018E: 84, + 0xE018F: 84, + 0xE0190: 84, + 0xE0191: 84, + 0xE0192: 84, + 0xE0193: 84, + 0xE0194: 84, + 0xE0195: 84, + 0xE0196: 84, + 0xE0197: 84, + 0xE0198: 84, + 0xE0199: 84, + 0xE019A: 84, + 0xE019B: 84, + 0xE019C: 84, + 0xE019D: 84, + 0xE019E: 84, + 0xE019F: 84, + 0xE01A0: 84, + 0xE01A1: 84, + 0xE01A2: 84, + 0xE01A3: 84, + 0xE01A4: 84, + 0xE01A5: 84, + 0xE01A6: 84, + 0xE01A7: 84, + 0xE01A8: 84, + 0xE01A9: 84, + 0xE01AA: 84, + 0xE01AB: 84, + 0xE01AC: 84, + 0xE01AD: 84, + 0xE01AE: 84, + 0xE01AF: 84, + 0xE01B0: 84, + 0xE01B1: 84, + 0xE01B2: 84, + 0xE01B3: 84, + 0xE01B4: 84, + 0xE01B5: 84, + 0xE01B6: 84, + 0xE01B7: 84, + 0xE01B8: 84, + 0xE01B9: 84, + 0xE01BA: 84, + 0xE01BB: 84, + 0xE01BC: 84, + 0xE01BD: 84, + 0xE01BE: 84, + 0xE01BF: 84, + 0xE01C0: 84, + 0xE01C1: 84, + 0xE01C2: 84, + 0xE01C3: 84, + 0xE01C4: 84, + 0xE01C5: 84, + 0xE01C6: 84, + 0xE01C7: 84, + 0xE01C8: 84, + 0xE01C9: 84, + 0xE01CA: 84, + 0xE01CB: 84, + 0xE01CC: 84, + 0xE01CD: 84, + 0xE01CE: 84, + 0xE01CF: 84, + 0xE01D0: 84, + 0xE01D1: 84, + 0xE01D2: 84, + 0xE01D3: 84, + 0xE01D4: 84, + 0xE01D5: 84, + 0xE01D6: 84, + 0xE01D7: 84, + 0xE01D8: 84, + 0xE01D9: 84, + 0xE01DA: 84, + 0xE01DB: 84, + 0xE01DC: 84, + 0xE01DD: 84, + 0xE01DE: 84, + 0xE01DF: 84, + 0xE01E0: 84, + 0xE01E1: 84, + 0xE01E2: 84, + 0xE01E3: 84, + 0xE01E4: 84, + 0xE01E5: 84, + 0xE01E6: 84, + 0xE01E7: 84, + 0xE01E8: 84, + 0xE01E9: 84, + 0xE01EA: 84, + 0xE01EB: 84, + 0xE01EC: 84, + 0xE01ED: 84, + 0xE01EE: 84, + 0xE01EF: 84, +} +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, + 0x56000000587, + 0x58800000589, + 0x591000005BE, + 0x5BF000005C0, + 0x5C1000005C3, + 0x5C4000005C6, + 0x5C7000005C8, + 0x5D0000005EB, + 0x5EF000005F3, + 0x6100000061B, + 0x62000000640, + 0x64100000660, + 0x66E00000675, + 0x679000006D4, + 0x6D5000006DD, + 0x6DF000006E9, + 0x6EA000006F0, + 0x6FA00000700, + 0x7100000074B, + 0x74D000007B2, + 0x7C0000007F6, + 0x7FD000007FE, + 0x8000000082E, + 0x8400000085C, + 0x8600000086B, + 0x87000000888, + 0x8890000088F, + 0x898000008E2, + 0x8E300000958, + 0x96000000964, + 0x96600000970, + 0x97100000984, + 0x9850000098D, + 0x98F00000991, + 0x993000009A9, + 0x9AA000009B1, + 0x9B2000009B3, + 0x9B6000009BA, + 0x9BC000009C5, + 0x9C7000009C9, + 0x9CB000009CF, + 0x9D7000009D8, + 0x9E0000009E4, + 0x9E6000009F2, + 0x9FC000009FD, + 0x9FE000009FF, + 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, + 0xB5500000B58, + 0xB5F00000B64, + 0xB6600000B70, + 0xB7100000B72, + 0xB8200000B84, + 0xB8500000B8B, + 0xB8E00000B91, + 0xB9200000B96, + 0xB9900000B9B, + 0xB9C00000B9D, + 0xB9E00000BA0, + 0xBA300000BA5, + 0xBA800000BAB, + 0xBAE00000BBA, + 0xBBE00000BC3, + 0xBC600000BC9, + 0xBCA00000BCE, + 0xBD000000BD1, + 0xBD700000BD8, + 0xBE600000BF0, + 0xC0000000C0D, + 0xC0E00000C11, + 0xC1200000C29, + 0xC2A00000C3A, + 0xC3C00000C45, + 0xC4600000C49, + 0xC4A00000C4E, + 0xC5500000C57, + 0xC5800000C5B, + 0xC5D00000C5E, + 0xC6000000C64, + 0xC6600000C70, + 0xC8000000C84, + 0xC8500000C8D, + 0xC8E00000C91, + 0xC9200000CA9, + 0xCAA00000CB4, + 0xCB500000CBA, + 0xCBC00000CC5, + 0xCC600000CC9, + 0xCCA00000CCE, + 0xCD500000CD7, + 0xCDD00000CDF, + 0xCE000000CE4, + 0xCE600000CF0, + 0xCF100000CF4, + 0xD0000000D0D, + 0xD0E00000D11, + 0xD1200000D45, + 0xD4600000D49, + 0xD4A00000D4F, + 0xD5400000D58, + 0xD5F00000D64, + 0xD6600000D70, + 0xD7A00000D80, + 0xD8100000D84, + 0xD8500000D97, + 0xD9A00000DB2, + 0xDB300000DBC, + 0xDBD00000DBE, + 0xDC000000DC7, + 0xDCA00000DCB, + 0xDCF00000DD5, + 0xDD600000DD7, + 0xDD800000DE0, + 0xDE600000DF0, + 0xDF200000DF4, + 0xE0100000E33, + 0xE3400000E3B, + 0xE4000000E4F, + 0xE5000000E5A, + 0xE8100000E83, + 0xE8400000E85, + 0xE8600000E8B, + 0xE8C00000EA4, + 0xEA500000EA6, + 0xEA700000EB3, + 0xEB400000EBE, + 0xEC000000EC5, + 0xEC600000EC7, + 0xEC800000ECF, + 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, + 0x170000001716, + 0x171F00001735, + 0x174000001754, + 0x17600000176D, + 0x176E00001771, + 0x177200001774, + 0x1780000017B4, + 0x17B6000017D4, + 0x17D7000017D8, + 0x17DC000017DE, + 0x17E0000017EA, + 0x18100000181A, + 0x182000001879, + 0x1880000018AB, + 0x18B0000018F6, + 0x19000000191F, + 0x19200000192C, + 0x19300000193C, + 0x19460000196E, + 0x197000001975, + 0x1980000019AC, + 0x19B0000019CA, + 0x19D0000019DA, + 0x1A0000001A1C, + 0x1A2000001A5F, + 0x1A6000001A7D, + 0x1A7F00001A8A, + 0x1A9000001A9A, + 0x1AA700001AA8, + 0x1AB000001ABE, + 0x1ABF00001ACF, + 0x1B0000001B4D, + 0x1B5000001B5A, + 0x1B6B00001B74, + 0x1B8000001BF4, + 0x1C0000001C38, + 0x1C4000001C4A, + 0x1C4D00001C7E, + 0x1CD000001CD3, + 0x1CD400001CFB, + 0x1D0000001D2C, + 0x1D2F00001D30, + 0x1D3B00001D3C, + 0x1D4E00001D4F, + 0x1D6B00001D78, + 0x1D7900001D9B, + 0x1DC000001E00, + 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, + 0x2C3000002C60, + 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, + 0x310500003130, + 0x31A0000031C0, + 0x31F000003200, + 0x340000004DC0, + 0x4E000000A48D, + 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, + 0xA7AF0000A7B0, + 0xA7B50000A7B6, + 0xA7B70000A7B8, + 0xA7B90000A7BA, + 0xA7BB0000A7BC, + 0xA7BD0000A7BE, + 0xA7BF0000A7C0, + 0xA7C10000A7C2, + 0xA7C30000A7C4, + 0xA7C80000A7C9, + 0xA7CA0000A7CB, + 0xA7D10000A7D2, + 0xA7D30000A7D4, + 0xA7D50000A7D6, + 0xA7D70000A7D8, + 0xA7D90000A7DA, + 0xA7F60000A7F8, + 0xA7FA0000A828, + 0xA82C0000A82D, + 0xA8400000A874, + 0xA8800000A8C6, + 0xA8D00000A8DA, + 0xA8E00000A8F8, + 0xA8FB0000A8FC, + 0xA8FD0000A92E, + 0xA9300000A954, + 0xA9800000A9C1, + 0xA9CF0000A9DA, + 0xA9E00000A9FF, + 0xAA000000AA37, + 0xAA400000AA4E, + 0xAA500000AA5A, + 0xAA600000AA77, + 0xAA7A0000AAC3, + 0xAADB0000AADE, + 0xAAE00000AAF0, + 0xAAF20000AAF7, + 0xAB010000AB07, + 0xAB090000AB0F, + 0xAB110000AB17, + 0xAB200000AB27, + 0xAB280000AB2F, + 0xAB300000AB5B, + 0xAB600000AB69, + 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, + 0x10597000105A2, + 0x105A3000105B2, + 0x105B3000105BA, + 0x105BB000105BD, + 0x1060000010737, + 0x1074000010756, + 0x1076000010768, + 0x1078000010781, + 0x1080000010806, + 0x1080800010809, + 0x1080A00010836, + 0x1083700010839, + 0x1083C0001083D, + 0x1083F00010856, + 0x1086000010877, + 0x108800001089F, + 0x108E0000108F3, + 0x108F4000108F6, + 0x1090000010916, + 0x109200001093A, + 0x10980000109B8, + 0x109BE000109C0, + 0x10A0000010A04, + 0x10A0500010A07, + 0x10A0C00010A14, + 0x10A1500010A18, + 0x10A1900010A36, + 0x10A3800010A3B, + 0x10A3F00010A40, + 0x10A6000010A7D, + 0x10A8000010A9D, + 0x10AC000010AC8, + 0x10AC900010AE7, + 0x10B0000010B36, + 0x10B4000010B56, + 0x10B6000010B73, + 0x10B8000010B92, + 0x10C0000010C49, + 0x10CC000010CF3, + 0x10D0000010D28, + 0x10D3000010D3A, + 0x10E8000010EAA, + 0x10EAB00010EAD, + 0x10EB000010EB2, + 0x10EFD00010F1D, + 0x10F2700010F28, + 0x10F3000010F51, + 0x10F7000010F86, + 0x10FB000010FC5, + 0x10FE000010FF7, + 0x1100000011047, + 0x1106600011076, + 0x1107F000110BB, + 0x110C2000110C3, + 0x110D0000110E9, + 0x110F0000110FA, + 0x1110000011135, + 0x1113600011140, + 0x1114400011148, + 0x1115000011174, + 0x1117600011177, + 0x11180000111C5, + 0x111C9000111CD, + 0x111CE000111DB, + 0x111DC000111DD, + 0x1120000011212, + 0x1121300011238, + 0x1123E00011242, + 0x1128000011287, + 0x1128800011289, + 0x1128A0001128E, + 0x1128F0001129E, + 0x1129F000112A9, + 0x112B0000112EB, + 0x112F0000112FA, + 0x1130000011304, + 0x113050001130D, + 0x1130F00011311, + 0x1131300011329, + 0x1132A00011331, + 0x1133200011334, + 0x113350001133A, + 0x1133B00011345, + 0x1134700011349, + 0x1134B0001134E, + 0x1135000011351, + 0x1135700011358, + 0x1135D00011364, + 0x113660001136D, + 0x1137000011375, + 0x114000001144B, + 0x114500001145A, + 0x1145E00011462, + 0x11480000114C6, + 0x114C7000114C8, + 0x114D0000114DA, + 0x11580000115B6, + 0x115B8000115C1, + 0x115D8000115DE, + 0x1160000011641, + 0x1164400011645, + 0x116500001165A, + 0x11680000116B9, + 0x116C0000116CA, + 0x117000001171B, + 0x1171D0001172C, + 0x117300001173A, + 0x1174000011747, + 0x118000001183B, + 0x118C0000118EA, + 0x118FF00011907, + 0x119090001190A, + 0x1190C00011914, + 0x1191500011917, + 0x1191800011936, + 0x1193700011939, + 0x1193B00011944, + 0x119500001195A, + 0x119A0000119A8, + 0x119AA000119D8, + 0x119DA000119E2, + 0x119E3000119E5, + 0x11A0000011A3F, + 0x11A4700011A48, + 0x11A5000011A9A, + 0x11A9D00011A9E, + 0x11AB000011AF9, + 0x11C0000011C09, + 0x11C0A00011C37, + 0x11C3800011C41, + 0x11C5000011C5A, + 0x11C7200011C90, + 0x11C9200011CA8, + 0x11CA900011CB7, + 0x11D0000011D07, + 0x11D0800011D0A, + 0x11D0B00011D37, + 0x11D3A00011D3B, + 0x11D3C00011D3E, + 0x11D3F00011D48, + 0x11D5000011D5A, + 0x11D6000011D66, + 0x11D6700011D69, + 0x11D6A00011D8F, + 0x11D9000011D92, + 0x11D9300011D99, + 0x11DA000011DAA, + 0x11EE000011EF7, + 0x11F0000011F11, + 0x11F1200011F3B, + 0x11F3E00011F43, + 0x11F5000011F5A, + 0x11FB000011FB1, + 0x120000001239A, + 0x1248000012544, + 0x12F9000012FF1, + 0x1300000013430, + 0x1344000013456, + 0x1440000014647, + 0x1680000016A39, + 0x16A4000016A5F, + 0x16A6000016A6A, + 0x16A7000016ABF, + 0x16AC000016ACA, + 0x16AD000016AEE, + 0x16AF000016AF5, + 0x16B0000016B37, + 0x16B4000016B44, + 0x16B5000016B5A, + 0x16B6300016B78, + 0x16B7D00016B90, + 0x16E6000016E80, + 0x16F0000016F4B, + 0x16F4F00016F88, + 0x16F8F00016FA0, + 0x16FE000016FE2, + 0x16FE300016FE5, + 0x16FF000016FF2, + 0x17000000187F8, + 0x1880000018CD6, + 0x18D0000018D09, + 0x1AFF00001AFF4, + 0x1AFF50001AFFC, + 0x1AFFD0001AFFF, + 0x1B0000001B123, + 0x1B1320001B133, + 0x1B1500001B153, + 0x1B1550001B156, + 0x1B1640001B168, + 0x1B1700001B2FC, + 0x1BC000001BC6B, + 0x1BC700001BC7D, + 0x1BC800001BC89, + 0x1BC900001BC9A, + 0x1BC9D0001BC9F, + 0x1CF000001CF2E, + 0x1CF300001CF47, + 0x1DA000001DA37, + 0x1DA3B0001DA6D, + 0x1DA750001DA76, + 0x1DA840001DA85, + 0x1DA9B0001DAA0, + 0x1DAA10001DAB0, + 0x1DF000001DF1F, + 0x1DF250001DF2B, + 0x1E0000001E007, + 0x1E0080001E019, + 0x1E01B0001E022, + 0x1E0230001E025, + 0x1E0260001E02B, + 0x1E08F0001E090, + 0x1E1000001E12D, + 0x1E1300001E13E, + 0x1E1400001E14A, + 0x1E14E0001E14F, + 0x1E2900001E2AF, + 0x1E2C00001E2FA, + 0x1E4D00001E4FA, + 0x1E7E00001E7E7, + 0x1E7E80001E7EC, + 0x1E7ED0001E7EF, + 0x1E7F00001E7FF, + 0x1E8000001E8C5, + 0x1E8D00001E8D7, + 0x1E9220001E94C, + 0x1E9500001E95A, + 0x200000002A6E0, + 0x2A7000002B73A, + 0x2B7400002B81E, + 0x2B8200002CEA2, + 0x2CEB00002EBE1, + 0x2EBF00002EE5E, + 0x300000003134B, + 0x31350000323B0, + ), + "CONTEXTJ": (0x200C0000200E,), + "CONTEXTO": ( + 0xB7000000B8, + 0x37500000376, + 0x5F3000005F5, + 0x6600000066A, + 0x6F0000006FA, + 0x30FB000030FC, + ), +} diff --git a/venv/lib/python3.11/site-packages/idna/intranges.py b/venv/lib/python3.11/site-packages/idna/intranges.py new file mode 100644 index 0000000..7bfaa8d --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna/intranges.py @@ -0,0 +1,57 @@ +""" +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 +from typing import List, Tuple + + +def intranges_from_list(list_: List[int]) -> Tuple[int, ...]: + """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: int, end: int) -> int: + return (start << 32) | end + + +def _decode_range(r: int) -> Tuple[int, int]: + return (r >> 32), (r & ((1 << 32) - 1)) + + +def intranges_contain(int_: int, ranges: Tuple[int, ...]) -> bool: + """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.11/site-packages/idna/package_data.py b/venv/lib/python3.11/site-packages/idna/package_data.py new file mode 100644 index 0000000..514ff7e --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna/package_data.py @@ -0,0 +1 @@ +__version__ = "3.10" diff --git a/venv/lib/python3.11/site-packages/idna/py.typed b/venv/lib/python3.11/site-packages/idna/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/idna/uts46data.py b/venv/lib/python3.11/site-packages/idna/uts46data.py new file mode 100644 index 0000000..eb89432 --- /dev/null +++ b/venv/lib/python3.11/site-packages/idna/uts46data.py @@ -0,0 +1,8681 @@ +# This file is automatically generated by tools/idna-data +# vim: set fileencoding=utf-8 : + +from typing import List, Tuple, Union + +"""IDNA Mapping Table from UTS46.""" + + +__version__ = "15.1.0" + + +def _seg_0() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + 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", "a"), + (0x42, "M", "b"), + (0x43, "M", "c"), + (0x44, "M", "d"), + (0x45, "M", "e"), + (0x46, "M", "f"), + (0x47, "M", "g"), + (0x48, "M", "h"), + (0x49, "M", "i"), + (0x4A, "M", "j"), + (0x4B, "M", "k"), + (0x4C, "M", "l"), + (0x4D, "M", "m"), + (0x4E, "M", "n"), + (0x4F, "M", "o"), + (0x50, "M", "p"), + (0x51, "M", "q"), + (0x52, "M", "r"), + (0x53, "M", "s"), + (0x54, "M", "t"), + (0x55, "M", "u"), + (0x56, "M", "v"), + (0x57, "M", "w"), + (0x58, "M", "x"), + (0x59, "M", "y"), + (0x5A, "M", "z"), + (0x5B, "3"), + (0x5C, "3"), + (0x5D, "3"), + (0x5E, "3"), + (0x5F, "3"), + (0x60, "3"), + (0x61, "V"), + (0x62, "V"), + (0x63, "V"), + ] + + +def _seg_1() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + 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", " "), + (0xA1, "V"), + (0xA2, "V"), + (0xA3, "V"), + (0xA4, "V"), + (0xA5, "V"), + (0xA6, "V"), + (0xA7, "V"), + (0xA8, "3", " ̈"), + (0xA9, "V"), + (0xAA, "M", "a"), + (0xAB, "V"), + (0xAC, "V"), + (0xAD, "I"), + (0xAE, "V"), + (0xAF, "3", " ̄"), + (0xB0, "V"), + (0xB1, "V"), + (0xB2, "M", "2"), + (0xB3, "M", "3"), + (0xB4, "3", " ́"), + (0xB5, "M", "μ"), + (0xB6, "V"), + (0xB7, "V"), + (0xB8, "3", " ̧"), + (0xB9, "M", "1"), + (0xBA, "M", "o"), + (0xBB, "V"), + (0xBC, "M", "1⁄4"), + (0xBD, "M", "1⁄2"), + (0xBE, "M", "3⁄4"), + (0xBF, "V"), + (0xC0, "M", "à"), + (0xC1, "M", "á"), + (0xC2, "M", "â"), + (0xC3, "M", "ã"), + (0xC4, "M", "ä"), + (0xC5, "M", "å"), + (0xC6, "M", "æ"), + (0xC7, "M", "ç"), + ] + + +def _seg_2() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xC8, "M", "è"), + (0xC9, "M", "é"), + (0xCA, "M", "ê"), + (0xCB, "M", "ë"), + (0xCC, "M", "ì"), + (0xCD, "M", "í"), + (0xCE, "M", "î"), + (0xCF, "M", "ï"), + (0xD0, "M", "ð"), + (0xD1, "M", "ñ"), + (0xD2, "M", "ò"), + (0xD3, "M", "ó"), + (0xD4, "M", "ô"), + (0xD5, "M", "õ"), + (0xD6, "M", "ö"), + (0xD7, "V"), + (0xD8, "M", "ø"), + (0xD9, "M", "ù"), + (0xDA, "M", "ú"), + (0xDB, "M", "û"), + (0xDC, "M", "ü"), + (0xDD, "M", "ý"), + (0xDE, "M", "þ"), + (0xDF, "D", "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", "ā"), + (0x101, "V"), + (0x102, "M", "ă"), + (0x103, "V"), + (0x104, "M", "ą"), + (0x105, "V"), + (0x106, "M", "ć"), + (0x107, "V"), + (0x108, "M", "ĉ"), + (0x109, "V"), + (0x10A, "M", "ċ"), + (0x10B, "V"), + (0x10C, "M", "č"), + (0x10D, "V"), + (0x10E, "M", "ď"), + (0x10F, "V"), + (0x110, "M", "đ"), + (0x111, "V"), + (0x112, "M", "ē"), + (0x113, "V"), + (0x114, "M", "ĕ"), + (0x115, "V"), + (0x116, "M", "ė"), + (0x117, "V"), + (0x118, "M", "ę"), + (0x119, "V"), + (0x11A, "M", "ě"), + (0x11B, "V"), + (0x11C, "M", "ĝ"), + (0x11D, "V"), + (0x11E, "M", "ğ"), + (0x11F, "V"), + (0x120, "M", "ġ"), + (0x121, "V"), + (0x122, "M", "ģ"), + (0x123, "V"), + (0x124, "M", "ĥ"), + (0x125, "V"), + (0x126, "M", "ħ"), + (0x127, "V"), + (0x128, "M", "ĩ"), + (0x129, "V"), + (0x12A, "M", "ī"), + (0x12B, "V"), + ] + + +def _seg_3() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x12C, "M", "ĭ"), + (0x12D, "V"), + (0x12E, "M", "į"), + (0x12F, "V"), + (0x130, "M", "i̇"), + (0x131, "V"), + (0x132, "M", "ij"), + (0x134, "M", "ĵ"), + (0x135, "V"), + (0x136, "M", "ķ"), + (0x137, "V"), + (0x139, "M", "ĺ"), + (0x13A, "V"), + (0x13B, "M", "ļ"), + (0x13C, "V"), + (0x13D, "M", "ľ"), + (0x13E, "V"), + (0x13F, "M", "l·"), + (0x141, "M", "ł"), + (0x142, "V"), + (0x143, "M", "ń"), + (0x144, "V"), + (0x145, "M", "ņ"), + (0x146, "V"), + (0x147, "M", "ň"), + (0x148, "V"), + (0x149, "M", "ʼn"), + (0x14A, "M", "ŋ"), + (0x14B, "V"), + (0x14C, "M", "ō"), + (0x14D, "V"), + (0x14E, "M", "ŏ"), + (0x14F, "V"), + (0x150, "M", "ő"), + (0x151, "V"), + (0x152, "M", "œ"), + (0x153, "V"), + (0x154, "M", "ŕ"), + (0x155, "V"), + (0x156, "M", "ŗ"), + (0x157, "V"), + (0x158, "M", "ř"), + (0x159, "V"), + (0x15A, "M", "ś"), + (0x15B, "V"), + (0x15C, "M", "ŝ"), + (0x15D, "V"), + (0x15E, "M", "ş"), + (0x15F, "V"), + (0x160, "M", "š"), + (0x161, "V"), + (0x162, "M", "ţ"), + (0x163, "V"), + (0x164, "M", "ť"), + (0x165, "V"), + (0x166, "M", "ŧ"), + (0x167, "V"), + (0x168, "M", "ũ"), + (0x169, "V"), + (0x16A, "M", "ū"), + (0x16B, "V"), + (0x16C, "M", "ŭ"), + (0x16D, "V"), + (0x16E, "M", "ů"), + (0x16F, "V"), + (0x170, "M", "ű"), + (0x171, "V"), + (0x172, "M", "ų"), + (0x173, "V"), + (0x174, "M", "ŵ"), + (0x175, "V"), + (0x176, "M", "ŷ"), + (0x177, "V"), + (0x178, "M", "ÿ"), + (0x179, "M", "ź"), + (0x17A, "V"), + (0x17B, "M", "ż"), + (0x17C, "V"), + (0x17D, "M", "ž"), + (0x17E, "V"), + (0x17F, "M", "s"), + (0x180, "V"), + (0x181, "M", "ɓ"), + (0x182, "M", "ƃ"), + (0x183, "V"), + (0x184, "M", "ƅ"), + (0x185, "V"), + (0x186, "M", "ɔ"), + (0x187, "M", "ƈ"), + (0x188, "V"), + (0x189, "M", "ɖ"), + (0x18A, "M", "ɗ"), + (0x18B, "M", "ƌ"), + (0x18C, "V"), + (0x18E, "M", "ǝ"), + (0x18F, "M", "ə"), + (0x190, "M", "ɛ"), + (0x191, "M", "ƒ"), + (0x192, "V"), + (0x193, "M", "ɠ"), + ] + + +def _seg_4() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x194, "M", "ɣ"), + (0x195, "V"), + (0x196, "M", "ɩ"), + (0x197, "M", "ɨ"), + (0x198, "M", "ƙ"), + (0x199, "V"), + (0x19C, "M", "ɯ"), + (0x19D, "M", "ɲ"), + (0x19E, "V"), + (0x19F, "M", "ɵ"), + (0x1A0, "M", "ơ"), + (0x1A1, "V"), + (0x1A2, "M", "ƣ"), + (0x1A3, "V"), + (0x1A4, "M", "ƥ"), + (0x1A5, "V"), + (0x1A6, "M", "ʀ"), + (0x1A7, "M", "ƨ"), + (0x1A8, "V"), + (0x1A9, "M", "ʃ"), + (0x1AA, "V"), + (0x1AC, "M", "ƭ"), + (0x1AD, "V"), + (0x1AE, "M", "ʈ"), + (0x1AF, "M", "ư"), + (0x1B0, "V"), + (0x1B1, "M", "ʊ"), + (0x1B2, "M", "ʋ"), + (0x1B3, "M", "ƴ"), + (0x1B4, "V"), + (0x1B5, "M", "ƶ"), + (0x1B6, "V"), + (0x1B7, "M", "ʒ"), + (0x1B8, "M", "ƹ"), + (0x1B9, "V"), + (0x1BC, "M", "ƽ"), + (0x1BD, "V"), + (0x1C4, "M", "dž"), + (0x1C7, "M", "lj"), + (0x1CA, "M", "nj"), + (0x1CD, "M", "ǎ"), + (0x1CE, "V"), + (0x1CF, "M", "ǐ"), + (0x1D0, "V"), + (0x1D1, "M", "ǒ"), + (0x1D2, "V"), + (0x1D3, "M", "ǔ"), + (0x1D4, "V"), + (0x1D5, "M", "ǖ"), + (0x1D6, "V"), + (0x1D7, "M", "ǘ"), + (0x1D8, "V"), + (0x1D9, "M", "ǚ"), + (0x1DA, "V"), + (0x1DB, "M", "ǜ"), + (0x1DC, "V"), + (0x1DE, "M", "ǟ"), + (0x1DF, "V"), + (0x1E0, "M", "ǡ"), + (0x1E1, "V"), + (0x1E2, "M", "ǣ"), + (0x1E3, "V"), + (0x1E4, "M", "ǥ"), + (0x1E5, "V"), + (0x1E6, "M", "ǧ"), + (0x1E7, "V"), + (0x1E8, "M", "ǩ"), + (0x1E9, "V"), + (0x1EA, "M", "ǫ"), + (0x1EB, "V"), + (0x1EC, "M", "ǭ"), + (0x1ED, "V"), + (0x1EE, "M", "ǯ"), + (0x1EF, "V"), + (0x1F1, "M", "dz"), + (0x1F4, "M", "ǵ"), + (0x1F5, "V"), + (0x1F6, "M", "ƕ"), + (0x1F7, "M", "ƿ"), + (0x1F8, "M", "ǹ"), + (0x1F9, "V"), + (0x1FA, "M", "ǻ"), + (0x1FB, "V"), + (0x1FC, "M", "ǽ"), + (0x1FD, "V"), + (0x1FE, "M", "ǿ"), + (0x1FF, "V"), + (0x200, "M", "ȁ"), + (0x201, "V"), + (0x202, "M", "ȃ"), + (0x203, "V"), + (0x204, "M", "ȅ"), + (0x205, "V"), + (0x206, "M", "ȇ"), + (0x207, "V"), + (0x208, "M", "ȉ"), + (0x209, "V"), + (0x20A, "M", "ȋ"), + (0x20B, "V"), + (0x20C, "M", "ȍ"), + ] + + +def _seg_5() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x20D, "V"), + (0x20E, "M", "ȏ"), + (0x20F, "V"), + (0x210, "M", "ȑ"), + (0x211, "V"), + (0x212, "M", "ȓ"), + (0x213, "V"), + (0x214, "M", "ȕ"), + (0x215, "V"), + (0x216, "M", "ȗ"), + (0x217, "V"), + (0x218, "M", "ș"), + (0x219, "V"), + (0x21A, "M", "ț"), + (0x21B, "V"), + (0x21C, "M", "ȝ"), + (0x21D, "V"), + (0x21E, "M", "ȟ"), + (0x21F, "V"), + (0x220, "M", "ƞ"), + (0x221, "V"), + (0x222, "M", "ȣ"), + (0x223, "V"), + (0x224, "M", "ȥ"), + (0x225, "V"), + (0x226, "M", "ȧ"), + (0x227, "V"), + (0x228, "M", "ȩ"), + (0x229, "V"), + (0x22A, "M", "ȫ"), + (0x22B, "V"), + (0x22C, "M", "ȭ"), + (0x22D, "V"), + (0x22E, "M", "ȯ"), + (0x22F, "V"), + (0x230, "M", "ȱ"), + (0x231, "V"), + (0x232, "M", "ȳ"), + (0x233, "V"), + (0x23A, "M", "ⱥ"), + (0x23B, "M", "ȼ"), + (0x23C, "V"), + (0x23D, "M", "ƚ"), + (0x23E, "M", "ⱦ"), + (0x23F, "V"), + (0x241, "M", "ɂ"), + (0x242, "V"), + (0x243, "M", "ƀ"), + (0x244, "M", "ʉ"), + (0x245, "M", "ʌ"), + (0x246, "M", "ɇ"), + (0x247, "V"), + (0x248, "M", "ɉ"), + (0x249, "V"), + (0x24A, "M", "ɋ"), + (0x24B, "V"), + (0x24C, "M", "ɍ"), + (0x24D, "V"), + (0x24E, "M", "ɏ"), + (0x24F, "V"), + (0x2B0, "M", "h"), + (0x2B1, "M", "ɦ"), + (0x2B2, "M", "j"), + (0x2B3, "M", "r"), + (0x2B4, "M", "ɹ"), + (0x2B5, "M", "ɻ"), + (0x2B6, "M", "ʁ"), + (0x2B7, "M", "w"), + (0x2B8, "M", "y"), + (0x2B9, "V"), + (0x2D8, "3", " ̆"), + (0x2D9, "3", " ̇"), + (0x2DA, "3", " ̊"), + (0x2DB, "3", " ̨"), + (0x2DC, "3", " ̃"), + (0x2DD, "3", " ̋"), + (0x2DE, "V"), + (0x2E0, "M", "ɣ"), + (0x2E1, "M", "l"), + (0x2E2, "M", "s"), + (0x2E3, "M", "x"), + (0x2E4, "M", "ʕ"), + (0x2E5, "V"), + (0x340, "M", "̀"), + (0x341, "M", "́"), + (0x342, "V"), + (0x343, "M", "̓"), + (0x344, "M", "̈́"), + (0x345, "M", "ι"), + (0x346, "V"), + (0x34F, "I"), + (0x350, "V"), + (0x370, "M", "ͱ"), + (0x371, "V"), + (0x372, "M", "ͳ"), + (0x373, "V"), + (0x374, "M", "ʹ"), + (0x375, "V"), + (0x376, "M", "ͷ"), + (0x377, "V"), + ] + + +def _seg_6() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x378, "X"), + (0x37A, "3", " ι"), + (0x37B, "V"), + (0x37E, "3", ";"), + (0x37F, "M", "ϳ"), + (0x380, "X"), + (0x384, "3", " ́"), + (0x385, "3", " ̈́"), + (0x386, "M", "ά"), + (0x387, "M", "·"), + (0x388, "M", "έ"), + (0x389, "M", "ή"), + (0x38A, "M", "ί"), + (0x38B, "X"), + (0x38C, "M", "ό"), + (0x38D, "X"), + (0x38E, "M", "ύ"), + (0x38F, "M", "ώ"), + (0x390, "V"), + (0x391, "M", "α"), + (0x392, "M", "β"), + (0x393, "M", "γ"), + (0x394, "M", "δ"), + (0x395, "M", "ε"), + (0x396, "M", "ζ"), + (0x397, "M", "η"), + (0x398, "M", "θ"), + (0x399, "M", "ι"), + (0x39A, "M", "κ"), + (0x39B, "M", "λ"), + (0x39C, "M", "μ"), + (0x39D, "M", "ν"), + (0x39E, "M", "ξ"), + (0x39F, "M", "ο"), + (0x3A0, "M", "π"), + (0x3A1, "M", "ρ"), + (0x3A2, "X"), + (0x3A3, "M", "σ"), + (0x3A4, "M", "τ"), + (0x3A5, "M", "υ"), + (0x3A6, "M", "φ"), + (0x3A7, "M", "χ"), + (0x3A8, "M", "ψ"), + (0x3A9, "M", "ω"), + (0x3AA, "M", "ϊ"), + (0x3AB, "M", "ϋ"), + (0x3AC, "V"), + (0x3C2, "D", "σ"), + (0x3C3, "V"), + (0x3CF, "M", "ϗ"), + (0x3D0, "M", "β"), + (0x3D1, "M", "θ"), + (0x3D2, "M", "υ"), + (0x3D3, "M", "ύ"), + (0x3D4, "M", "ϋ"), + (0x3D5, "M", "φ"), + (0x3D6, "M", "π"), + (0x3D7, "V"), + (0x3D8, "M", "ϙ"), + (0x3D9, "V"), + (0x3DA, "M", "ϛ"), + (0x3DB, "V"), + (0x3DC, "M", "ϝ"), + (0x3DD, "V"), + (0x3DE, "M", "ϟ"), + (0x3DF, "V"), + (0x3E0, "M", "ϡ"), + (0x3E1, "V"), + (0x3E2, "M", "ϣ"), + (0x3E3, "V"), + (0x3E4, "M", "ϥ"), + (0x3E5, "V"), + (0x3E6, "M", "ϧ"), + (0x3E7, "V"), + (0x3E8, "M", "ϩ"), + (0x3E9, "V"), + (0x3EA, "M", "ϫ"), + (0x3EB, "V"), + (0x3EC, "M", "ϭ"), + (0x3ED, "V"), + (0x3EE, "M", "ϯ"), + (0x3EF, "V"), + (0x3F0, "M", "κ"), + (0x3F1, "M", "ρ"), + (0x3F2, "M", "σ"), + (0x3F3, "V"), + (0x3F4, "M", "θ"), + (0x3F5, "M", "ε"), + (0x3F6, "V"), + (0x3F7, "M", "ϸ"), + (0x3F8, "V"), + (0x3F9, "M", "σ"), + (0x3FA, "M", "ϻ"), + (0x3FB, "V"), + (0x3FD, "M", "ͻ"), + (0x3FE, "M", "ͼ"), + (0x3FF, "M", "ͽ"), + (0x400, "M", "ѐ"), + (0x401, "M", "ё"), + (0x402, "M", "ђ"), + ] + + +def _seg_7() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x403, "M", "ѓ"), + (0x404, "M", "є"), + (0x405, "M", "ѕ"), + (0x406, "M", "і"), + (0x407, "M", "ї"), + (0x408, "M", "ј"), + (0x409, "M", "љ"), + (0x40A, "M", "њ"), + (0x40B, "M", "ћ"), + (0x40C, "M", "ќ"), + (0x40D, "M", "ѝ"), + (0x40E, "M", "ў"), + (0x40F, "M", "џ"), + (0x410, "M", "а"), + (0x411, "M", "б"), + (0x412, "M", "в"), + (0x413, "M", "г"), + (0x414, "M", "д"), + (0x415, "M", "е"), + (0x416, "M", "ж"), + (0x417, "M", "з"), + (0x418, "M", "и"), + (0x419, "M", "й"), + (0x41A, "M", "к"), + (0x41B, "M", "л"), + (0x41C, "M", "м"), + (0x41D, "M", "н"), + (0x41E, "M", "о"), + (0x41F, "M", "п"), + (0x420, "M", "р"), + (0x421, "M", "с"), + (0x422, "M", "т"), + (0x423, "M", "у"), + (0x424, "M", "ф"), + (0x425, "M", "х"), + (0x426, "M", "ц"), + (0x427, "M", "ч"), + (0x428, "M", "ш"), + (0x429, "M", "щ"), + (0x42A, "M", "ъ"), + (0x42B, "M", "ы"), + (0x42C, "M", "ь"), + (0x42D, "M", "э"), + (0x42E, "M", "ю"), + (0x42F, "M", "я"), + (0x430, "V"), + (0x460, "M", "ѡ"), + (0x461, "V"), + (0x462, "M", "ѣ"), + (0x463, "V"), + (0x464, "M", "ѥ"), + (0x465, "V"), + (0x466, "M", "ѧ"), + (0x467, "V"), + (0x468, "M", "ѩ"), + (0x469, "V"), + (0x46A, "M", "ѫ"), + (0x46B, "V"), + (0x46C, "M", "ѭ"), + (0x46D, "V"), + (0x46E, "M", "ѯ"), + (0x46F, "V"), + (0x470, "M", "ѱ"), + (0x471, "V"), + (0x472, "M", "ѳ"), + (0x473, "V"), + (0x474, "M", "ѵ"), + (0x475, "V"), + (0x476, "M", "ѷ"), + (0x477, "V"), + (0x478, "M", "ѹ"), + (0x479, "V"), + (0x47A, "M", "ѻ"), + (0x47B, "V"), + (0x47C, "M", "ѽ"), + (0x47D, "V"), + (0x47E, "M", "ѿ"), + (0x47F, "V"), + (0x480, "M", "ҁ"), + (0x481, "V"), + (0x48A, "M", "ҋ"), + (0x48B, "V"), + (0x48C, "M", "ҍ"), + (0x48D, "V"), + (0x48E, "M", "ҏ"), + (0x48F, "V"), + (0x490, "M", "ґ"), + (0x491, "V"), + (0x492, "M", "ғ"), + (0x493, "V"), + (0x494, "M", "ҕ"), + (0x495, "V"), + (0x496, "M", "җ"), + (0x497, "V"), + (0x498, "M", "ҙ"), + (0x499, "V"), + (0x49A, "M", "қ"), + (0x49B, "V"), + (0x49C, "M", "ҝ"), + (0x49D, "V"), + ] + + +def _seg_8() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x49E, "M", "ҟ"), + (0x49F, "V"), + (0x4A0, "M", "ҡ"), + (0x4A1, "V"), + (0x4A2, "M", "ң"), + (0x4A3, "V"), + (0x4A4, "M", "ҥ"), + (0x4A5, "V"), + (0x4A6, "M", "ҧ"), + (0x4A7, "V"), + (0x4A8, "M", "ҩ"), + (0x4A9, "V"), + (0x4AA, "M", "ҫ"), + (0x4AB, "V"), + (0x4AC, "M", "ҭ"), + (0x4AD, "V"), + (0x4AE, "M", "ү"), + (0x4AF, "V"), + (0x4B0, "M", "ұ"), + (0x4B1, "V"), + (0x4B2, "M", "ҳ"), + (0x4B3, "V"), + (0x4B4, "M", "ҵ"), + (0x4B5, "V"), + (0x4B6, "M", "ҷ"), + (0x4B7, "V"), + (0x4B8, "M", "ҹ"), + (0x4B9, "V"), + (0x4BA, "M", "һ"), + (0x4BB, "V"), + (0x4BC, "M", "ҽ"), + (0x4BD, "V"), + (0x4BE, "M", "ҿ"), + (0x4BF, "V"), + (0x4C0, "X"), + (0x4C1, "M", "ӂ"), + (0x4C2, "V"), + (0x4C3, "M", "ӄ"), + (0x4C4, "V"), + (0x4C5, "M", "ӆ"), + (0x4C6, "V"), + (0x4C7, "M", "ӈ"), + (0x4C8, "V"), + (0x4C9, "M", "ӊ"), + (0x4CA, "V"), + (0x4CB, "M", "ӌ"), + (0x4CC, "V"), + (0x4CD, "M", "ӎ"), + (0x4CE, "V"), + (0x4D0, "M", "ӑ"), + (0x4D1, "V"), + (0x4D2, "M", "ӓ"), + (0x4D3, "V"), + (0x4D4, "M", "ӕ"), + (0x4D5, "V"), + (0x4D6, "M", "ӗ"), + (0x4D7, "V"), + (0x4D8, "M", "ә"), + (0x4D9, "V"), + (0x4DA, "M", "ӛ"), + (0x4DB, "V"), + (0x4DC, "M", "ӝ"), + (0x4DD, "V"), + (0x4DE, "M", "ӟ"), + (0x4DF, "V"), + (0x4E0, "M", "ӡ"), + (0x4E1, "V"), + (0x4E2, "M", "ӣ"), + (0x4E3, "V"), + (0x4E4, "M", "ӥ"), + (0x4E5, "V"), + (0x4E6, "M", "ӧ"), + (0x4E7, "V"), + (0x4E8, "M", "ө"), + (0x4E9, "V"), + (0x4EA, "M", "ӫ"), + (0x4EB, "V"), + (0x4EC, "M", "ӭ"), + (0x4ED, "V"), + (0x4EE, "M", "ӯ"), + (0x4EF, "V"), + (0x4F0, "M", "ӱ"), + (0x4F1, "V"), + (0x4F2, "M", "ӳ"), + (0x4F3, "V"), + (0x4F4, "M", "ӵ"), + (0x4F5, "V"), + (0x4F6, "M", "ӷ"), + (0x4F7, "V"), + (0x4F8, "M", "ӹ"), + (0x4F9, "V"), + (0x4FA, "M", "ӻ"), + (0x4FB, "V"), + (0x4FC, "M", "ӽ"), + (0x4FD, "V"), + (0x4FE, "M", "ӿ"), + (0x4FF, "V"), + (0x500, "M", "ԁ"), + (0x501, "V"), + (0x502, "M", "ԃ"), + ] + + +def _seg_9() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x503, "V"), + (0x504, "M", "ԅ"), + (0x505, "V"), + (0x506, "M", "ԇ"), + (0x507, "V"), + (0x508, "M", "ԉ"), + (0x509, "V"), + (0x50A, "M", "ԋ"), + (0x50B, "V"), + (0x50C, "M", "ԍ"), + (0x50D, "V"), + (0x50E, "M", "ԏ"), + (0x50F, "V"), + (0x510, "M", "ԑ"), + (0x511, "V"), + (0x512, "M", "ԓ"), + (0x513, "V"), + (0x514, "M", "ԕ"), + (0x515, "V"), + (0x516, "M", "ԗ"), + (0x517, "V"), + (0x518, "M", "ԙ"), + (0x519, "V"), + (0x51A, "M", "ԛ"), + (0x51B, "V"), + (0x51C, "M", "ԝ"), + (0x51D, "V"), + (0x51E, "M", "ԟ"), + (0x51F, "V"), + (0x520, "M", "ԡ"), + (0x521, "V"), + (0x522, "M", "ԣ"), + (0x523, "V"), + (0x524, "M", "ԥ"), + (0x525, "V"), + (0x526, "M", "ԧ"), + (0x527, "V"), + (0x528, "M", "ԩ"), + (0x529, "V"), + (0x52A, "M", "ԫ"), + (0x52B, "V"), + (0x52C, "M", "ԭ"), + (0x52D, "V"), + (0x52E, "M", "ԯ"), + (0x52F, "V"), + (0x530, "X"), + (0x531, "M", "ա"), + (0x532, "M", "բ"), + (0x533, "M", "գ"), + (0x534, "M", "դ"), + (0x535, "M", "ե"), + (0x536, "M", "զ"), + (0x537, "M", "է"), + (0x538, "M", "ը"), + (0x539, "M", "թ"), + (0x53A, "M", "ժ"), + (0x53B, "M", "ի"), + (0x53C, "M", "լ"), + (0x53D, "M", "խ"), + (0x53E, "M", "ծ"), + (0x53F, "M", "կ"), + (0x540, "M", "հ"), + (0x541, "M", "ձ"), + (0x542, "M", "ղ"), + (0x543, "M", "ճ"), + (0x544, "M", "մ"), + (0x545, "M", "յ"), + (0x546, "M", "ն"), + (0x547, "M", "շ"), + (0x548, "M", "ո"), + (0x549, "M", "չ"), + (0x54A, "M", "պ"), + (0x54B, "M", "ջ"), + (0x54C, "M", "ռ"), + (0x54D, "M", "ս"), + (0x54E, "M", "վ"), + (0x54F, "M", "տ"), + (0x550, "M", "ր"), + (0x551, "M", "ց"), + (0x552, "M", "ւ"), + (0x553, "M", "փ"), + (0x554, "M", "ք"), + (0x555, "M", "օ"), + (0x556, "M", "ֆ"), + (0x557, "X"), + (0x559, "V"), + (0x587, "M", "եւ"), + (0x588, "V"), + (0x58B, "X"), + (0x58D, "V"), + (0x590, "X"), + (0x591, "V"), + (0x5C8, "X"), + (0x5D0, "V"), + (0x5EB, "X"), + (0x5EF, "V"), + (0x5F5, "X"), + (0x606, "V"), + (0x61C, "X"), + (0x61D, "V"), + ] + + +def _seg_10() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x675, "M", "اٴ"), + (0x676, "M", "وٴ"), + (0x677, "M", "ۇٴ"), + (0x678, "M", "يٴ"), + (0x679, "V"), + (0x6DD, "X"), + (0x6DE, "V"), + (0x70E, "X"), + (0x710, "V"), + (0x74B, "X"), + (0x74D, "V"), + (0x7B2, "X"), + (0x7C0, "V"), + (0x7FB, "X"), + (0x7FD, "V"), + (0x82E, "X"), + (0x830, "V"), + (0x83F, "X"), + (0x840, "V"), + (0x85C, "X"), + (0x85E, "V"), + (0x85F, "X"), + (0x860, "V"), + (0x86B, "X"), + (0x870, "V"), + (0x88F, "X"), + (0x898, "V"), + (0x8E2, "X"), + (0x8E3, "V"), + (0x958, "M", "क़"), + (0x959, "M", "ख़"), + (0x95A, "M", "ग़"), + (0x95B, "M", "ज़"), + (0x95C, "M", "ड़"), + (0x95D, "M", "ढ़"), + (0x95E, "M", "फ़"), + (0x95F, "M", "य़"), + (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", "ড়"), + (0x9DD, "M", "ঢ়"), + (0x9DE, "X"), + (0x9DF, "M", "য়"), + (0x9E0, "V"), + (0x9E4, "X"), + (0x9E6, "V"), + (0x9FF, "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", "ਲ਼"), + (0xA34, "X"), + (0xA35, "V"), + (0xA36, "M", "ਸ਼"), + (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", "ਖ਼"), + (0xA5A, "M", "ਗ਼"), + (0xA5B, "M", "ਜ਼"), + (0xA5C, "V"), + (0xA5D, "X"), + ] + + +def _seg_11() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA5E, "M", "ਫ਼"), + (0xA5F, "X"), + (0xA66, "V"), + (0xA77, "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"), + (0xB55, "V"), + (0xB58, "X"), + (0xB5C, "M", "ଡ଼"), + (0xB5D, "M", "ଢ଼"), + (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"), + (0xC0D, "X"), + (0xC0E, "V"), + (0xC11, "X"), + (0xC12, "V"), + (0xC29, "X"), + (0xC2A, "V"), + ] + + +def _seg_12() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xC3A, "X"), + (0xC3C, "V"), + (0xC45, "X"), + (0xC46, "V"), + (0xC49, "X"), + (0xC4A, "V"), + (0xC4E, "X"), + (0xC55, "V"), + (0xC57, "X"), + (0xC58, "V"), + (0xC5B, "X"), + (0xC5D, "V"), + (0xC5E, "X"), + (0xC60, "V"), + (0xC64, "X"), + (0xC66, "V"), + (0xC70, "X"), + (0xC77, "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"), + (0xCDD, "V"), + (0xCDF, "X"), + (0xCE0, "V"), + (0xCE4, "X"), + (0xCE6, "V"), + (0xCF0, "X"), + (0xCF1, "V"), + (0xCF4, "X"), + (0xD00, "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"), + (0xD81, "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", "ํา"), + (0xE34, "V"), + (0xE3B, "X"), + (0xE3F, "V"), + (0xE5C, "X"), + (0xE81, "V"), + (0xE83, "X"), + (0xE84, "V"), + (0xE85, "X"), + (0xE86, "V"), + (0xE8B, "X"), + (0xE8C, "V"), + (0xEA4, "X"), + (0xEA5, "V"), + (0xEA6, "X"), + (0xEA7, "V"), + (0xEB3, "M", "ໍາ"), + (0xEB4, "V"), + ] + + +def _seg_13() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xEBE, "X"), + (0xEC0, "V"), + (0xEC5, "X"), + (0xEC6, "V"), + (0xEC7, "X"), + (0xEC8, "V"), + (0xECF, "X"), + (0xED0, "V"), + (0xEDA, "X"), + (0xEDC, "M", "ຫນ"), + (0xEDD, "M", "ຫມ"), + (0xEDE, "V"), + (0xEE0, "X"), + (0xF00, "V"), + (0xF0C, "M", "་"), + (0xF0D, "V"), + (0xF43, "M", "གྷ"), + (0xF44, "V"), + (0xF48, "X"), + (0xF49, "V"), + (0xF4D, "M", "ཌྷ"), + (0xF4E, "V"), + (0xF52, "M", "དྷ"), + (0xF53, "V"), + (0xF57, "M", "བྷ"), + (0xF58, "V"), + (0xF5C, "M", "ཛྷ"), + (0xF5D, "V"), + (0xF69, "M", "ཀྵ"), + (0xF6A, "V"), + (0xF6D, "X"), + (0xF71, "V"), + (0xF73, "M", "ཱི"), + (0xF74, "V"), + (0xF75, "M", "ཱུ"), + (0xF76, "M", "ྲྀ"), + (0xF77, "M", "ྲཱྀ"), + (0xF78, "M", "ླྀ"), + (0xF79, "M", "ླཱྀ"), + (0xF7A, "V"), + (0xF81, "M", "ཱྀ"), + (0xF82, "V"), + (0xF93, "M", "ྒྷ"), + (0xF94, "V"), + (0xF98, "X"), + (0xF99, "V"), + (0xF9D, "M", "ྜྷ"), + (0xF9E, "V"), + (0xFA2, "M", "ྡྷ"), + (0xFA3, "V"), + (0xFA7, "M", "ྦྷ"), + (0xFA8, "V"), + (0xFAC, "M", "ྫྷ"), + (0xFAD, "V"), + (0xFB9, "M", "ྐྵ"), + (0xFBA, "V"), + (0xFBD, "X"), + (0xFBE, "V"), + (0xFCD, "X"), + (0xFCE, "V"), + (0xFDB, "X"), + (0x1000, "V"), + (0x10A0, "X"), + (0x10C7, "M", "ⴧ"), + (0x10C8, "X"), + (0x10CD, "M", "ⴭ"), + (0x10CE, "X"), + (0x10D0, "V"), + (0x10FC, "M", "ნ"), + (0x10FD, "V"), + (0x115F, "X"), + (0x1161, "V"), + (0x1249, "X"), + (0x124A, "V"), + (0x124E, "X"), + (0x1250, "V"), + (0x1257, "X"), + (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"), + ] + + +def _seg_14() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1316, "X"), + (0x1318, "V"), + (0x135B, "X"), + (0x135D, "V"), + (0x137D, "X"), + (0x1380, "V"), + (0x139A, "X"), + (0x13A0, "V"), + (0x13F6, "X"), + (0x13F8, "M", "Ᏸ"), + (0x13F9, "M", "Ᏹ"), + (0x13FA, "M", "Ᏺ"), + (0x13FB, "M", "Ᏻ"), + (0x13FC, "M", "Ᏼ"), + (0x13FD, "M", "Ᏽ"), + (0x13FE, "X"), + (0x1400, "V"), + (0x1680, "X"), + (0x1681, "V"), + (0x169D, "X"), + (0x16A0, "V"), + (0x16F9, "X"), + (0x1700, "V"), + (0x1716, "X"), + (0x171F, "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"), + (0x180F, "I"), + (0x1810, "V"), + (0x181A, "X"), + (0x1820, "V"), + (0x1879, "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"), + (0x1A1E, "V"), + (0x1A5F, "X"), + (0x1A60, "V"), + (0x1A7D, "X"), + (0x1A7F, "V"), + (0x1A8A, "X"), + (0x1A90, "V"), + (0x1A9A, "X"), + (0x1AA0, "V"), + (0x1AAE, "X"), + (0x1AB0, "V"), + (0x1ACF, "X"), + (0x1B00, "V"), + (0x1B4D, "X"), + (0x1B50, "V"), + (0x1B7F, "X"), + (0x1B80, "V"), + (0x1BF4, "X"), + (0x1BFC, "V"), + (0x1C38, "X"), + (0x1C3B, "V"), + (0x1C4A, "X"), + (0x1C4D, "V"), + (0x1C80, "M", "в"), + ] + + +def _seg_15() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1C81, "M", "д"), + (0x1C82, "M", "о"), + (0x1C83, "M", "с"), + (0x1C84, "M", "т"), + (0x1C86, "M", "ъ"), + (0x1C87, "M", "ѣ"), + (0x1C88, "M", "ꙋ"), + (0x1C89, "X"), + (0x1C90, "M", "ა"), + (0x1C91, "M", "ბ"), + (0x1C92, "M", "გ"), + (0x1C93, "M", "დ"), + (0x1C94, "M", "ე"), + (0x1C95, "M", "ვ"), + (0x1C96, "M", "ზ"), + (0x1C97, "M", "თ"), + (0x1C98, "M", "ი"), + (0x1C99, "M", "კ"), + (0x1C9A, "M", "ლ"), + (0x1C9B, "M", "მ"), + (0x1C9C, "M", "ნ"), + (0x1C9D, "M", "ო"), + (0x1C9E, "M", "პ"), + (0x1C9F, "M", "ჟ"), + (0x1CA0, "M", "რ"), + (0x1CA1, "M", "ს"), + (0x1CA2, "M", "ტ"), + (0x1CA3, "M", "უ"), + (0x1CA4, "M", "ფ"), + (0x1CA5, "M", "ქ"), + (0x1CA6, "M", "ღ"), + (0x1CA7, "M", "ყ"), + (0x1CA8, "M", "შ"), + (0x1CA9, "M", "ჩ"), + (0x1CAA, "M", "ც"), + (0x1CAB, "M", "ძ"), + (0x1CAC, "M", "წ"), + (0x1CAD, "M", "ჭ"), + (0x1CAE, "M", "ხ"), + (0x1CAF, "M", "ჯ"), + (0x1CB0, "M", "ჰ"), + (0x1CB1, "M", "ჱ"), + (0x1CB2, "M", "ჲ"), + (0x1CB3, "M", "ჳ"), + (0x1CB4, "M", "ჴ"), + (0x1CB5, "M", "ჵ"), + (0x1CB6, "M", "ჶ"), + (0x1CB7, "M", "ჷ"), + (0x1CB8, "M", "ჸ"), + (0x1CB9, "M", "ჹ"), + (0x1CBA, "M", "ჺ"), + (0x1CBB, "X"), + (0x1CBD, "M", "ჽ"), + (0x1CBE, "M", "ჾ"), + (0x1CBF, "M", "ჿ"), + (0x1CC0, "V"), + (0x1CC8, "X"), + (0x1CD0, "V"), + (0x1CFB, "X"), + (0x1D00, "V"), + (0x1D2C, "M", "a"), + (0x1D2D, "M", "æ"), + (0x1D2E, "M", "b"), + (0x1D2F, "V"), + (0x1D30, "M", "d"), + (0x1D31, "M", "e"), + (0x1D32, "M", "ǝ"), + (0x1D33, "M", "g"), + (0x1D34, "M", "h"), + (0x1D35, "M", "i"), + (0x1D36, "M", "j"), + (0x1D37, "M", "k"), + (0x1D38, "M", "l"), + (0x1D39, "M", "m"), + (0x1D3A, "M", "n"), + (0x1D3B, "V"), + (0x1D3C, "M", "o"), + (0x1D3D, "M", "ȣ"), + (0x1D3E, "M", "p"), + (0x1D3F, "M", "r"), + (0x1D40, "M", "t"), + (0x1D41, "M", "u"), + (0x1D42, "M", "w"), + (0x1D43, "M", "a"), + (0x1D44, "M", "ɐ"), + (0x1D45, "M", "ɑ"), + (0x1D46, "M", "ᴂ"), + (0x1D47, "M", "b"), + (0x1D48, "M", "d"), + (0x1D49, "M", "e"), + (0x1D4A, "M", "ə"), + (0x1D4B, "M", "ɛ"), + (0x1D4C, "M", "ɜ"), + (0x1D4D, "M", "g"), + (0x1D4E, "V"), + (0x1D4F, "M", "k"), + (0x1D50, "M", "m"), + (0x1D51, "M", "ŋ"), + (0x1D52, "M", "o"), + (0x1D53, "M", "ɔ"), + ] + + +def _seg_16() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D54, "M", "ᴖ"), + (0x1D55, "M", "ᴗ"), + (0x1D56, "M", "p"), + (0x1D57, "M", "t"), + (0x1D58, "M", "u"), + (0x1D59, "M", "ᴝ"), + (0x1D5A, "M", "ɯ"), + (0x1D5B, "M", "v"), + (0x1D5C, "M", "ᴥ"), + (0x1D5D, "M", "β"), + (0x1D5E, "M", "γ"), + (0x1D5F, "M", "δ"), + (0x1D60, "M", "φ"), + (0x1D61, "M", "χ"), + (0x1D62, "M", "i"), + (0x1D63, "M", "r"), + (0x1D64, "M", "u"), + (0x1D65, "M", "v"), + (0x1D66, "M", "β"), + (0x1D67, "M", "γ"), + (0x1D68, "M", "ρ"), + (0x1D69, "M", "φ"), + (0x1D6A, "M", "χ"), + (0x1D6B, "V"), + (0x1D78, "M", "н"), + (0x1D79, "V"), + (0x1D9B, "M", "ɒ"), + (0x1D9C, "M", "c"), + (0x1D9D, "M", "ɕ"), + (0x1D9E, "M", "ð"), + (0x1D9F, "M", "ɜ"), + (0x1DA0, "M", "f"), + (0x1DA1, "M", "ɟ"), + (0x1DA2, "M", "ɡ"), + (0x1DA3, "M", "ɥ"), + (0x1DA4, "M", "ɨ"), + (0x1DA5, "M", "ɩ"), + (0x1DA6, "M", "ɪ"), + (0x1DA7, "M", "ᵻ"), + (0x1DA8, "M", "ʝ"), + (0x1DA9, "M", "ɭ"), + (0x1DAA, "M", "ᶅ"), + (0x1DAB, "M", "ʟ"), + (0x1DAC, "M", "ɱ"), + (0x1DAD, "M", "ɰ"), + (0x1DAE, "M", "ɲ"), + (0x1DAF, "M", "ɳ"), + (0x1DB0, "M", "ɴ"), + (0x1DB1, "M", "ɵ"), + (0x1DB2, "M", "ɸ"), + (0x1DB3, "M", "ʂ"), + (0x1DB4, "M", "ʃ"), + (0x1DB5, "M", "ƫ"), + (0x1DB6, "M", "ʉ"), + (0x1DB7, "M", "ʊ"), + (0x1DB8, "M", "ᴜ"), + (0x1DB9, "M", "ʋ"), + (0x1DBA, "M", "ʌ"), + (0x1DBB, "M", "z"), + (0x1DBC, "M", "ʐ"), + (0x1DBD, "M", "ʑ"), + (0x1DBE, "M", "ʒ"), + (0x1DBF, "M", "θ"), + (0x1DC0, "V"), + (0x1E00, "M", "ḁ"), + (0x1E01, "V"), + (0x1E02, "M", "ḃ"), + (0x1E03, "V"), + (0x1E04, "M", "ḅ"), + (0x1E05, "V"), + (0x1E06, "M", "ḇ"), + (0x1E07, "V"), + (0x1E08, "M", "ḉ"), + (0x1E09, "V"), + (0x1E0A, "M", "ḋ"), + (0x1E0B, "V"), + (0x1E0C, "M", "ḍ"), + (0x1E0D, "V"), + (0x1E0E, "M", "ḏ"), + (0x1E0F, "V"), + (0x1E10, "M", "ḑ"), + (0x1E11, "V"), + (0x1E12, "M", "ḓ"), + (0x1E13, "V"), + (0x1E14, "M", "ḕ"), + (0x1E15, "V"), + (0x1E16, "M", "ḗ"), + (0x1E17, "V"), + (0x1E18, "M", "ḙ"), + (0x1E19, "V"), + (0x1E1A, "M", "ḛ"), + (0x1E1B, "V"), + (0x1E1C, "M", "ḝ"), + (0x1E1D, "V"), + (0x1E1E, "M", "ḟ"), + (0x1E1F, "V"), + (0x1E20, "M", "ḡ"), + (0x1E21, "V"), + (0x1E22, "M", "ḣ"), + (0x1E23, "V"), + ] + + +def _seg_17() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E24, "M", "ḥ"), + (0x1E25, "V"), + (0x1E26, "M", "ḧ"), + (0x1E27, "V"), + (0x1E28, "M", "ḩ"), + (0x1E29, "V"), + (0x1E2A, "M", "ḫ"), + (0x1E2B, "V"), + (0x1E2C, "M", "ḭ"), + (0x1E2D, "V"), + (0x1E2E, "M", "ḯ"), + (0x1E2F, "V"), + (0x1E30, "M", "ḱ"), + (0x1E31, "V"), + (0x1E32, "M", "ḳ"), + (0x1E33, "V"), + (0x1E34, "M", "ḵ"), + (0x1E35, "V"), + (0x1E36, "M", "ḷ"), + (0x1E37, "V"), + (0x1E38, "M", "ḹ"), + (0x1E39, "V"), + (0x1E3A, "M", "ḻ"), + (0x1E3B, "V"), + (0x1E3C, "M", "ḽ"), + (0x1E3D, "V"), + (0x1E3E, "M", "ḿ"), + (0x1E3F, "V"), + (0x1E40, "M", "ṁ"), + (0x1E41, "V"), + (0x1E42, "M", "ṃ"), + (0x1E43, "V"), + (0x1E44, "M", "ṅ"), + (0x1E45, "V"), + (0x1E46, "M", "ṇ"), + (0x1E47, "V"), + (0x1E48, "M", "ṉ"), + (0x1E49, "V"), + (0x1E4A, "M", "ṋ"), + (0x1E4B, "V"), + (0x1E4C, "M", "ṍ"), + (0x1E4D, "V"), + (0x1E4E, "M", "ṏ"), + (0x1E4F, "V"), + (0x1E50, "M", "ṑ"), + (0x1E51, "V"), + (0x1E52, "M", "ṓ"), + (0x1E53, "V"), + (0x1E54, "M", "ṕ"), + (0x1E55, "V"), + (0x1E56, "M", "ṗ"), + (0x1E57, "V"), + (0x1E58, "M", "ṙ"), + (0x1E59, "V"), + (0x1E5A, "M", "ṛ"), + (0x1E5B, "V"), + (0x1E5C, "M", "ṝ"), + (0x1E5D, "V"), + (0x1E5E, "M", "ṟ"), + (0x1E5F, "V"), + (0x1E60, "M", "ṡ"), + (0x1E61, "V"), + (0x1E62, "M", "ṣ"), + (0x1E63, "V"), + (0x1E64, "M", "ṥ"), + (0x1E65, "V"), + (0x1E66, "M", "ṧ"), + (0x1E67, "V"), + (0x1E68, "M", "ṩ"), + (0x1E69, "V"), + (0x1E6A, "M", "ṫ"), + (0x1E6B, "V"), + (0x1E6C, "M", "ṭ"), + (0x1E6D, "V"), + (0x1E6E, "M", "ṯ"), + (0x1E6F, "V"), + (0x1E70, "M", "ṱ"), + (0x1E71, "V"), + (0x1E72, "M", "ṳ"), + (0x1E73, "V"), + (0x1E74, "M", "ṵ"), + (0x1E75, "V"), + (0x1E76, "M", "ṷ"), + (0x1E77, "V"), + (0x1E78, "M", "ṹ"), + (0x1E79, "V"), + (0x1E7A, "M", "ṻ"), + (0x1E7B, "V"), + (0x1E7C, "M", "ṽ"), + (0x1E7D, "V"), + (0x1E7E, "M", "ṿ"), + (0x1E7F, "V"), + (0x1E80, "M", "ẁ"), + (0x1E81, "V"), + (0x1E82, "M", "ẃ"), + (0x1E83, "V"), + (0x1E84, "M", "ẅ"), + (0x1E85, "V"), + (0x1E86, "M", "ẇ"), + (0x1E87, "V"), + ] + + +def _seg_18() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E88, "M", "ẉ"), + (0x1E89, "V"), + (0x1E8A, "M", "ẋ"), + (0x1E8B, "V"), + (0x1E8C, "M", "ẍ"), + (0x1E8D, "V"), + (0x1E8E, "M", "ẏ"), + (0x1E8F, "V"), + (0x1E90, "M", "ẑ"), + (0x1E91, "V"), + (0x1E92, "M", "ẓ"), + (0x1E93, "V"), + (0x1E94, "M", "ẕ"), + (0x1E95, "V"), + (0x1E9A, "M", "aʾ"), + (0x1E9B, "M", "ṡ"), + (0x1E9C, "V"), + (0x1E9E, "M", "ß"), + (0x1E9F, "V"), + (0x1EA0, "M", "ạ"), + (0x1EA1, "V"), + (0x1EA2, "M", "ả"), + (0x1EA3, "V"), + (0x1EA4, "M", "ấ"), + (0x1EA5, "V"), + (0x1EA6, "M", "ầ"), + (0x1EA7, "V"), + (0x1EA8, "M", "ẩ"), + (0x1EA9, "V"), + (0x1EAA, "M", "ẫ"), + (0x1EAB, "V"), + (0x1EAC, "M", "ậ"), + (0x1EAD, "V"), + (0x1EAE, "M", "ắ"), + (0x1EAF, "V"), + (0x1EB0, "M", "ằ"), + (0x1EB1, "V"), + (0x1EB2, "M", "ẳ"), + (0x1EB3, "V"), + (0x1EB4, "M", "ẵ"), + (0x1EB5, "V"), + (0x1EB6, "M", "ặ"), + (0x1EB7, "V"), + (0x1EB8, "M", "ẹ"), + (0x1EB9, "V"), + (0x1EBA, "M", "ẻ"), + (0x1EBB, "V"), + (0x1EBC, "M", "ẽ"), + (0x1EBD, "V"), + (0x1EBE, "M", "ế"), + (0x1EBF, "V"), + (0x1EC0, "M", "ề"), + (0x1EC1, "V"), + (0x1EC2, "M", "ể"), + (0x1EC3, "V"), + (0x1EC4, "M", "ễ"), + (0x1EC5, "V"), + (0x1EC6, "M", "ệ"), + (0x1EC7, "V"), + (0x1EC8, "M", "ỉ"), + (0x1EC9, "V"), + (0x1ECA, "M", "ị"), + (0x1ECB, "V"), + (0x1ECC, "M", "ọ"), + (0x1ECD, "V"), + (0x1ECE, "M", "ỏ"), + (0x1ECF, "V"), + (0x1ED0, "M", "ố"), + (0x1ED1, "V"), + (0x1ED2, "M", "ồ"), + (0x1ED3, "V"), + (0x1ED4, "M", "ổ"), + (0x1ED5, "V"), + (0x1ED6, "M", "ỗ"), + (0x1ED7, "V"), + (0x1ED8, "M", "ộ"), + (0x1ED9, "V"), + (0x1EDA, "M", "ớ"), + (0x1EDB, "V"), + (0x1EDC, "M", "ờ"), + (0x1EDD, "V"), + (0x1EDE, "M", "ở"), + (0x1EDF, "V"), + (0x1EE0, "M", "ỡ"), + (0x1EE1, "V"), + (0x1EE2, "M", "ợ"), + (0x1EE3, "V"), + (0x1EE4, "M", "ụ"), + (0x1EE5, "V"), + (0x1EE6, "M", "ủ"), + (0x1EE7, "V"), + (0x1EE8, "M", "ứ"), + (0x1EE9, "V"), + (0x1EEA, "M", "ừ"), + (0x1EEB, "V"), + (0x1EEC, "M", "ử"), + (0x1EED, "V"), + (0x1EEE, "M", "ữ"), + (0x1EEF, "V"), + (0x1EF0, "M", "ự"), + ] + + +def _seg_19() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1EF1, "V"), + (0x1EF2, "M", "ỳ"), + (0x1EF3, "V"), + (0x1EF4, "M", "ỵ"), + (0x1EF5, "V"), + (0x1EF6, "M", "ỷ"), + (0x1EF7, "V"), + (0x1EF8, "M", "ỹ"), + (0x1EF9, "V"), + (0x1EFA, "M", "ỻ"), + (0x1EFB, "V"), + (0x1EFC, "M", "ỽ"), + (0x1EFD, "V"), + (0x1EFE, "M", "ỿ"), + (0x1EFF, "V"), + (0x1F08, "M", "ἀ"), + (0x1F09, "M", "ἁ"), + (0x1F0A, "M", "ἂ"), + (0x1F0B, "M", "ἃ"), + (0x1F0C, "M", "ἄ"), + (0x1F0D, "M", "ἅ"), + (0x1F0E, "M", "ἆ"), + (0x1F0F, "M", "ἇ"), + (0x1F10, "V"), + (0x1F16, "X"), + (0x1F18, "M", "ἐ"), + (0x1F19, "M", "ἑ"), + (0x1F1A, "M", "ἒ"), + (0x1F1B, "M", "ἓ"), + (0x1F1C, "M", "ἔ"), + (0x1F1D, "M", "ἕ"), + (0x1F1E, "X"), + (0x1F20, "V"), + (0x1F28, "M", "ἠ"), + (0x1F29, "M", "ἡ"), + (0x1F2A, "M", "ἢ"), + (0x1F2B, "M", "ἣ"), + (0x1F2C, "M", "ἤ"), + (0x1F2D, "M", "ἥ"), + (0x1F2E, "M", "ἦ"), + (0x1F2F, "M", "ἧ"), + (0x1F30, "V"), + (0x1F38, "M", "ἰ"), + (0x1F39, "M", "ἱ"), + (0x1F3A, "M", "ἲ"), + (0x1F3B, "M", "ἳ"), + (0x1F3C, "M", "ἴ"), + (0x1F3D, "M", "ἵ"), + (0x1F3E, "M", "ἶ"), + (0x1F3F, "M", "ἷ"), + (0x1F40, "V"), + (0x1F46, "X"), + (0x1F48, "M", "ὀ"), + (0x1F49, "M", "ὁ"), + (0x1F4A, "M", "ὂ"), + (0x1F4B, "M", "ὃ"), + (0x1F4C, "M", "ὄ"), + (0x1F4D, "M", "ὅ"), + (0x1F4E, "X"), + (0x1F50, "V"), + (0x1F58, "X"), + (0x1F59, "M", "ὑ"), + (0x1F5A, "X"), + (0x1F5B, "M", "ὓ"), + (0x1F5C, "X"), + (0x1F5D, "M", "ὕ"), + (0x1F5E, "X"), + (0x1F5F, "M", "ὗ"), + (0x1F60, "V"), + (0x1F68, "M", "ὠ"), + (0x1F69, "M", "ὡ"), + (0x1F6A, "M", "ὢ"), + (0x1F6B, "M", "ὣ"), + (0x1F6C, "M", "ὤ"), + (0x1F6D, "M", "ὥ"), + (0x1F6E, "M", "ὦ"), + (0x1F6F, "M", "ὧ"), + (0x1F70, "V"), + (0x1F71, "M", "ά"), + (0x1F72, "V"), + (0x1F73, "M", "έ"), + (0x1F74, "V"), + (0x1F75, "M", "ή"), + (0x1F76, "V"), + (0x1F77, "M", "ί"), + (0x1F78, "V"), + (0x1F79, "M", "ό"), + (0x1F7A, "V"), + (0x1F7B, "M", "ύ"), + (0x1F7C, "V"), + (0x1F7D, "M", "ώ"), + (0x1F7E, "X"), + (0x1F80, "M", "ἀι"), + (0x1F81, "M", "ἁι"), + (0x1F82, "M", "ἂι"), + (0x1F83, "M", "ἃι"), + (0x1F84, "M", "ἄι"), + (0x1F85, "M", "ἅι"), + (0x1F86, "M", "ἆι"), + (0x1F87, "M", "ἇι"), + ] + + +def _seg_20() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1F88, "M", "ἀι"), + (0x1F89, "M", "ἁι"), + (0x1F8A, "M", "ἂι"), + (0x1F8B, "M", "ἃι"), + (0x1F8C, "M", "ἄι"), + (0x1F8D, "M", "ἅι"), + (0x1F8E, "M", "ἆι"), + (0x1F8F, "M", "ἇι"), + (0x1F90, "M", "ἠι"), + (0x1F91, "M", "ἡι"), + (0x1F92, "M", "ἢι"), + (0x1F93, "M", "ἣι"), + (0x1F94, "M", "ἤι"), + (0x1F95, "M", "ἥι"), + (0x1F96, "M", "ἦι"), + (0x1F97, "M", "ἧι"), + (0x1F98, "M", "ἠι"), + (0x1F99, "M", "ἡι"), + (0x1F9A, "M", "ἢι"), + (0x1F9B, "M", "ἣι"), + (0x1F9C, "M", "ἤι"), + (0x1F9D, "M", "ἥι"), + (0x1F9E, "M", "ἦι"), + (0x1F9F, "M", "ἧι"), + (0x1FA0, "M", "ὠι"), + (0x1FA1, "M", "ὡι"), + (0x1FA2, "M", "ὢι"), + (0x1FA3, "M", "ὣι"), + (0x1FA4, "M", "ὤι"), + (0x1FA5, "M", "ὥι"), + (0x1FA6, "M", "ὦι"), + (0x1FA7, "M", "ὧι"), + (0x1FA8, "M", "ὠι"), + (0x1FA9, "M", "ὡι"), + (0x1FAA, "M", "ὢι"), + (0x1FAB, "M", "ὣι"), + (0x1FAC, "M", "ὤι"), + (0x1FAD, "M", "ὥι"), + (0x1FAE, "M", "ὦι"), + (0x1FAF, "M", "ὧι"), + (0x1FB0, "V"), + (0x1FB2, "M", "ὰι"), + (0x1FB3, "M", "αι"), + (0x1FB4, "M", "άι"), + (0x1FB5, "X"), + (0x1FB6, "V"), + (0x1FB7, "M", "ᾶι"), + (0x1FB8, "M", "ᾰ"), + (0x1FB9, "M", "ᾱ"), + (0x1FBA, "M", "ὰ"), + (0x1FBB, "M", "ά"), + (0x1FBC, "M", "αι"), + (0x1FBD, "3", " ̓"), + (0x1FBE, "M", "ι"), + (0x1FBF, "3", " ̓"), + (0x1FC0, "3", " ͂"), + (0x1FC1, "3", " ̈͂"), + (0x1FC2, "M", "ὴι"), + (0x1FC3, "M", "ηι"), + (0x1FC4, "M", "ήι"), + (0x1FC5, "X"), + (0x1FC6, "V"), + (0x1FC7, "M", "ῆι"), + (0x1FC8, "M", "ὲ"), + (0x1FC9, "M", "έ"), + (0x1FCA, "M", "ὴ"), + (0x1FCB, "M", "ή"), + (0x1FCC, "M", "ηι"), + (0x1FCD, "3", " ̓̀"), + (0x1FCE, "3", " ̓́"), + (0x1FCF, "3", " ̓͂"), + (0x1FD0, "V"), + (0x1FD3, "M", "ΐ"), + (0x1FD4, "X"), + (0x1FD6, "V"), + (0x1FD8, "M", "ῐ"), + (0x1FD9, "M", "ῑ"), + (0x1FDA, "M", "ὶ"), + (0x1FDB, "M", "ί"), + (0x1FDC, "X"), + (0x1FDD, "3", " ̔̀"), + (0x1FDE, "3", " ̔́"), + (0x1FDF, "3", " ̔͂"), + (0x1FE0, "V"), + (0x1FE3, "M", "ΰ"), + (0x1FE4, "V"), + (0x1FE8, "M", "ῠ"), + (0x1FE9, "M", "ῡ"), + (0x1FEA, "M", "ὺ"), + (0x1FEB, "M", "ύ"), + (0x1FEC, "M", "ῥ"), + (0x1FED, "3", " ̈̀"), + (0x1FEE, "3", " ̈́"), + (0x1FEF, "3", "`"), + (0x1FF0, "X"), + (0x1FF2, "M", "ὼι"), + (0x1FF3, "M", "ωι"), + (0x1FF4, "M", "ώι"), + (0x1FF5, "X"), + (0x1FF6, "V"), + ] + + +def _seg_21() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1FF7, "M", "ῶι"), + (0x1FF8, "M", "ὸ"), + (0x1FF9, "M", "ό"), + (0x1FFA, "M", "ὼ"), + (0x1FFB, "M", "ώ"), + (0x1FFC, "M", "ωι"), + (0x1FFD, "3", " ́"), + (0x1FFE, "3", " ̔"), + (0x1FFF, "X"), + (0x2000, "3", " "), + (0x200B, "I"), + (0x200C, "D", ""), + (0x200E, "X"), + (0x2010, "V"), + (0x2011, "M", "‐"), + (0x2012, "V"), + (0x2017, "3", " ̳"), + (0x2018, "V"), + (0x2024, "X"), + (0x2027, "V"), + (0x2028, "X"), + (0x202F, "3", " "), + (0x2030, "V"), + (0x2033, "M", "′′"), + (0x2034, "M", "′′′"), + (0x2035, "V"), + (0x2036, "M", "‵‵"), + (0x2037, "M", "‵‵‵"), + (0x2038, "V"), + (0x203C, "3", "!!"), + (0x203D, "V"), + (0x203E, "3", " ̅"), + (0x203F, "V"), + (0x2047, "3", "??"), + (0x2048, "3", "?!"), + (0x2049, "3", "!?"), + (0x204A, "V"), + (0x2057, "M", "′′′′"), + (0x2058, "V"), + (0x205F, "3", " "), + (0x2060, "I"), + (0x2061, "X"), + (0x2064, "I"), + (0x2065, "X"), + (0x2070, "M", "0"), + (0x2071, "M", "i"), + (0x2072, "X"), + (0x2074, "M", "4"), + (0x2075, "M", "5"), + (0x2076, "M", "6"), + (0x2077, "M", "7"), + (0x2078, "M", "8"), + (0x2079, "M", "9"), + (0x207A, "3", "+"), + (0x207B, "M", "−"), + (0x207C, "3", "="), + (0x207D, "3", "("), + (0x207E, "3", ")"), + (0x207F, "M", "n"), + (0x2080, "M", "0"), + (0x2081, "M", "1"), + (0x2082, "M", "2"), + (0x2083, "M", "3"), + (0x2084, "M", "4"), + (0x2085, "M", "5"), + (0x2086, "M", "6"), + (0x2087, "M", "7"), + (0x2088, "M", "8"), + (0x2089, "M", "9"), + (0x208A, "3", "+"), + (0x208B, "M", "−"), + (0x208C, "3", "="), + (0x208D, "3", "("), + (0x208E, "3", ")"), + (0x208F, "X"), + (0x2090, "M", "a"), + (0x2091, "M", "e"), + (0x2092, "M", "o"), + (0x2093, "M", "x"), + (0x2094, "M", "ə"), + (0x2095, "M", "h"), + (0x2096, "M", "k"), + (0x2097, "M", "l"), + (0x2098, "M", "m"), + (0x2099, "M", "n"), + (0x209A, "M", "p"), + (0x209B, "M", "s"), + (0x209C, "M", "t"), + (0x209D, "X"), + (0x20A0, "V"), + (0x20A8, "M", "rs"), + (0x20A9, "V"), + (0x20C1, "X"), + (0x20D0, "V"), + (0x20F1, "X"), + (0x2100, "3", "a/c"), + (0x2101, "3", "a/s"), + (0x2102, "M", "c"), + (0x2103, "M", "°c"), + (0x2104, "V"), + ] + + +def _seg_22() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2105, "3", "c/o"), + (0x2106, "3", "c/u"), + (0x2107, "M", "ɛ"), + (0x2108, "V"), + (0x2109, "M", "°f"), + (0x210A, "M", "g"), + (0x210B, "M", "h"), + (0x210F, "M", "ħ"), + (0x2110, "M", "i"), + (0x2112, "M", "l"), + (0x2114, "V"), + (0x2115, "M", "n"), + (0x2116, "M", "no"), + (0x2117, "V"), + (0x2119, "M", "p"), + (0x211A, "M", "q"), + (0x211B, "M", "r"), + (0x211E, "V"), + (0x2120, "M", "sm"), + (0x2121, "M", "tel"), + (0x2122, "M", "tm"), + (0x2123, "V"), + (0x2124, "M", "z"), + (0x2125, "V"), + (0x2126, "M", "ω"), + (0x2127, "V"), + (0x2128, "M", "z"), + (0x2129, "V"), + (0x212A, "M", "k"), + (0x212B, "M", "å"), + (0x212C, "M", "b"), + (0x212D, "M", "c"), + (0x212E, "V"), + (0x212F, "M", "e"), + (0x2131, "M", "f"), + (0x2132, "X"), + (0x2133, "M", "m"), + (0x2134, "M", "o"), + (0x2135, "M", "א"), + (0x2136, "M", "ב"), + (0x2137, "M", "ג"), + (0x2138, "M", "ד"), + (0x2139, "M", "i"), + (0x213A, "V"), + (0x213B, "M", "fax"), + (0x213C, "M", "π"), + (0x213D, "M", "γ"), + (0x213F, "M", "π"), + (0x2140, "M", "∑"), + (0x2141, "V"), + (0x2145, "M", "d"), + (0x2147, "M", "e"), + (0x2148, "M", "i"), + (0x2149, "M", "j"), + (0x214A, "V"), + (0x2150, "M", "1⁄7"), + (0x2151, "M", "1⁄9"), + (0x2152, "M", "1⁄10"), + (0x2153, "M", "1⁄3"), + (0x2154, "M", "2⁄3"), + (0x2155, "M", "1⁄5"), + (0x2156, "M", "2⁄5"), + (0x2157, "M", "3⁄5"), + (0x2158, "M", "4⁄5"), + (0x2159, "M", "1⁄6"), + (0x215A, "M", "5⁄6"), + (0x215B, "M", "1⁄8"), + (0x215C, "M", "3⁄8"), + (0x215D, "M", "5⁄8"), + (0x215E, "M", "7⁄8"), + (0x215F, "M", "1⁄"), + (0x2160, "M", "i"), + (0x2161, "M", "ii"), + (0x2162, "M", "iii"), + (0x2163, "M", "iv"), + (0x2164, "M", "v"), + (0x2165, "M", "vi"), + (0x2166, "M", "vii"), + (0x2167, "M", "viii"), + (0x2168, "M", "ix"), + (0x2169, "M", "x"), + (0x216A, "M", "xi"), + (0x216B, "M", "xii"), + (0x216C, "M", "l"), + (0x216D, "M", "c"), + (0x216E, "M", "d"), + (0x216F, "M", "m"), + (0x2170, "M", "i"), + (0x2171, "M", "ii"), + (0x2172, "M", "iii"), + (0x2173, "M", "iv"), + (0x2174, "M", "v"), + (0x2175, "M", "vi"), + (0x2176, "M", "vii"), + (0x2177, "M", "viii"), + (0x2178, "M", "ix"), + (0x2179, "M", "x"), + (0x217A, "M", "xi"), + (0x217B, "M", "xii"), + (0x217C, "M", "l"), + ] + + +def _seg_23() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x217D, "M", "c"), + (0x217E, "M", "d"), + (0x217F, "M", "m"), + (0x2180, "V"), + (0x2183, "X"), + (0x2184, "V"), + (0x2189, "M", "0⁄3"), + (0x218A, "V"), + (0x218C, "X"), + (0x2190, "V"), + (0x222C, "M", "∫∫"), + (0x222D, "M", "∫∫∫"), + (0x222E, "V"), + (0x222F, "M", "∮∮"), + (0x2230, "M", "∮∮∮"), + (0x2231, "V"), + (0x2329, "M", "〈"), + (0x232A, "M", "〉"), + (0x232B, "V"), + (0x2427, "X"), + (0x2440, "V"), + (0x244B, "X"), + (0x2460, "M", "1"), + (0x2461, "M", "2"), + (0x2462, "M", "3"), + (0x2463, "M", "4"), + (0x2464, "M", "5"), + (0x2465, "M", "6"), + (0x2466, "M", "7"), + (0x2467, "M", "8"), + (0x2468, "M", "9"), + (0x2469, "M", "10"), + (0x246A, "M", "11"), + (0x246B, "M", "12"), + (0x246C, "M", "13"), + (0x246D, "M", "14"), + (0x246E, "M", "15"), + (0x246F, "M", "16"), + (0x2470, "M", "17"), + (0x2471, "M", "18"), + (0x2472, "M", "19"), + (0x2473, "M", "20"), + (0x2474, "3", "(1)"), + (0x2475, "3", "(2)"), + (0x2476, "3", "(3)"), + (0x2477, "3", "(4)"), + (0x2478, "3", "(5)"), + (0x2479, "3", "(6)"), + (0x247A, "3", "(7)"), + (0x247B, "3", "(8)"), + (0x247C, "3", "(9)"), + (0x247D, "3", "(10)"), + (0x247E, "3", "(11)"), + (0x247F, "3", "(12)"), + (0x2480, "3", "(13)"), + (0x2481, "3", "(14)"), + (0x2482, "3", "(15)"), + (0x2483, "3", "(16)"), + (0x2484, "3", "(17)"), + (0x2485, "3", "(18)"), + (0x2486, "3", "(19)"), + (0x2487, "3", "(20)"), + (0x2488, "X"), + (0x249C, "3", "(a)"), + (0x249D, "3", "(b)"), + (0x249E, "3", "(c)"), + (0x249F, "3", "(d)"), + (0x24A0, "3", "(e)"), + (0x24A1, "3", "(f)"), + (0x24A2, "3", "(g)"), + (0x24A3, "3", "(h)"), + (0x24A4, "3", "(i)"), + (0x24A5, "3", "(j)"), + (0x24A6, "3", "(k)"), + (0x24A7, "3", "(l)"), + (0x24A8, "3", "(m)"), + (0x24A9, "3", "(n)"), + (0x24AA, "3", "(o)"), + (0x24AB, "3", "(p)"), + (0x24AC, "3", "(q)"), + (0x24AD, "3", "(r)"), + (0x24AE, "3", "(s)"), + (0x24AF, "3", "(t)"), + (0x24B0, "3", "(u)"), + (0x24B1, "3", "(v)"), + (0x24B2, "3", "(w)"), + (0x24B3, "3", "(x)"), + (0x24B4, "3", "(y)"), + (0x24B5, "3", "(z)"), + (0x24B6, "M", "a"), + (0x24B7, "M", "b"), + (0x24B8, "M", "c"), + (0x24B9, "M", "d"), + (0x24BA, "M", "e"), + (0x24BB, "M", "f"), + (0x24BC, "M", "g"), + (0x24BD, "M", "h"), + (0x24BE, "M", "i"), + (0x24BF, "M", "j"), + (0x24C0, "M", "k"), + ] + + +def _seg_24() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x24C1, "M", "l"), + (0x24C2, "M", "m"), + (0x24C3, "M", "n"), + (0x24C4, "M", "o"), + (0x24C5, "M", "p"), + (0x24C6, "M", "q"), + (0x24C7, "M", "r"), + (0x24C8, "M", "s"), + (0x24C9, "M", "t"), + (0x24CA, "M", "u"), + (0x24CB, "M", "v"), + (0x24CC, "M", "w"), + (0x24CD, "M", "x"), + (0x24CE, "M", "y"), + (0x24CF, "M", "z"), + (0x24D0, "M", "a"), + (0x24D1, "M", "b"), + (0x24D2, "M", "c"), + (0x24D3, "M", "d"), + (0x24D4, "M", "e"), + (0x24D5, "M", "f"), + (0x24D6, "M", "g"), + (0x24D7, "M", "h"), + (0x24D8, "M", "i"), + (0x24D9, "M", "j"), + (0x24DA, "M", "k"), + (0x24DB, "M", "l"), + (0x24DC, "M", "m"), + (0x24DD, "M", "n"), + (0x24DE, "M", "o"), + (0x24DF, "M", "p"), + (0x24E0, "M", "q"), + (0x24E1, "M", "r"), + (0x24E2, "M", "s"), + (0x24E3, "M", "t"), + (0x24E4, "M", "u"), + (0x24E5, "M", "v"), + (0x24E6, "M", "w"), + (0x24E7, "M", "x"), + (0x24E8, "M", "y"), + (0x24E9, "M", "z"), + (0x24EA, "M", "0"), + (0x24EB, "V"), + (0x2A0C, "M", "∫∫∫∫"), + (0x2A0D, "V"), + (0x2A74, "3", "::="), + (0x2A75, "3", "=="), + (0x2A76, "3", "==="), + (0x2A77, "V"), + (0x2ADC, "M", "⫝̸"), + (0x2ADD, "V"), + (0x2B74, "X"), + (0x2B76, "V"), + (0x2B96, "X"), + (0x2B97, "V"), + (0x2C00, "M", "ⰰ"), + (0x2C01, "M", "ⰱ"), + (0x2C02, "M", "ⰲ"), + (0x2C03, "M", "ⰳ"), + (0x2C04, "M", "ⰴ"), + (0x2C05, "M", "ⰵ"), + (0x2C06, "M", "ⰶ"), + (0x2C07, "M", "ⰷ"), + (0x2C08, "M", "ⰸ"), + (0x2C09, "M", "ⰹ"), + (0x2C0A, "M", "ⰺ"), + (0x2C0B, "M", "ⰻ"), + (0x2C0C, "M", "ⰼ"), + (0x2C0D, "M", "ⰽ"), + (0x2C0E, "M", "ⰾ"), + (0x2C0F, "M", "ⰿ"), + (0x2C10, "M", "ⱀ"), + (0x2C11, "M", "ⱁ"), + (0x2C12, "M", "ⱂ"), + (0x2C13, "M", "ⱃ"), + (0x2C14, "M", "ⱄ"), + (0x2C15, "M", "ⱅ"), + (0x2C16, "M", "ⱆ"), + (0x2C17, "M", "ⱇ"), + (0x2C18, "M", "ⱈ"), + (0x2C19, "M", "ⱉ"), + (0x2C1A, "M", "ⱊ"), + (0x2C1B, "M", "ⱋ"), + (0x2C1C, "M", "ⱌ"), + (0x2C1D, "M", "ⱍ"), + (0x2C1E, "M", "ⱎ"), + (0x2C1F, "M", "ⱏ"), + (0x2C20, "M", "ⱐ"), + (0x2C21, "M", "ⱑ"), + (0x2C22, "M", "ⱒ"), + (0x2C23, "M", "ⱓ"), + (0x2C24, "M", "ⱔ"), + (0x2C25, "M", "ⱕ"), + (0x2C26, "M", "ⱖ"), + (0x2C27, "M", "ⱗ"), + (0x2C28, "M", "ⱘ"), + (0x2C29, "M", "ⱙ"), + (0x2C2A, "M", "ⱚ"), + (0x2C2B, "M", "ⱛ"), + (0x2C2C, "M", "ⱜ"), + ] + + +def _seg_25() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2C2D, "M", "ⱝ"), + (0x2C2E, "M", "ⱞ"), + (0x2C2F, "M", "ⱟ"), + (0x2C30, "V"), + (0x2C60, "M", "ⱡ"), + (0x2C61, "V"), + (0x2C62, "M", "ɫ"), + (0x2C63, "M", "ᵽ"), + (0x2C64, "M", "ɽ"), + (0x2C65, "V"), + (0x2C67, "M", "ⱨ"), + (0x2C68, "V"), + (0x2C69, "M", "ⱪ"), + (0x2C6A, "V"), + (0x2C6B, "M", "ⱬ"), + (0x2C6C, "V"), + (0x2C6D, "M", "ɑ"), + (0x2C6E, "M", "ɱ"), + (0x2C6F, "M", "ɐ"), + (0x2C70, "M", "ɒ"), + (0x2C71, "V"), + (0x2C72, "M", "ⱳ"), + (0x2C73, "V"), + (0x2C75, "M", "ⱶ"), + (0x2C76, "V"), + (0x2C7C, "M", "j"), + (0x2C7D, "M", "v"), + (0x2C7E, "M", "ȿ"), + (0x2C7F, "M", "ɀ"), + (0x2C80, "M", "ⲁ"), + (0x2C81, "V"), + (0x2C82, "M", "ⲃ"), + (0x2C83, "V"), + (0x2C84, "M", "ⲅ"), + (0x2C85, "V"), + (0x2C86, "M", "ⲇ"), + (0x2C87, "V"), + (0x2C88, "M", "ⲉ"), + (0x2C89, "V"), + (0x2C8A, "M", "ⲋ"), + (0x2C8B, "V"), + (0x2C8C, "M", "ⲍ"), + (0x2C8D, "V"), + (0x2C8E, "M", "ⲏ"), + (0x2C8F, "V"), + (0x2C90, "M", "ⲑ"), + (0x2C91, "V"), + (0x2C92, "M", "ⲓ"), + (0x2C93, "V"), + (0x2C94, "M", "ⲕ"), + (0x2C95, "V"), + (0x2C96, "M", "ⲗ"), + (0x2C97, "V"), + (0x2C98, "M", "ⲙ"), + (0x2C99, "V"), + (0x2C9A, "M", "ⲛ"), + (0x2C9B, "V"), + (0x2C9C, "M", "ⲝ"), + (0x2C9D, "V"), + (0x2C9E, "M", "ⲟ"), + (0x2C9F, "V"), + (0x2CA0, "M", "ⲡ"), + (0x2CA1, "V"), + (0x2CA2, "M", "ⲣ"), + (0x2CA3, "V"), + (0x2CA4, "M", "ⲥ"), + (0x2CA5, "V"), + (0x2CA6, "M", "ⲧ"), + (0x2CA7, "V"), + (0x2CA8, "M", "ⲩ"), + (0x2CA9, "V"), + (0x2CAA, "M", "ⲫ"), + (0x2CAB, "V"), + (0x2CAC, "M", "ⲭ"), + (0x2CAD, "V"), + (0x2CAE, "M", "ⲯ"), + (0x2CAF, "V"), + (0x2CB0, "M", "ⲱ"), + (0x2CB1, "V"), + (0x2CB2, "M", "ⲳ"), + (0x2CB3, "V"), + (0x2CB4, "M", "ⲵ"), + (0x2CB5, "V"), + (0x2CB6, "M", "ⲷ"), + (0x2CB7, "V"), + (0x2CB8, "M", "ⲹ"), + (0x2CB9, "V"), + (0x2CBA, "M", "ⲻ"), + (0x2CBB, "V"), + (0x2CBC, "M", "ⲽ"), + (0x2CBD, "V"), + (0x2CBE, "M", "ⲿ"), + (0x2CBF, "V"), + (0x2CC0, "M", "ⳁ"), + (0x2CC1, "V"), + (0x2CC2, "M", "ⳃ"), + (0x2CC3, "V"), + (0x2CC4, "M", "ⳅ"), + (0x2CC5, "V"), + (0x2CC6, "M", "ⳇ"), + ] + + +def _seg_26() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2CC7, "V"), + (0x2CC8, "M", "ⳉ"), + (0x2CC9, "V"), + (0x2CCA, "M", "ⳋ"), + (0x2CCB, "V"), + (0x2CCC, "M", "ⳍ"), + (0x2CCD, "V"), + (0x2CCE, "M", "ⳏ"), + (0x2CCF, "V"), + (0x2CD0, "M", "ⳑ"), + (0x2CD1, "V"), + (0x2CD2, "M", "ⳓ"), + (0x2CD3, "V"), + (0x2CD4, "M", "ⳕ"), + (0x2CD5, "V"), + (0x2CD6, "M", "ⳗ"), + (0x2CD7, "V"), + (0x2CD8, "M", "ⳙ"), + (0x2CD9, "V"), + (0x2CDA, "M", "ⳛ"), + (0x2CDB, "V"), + (0x2CDC, "M", "ⳝ"), + (0x2CDD, "V"), + (0x2CDE, "M", "ⳟ"), + (0x2CDF, "V"), + (0x2CE0, "M", "ⳡ"), + (0x2CE1, "V"), + (0x2CE2, "M", "ⳣ"), + (0x2CE3, "V"), + (0x2CEB, "M", "ⳬ"), + (0x2CEC, "V"), + (0x2CED, "M", "ⳮ"), + (0x2CEE, "V"), + (0x2CF2, "M", "ⳳ"), + (0x2CF3, "V"), + (0x2CF4, "X"), + (0x2CF9, "V"), + (0x2D26, "X"), + (0x2D27, "V"), + (0x2D28, "X"), + (0x2D2D, "V"), + (0x2D2E, "X"), + (0x2D30, "V"), + (0x2D68, "X"), + (0x2D6F, "M", "ⵡ"), + (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"), + (0x2E5E, "X"), + (0x2E80, "V"), + (0x2E9A, "X"), + (0x2E9B, "V"), + (0x2E9F, "M", "母"), + (0x2EA0, "V"), + (0x2EF3, "M", "龟"), + (0x2EF4, "X"), + (0x2F00, "M", "一"), + (0x2F01, "M", "丨"), + (0x2F02, "M", "丶"), + (0x2F03, "M", "丿"), + (0x2F04, "M", "乙"), + (0x2F05, "M", "亅"), + (0x2F06, "M", "二"), + (0x2F07, "M", "亠"), + (0x2F08, "M", "人"), + (0x2F09, "M", "儿"), + (0x2F0A, "M", "入"), + (0x2F0B, "M", "八"), + (0x2F0C, "M", "冂"), + (0x2F0D, "M", "冖"), + (0x2F0E, "M", "冫"), + (0x2F0F, "M", "几"), + (0x2F10, "M", "凵"), + (0x2F11, "M", "刀"), + (0x2F12, "M", "力"), + (0x2F13, "M", "勹"), + (0x2F14, "M", "匕"), + (0x2F15, "M", "匚"), + (0x2F16, "M", "匸"), + (0x2F17, "M", "十"), + (0x2F18, "M", "卜"), + (0x2F19, "M", "卩"), + ] + + +def _seg_27() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F1A, "M", "厂"), + (0x2F1B, "M", "厶"), + (0x2F1C, "M", "又"), + (0x2F1D, "M", "口"), + (0x2F1E, "M", "囗"), + (0x2F1F, "M", "土"), + (0x2F20, "M", "士"), + (0x2F21, "M", "夂"), + (0x2F22, "M", "夊"), + (0x2F23, "M", "夕"), + (0x2F24, "M", "大"), + (0x2F25, "M", "女"), + (0x2F26, "M", "子"), + (0x2F27, "M", "宀"), + (0x2F28, "M", "寸"), + (0x2F29, "M", "小"), + (0x2F2A, "M", "尢"), + (0x2F2B, "M", "尸"), + (0x2F2C, "M", "屮"), + (0x2F2D, "M", "山"), + (0x2F2E, "M", "巛"), + (0x2F2F, "M", "工"), + (0x2F30, "M", "己"), + (0x2F31, "M", "巾"), + (0x2F32, "M", "干"), + (0x2F33, "M", "幺"), + (0x2F34, "M", "广"), + (0x2F35, "M", "廴"), + (0x2F36, "M", "廾"), + (0x2F37, "M", "弋"), + (0x2F38, "M", "弓"), + (0x2F39, "M", "彐"), + (0x2F3A, "M", "彡"), + (0x2F3B, "M", "彳"), + (0x2F3C, "M", "心"), + (0x2F3D, "M", "戈"), + (0x2F3E, "M", "戶"), + (0x2F3F, "M", "手"), + (0x2F40, "M", "支"), + (0x2F41, "M", "攴"), + (0x2F42, "M", "文"), + (0x2F43, "M", "斗"), + (0x2F44, "M", "斤"), + (0x2F45, "M", "方"), + (0x2F46, "M", "无"), + (0x2F47, "M", "日"), + (0x2F48, "M", "曰"), + (0x2F49, "M", "月"), + (0x2F4A, "M", "木"), + (0x2F4B, "M", "欠"), + (0x2F4C, "M", "止"), + (0x2F4D, "M", "歹"), + (0x2F4E, "M", "殳"), + (0x2F4F, "M", "毋"), + (0x2F50, "M", "比"), + (0x2F51, "M", "毛"), + (0x2F52, "M", "氏"), + (0x2F53, "M", "气"), + (0x2F54, "M", "水"), + (0x2F55, "M", "火"), + (0x2F56, "M", "爪"), + (0x2F57, "M", "父"), + (0x2F58, "M", "爻"), + (0x2F59, "M", "爿"), + (0x2F5A, "M", "片"), + (0x2F5B, "M", "牙"), + (0x2F5C, "M", "牛"), + (0x2F5D, "M", "犬"), + (0x2F5E, "M", "玄"), + (0x2F5F, "M", "玉"), + (0x2F60, "M", "瓜"), + (0x2F61, "M", "瓦"), + (0x2F62, "M", "甘"), + (0x2F63, "M", "生"), + (0x2F64, "M", "用"), + (0x2F65, "M", "田"), + (0x2F66, "M", "疋"), + (0x2F67, "M", "疒"), + (0x2F68, "M", "癶"), + (0x2F69, "M", "白"), + (0x2F6A, "M", "皮"), + (0x2F6B, "M", "皿"), + (0x2F6C, "M", "目"), + (0x2F6D, "M", "矛"), + (0x2F6E, "M", "矢"), + (0x2F6F, "M", "石"), + (0x2F70, "M", "示"), + (0x2F71, "M", "禸"), + (0x2F72, "M", "禾"), + (0x2F73, "M", "穴"), + (0x2F74, "M", "立"), + (0x2F75, "M", "竹"), + (0x2F76, "M", "米"), + (0x2F77, "M", "糸"), + (0x2F78, "M", "缶"), + (0x2F79, "M", "网"), + (0x2F7A, "M", "羊"), + (0x2F7B, "M", "羽"), + (0x2F7C, "M", "老"), + (0x2F7D, "M", "而"), + ] + + +def _seg_28() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F7E, "M", "耒"), + (0x2F7F, "M", "耳"), + (0x2F80, "M", "聿"), + (0x2F81, "M", "肉"), + (0x2F82, "M", "臣"), + (0x2F83, "M", "自"), + (0x2F84, "M", "至"), + (0x2F85, "M", "臼"), + (0x2F86, "M", "舌"), + (0x2F87, "M", "舛"), + (0x2F88, "M", "舟"), + (0x2F89, "M", "艮"), + (0x2F8A, "M", "色"), + (0x2F8B, "M", "艸"), + (0x2F8C, "M", "虍"), + (0x2F8D, "M", "虫"), + (0x2F8E, "M", "血"), + (0x2F8F, "M", "行"), + (0x2F90, "M", "衣"), + (0x2F91, "M", "襾"), + (0x2F92, "M", "見"), + (0x2F93, "M", "角"), + (0x2F94, "M", "言"), + (0x2F95, "M", "谷"), + (0x2F96, "M", "豆"), + (0x2F97, "M", "豕"), + (0x2F98, "M", "豸"), + (0x2F99, "M", "貝"), + (0x2F9A, "M", "赤"), + (0x2F9B, "M", "走"), + (0x2F9C, "M", "足"), + (0x2F9D, "M", "身"), + (0x2F9E, "M", "車"), + (0x2F9F, "M", "辛"), + (0x2FA0, "M", "辰"), + (0x2FA1, "M", "辵"), + (0x2FA2, "M", "邑"), + (0x2FA3, "M", "酉"), + (0x2FA4, "M", "釆"), + (0x2FA5, "M", "里"), + (0x2FA6, "M", "金"), + (0x2FA7, "M", "長"), + (0x2FA8, "M", "門"), + (0x2FA9, "M", "阜"), + (0x2FAA, "M", "隶"), + (0x2FAB, "M", "隹"), + (0x2FAC, "M", "雨"), + (0x2FAD, "M", "靑"), + (0x2FAE, "M", "非"), + (0x2FAF, "M", "面"), + (0x2FB0, "M", "革"), + (0x2FB1, "M", "韋"), + (0x2FB2, "M", "韭"), + (0x2FB3, "M", "音"), + (0x2FB4, "M", "頁"), + (0x2FB5, "M", "風"), + (0x2FB6, "M", "飛"), + (0x2FB7, "M", "食"), + (0x2FB8, "M", "首"), + (0x2FB9, "M", "香"), + (0x2FBA, "M", "馬"), + (0x2FBB, "M", "骨"), + (0x2FBC, "M", "高"), + (0x2FBD, "M", "髟"), + (0x2FBE, "M", "鬥"), + (0x2FBF, "M", "鬯"), + (0x2FC0, "M", "鬲"), + (0x2FC1, "M", "鬼"), + (0x2FC2, "M", "魚"), + (0x2FC3, "M", "鳥"), + (0x2FC4, "M", "鹵"), + (0x2FC5, "M", "鹿"), + (0x2FC6, "M", "麥"), + (0x2FC7, "M", "麻"), + (0x2FC8, "M", "黃"), + (0x2FC9, "M", "黍"), + (0x2FCA, "M", "黑"), + (0x2FCB, "M", "黹"), + (0x2FCC, "M", "黽"), + (0x2FCD, "M", "鼎"), + (0x2FCE, "M", "鼓"), + (0x2FCF, "M", "鼠"), + (0x2FD0, "M", "鼻"), + (0x2FD1, "M", "齊"), + (0x2FD2, "M", "齒"), + (0x2FD3, "M", "龍"), + (0x2FD4, "M", "龜"), + (0x2FD5, "M", "龠"), + (0x2FD6, "X"), + (0x3000, "3", " "), + (0x3001, "V"), + (0x3002, "M", "."), + (0x3003, "V"), + (0x3036, "M", "〒"), + (0x3037, "V"), + (0x3038, "M", "十"), + (0x3039, "M", "卄"), + (0x303A, "M", "卅"), + (0x303B, "V"), + (0x3040, "X"), + ] + + +def _seg_29() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3041, "V"), + (0x3097, "X"), + (0x3099, "V"), + (0x309B, "3", " ゙"), + (0x309C, "3", " ゚"), + (0x309D, "V"), + (0x309F, "M", "より"), + (0x30A0, "V"), + (0x30FF, "M", "コト"), + (0x3100, "X"), + (0x3105, "V"), + (0x3130, "X"), + (0x3131, "M", "ᄀ"), + (0x3132, "M", "ᄁ"), + (0x3133, "M", "ᆪ"), + (0x3134, "M", "ᄂ"), + (0x3135, "M", "ᆬ"), + (0x3136, "M", "ᆭ"), + (0x3137, "M", "ᄃ"), + (0x3138, "M", "ᄄ"), + (0x3139, "M", "ᄅ"), + (0x313A, "M", "ᆰ"), + (0x313B, "M", "ᆱ"), + (0x313C, "M", "ᆲ"), + (0x313D, "M", "ᆳ"), + (0x313E, "M", "ᆴ"), + (0x313F, "M", "ᆵ"), + (0x3140, "M", "ᄚ"), + (0x3141, "M", "ᄆ"), + (0x3142, "M", "ᄇ"), + (0x3143, "M", "ᄈ"), + (0x3144, "M", "ᄡ"), + (0x3145, "M", "ᄉ"), + (0x3146, "M", "ᄊ"), + (0x3147, "M", "ᄋ"), + (0x3148, "M", "ᄌ"), + (0x3149, "M", "ᄍ"), + (0x314A, "M", "ᄎ"), + (0x314B, "M", "ᄏ"), + (0x314C, "M", "ᄐ"), + (0x314D, "M", "ᄑ"), + (0x314E, "M", "ᄒ"), + (0x314F, "M", "ᅡ"), + (0x3150, "M", "ᅢ"), + (0x3151, "M", "ᅣ"), + (0x3152, "M", "ᅤ"), + (0x3153, "M", "ᅥ"), + (0x3154, "M", "ᅦ"), + (0x3155, "M", "ᅧ"), + (0x3156, "M", "ᅨ"), + (0x3157, "M", "ᅩ"), + (0x3158, "M", "ᅪ"), + (0x3159, "M", "ᅫ"), + (0x315A, "M", "ᅬ"), + (0x315B, "M", "ᅭ"), + (0x315C, "M", "ᅮ"), + (0x315D, "M", "ᅯ"), + (0x315E, "M", "ᅰ"), + (0x315F, "M", "ᅱ"), + (0x3160, "M", "ᅲ"), + (0x3161, "M", "ᅳ"), + (0x3162, "M", "ᅴ"), + (0x3163, "M", "ᅵ"), + (0x3164, "X"), + (0x3165, "M", "ᄔ"), + (0x3166, "M", "ᄕ"), + (0x3167, "M", "ᇇ"), + (0x3168, "M", "ᇈ"), + (0x3169, "M", "ᇌ"), + (0x316A, "M", "ᇎ"), + (0x316B, "M", "ᇓ"), + (0x316C, "M", "ᇗ"), + (0x316D, "M", "ᇙ"), + (0x316E, "M", "ᄜ"), + (0x316F, "M", "ᇝ"), + (0x3170, "M", "ᇟ"), + (0x3171, "M", "ᄝ"), + (0x3172, "M", "ᄞ"), + (0x3173, "M", "ᄠ"), + (0x3174, "M", "ᄢ"), + (0x3175, "M", "ᄣ"), + (0x3176, "M", "ᄧ"), + (0x3177, "M", "ᄩ"), + (0x3178, "M", "ᄫ"), + (0x3179, "M", "ᄬ"), + (0x317A, "M", "ᄭ"), + (0x317B, "M", "ᄮ"), + (0x317C, "M", "ᄯ"), + (0x317D, "M", "ᄲ"), + (0x317E, "M", "ᄶ"), + (0x317F, "M", "ᅀ"), + (0x3180, "M", "ᅇ"), + (0x3181, "M", "ᅌ"), + (0x3182, "M", "ᇱ"), + (0x3183, "M", "ᇲ"), + (0x3184, "M", "ᅗ"), + (0x3185, "M", "ᅘ"), + (0x3186, "M", "ᅙ"), + (0x3187, "M", "ᆄ"), + (0x3188, "M", "ᆅ"), + ] + + +def _seg_30() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3189, "M", "ᆈ"), + (0x318A, "M", "ᆑ"), + (0x318B, "M", "ᆒ"), + (0x318C, "M", "ᆔ"), + (0x318D, "M", "ᆞ"), + (0x318E, "M", "ᆡ"), + (0x318F, "X"), + (0x3190, "V"), + (0x3192, "M", "一"), + (0x3193, "M", "二"), + (0x3194, "M", "三"), + (0x3195, "M", "四"), + (0x3196, "M", "上"), + (0x3197, "M", "中"), + (0x3198, "M", "下"), + (0x3199, "M", "甲"), + (0x319A, "M", "乙"), + (0x319B, "M", "丙"), + (0x319C, "M", "丁"), + (0x319D, "M", "天"), + (0x319E, "M", "地"), + (0x319F, "M", "人"), + (0x31A0, "V"), + (0x31E4, "X"), + (0x31F0, "V"), + (0x3200, "3", "(ᄀ)"), + (0x3201, "3", "(ᄂ)"), + (0x3202, "3", "(ᄃ)"), + (0x3203, "3", "(ᄅ)"), + (0x3204, "3", "(ᄆ)"), + (0x3205, "3", "(ᄇ)"), + (0x3206, "3", "(ᄉ)"), + (0x3207, "3", "(ᄋ)"), + (0x3208, "3", "(ᄌ)"), + (0x3209, "3", "(ᄎ)"), + (0x320A, "3", "(ᄏ)"), + (0x320B, "3", "(ᄐ)"), + (0x320C, "3", "(ᄑ)"), + (0x320D, "3", "(ᄒ)"), + (0x320E, "3", "(가)"), + (0x320F, "3", "(나)"), + (0x3210, "3", "(다)"), + (0x3211, "3", "(라)"), + (0x3212, "3", "(마)"), + (0x3213, "3", "(바)"), + (0x3214, "3", "(사)"), + (0x3215, "3", "(아)"), + (0x3216, "3", "(자)"), + (0x3217, "3", "(차)"), + (0x3218, "3", "(카)"), + (0x3219, "3", "(타)"), + (0x321A, "3", "(파)"), + (0x321B, "3", "(하)"), + (0x321C, "3", "(주)"), + (0x321D, "3", "(오전)"), + (0x321E, "3", "(오후)"), + (0x321F, "X"), + (0x3220, "3", "(一)"), + (0x3221, "3", "(二)"), + (0x3222, "3", "(三)"), + (0x3223, "3", "(四)"), + (0x3224, "3", "(五)"), + (0x3225, "3", "(六)"), + (0x3226, "3", "(七)"), + (0x3227, "3", "(八)"), + (0x3228, "3", "(九)"), + (0x3229, "3", "(十)"), + (0x322A, "3", "(月)"), + (0x322B, "3", "(火)"), + (0x322C, "3", "(水)"), + (0x322D, "3", "(木)"), + (0x322E, "3", "(金)"), + (0x322F, "3", "(土)"), + (0x3230, "3", "(日)"), + (0x3231, "3", "(株)"), + (0x3232, "3", "(有)"), + (0x3233, "3", "(社)"), + (0x3234, "3", "(名)"), + (0x3235, "3", "(特)"), + (0x3236, "3", "(財)"), + (0x3237, "3", "(祝)"), + (0x3238, "3", "(労)"), + (0x3239, "3", "(代)"), + (0x323A, "3", "(呼)"), + (0x323B, "3", "(学)"), + (0x323C, "3", "(監)"), + (0x323D, "3", "(企)"), + (0x323E, "3", "(資)"), + (0x323F, "3", "(協)"), + (0x3240, "3", "(祭)"), + (0x3241, "3", "(休)"), + (0x3242, "3", "(自)"), + (0x3243, "3", "(至)"), + (0x3244, "M", "問"), + (0x3245, "M", "幼"), + (0x3246, "M", "文"), + (0x3247, "M", "箏"), + (0x3248, "V"), + (0x3250, "M", "pte"), + (0x3251, "M", "21"), + ] + + +def _seg_31() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3252, "M", "22"), + (0x3253, "M", "23"), + (0x3254, "M", "24"), + (0x3255, "M", "25"), + (0x3256, "M", "26"), + (0x3257, "M", "27"), + (0x3258, "M", "28"), + (0x3259, "M", "29"), + (0x325A, "M", "30"), + (0x325B, "M", "31"), + (0x325C, "M", "32"), + (0x325D, "M", "33"), + (0x325E, "M", "34"), + (0x325F, "M", "35"), + (0x3260, "M", "ᄀ"), + (0x3261, "M", "ᄂ"), + (0x3262, "M", "ᄃ"), + (0x3263, "M", "ᄅ"), + (0x3264, "M", "ᄆ"), + (0x3265, "M", "ᄇ"), + (0x3266, "M", "ᄉ"), + (0x3267, "M", "ᄋ"), + (0x3268, "M", "ᄌ"), + (0x3269, "M", "ᄎ"), + (0x326A, "M", "ᄏ"), + (0x326B, "M", "ᄐ"), + (0x326C, "M", "ᄑ"), + (0x326D, "M", "ᄒ"), + (0x326E, "M", "가"), + (0x326F, "M", "나"), + (0x3270, "M", "다"), + (0x3271, "M", "라"), + (0x3272, "M", "마"), + (0x3273, "M", "바"), + (0x3274, "M", "사"), + (0x3275, "M", "아"), + (0x3276, "M", "자"), + (0x3277, "M", "차"), + (0x3278, "M", "카"), + (0x3279, "M", "타"), + (0x327A, "M", "파"), + (0x327B, "M", "하"), + (0x327C, "M", "참고"), + (0x327D, "M", "주의"), + (0x327E, "M", "우"), + (0x327F, "V"), + (0x3280, "M", "一"), + (0x3281, "M", "二"), + (0x3282, "M", "三"), + (0x3283, "M", "四"), + (0x3284, "M", "五"), + (0x3285, "M", "六"), + (0x3286, "M", "七"), + (0x3287, "M", "八"), + (0x3288, "M", "九"), + (0x3289, "M", "十"), + (0x328A, "M", "月"), + (0x328B, "M", "火"), + (0x328C, "M", "水"), + (0x328D, "M", "木"), + (0x328E, "M", "金"), + (0x328F, "M", "土"), + (0x3290, "M", "日"), + (0x3291, "M", "株"), + (0x3292, "M", "有"), + (0x3293, "M", "社"), + (0x3294, "M", "名"), + (0x3295, "M", "特"), + (0x3296, "M", "財"), + (0x3297, "M", "祝"), + (0x3298, "M", "労"), + (0x3299, "M", "秘"), + (0x329A, "M", "男"), + (0x329B, "M", "女"), + (0x329C, "M", "適"), + (0x329D, "M", "優"), + (0x329E, "M", "印"), + (0x329F, "M", "注"), + (0x32A0, "M", "項"), + (0x32A1, "M", "休"), + (0x32A2, "M", "写"), + (0x32A3, "M", "正"), + (0x32A4, "M", "上"), + (0x32A5, "M", "中"), + (0x32A6, "M", "下"), + (0x32A7, "M", "左"), + (0x32A8, "M", "右"), + (0x32A9, "M", "医"), + (0x32AA, "M", "宗"), + (0x32AB, "M", "学"), + (0x32AC, "M", "監"), + (0x32AD, "M", "企"), + (0x32AE, "M", "資"), + (0x32AF, "M", "協"), + (0x32B0, "M", "夜"), + (0x32B1, "M", "36"), + (0x32B2, "M", "37"), + (0x32B3, "M", "38"), + (0x32B4, "M", "39"), + (0x32B5, "M", "40"), + ] + + +def _seg_32() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x32B6, "M", "41"), + (0x32B7, "M", "42"), + (0x32B8, "M", "43"), + (0x32B9, "M", "44"), + (0x32BA, "M", "45"), + (0x32BB, "M", "46"), + (0x32BC, "M", "47"), + (0x32BD, "M", "48"), + (0x32BE, "M", "49"), + (0x32BF, "M", "50"), + (0x32C0, "M", "1月"), + (0x32C1, "M", "2月"), + (0x32C2, "M", "3月"), + (0x32C3, "M", "4月"), + (0x32C4, "M", "5月"), + (0x32C5, "M", "6月"), + (0x32C6, "M", "7月"), + (0x32C7, "M", "8月"), + (0x32C8, "M", "9月"), + (0x32C9, "M", "10月"), + (0x32CA, "M", "11月"), + (0x32CB, "M", "12月"), + (0x32CC, "M", "hg"), + (0x32CD, "M", "erg"), + (0x32CE, "M", "ev"), + (0x32CF, "M", "ltd"), + (0x32D0, "M", "ア"), + (0x32D1, "M", "イ"), + (0x32D2, "M", "ウ"), + (0x32D3, "M", "エ"), + (0x32D4, "M", "オ"), + (0x32D5, "M", "カ"), + (0x32D6, "M", "キ"), + (0x32D7, "M", "ク"), + (0x32D8, "M", "ケ"), + (0x32D9, "M", "コ"), + (0x32DA, "M", "サ"), + (0x32DB, "M", "シ"), + (0x32DC, "M", "ス"), + (0x32DD, "M", "セ"), + (0x32DE, "M", "ソ"), + (0x32DF, "M", "タ"), + (0x32E0, "M", "チ"), + (0x32E1, "M", "ツ"), + (0x32E2, "M", "テ"), + (0x32E3, "M", "ト"), + (0x32E4, "M", "ナ"), + (0x32E5, "M", "ニ"), + (0x32E6, "M", "ヌ"), + (0x32E7, "M", "ネ"), + (0x32E8, "M", "ノ"), + (0x32E9, "M", "ハ"), + (0x32EA, "M", "ヒ"), + (0x32EB, "M", "フ"), + (0x32EC, "M", "ヘ"), + (0x32ED, "M", "ホ"), + (0x32EE, "M", "マ"), + (0x32EF, "M", "ミ"), + (0x32F0, "M", "ム"), + (0x32F1, "M", "メ"), + (0x32F2, "M", "モ"), + (0x32F3, "M", "ヤ"), + (0x32F4, "M", "ユ"), + (0x32F5, "M", "ヨ"), + (0x32F6, "M", "ラ"), + (0x32F7, "M", "リ"), + (0x32F8, "M", "ル"), + (0x32F9, "M", "レ"), + (0x32FA, "M", "ロ"), + (0x32FB, "M", "ワ"), + (0x32FC, "M", "ヰ"), + (0x32FD, "M", "ヱ"), + (0x32FE, "M", "ヲ"), + (0x32FF, "M", "令和"), + (0x3300, "M", "アパート"), + (0x3301, "M", "アルファ"), + (0x3302, "M", "アンペア"), + (0x3303, "M", "アール"), + (0x3304, "M", "イニング"), + (0x3305, "M", "インチ"), + (0x3306, "M", "ウォン"), + (0x3307, "M", "エスクード"), + (0x3308, "M", "エーカー"), + (0x3309, "M", "オンス"), + (0x330A, "M", "オーム"), + (0x330B, "M", "カイリ"), + (0x330C, "M", "カラット"), + (0x330D, "M", "カロリー"), + (0x330E, "M", "ガロン"), + (0x330F, "M", "ガンマ"), + (0x3310, "M", "ギガ"), + (0x3311, "M", "ギニー"), + (0x3312, "M", "キュリー"), + (0x3313, "M", "ギルダー"), + (0x3314, "M", "キロ"), + (0x3315, "M", "キログラム"), + (0x3316, "M", "キロメートル"), + (0x3317, "M", "キロワット"), + (0x3318, "M", "グラム"), + (0x3319, "M", "グラムトン"), + ] + + +def _seg_33() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x331A, "M", "クルゼイロ"), + (0x331B, "M", "クローネ"), + (0x331C, "M", "ケース"), + (0x331D, "M", "コルナ"), + (0x331E, "M", "コーポ"), + (0x331F, "M", "サイクル"), + (0x3320, "M", "サンチーム"), + (0x3321, "M", "シリング"), + (0x3322, "M", "センチ"), + (0x3323, "M", "セント"), + (0x3324, "M", "ダース"), + (0x3325, "M", "デシ"), + (0x3326, "M", "ドル"), + (0x3327, "M", "トン"), + (0x3328, "M", "ナノ"), + (0x3329, "M", "ノット"), + (0x332A, "M", "ハイツ"), + (0x332B, "M", "パーセント"), + (0x332C, "M", "パーツ"), + (0x332D, "M", "バーレル"), + (0x332E, "M", "ピアストル"), + (0x332F, "M", "ピクル"), + (0x3330, "M", "ピコ"), + (0x3331, "M", "ビル"), + (0x3332, "M", "ファラッド"), + (0x3333, "M", "フィート"), + (0x3334, "M", "ブッシェル"), + (0x3335, "M", "フラン"), + (0x3336, "M", "ヘクタール"), + (0x3337, "M", "ペソ"), + (0x3338, "M", "ペニヒ"), + (0x3339, "M", "ヘルツ"), + (0x333A, "M", "ペンス"), + (0x333B, "M", "ページ"), + (0x333C, "M", "ベータ"), + (0x333D, "M", "ポイント"), + (0x333E, "M", "ボルト"), + (0x333F, "M", "ホン"), + (0x3340, "M", "ポンド"), + (0x3341, "M", "ホール"), + (0x3342, "M", "ホーン"), + (0x3343, "M", "マイクロ"), + (0x3344, "M", "マイル"), + (0x3345, "M", "マッハ"), + (0x3346, "M", "マルク"), + (0x3347, "M", "マンション"), + (0x3348, "M", "ミクロン"), + (0x3349, "M", "ミリ"), + (0x334A, "M", "ミリバール"), + (0x334B, "M", "メガ"), + (0x334C, "M", "メガトン"), + (0x334D, "M", "メートル"), + (0x334E, "M", "ヤード"), + (0x334F, "M", "ヤール"), + (0x3350, "M", "ユアン"), + (0x3351, "M", "リットル"), + (0x3352, "M", "リラ"), + (0x3353, "M", "ルピー"), + (0x3354, "M", "ルーブル"), + (0x3355, "M", "レム"), + (0x3356, "M", "レントゲン"), + (0x3357, "M", "ワット"), + (0x3358, "M", "0点"), + (0x3359, "M", "1点"), + (0x335A, "M", "2点"), + (0x335B, "M", "3点"), + (0x335C, "M", "4点"), + (0x335D, "M", "5点"), + (0x335E, "M", "6点"), + (0x335F, "M", "7点"), + (0x3360, "M", "8点"), + (0x3361, "M", "9点"), + (0x3362, "M", "10点"), + (0x3363, "M", "11点"), + (0x3364, "M", "12点"), + (0x3365, "M", "13点"), + (0x3366, "M", "14点"), + (0x3367, "M", "15点"), + (0x3368, "M", "16点"), + (0x3369, "M", "17点"), + (0x336A, "M", "18点"), + (0x336B, "M", "19点"), + (0x336C, "M", "20点"), + (0x336D, "M", "21点"), + (0x336E, "M", "22点"), + (0x336F, "M", "23点"), + (0x3370, "M", "24点"), + (0x3371, "M", "hpa"), + (0x3372, "M", "da"), + (0x3373, "M", "au"), + (0x3374, "M", "bar"), + (0x3375, "M", "ov"), + (0x3376, "M", "pc"), + (0x3377, "M", "dm"), + (0x3378, "M", "dm2"), + (0x3379, "M", "dm3"), + (0x337A, "M", "iu"), + (0x337B, "M", "平成"), + (0x337C, "M", "昭和"), + (0x337D, "M", "大正"), + ] + + +def _seg_34() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x337E, "M", "明治"), + (0x337F, "M", "株式会社"), + (0x3380, "M", "pa"), + (0x3381, "M", "na"), + (0x3382, "M", "μa"), + (0x3383, "M", "ma"), + (0x3384, "M", "ka"), + (0x3385, "M", "kb"), + (0x3386, "M", "mb"), + (0x3387, "M", "gb"), + (0x3388, "M", "cal"), + (0x3389, "M", "kcal"), + (0x338A, "M", "pf"), + (0x338B, "M", "nf"), + (0x338C, "M", "μf"), + (0x338D, "M", "μg"), + (0x338E, "M", "mg"), + (0x338F, "M", "kg"), + (0x3390, "M", "hz"), + (0x3391, "M", "khz"), + (0x3392, "M", "mhz"), + (0x3393, "M", "ghz"), + (0x3394, "M", "thz"), + (0x3395, "M", "μl"), + (0x3396, "M", "ml"), + (0x3397, "M", "dl"), + (0x3398, "M", "kl"), + (0x3399, "M", "fm"), + (0x339A, "M", "nm"), + (0x339B, "M", "μm"), + (0x339C, "M", "mm"), + (0x339D, "M", "cm"), + (0x339E, "M", "km"), + (0x339F, "M", "mm2"), + (0x33A0, "M", "cm2"), + (0x33A1, "M", "m2"), + (0x33A2, "M", "km2"), + (0x33A3, "M", "mm3"), + (0x33A4, "M", "cm3"), + (0x33A5, "M", "m3"), + (0x33A6, "M", "km3"), + (0x33A7, "M", "m∕s"), + (0x33A8, "M", "m∕s2"), + (0x33A9, "M", "pa"), + (0x33AA, "M", "kpa"), + (0x33AB, "M", "mpa"), + (0x33AC, "M", "gpa"), + (0x33AD, "M", "rad"), + (0x33AE, "M", "rad∕s"), + (0x33AF, "M", "rad∕s2"), + (0x33B0, "M", "ps"), + (0x33B1, "M", "ns"), + (0x33B2, "M", "μs"), + (0x33B3, "M", "ms"), + (0x33B4, "M", "pv"), + (0x33B5, "M", "nv"), + (0x33B6, "M", "μv"), + (0x33B7, "M", "mv"), + (0x33B8, "M", "kv"), + (0x33B9, "M", "mv"), + (0x33BA, "M", "pw"), + (0x33BB, "M", "nw"), + (0x33BC, "M", "μw"), + (0x33BD, "M", "mw"), + (0x33BE, "M", "kw"), + (0x33BF, "M", "mw"), + (0x33C0, "M", "kω"), + (0x33C1, "M", "mω"), + (0x33C2, "X"), + (0x33C3, "M", "bq"), + (0x33C4, "M", "cc"), + (0x33C5, "M", "cd"), + (0x33C6, "M", "c∕kg"), + (0x33C7, "X"), + (0x33C8, "M", "db"), + (0x33C9, "M", "gy"), + (0x33CA, "M", "ha"), + (0x33CB, "M", "hp"), + (0x33CC, "M", "in"), + (0x33CD, "M", "kk"), + (0x33CE, "M", "km"), + (0x33CF, "M", "kt"), + (0x33D0, "M", "lm"), + (0x33D1, "M", "ln"), + (0x33D2, "M", "log"), + (0x33D3, "M", "lx"), + (0x33D4, "M", "mb"), + (0x33D5, "M", "mil"), + (0x33D6, "M", "mol"), + (0x33D7, "M", "ph"), + (0x33D8, "X"), + (0x33D9, "M", "ppm"), + (0x33DA, "M", "pr"), + (0x33DB, "M", "sr"), + (0x33DC, "M", "sv"), + (0x33DD, "M", "wb"), + (0x33DE, "M", "v∕m"), + (0x33DF, "M", "a∕m"), + (0x33E0, "M", "1日"), + (0x33E1, "M", "2日"), + ] + + +def _seg_35() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x33E2, "M", "3日"), + (0x33E3, "M", "4日"), + (0x33E4, "M", "5日"), + (0x33E5, "M", "6日"), + (0x33E6, "M", "7日"), + (0x33E7, "M", "8日"), + (0x33E8, "M", "9日"), + (0x33E9, "M", "10日"), + (0x33EA, "M", "11日"), + (0x33EB, "M", "12日"), + (0x33EC, "M", "13日"), + (0x33ED, "M", "14日"), + (0x33EE, "M", "15日"), + (0x33EF, "M", "16日"), + (0x33F0, "M", "17日"), + (0x33F1, "M", "18日"), + (0x33F2, "M", "19日"), + (0x33F3, "M", "20日"), + (0x33F4, "M", "21日"), + (0x33F5, "M", "22日"), + (0x33F6, "M", "23日"), + (0x33F7, "M", "24日"), + (0x33F8, "M", "25日"), + (0x33F9, "M", "26日"), + (0x33FA, "M", "27日"), + (0x33FB, "M", "28日"), + (0x33FC, "M", "29日"), + (0x33FD, "M", "30日"), + (0x33FE, "M", "31日"), + (0x33FF, "M", "gal"), + (0x3400, "V"), + (0xA48D, "X"), + (0xA490, "V"), + (0xA4C7, "X"), + (0xA4D0, "V"), + (0xA62C, "X"), + (0xA640, "M", "ꙁ"), + (0xA641, "V"), + (0xA642, "M", "ꙃ"), + (0xA643, "V"), + (0xA644, "M", "ꙅ"), + (0xA645, "V"), + (0xA646, "M", "ꙇ"), + (0xA647, "V"), + (0xA648, "M", "ꙉ"), + (0xA649, "V"), + (0xA64A, "M", "ꙋ"), + (0xA64B, "V"), + (0xA64C, "M", "ꙍ"), + (0xA64D, "V"), + (0xA64E, "M", "ꙏ"), + (0xA64F, "V"), + (0xA650, "M", "ꙑ"), + (0xA651, "V"), + (0xA652, "M", "ꙓ"), + (0xA653, "V"), + (0xA654, "M", "ꙕ"), + (0xA655, "V"), + (0xA656, "M", "ꙗ"), + (0xA657, "V"), + (0xA658, "M", "ꙙ"), + (0xA659, "V"), + (0xA65A, "M", "ꙛ"), + (0xA65B, "V"), + (0xA65C, "M", "ꙝ"), + (0xA65D, "V"), + (0xA65E, "M", "ꙟ"), + (0xA65F, "V"), + (0xA660, "M", "ꙡ"), + (0xA661, "V"), + (0xA662, "M", "ꙣ"), + (0xA663, "V"), + (0xA664, "M", "ꙥ"), + (0xA665, "V"), + (0xA666, "M", "ꙧ"), + (0xA667, "V"), + (0xA668, "M", "ꙩ"), + (0xA669, "V"), + (0xA66A, "M", "ꙫ"), + (0xA66B, "V"), + (0xA66C, "M", "ꙭ"), + (0xA66D, "V"), + (0xA680, "M", "ꚁ"), + (0xA681, "V"), + (0xA682, "M", "ꚃ"), + (0xA683, "V"), + (0xA684, "M", "ꚅ"), + (0xA685, "V"), + (0xA686, "M", "ꚇ"), + (0xA687, "V"), + (0xA688, "M", "ꚉ"), + (0xA689, "V"), + (0xA68A, "M", "ꚋ"), + (0xA68B, "V"), + (0xA68C, "M", "ꚍ"), + (0xA68D, "V"), + (0xA68E, "M", "ꚏ"), + (0xA68F, "V"), + (0xA690, "M", "ꚑ"), + (0xA691, "V"), + ] + + +def _seg_36() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA692, "M", "ꚓ"), + (0xA693, "V"), + (0xA694, "M", "ꚕ"), + (0xA695, "V"), + (0xA696, "M", "ꚗ"), + (0xA697, "V"), + (0xA698, "M", "ꚙ"), + (0xA699, "V"), + (0xA69A, "M", "ꚛ"), + (0xA69B, "V"), + (0xA69C, "M", "ъ"), + (0xA69D, "M", "ь"), + (0xA69E, "V"), + (0xA6F8, "X"), + (0xA700, "V"), + (0xA722, "M", "ꜣ"), + (0xA723, "V"), + (0xA724, "M", "ꜥ"), + (0xA725, "V"), + (0xA726, "M", "ꜧ"), + (0xA727, "V"), + (0xA728, "M", "ꜩ"), + (0xA729, "V"), + (0xA72A, "M", "ꜫ"), + (0xA72B, "V"), + (0xA72C, "M", "ꜭ"), + (0xA72D, "V"), + (0xA72E, "M", "ꜯ"), + (0xA72F, "V"), + (0xA732, "M", "ꜳ"), + (0xA733, "V"), + (0xA734, "M", "ꜵ"), + (0xA735, "V"), + (0xA736, "M", "ꜷ"), + (0xA737, "V"), + (0xA738, "M", "ꜹ"), + (0xA739, "V"), + (0xA73A, "M", "ꜻ"), + (0xA73B, "V"), + (0xA73C, "M", "ꜽ"), + (0xA73D, "V"), + (0xA73E, "M", "ꜿ"), + (0xA73F, "V"), + (0xA740, "M", "ꝁ"), + (0xA741, "V"), + (0xA742, "M", "ꝃ"), + (0xA743, "V"), + (0xA744, "M", "ꝅ"), + (0xA745, "V"), + (0xA746, "M", "ꝇ"), + (0xA747, "V"), + (0xA748, "M", "ꝉ"), + (0xA749, "V"), + (0xA74A, "M", "ꝋ"), + (0xA74B, "V"), + (0xA74C, "M", "ꝍ"), + (0xA74D, "V"), + (0xA74E, "M", "ꝏ"), + (0xA74F, "V"), + (0xA750, "M", "ꝑ"), + (0xA751, "V"), + (0xA752, "M", "ꝓ"), + (0xA753, "V"), + (0xA754, "M", "ꝕ"), + (0xA755, "V"), + (0xA756, "M", "ꝗ"), + (0xA757, "V"), + (0xA758, "M", "ꝙ"), + (0xA759, "V"), + (0xA75A, "M", "ꝛ"), + (0xA75B, "V"), + (0xA75C, "M", "ꝝ"), + (0xA75D, "V"), + (0xA75E, "M", "ꝟ"), + (0xA75F, "V"), + (0xA760, "M", "ꝡ"), + (0xA761, "V"), + (0xA762, "M", "ꝣ"), + (0xA763, "V"), + (0xA764, "M", "ꝥ"), + (0xA765, "V"), + (0xA766, "M", "ꝧ"), + (0xA767, "V"), + (0xA768, "M", "ꝩ"), + (0xA769, "V"), + (0xA76A, "M", "ꝫ"), + (0xA76B, "V"), + (0xA76C, "M", "ꝭ"), + (0xA76D, "V"), + (0xA76E, "M", "ꝯ"), + (0xA76F, "V"), + (0xA770, "M", "ꝯ"), + (0xA771, "V"), + (0xA779, "M", "ꝺ"), + (0xA77A, "V"), + (0xA77B, "M", "ꝼ"), + (0xA77C, "V"), + (0xA77D, "M", "ᵹ"), + (0xA77E, "M", "ꝿ"), + (0xA77F, "V"), + ] + + +def _seg_37() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA780, "M", "ꞁ"), + (0xA781, "V"), + (0xA782, "M", "ꞃ"), + (0xA783, "V"), + (0xA784, "M", "ꞅ"), + (0xA785, "V"), + (0xA786, "M", "ꞇ"), + (0xA787, "V"), + (0xA78B, "M", "ꞌ"), + (0xA78C, "V"), + (0xA78D, "M", "ɥ"), + (0xA78E, "V"), + (0xA790, "M", "ꞑ"), + (0xA791, "V"), + (0xA792, "M", "ꞓ"), + (0xA793, "V"), + (0xA796, "M", "ꞗ"), + (0xA797, "V"), + (0xA798, "M", "ꞙ"), + (0xA799, "V"), + (0xA79A, "M", "ꞛ"), + (0xA79B, "V"), + (0xA79C, "M", "ꞝ"), + (0xA79D, "V"), + (0xA79E, "M", "ꞟ"), + (0xA79F, "V"), + (0xA7A0, "M", "ꞡ"), + (0xA7A1, "V"), + (0xA7A2, "M", "ꞣ"), + (0xA7A3, "V"), + (0xA7A4, "M", "ꞥ"), + (0xA7A5, "V"), + (0xA7A6, "M", "ꞧ"), + (0xA7A7, "V"), + (0xA7A8, "M", "ꞩ"), + (0xA7A9, "V"), + (0xA7AA, "M", "ɦ"), + (0xA7AB, "M", "ɜ"), + (0xA7AC, "M", "ɡ"), + (0xA7AD, "M", "ɬ"), + (0xA7AE, "M", "ɪ"), + (0xA7AF, "V"), + (0xA7B0, "M", "ʞ"), + (0xA7B1, "M", "ʇ"), + (0xA7B2, "M", "ʝ"), + (0xA7B3, "M", "ꭓ"), + (0xA7B4, "M", "ꞵ"), + (0xA7B5, "V"), + (0xA7B6, "M", "ꞷ"), + (0xA7B7, "V"), + (0xA7B8, "M", "ꞹ"), + (0xA7B9, "V"), + (0xA7BA, "M", "ꞻ"), + (0xA7BB, "V"), + (0xA7BC, "M", "ꞽ"), + (0xA7BD, "V"), + (0xA7BE, "M", "ꞿ"), + (0xA7BF, "V"), + (0xA7C0, "M", "ꟁ"), + (0xA7C1, "V"), + (0xA7C2, "M", "ꟃ"), + (0xA7C3, "V"), + (0xA7C4, "M", "ꞔ"), + (0xA7C5, "M", "ʂ"), + (0xA7C6, "M", "ᶎ"), + (0xA7C7, "M", "ꟈ"), + (0xA7C8, "V"), + (0xA7C9, "M", "ꟊ"), + (0xA7CA, "V"), + (0xA7CB, "X"), + (0xA7D0, "M", "ꟑ"), + (0xA7D1, "V"), + (0xA7D2, "X"), + (0xA7D3, "V"), + (0xA7D4, "X"), + (0xA7D5, "V"), + (0xA7D6, "M", "ꟗ"), + (0xA7D7, "V"), + (0xA7D8, "M", "ꟙ"), + (0xA7D9, "V"), + (0xA7DA, "X"), + (0xA7F2, "M", "c"), + (0xA7F3, "M", "f"), + (0xA7F4, "M", "q"), + (0xA7F5, "M", "ꟶ"), + (0xA7F6, "V"), + (0xA7F8, "M", "ħ"), + (0xA7F9, "M", "œ"), + (0xA7FA, "V"), + (0xA82D, "X"), + (0xA830, "V"), + (0xA83A, "X"), + (0xA840, "V"), + (0xA878, "X"), + (0xA880, "V"), + (0xA8C6, "X"), + (0xA8CE, "V"), + (0xA8DA, "X"), + (0xA8E0, "V"), + (0xA954, "X"), + ] + + +def _seg_38() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (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", "ꜧ"), + (0xAB5D, "M", "ꬷ"), + (0xAB5E, "M", "ɫ"), + (0xAB5F, "M", "ꭒ"), + (0xAB60, "V"), + (0xAB69, "M", "ʍ"), + (0xAB6A, "V"), + (0xAB6C, "X"), + (0xAB70, "M", "Ꭰ"), + (0xAB71, "M", "Ꭱ"), + (0xAB72, "M", "Ꭲ"), + (0xAB73, "M", "Ꭳ"), + (0xAB74, "M", "Ꭴ"), + (0xAB75, "M", "Ꭵ"), + (0xAB76, "M", "Ꭶ"), + (0xAB77, "M", "Ꭷ"), + (0xAB78, "M", "Ꭸ"), + (0xAB79, "M", "Ꭹ"), + (0xAB7A, "M", "Ꭺ"), + (0xAB7B, "M", "Ꭻ"), + (0xAB7C, "M", "Ꭼ"), + (0xAB7D, "M", "Ꭽ"), + (0xAB7E, "M", "Ꭾ"), + (0xAB7F, "M", "Ꭿ"), + (0xAB80, "M", "Ꮀ"), + (0xAB81, "M", "Ꮁ"), + (0xAB82, "M", "Ꮂ"), + (0xAB83, "M", "Ꮃ"), + (0xAB84, "M", "Ꮄ"), + (0xAB85, "M", "Ꮅ"), + (0xAB86, "M", "Ꮆ"), + (0xAB87, "M", "Ꮇ"), + (0xAB88, "M", "Ꮈ"), + (0xAB89, "M", "Ꮉ"), + (0xAB8A, "M", "Ꮊ"), + (0xAB8B, "M", "Ꮋ"), + (0xAB8C, "M", "Ꮌ"), + (0xAB8D, "M", "Ꮍ"), + (0xAB8E, "M", "Ꮎ"), + (0xAB8F, "M", "Ꮏ"), + (0xAB90, "M", "Ꮐ"), + (0xAB91, "M", "Ꮑ"), + (0xAB92, "M", "Ꮒ"), + (0xAB93, "M", "Ꮓ"), + (0xAB94, "M", "Ꮔ"), + (0xAB95, "M", "Ꮕ"), + (0xAB96, "M", "Ꮖ"), + (0xAB97, "M", "Ꮗ"), + (0xAB98, "M", "Ꮘ"), + (0xAB99, "M", "Ꮙ"), + (0xAB9A, "M", "Ꮚ"), + (0xAB9B, "M", "Ꮛ"), + (0xAB9C, "M", "Ꮜ"), + (0xAB9D, "M", "Ꮝ"), + (0xAB9E, "M", "Ꮞ"), + (0xAB9F, "M", "Ꮟ"), + (0xABA0, "M", "Ꮠ"), + (0xABA1, "M", "Ꮡ"), + (0xABA2, "M", "Ꮢ"), + (0xABA3, "M", "Ꮣ"), + (0xABA4, "M", "Ꮤ"), + (0xABA5, "M", "Ꮥ"), + (0xABA6, "M", "Ꮦ"), + (0xABA7, "M", "Ꮧ"), + (0xABA8, "M", "Ꮨ"), + (0xABA9, "M", "Ꮩ"), + (0xABAA, "M", "Ꮪ"), + (0xABAB, "M", "Ꮫ"), + (0xABAC, "M", "Ꮬ"), + (0xABAD, "M", "Ꮭ"), + (0xABAE, "M", "Ꮮ"), + ] + + +def _seg_39() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xABAF, "M", "Ꮯ"), + (0xABB0, "M", "Ꮰ"), + (0xABB1, "M", "Ꮱ"), + (0xABB2, "M", "Ꮲ"), + (0xABB3, "M", "Ꮳ"), + (0xABB4, "M", "Ꮴ"), + (0xABB5, "M", "Ꮵ"), + (0xABB6, "M", "Ꮶ"), + (0xABB7, "M", "Ꮷ"), + (0xABB8, "M", "Ꮸ"), + (0xABB9, "M", "Ꮹ"), + (0xABBA, "M", "Ꮺ"), + (0xABBB, "M", "Ꮻ"), + (0xABBC, "M", "Ꮼ"), + (0xABBD, "M", "Ꮽ"), + (0xABBE, "M", "Ꮾ"), + (0xABBF, "M", "Ꮿ"), + (0xABC0, "V"), + (0xABEE, "X"), + (0xABF0, "V"), + (0xABFA, "X"), + (0xAC00, "V"), + (0xD7A4, "X"), + (0xD7B0, "V"), + (0xD7C7, "X"), + (0xD7CB, "V"), + (0xD7FC, "X"), + (0xF900, "M", "豈"), + (0xF901, "M", "更"), + (0xF902, "M", "車"), + (0xF903, "M", "賈"), + (0xF904, "M", "滑"), + (0xF905, "M", "串"), + (0xF906, "M", "句"), + (0xF907, "M", "龜"), + (0xF909, "M", "契"), + (0xF90A, "M", "金"), + (0xF90B, "M", "喇"), + (0xF90C, "M", "奈"), + (0xF90D, "M", "懶"), + (0xF90E, "M", "癩"), + (0xF90F, "M", "羅"), + (0xF910, "M", "蘿"), + (0xF911, "M", "螺"), + (0xF912, "M", "裸"), + (0xF913, "M", "邏"), + (0xF914, "M", "樂"), + (0xF915, "M", "洛"), + (0xF916, "M", "烙"), + (0xF917, "M", "珞"), + (0xF918, "M", "落"), + (0xF919, "M", "酪"), + (0xF91A, "M", "駱"), + (0xF91B, "M", "亂"), + (0xF91C, "M", "卵"), + (0xF91D, "M", "欄"), + (0xF91E, "M", "爛"), + (0xF91F, "M", "蘭"), + (0xF920, "M", "鸞"), + (0xF921, "M", "嵐"), + (0xF922, "M", "濫"), + (0xF923, "M", "藍"), + (0xF924, "M", "襤"), + (0xF925, "M", "拉"), + (0xF926, "M", "臘"), + (0xF927, "M", "蠟"), + (0xF928, "M", "廊"), + (0xF929, "M", "朗"), + (0xF92A, "M", "浪"), + (0xF92B, "M", "狼"), + (0xF92C, "M", "郎"), + (0xF92D, "M", "來"), + (0xF92E, "M", "冷"), + (0xF92F, "M", "勞"), + (0xF930, "M", "擄"), + (0xF931, "M", "櫓"), + (0xF932, "M", "爐"), + (0xF933, "M", "盧"), + (0xF934, "M", "老"), + (0xF935, "M", "蘆"), + (0xF936, "M", "虜"), + (0xF937, "M", "路"), + (0xF938, "M", "露"), + (0xF939, "M", "魯"), + (0xF93A, "M", "鷺"), + (0xF93B, "M", "碌"), + (0xF93C, "M", "祿"), + (0xF93D, "M", "綠"), + (0xF93E, "M", "菉"), + (0xF93F, "M", "錄"), + (0xF940, "M", "鹿"), + (0xF941, "M", "論"), + (0xF942, "M", "壟"), + (0xF943, "M", "弄"), + (0xF944, "M", "籠"), + (0xF945, "M", "聾"), + (0xF946, "M", "牢"), + (0xF947, "M", "磊"), + (0xF948, "M", "賂"), + (0xF949, "M", "雷"), + ] + + +def _seg_40() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xF94A, "M", "壘"), + (0xF94B, "M", "屢"), + (0xF94C, "M", "樓"), + (0xF94D, "M", "淚"), + (0xF94E, "M", "漏"), + (0xF94F, "M", "累"), + (0xF950, "M", "縷"), + (0xF951, "M", "陋"), + (0xF952, "M", "勒"), + (0xF953, "M", "肋"), + (0xF954, "M", "凜"), + (0xF955, "M", "凌"), + (0xF956, "M", "稜"), + (0xF957, "M", "綾"), + (0xF958, "M", "菱"), + (0xF959, "M", "陵"), + (0xF95A, "M", "讀"), + (0xF95B, "M", "拏"), + (0xF95C, "M", "樂"), + (0xF95D, "M", "諾"), + (0xF95E, "M", "丹"), + (0xF95F, "M", "寧"), + (0xF960, "M", "怒"), + (0xF961, "M", "率"), + (0xF962, "M", "異"), + (0xF963, "M", "北"), + (0xF964, "M", "磻"), + (0xF965, "M", "便"), + (0xF966, "M", "復"), + (0xF967, "M", "不"), + (0xF968, "M", "泌"), + (0xF969, "M", "數"), + (0xF96A, "M", "索"), + (0xF96B, "M", "參"), + (0xF96C, "M", "塞"), + (0xF96D, "M", "省"), + (0xF96E, "M", "葉"), + (0xF96F, "M", "說"), + (0xF970, "M", "殺"), + (0xF971, "M", "辰"), + (0xF972, "M", "沈"), + (0xF973, "M", "拾"), + (0xF974, "M", "若"), + (0xF975, "M", "掠"), + (0xF976, "M", "略"), + (0xF977, "M", "亮"), + (0xF978, "M", "兩"), + (0xF979, "M", "凉"), + (0xF97A, "M", "梁"), + (0xF97B, "M", "糧"), + (0xF97C, "M", "良"), + (0xF97D, "M", "諒"), + (0xF97E, "M", "量"), + (0xF97F, "M", "勵"), + (0xF980, "M", "呂"), + (0xF981, "M", "女"), + (0xF982, "M", "廬"), + (0xF983, "M", "旅"), + (0xF984, "M", "濾"), + (0xF985, "M", "礪"), + (0xF986, "M", "閭"), + (0xF987, "M", "驪"), + (0xF988, "M", "麗"), + (0xF989, "M", "黎"), + (0xF98A, "M", "力"), + (0xF98B, "M", "曆"), + (0xF98C, "M", "歷"), + (0xF98D, "M", "轢"), + (0xF98E, "M", "年"), + (0xF98F, "M", "憐"), + (0xF990, "M", "戀"), + (0xF991, "M", "撚"), + (0xF992, "M", "漣"), + (0xF993, "M", "煉"), + (0xF994, "M", "璉"), + (0xF995, "M", "秊"), + (0xF996, "M", "練"), + (0xF997, "M", "聯"), + (0xF998, "M", "輦"), + (0xF999, "M", "蓮"), + (0xF99A, "M", "連"), + (0xF99B, "M", "鍊"), + (0xF99C, "M", "列"), + (0xF99D, "M", "劣"), + (0xF99E, "M", "咽"), + (0xF99F, "M", "烈"), + (0xF9A0, "M", "裂"), + (0xF9A1, "M", "說"), + (0xF9A2, "M", "廉"), + (0xF9A3, "M", "念"), + (0xF9A4, "M", "捻"), + (0xF9A5, "M", "殮"), + (0xF9A6, "M", "簾"), + (0xF9A7, "M", "獵"), + (0xF9A8, "M", "令"), + (0xF9A9, "M", "囹"), + (0xF9AA, "M", "寧"), + (0xF9AB, "M", "嶺"), + (0xF9AC, "M", "怜"), + (0xF9AD, "M", "玲"), + ] + + +def _seg_41() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xF9AE, "M", "瑩"), + (0xF9AF, "M", "羚"), + (0xF9B0, "M", "聆"), + (0xF9B1, "M", "鈴"), + (0xF9B2, "M", "零"), + (0xF9B3, "M", "靈"), + (0xF9B4, "M", "領"), + (0xF9B5, "M", "例"), + (0xF9B6, "M", "禮"), + (0xF9B7, "M", "醴"), + (0xF9B8, "M", "隸"), + (0xF9B9, "M", "惡"), + (0xF9BA, "M", "了"), + (0xF9BB, "M", "僚"), + (0xF9BC, "M", "寮"), + (0xF9BD, "M", "尿"), + (0xF9BE, "M", "料"), + (0xF9BF, "M", "樂"), + (0xF9C0, "M", "燎"), + (0xF9C1, "M", "療"), + (0xF9C2, "M", "蓼"), + (0xF9C3, "M", "遼"), + (0xF9C4, "M", "龍"), + (0xF9C5, "M", "暈"), + (0xF9C6, "M", "阮"), + (0xF9C7, "M", "劉"), + (0xF9C8, "M", "杻"), + (0xF9C9, "M", "柳"), + (0xF9CA, "M", "流"), + (0xF9CB, "M", "溜"), + (0xF9CC, "M", "琉"), + (0xF9CD, "M", "留"), + (0xF9CE, "M", "硫"), + (0xF9CF, "M", "紐"), + (0xF9D0, "M", "類"), + (0xF9D1, "M", "六"), + (0xF9D2, "M", "戮"), + (0xF9D3, "M", "陸"), + (0xF9D4, "M", "倫"), + (0xF9D5, "M", "崙"), + (0xF9D6, "M", "淪"), + (0xF9D7, "M", "輪"), + (0xF9D8, "M", "律"), + (0xF9D9, "M", "慄"), + (0xF9DA, "M", "栗"), + (0xF9DB, "M", "率"), + (0xF9DC, "M", "隆"), + (0xF9DD, "M", "利"), + (0xF9DE, "M", "吏"), + (0xF9DF, "M", "履"), + (0xF9E0, "M", "易"), + (0xF9E1, "M", "李"), + (0xF9E2, "M", "梨"), + (0xF9E3, "M", "泥"), + (0xF9E4, "M", "理"), + (0xF9E5, "M", "痢"), + (0xF9E6, "M", "罹"), + (0xF9E7, "M", "裏"), + (0xF9E8, "M", "裡"), + (0xF9E9, "M", "里"), + (0xF9EA, "M", "離"), + (0xF9EB, "M", "匿"), + (0xF9EC, "M", "溺"), + (0xF9ED, "M", "吝"), + (0xF9EE, "M", "燐"), + (0xF9EF, "M", "璘"), + (0xF9F0, "M", "藺"), + (0xF9F1, "M", "隣"), + (0xF9F2, "M", "鱗"), + (0xF9F3, "M", "麟"), + (0xF9F4, "M", "林"), + (0xF9F5, "M", "淋"), + (0xF9F6, "M", "臨"), + (0xF9F7, "M", "立"), + (0xF9F8, "M", "笠"), + (0xF9F9, "M", "粒"), + (0xF9FA, "M", "狀"), + (0xF9FB, "M", "炙"), + (0xF9FC, "M", "識"), + (0xF9FD, "M", "什"), + (0xF9FE, "M", "茶"), + (0xF9FF, "M", "刺"), + (0xFA00, "M", "切"), + (0xFA01, "M", "度"), + (0xFA02, "M", "拓"), + (0xFA03, "M", "糖"), + (0xFA04, "M", "宅"), + (0xFA05, "M", "洞"), + (0xFA06, "M", "暴"), + (0xFA07, "M", "輻"), + (0xFA08, "M", "行"), + (0xFA09, "M", "降"), + (0xFA0A, "M", "見"), + (0xFA0B, "M", "廓"), + (0xFA0C, "M", "兀"), + (0xFA0D, "M", "嗀"), + (0xFA0E, "V"), + (0xFA10, "M", "塚"), + (0xFA11, "V"), + (0xFA12, "M", "晴"), + ] + + +def _seg_42() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFA13, "V"), + (0xFA15, "M", "凞"), + (0xFA16, "M", "猪"), + (0xFA17, "M", "益"), + (0xFA18, "M", "礼"), + (0xFA19, "M", "神"), + (0xFA1A, "M", "祥"), + (0xFA1B, "M", "福"), + (0xFA1C, "M", "靖"), + (0xFA1D, "M", "精"), + (0xFA1E, "M", "羽"), + (0xFA1F, "V"), + (0xFA20, "M", "蘒"), + (0xFA21, "V"), + (0xFA22, "M", "諸"), + (0xFA23, "V"), + (0xFA25, "M", "逸"), + (0xFA26, "M", "都"), + (0xFA27, "V"), + (0xFA2A, "M", "飯"), + (0xFA2B, "M", "飼"), + (0xFA2C, "M", "館"), + (0xFA2D, "M", "鶴"), + (0xFA2E, "M", "郞"), + (0xFA2F, "M", "隷"), + (0xFA30, "M", "侮"), + (0xFA31, "M", "僧"), + (0xFA32, "M", "免"), + (0xFA33, "M", "勉"), + (0xFA34, "M", "勤"), + (0xFA35, "M", "卑"), + (0xFA36, "M", "喝"), + (0xFA37, "M", "嘆"), + (0xFA38, "M", "器"), + (0xFA39, "M", "塀"), + (0xFA3A, "M", "墨"), + (0xFA3B, "M", "層"), + (0xFA3C, "M", "屮"), + (0xFA3D, "M", "悔"), + (0xFA3E, "M", "慨"), + (0xFA3F, "M", "憎"), + (0xFA40, "M", "懲"), + (0xFA41, "M", "敏"), + (0xFA42, "M", "既"), + (0xFA43, "M", "暑"), + (0xFA44, "M", "梅"), + (0xFA45, "M", "海"), + (0xFA46, "M", "渚"), + (0xFA47, "M", "漢"), + (0xFA48, "M", "煮"), + (0xFA49, "M", "爫"), + (0xFA4A, "M", "琢"), + (0xFA4B, "M", "碑"), + (0xFA4C, "M", "社"), + (0xFA4D, "M", "祉"), + (0xFA4E, "M", "祈"), + (0xFA4F, "M", "祐"), + (0xFA50, "M", "祖"), + (0xFA51, "M", "祝"), + (0xFA52, "M", "禍"), + (0xFA53, "M", "禎"), + (0xFA54, "M", "穀"), + (0xFA55, "M", "突"), + (0xFA56, "M", "節"), + (0xFA57, "M", "練"), + (0xFA58, "M", "縉"), + (0xFA59, "M", "繁"), + (0xFA5A, "M", "署"), + (0xFA5B, "M", "者"), + (0xFA5C, "M", "臭"), + (0xFA5D, "M", "艹"), + (0xFA5F, "M", "著"), + (0xFA60, "M", "褐"), + (0xFA61, "M", "視"), + (0xFA62, "M", "謁"), + (0xFA63, "M", "謹"), + (0xFA64, "M", "賓"), + (0xFA65, "M", "贈"), + (0xFA66, "M", "辶"), + (0xFA67, "M", "逸"), + (0xFA68, "M", "難"), + (0xFA69, "M", "響"), + (0xFA6A, "M", "頻"), + (0xFA6B, "M", "恵"), + (0xFA6C, "M", "𤋮"), + (0xFA6D, "M", "舘"), + (0xFA6E, "X"), + (0xFA70, "M", "並"), + (0xFA71, "M", "况"), + (0xFA72, "M", "全"), + (0xFA73, "M", "侀"), + (0xFA74, "M", "充"), + (0xFA75, "M", "冀"), + (0xFA76, "M", "勇"), + (0xFA77, "M", "勺"), + (0xFA78, "M", "喝"), + (0xFA79, "M", "啕"), + (0xFA7A, "M", "喙"), + (0xFA7B, "M", "嗢"), + (0xFA7C, "M", "塚"), + ] + + +def _seg_43() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFA7D, "M", "墳"), + (0xFA7E, "M", "奄"), + (0xFA7F, "M", "奔"), + (0xFA80, "M", "婢"), + (0xFA81, "M", "嬨"), + (0xFA82, "M", "廒"), + (0xFA83, "M", "廙"), + (0xFA84, "M", "彩"), + (0xFA85, "M", "徭"), + (0xFA86, "M", "惘"), + (0xFA87, "M", "慎"), + (0xFA88, "M", "愈"), + (0xFA89, "M", "憎"), + (0xFA8A, "M", "慠"), + (0xFA8B, "M", "懲"), + (0xFA8C, "M", "戴"), + (0xFA8D, "M", "揄"), + (0xFA8E, "M", "搜"), + (0xFA8F, "M", "摒"), + (0xFA90, "M", "敖"), + (0xFA91, "M", "晴"), + (0xFA92, "M", "朗"), + (0xFA93, "M", "望"), + (0xFA94, "M", "杖"), + (0xFA95, "M", "歹"), + (0xFA96, "M", "殺"), + (0xFA97, "M", "流"), + (0xFA98, "M", "滛"), + (0xFA99, "M", "滋"), + (0xFA9A, "M", "漢"), + (0xFA9B, "M", "瀞"), + (0xFA9C, "M", "煮"), + (0xFA9D, "M", "瞧"), + (0xFA9E, "M", "爵"), + (0xFA9F, "M", "犯"), + (0xFAA0, "M", "猪"), + (0xFAA1, "M", "瑱"), + (0xFAA2, "M", "甆"), + (0xFAA3, "M", "画"), + (0xFAA4, "M", "瘝"), + (0xFAA5, "M", "瘟"), + (0xFAA6, "M", "益"), + (0xFAA7, "M", "盛"), + (0xFAA8, "M", "直"), + (0xFAA9, "M", "睊"), + (0xFAAA, "M", "着"), + (0xFAAB, "M", "磌"), + (0xFAAC, "M", "窱"), + (0xFAAD, "M", "節"), + (0xFAAE, "M", "类"), + (0xFAAF, "M", "絛"), + (0xFAB0, "M", "練"), + (0xFAB1, "M", "缾"), + (0xFAB2, "M", "者"), + (0xFAB3, "M", "荒"), + (0xFAB4, "M", "華"), + (0xFAB5, "M", "蝹"), + (0xFAB6, "M", "襁"), + (0xFAB7, "M", "覆"), + (0xFAB8, "M", "視"), + (0xFAB9, "M", "調"), + (0xFABA, "M", "諸"), + (0xFABB, "M", "請"), + (0xFABC, "M", "謁"), + (0xFABD, "M", "諾"), + (0xFABE, "M", "諭"), + (0xFABF, "M", "謹"), + (0xFAC0, "M", "變"), + (0xFAC1, "M", "贈"), + (0xFAC2, "M", "輸"), + (0xFAC3, "M", "遲"), + (0xFAC4, "M", "醙"), + (0xFAC5, "M", "鉶"), + (0xFAC6, "M", "陼"), + (0xFAC7, "M", "難"), + (0xFAC8, "M", "靖"), + (0xFAC9, "M", "韛"), + (0xFACA, "M", "響"), + (0xFACB, "M", "頋"), + (0xFACC, "M", "頻"), + (0xFACD, "M", "鬒"), + (0xFACE, "M", "龜"), + (0xFACF, "M", "𢡊"), + (0xFAD0, "M", "𢡄"), + (0xFAD1, "M", "𣏕"), + (0xFAD2, "M", "㮝"), + (0xFAD3, "M", "䀘"), + (0xFAD4, "M", "䀹"), + (0xFAD5, "M", "𥉉"), + (0xFAD6, "M", "𥳐"), + (0xFAD7, "M", "𧻓"), + (0xFAD8, "M", "齃"), + (0xFAD9, "M", "龎"), + (0xFADA, "X"), + (0xFB00, "M", "ff"), + (0xFB01, "M", "fi"), + (0xFB02, "M", "fl"), + (0xFB03, "M", "ffi"), + (0xFB04, "M", "ffl"), + (0xFB05, "M", "st"), + ] + + +def _seg_44() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFB07, "X"), + (0xFB13, "M", "մն"), + (0xFB14, "M", "մե"), + (0xFB15, "M", "մի"), + (0xFB16, "M", "վն"), + (0xFB17, "M", "մխ"), + (0xFB18, "X"), + (0xFB1D, "M", "יִ"), + (0xFB1E, "V"), + (0xFB1F, "M", "ײַ"), + (0xFB20, "M", "ע"), + (0xFB21, "M", "א"), + (0xFB22, "M", "ד"), + (0xFB23, "M", "ה"), + (0xFB24, "M", "כ"), + (0xFB25, "M", "ל"), + (0xFB26, "M", "ם"), + (0xFB27, "M", "ר"), + (0xFB28, "M", "ת"), + (0xFB29, "3", "+"), + (0xFB2A, "M", "שׁ"), + (0xFB2B, "M", "שׂ"), + (0xFB2C, "M", "שּׁ"), + (0xFB2D, "M", "שּׂ"), + (0xFB2E, "M", "אַ"), + (0xFB2F, "M", "אָ"), + (0xFB30, "M", "אּ"), + (0xFB31, "M", "בּ"), + (0xFB32, "M", "גּ"), + (0xFB33, "M", "דּ"), + (0xFB34, "M", "הּ"), + (0xFB35, "M", "וּ"), + (0xFB36, "M", "זּ"), + (0xFB37, "X"), + (0xFB38, "M", "טּ"), + (0xFB39, "M", "יּ"), + (0xFB3A, "M", "ךּ"), + (0xFB3B, "M", "כּ"), + (0xFB3C, "M", "לּ"), + (0xFB3D, "X"), + (0xFB3E, "M", "מּ"), + (0xFB3F, "X"), + (0xFB40, "M", "נּ"), + (0xFB41, "M", "סּ"), + (0xFB42, "X"), + (0xFB43, "M", "ףּ"), + (0xFB44, "M", "פּ"), + (0xFB45, "X"), + (0xFB46, "M", "צּ"), + (0xFB47, "M", "קּ"), + (0xFB48, "M", "רּ"), + (0xFB49, "M", "שּ"), + (0xFB4A, "M", "תּ"), + (0xFB4B, "M", "וֹ"), + (0xFB4C, "M", "בֿ"), + (0xFB4D, "M", "כֿ"), + (0xFB4E, "M", "פֿ"), + (0xFB4F, "M", "אל"), + (0xFB50, "M", "ٱ"), + (0xFB52, "M", "ٻ"), + (0xFB56, "M", "پ"), + (0xFB5A, "M", "ڀ"), + (0xFB5E, "M", "ٺ"), + (0xFB62, "M", "ٿ"), + (0xFB66, "M", "ٹ"), + (0xFB6A, "M", "ڤ"), + (0xFB6E, "M", "ڦ"), + (0xFB72, "M", "ڄ"), + (0xFB76, "M", "ڃ"), + (0xFB7A, "M", "چ"), + (0xFB7E, "M", "ڇ"), + (0xFB82, "M", "ڍ"), + (0xFB84, "M", "ڌ"), + (0xFB86, "M", "ڎ"), + (0xFB88, "M", "ڈ"), + (0xFB8A, "M", "ژ"), + (0xFB8C, "M", "ڑ"), + (0xFB8E, "M", "ک"), + (0xFB92, "M", "گ"), + (0xFB96, "M", "ڳ"), + (0xFB9A, "M", "ڱ"), + (0xFB9E, "M", "ں"), + (0xFBA0, "M", "ڻ"), + (0xFBA4, "M", "ۀ"), + (0xFBA6, "M", "ہ"), + (0xFBAA, "M", "ھ"), + (0xFBAE, "M", "ے"), + (0xFBB0, "M", "ۓ"), + (0xFBB2, "V"), + (0xFBC3, "X"), + (0xFBD3, "M", "ڭ"), + (0xFBD7, "M", "ۇ"), + (0xFBD9, "M", "ۆ"), + (0xFBDB, "M", "ۈ"), + (0xFBDD, "M", "ۇٴ"), + (0xFBDE, "M", "ۋ"), + (0xFBE0, "M", "ۅ"), + (0xFBE2, "M", "ۉ"), + (0xFBE4, "M", "ې"), + (0xFBE8, "M", "ى"), + ] + + +def _seg_45() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFBEA, "M", "ئا"), + (0xFBEC, "M", "ئە"), + (0xFBEE, "M", "ئو"), + (0xFBF0, "M", "ئۇ"), + (0xFBF2, "M", "ئۆ"), + (0xFBF4, "M", "ئۈ"), + (0xFBF6, "M", "ئې"), + (0xFBF9, "M", "ئى"), + (0xFBFC, "M", "ی"), + (0xFC00, "M", "ئج"), + (0xFC01, "M", "ئح"), + (0xFC02, "M", "ئم"), + (0xFC03, "M", "ئى"), + (0xFC04, "M", "ئي"), + (0xFC05, "M", "بج"), + (0xFC06, "M", "بح"), + (0xFC07, "M", "بخ"), + (0xFC08, "M", "بم"), + (0xFC09, "M", "بى"), + (0xFC0A, "M", "بي"), + (0xFC0B, "M", "تج"), + (0xFC0C, "M", "تح"), + (0xFC0D, "M", "تخ"), + (0xFC0E, "M", "تم"), + (0xFC0F, "M", "تى"), + (0xFC10, "M", "تي"), + (0xFC11, "M", "ثج"), + (0xFC12, "M", "ثم"), + (0xFC13, "M", "ثى"), + (0xFC14, "M", "ثي"), + (0xFC15, "M", "جح"), + (0xFC16, "M", "جم"), + (0xFC17, "M", "حج"), + (0xFC18, "M", "حم"), + (0xFC19, "M", "خج"), + (0xFC1A, "M", "خح"), + (0xFC1B, "M", "خم"), + (0xFC1C, "M", "سج"), + (0xFC1D, "M", "سح"), + (0xFC1E, "M", "سخ"), + (0xFC1F, "M", "سم"), + (0xFC20, "M", "صح"), + (0xFC21, "M", "صم"), + (0xFC22, "M", "ضج"), + (0xFC23, "M", "ضح"), + (0xFC24, "M", "ضخ"), + (0xFC25, "M", "ضم"), + (0xFC26, "M", "طح"), + (0xFC27, "M", "طم"), + (0xFC28, "M", "ظم"), + (0xFC29, "M", "عج"), + (0xFC2A, "M", "عم"), + (0xFC2B, "M", "غج"), + (0xFC2C, "M", "غم"), + (0xFC2D, "M", "فج"), + (0xFC2E, "M", "فح"), + (0xFC2F, "M", "فخ"), + (0xFC30, "M", "فم"), + (0xFC31, "M", "فى"), + (0xFC32, "M", "في"), + (0xFC33, "M", "قح"), + (0xFC34, "M", "قم"), + (0xFC35, "M", "قى"), + (0xFC36, "M", "قي"), + (0xFC37, "M", "كا"), + (0xFC38, "M", "كج"), + (0xFC39, "M", "كح"), + (0xFC3A, "M", "كخ"), + (0xFC3B, "M", "كل"), + (0xFC3C, "M", "كم"), + (0xFC3D, "M", "كى"), + (0xFC3E, "M", "كي"), + (0xFC3F, "M", "لج"), + (0xFC40, "M", "لح"), + (0xFC41, "M", "لخ"), + (0xFC42, "M", "لم"), + (0xFC43, "M", "لى"), + (0xFC44, "M", "لي"), + (0xFC45, "M", "مج"), + (0xFC46, "M", "مح"), + (0xFC47, "M", "مخ"), + (0xFC48, "M", "مم"), + (0xFC49, "M", "مى"), + (0xFC4A, "M", "مي"), + (0xFC4B, "M", "نج"), + (0xFC4C, "M", "نح"), + (0xFC4D, "M", "نخ"), + (0xFC4E, "M", "نم"), + (0xFC4F, "M", "نى"), + (0xFC50, "M", "ني"), + (0xFC51, "M", "هج"), + (0xFC52, "M", "هم"), + (0xFC53, "M", "هى"), + (0xFC54, "M", "هي"), + (0xFC55, "M", "يج"), + (0xFC56, "M", "يح"), + (0xFC57, "M", "يخ"), + (0xFC58, "M", "يم"), + (0xFC59, "M", "يى"), + (0xFC5A, "M", "يي"), + ] + + +def _seg_46() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFC5B, "M", "ذٰ"), + (0xFC5C, "M", "رٰ"), + (0xFC5D, "M", "ىٰ"), + (0xFC5E, "3", " ٌّ"), + (0xFC5F, "3", " ٍّ"), + (0xFC60, "3", " َّ"), + (0xFC61, "3", " ُّ"), + (0xFC62, "3", " ِّ"), + (0xFC63, "3", " ّٰ"), + (0xFC64, "M", "ئر"), + (0xFC65, "M", "ئز"), + (0xFC66, "M", "ئم"), + (0xFC67, "M", "ئن"), + (0xFC68, "M", "ئى"), + (0xFC69, "M", "ئي"), + (0xFC6A, "M", "بر"), + (0xFC6B, "M", "بز"), + (0xFC6C, "M", "بم"), + (0xFC6D, "M", "بن"), + (0xFC6E, "M", "بى"), + (0xFC6F, "M", "بي"), + (0xFC70, "M", "تر"), + (0xFC71, "M", "تز"), + (0xFC72, "M", "تم"), + (0xFC73, "M", "تن"), + (0xFC74, "M", "تى"), + (0xFC75, "M", "تي"), + (0xFC76, "M", "ثر"), + (0xFC77, "M", "ثز"), + (0xFC78, "M", "ثم"), + (0xFC79, "M", "ثن"), + (0xFC7A, "M", "ثى"), + (0xFC7B, "M", "ثي"), + (0xFC7C, "M", "فى"), + (0xFC7D, "M", "في"), + (0xFC7E, "M", "قى"), + (0xFC7F, "M", "قي"), + (0xFC80, "M", "كا"), + (0xFC81, "M", "كل"), + (0xFC82, "M", "كم"), + (0xFC83, "M", "كى"), + (0xFC84, "M", "كي"), + (0xFC85, "M", "لم"), + (0xFC86, "M", "لى"), + (0xFC87, "M", "لي"), + (0xFC88, "M", "ما"), + (0xFC89, "M", "مم"), + (0xFC8A, "M", "نر"), + (0xFC8B, "M", "نز"), + (0xFC8C, "M", "نم"), + (0xFC8D, "M", "نن"), + (0xFC8E, "M", "نى"), + (0xFC8F, "M", "ني"), + (0xFC90, "M", "ىٰ"), + (0xFC91, "M", "ير"), + (0xFC92, "M", "يز"), + (0xFC93, "M", "يم"), + (0xFC94, "M", "ين"), + (0xFC95, "M", "يى"), + (0xFC96, "M", "يي"), + (0xFC97, "M", "ئج"), + (0xFC98, "M", "ئح"), + (0xFC99, "M", "ئخ"), + (0xFC9A, "M", "ئم"), + (0xFC9B, "M", "ئه"), + (0xFC9C, "M", "بج"), + (0xFC9D, "M", "بح"), + (0xFC9E, "M", "بخ"), + (0xFC9F, "M", "بم"), + (0xFCA0, "M", "به"), + (0xFCA1, "M", "تج"), + (0xFCA2, "M", "تح"), + (0xFCA3, "M", "تخ"), + (0xFCA4, "M", "تم"), + (0xFCA5, "M", "ته"), + (0xFCA6, "M", "ثم"), + (0xFCA7, "M", "جح"), + (0xFCA8, "M", "جم"), + (0xFCA9, "M", "حج"), + (0xFCAA, "M", "حم"), + (0xFCAB, "M", "خج"), + (0xFCAC, "M", "خم"), + (0xFCAD, "M", "سج"), + (0xFCAE, "M", "سح"), + (0xFCAF, "M", "سخ"), + (0xFCB0, "M", "سم"), + (0xFCB1, "M", "صح"), + (0xFCB2, "M", "صخ"), + (0xFCB3, "M", "صم"), + (0xFCB4, "M", "ضج"), + (0xFCB5, "M", "ضح"), + (0xFCB6, "M", "ضخ"), + (0xFCB7, "M", "ضم"), + (0xFCB8, "M", "طح"), + (0xFCB9, "M", "ظم"), + (0xFCBA, "M", "عج"), + (0xFCBB, "M", "عم"), + (0xFCBC, "M", "غج"), + (0xFCBD, "M", "غم"), + (0xFCBE, "M", "فج"), + ] + + +def _seg_47() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFCBF, "M", "فح"), + (0xFCC0, "M", "فخ"), + (0xFCC1, "M", "فم"), + (0xFCC2, "M", "قح"), + (0xFCC3, "M", "قم"), + (0xFCC4, "M", "كج"), + (0xFCC5, "M", "كح"), + (0xFCC6, "M", "كخ"), + (0xFCC7, "M", "كل"), + (0xFCC8, "M", "كم"), + (0xFCC9, "M", "لج"), + (0xFCCA, "M", "لح"), + (0xFCCB, "M", "لخ"), + (0xFCCC, "M", "لم"), + (0xFCCD, "M", "له"), + (0xFCCE, "M", "مج"), + (0xFCCF, "M", "مح"), + (0xFCD0, "M", "مخ"), + (0xFCD1, "M", "مم"), + (0xFCD2, "M", "نج"), + (0xFCD3, "M", "نح"), + (0xFCD4, "M", "نخ"), + (0xFCD5, "M", "نم"), + (0xFCD6, "M", "نه"), + (0xFCD7, "M", "هج"), + (0xFCD8, "M", "هم"), + (0xFCD9, "M", "هٰ"), + (0xFCDA, "M", "يج"), + (0xFCDB, "M", "يح"), + (0xFCDC, "M", "يخ"), + (0xFCDD, "M", "يم"), + (0xFCDE, "M", "يه"), + (0xFCDF, "M", "ئم"), + (0xFCE0, "M", "ئه"), + (0xFCE1, "M", "بم"), + (0xFCE2, "M", "به"), + (0xFCE3, "M", "تم"), + (0xFCE4, "M", "ته"), + (0xFCE5, "M", "ثم"), + (0xFCE6, "M", "ثه"), + (0xFCE7, "M", "سم"), + (0xFCE8, "M", "سه"), + (0xFCE9, "M", "شم"), + (0xFCEA, "M", "شه"), + (0xFCEB, "M", "كل"), + (0xFCEC, "M", "كم"), + (0xFCED, "M", "لم"), + (0xFCEE, "M", "نم"), + (0xFCEF, "M", "نه"), + (0xFCF0, "M", "يم"), + (0xFCF1, "M", "يه"), + (0xFCF2, "M", "ـَّ"), + (0xFCF3, "M", "ـُّ"), + (0xFCF4, "M", "ـِّ"), + (0xFCF5, "M", "طى"), + (0xFCF6, "M", "طي"), + (0xFCF7, "M", "عى"), + (0xFCF8, "M", "عي"), + (0xFCF9, "M", "غى"), + (0xFCFA, "M", "غي"), + (0xFCFB, "M", "سى"), + (0xFCFC, "M", "سي"), + (0xFCFD, "M", "شى"), + (0xFCFE, "M", "شي"), + (0xFCFF, "M", "حى"), + (0xFD00, "M", "حي"), + (0xFD01, "M", "جى"), + (0xFD02, "M", "جي"), + (0xFD03, "M", "خى"), + (0xFD04, "M", "خي"), + (0xFD05, "M", "صى"), + (0xFD06, "M", "صي"), + (0xFD07, "M", "ضى"), + (0xFD08, "M", "ضي"), + (0xFD09, "M", "شج"), + (0xFD0A, "M", "شح"), + (0xFD0B, "M", "شخ"), + (0xFD0C, "M", "شم"), + (0xFD0D, "M", "شر"), + (0xFD0E, "M", "سر"), + (0xFD0F, "M", "صر"), + (0xFD10, "M", "ضر"), + (0xFD11, "M", "طى"), + (0xFD12, "M", "طي"), + (0xFD13, "M", "عى"), + (0xFD14, "M", "عي"), + (0xFD15, "M", "غى"), + (0xFD16, "M", "غي"), + (0xFD17, "M", "سى"), + (0xFD18, "M", "سي"), + (0xFD19, "M", "شى"), + (0xFD1A, "M", "شي"), + (0xFD1B, "M", "حى"), + (0xFD1C, "M", "حي"), + (0xFD1D, "M", "جى"), + (0xFD1E, "M", "جي"), + (0xFD1F, "M", "خى"), + (0xFD20, "M", "خي"), + (0xFD21, "M", "صى"), + (0xFD22, "M", "صي"), + ] + + +def _seg_48() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFD23, "M", "ضى"), + (0xFD24, "M", "ضي"), + (0xFD25, "M", "شج"), + (0xFD26, "M", "شح"), + (0xFD27, "M", "شخ"), + (0xFD28, "M", "شم"), + (0xFD29, "M", "شر"), + (0xFD2A, "M", "سر"), + (0xFD2B, "M", "صر"), + (0xFD2C, "M", "ضر"), + (0xFD2D, "M", "شج"), + (0xFD2E, "M", "شح"), + (0xFD2F, "M", "شخ"), + (0xFD30, "M", "شم"), + (0xFD31, "M", "سه"), + (0xFD32, "M", "شه"), + (0xFD33, "M", "طم"), + (0xFD34, "M", "سج"), + (0xFD35, "M", "سح"), + (0xFD36, "M", "سخ"), + (0xFD37, "M", "شج"), + (0xFD38, "M", "شح"), + (0xFD39, "M", "شخ"), + (0xFD3A, "M", "طم"), + (0xFD3B, "M", "ظم"), + (0xFD3C, "M", "اً"), + (0xFD3E, "V"), + (0xFD50, "M", "تجم"), + (0xFD51, "M", "تحج"), + (0xFD53, "M", "تحم"), + (0xFD54, "M", "تخم"), + (0xFD55, "M", "تمج"), + (0xFD56, "M", "تمح"), + (0xFD57, "M", "تمخ"), + (0xFD58, "M", "جمح"), + (0xFD5A, "M", "حمي"), + (0xFD5B, "M", "حمى"), + (0xFD5C, "M", "سحج"), + (0xFD5D, "M", "سجح"), + (0xFD5E, "M", "سجى"), + (0xFD5F, "M", "سمح"), + (0xFD61, "M", "سمج"), + (0xFD62, "M", "سمم"), + (0xFD64, "M", "صحح"), + (0xFD66, "M", "صمم"), + (0xFD67, "M", "شحم"), + (0xFD69, "M", "شجي"), + (0xFD6A, "M", "شمخ"), + (0xFD6C, "M", "شمم"), + (0xFD6E, "M", "ضحى"), + (0xFD6F, "M", "ضخم"), + (0xFD71, "M", "طمح"), + (0xFD73, "M", "طمم"), + (0xFD74, "M", "طمي"), + (0xFD75, "M", "عجم"), + (0xFD76, "M", "عمم"), + (0xFD78, "M", "عمى"), + (0xFD79, "M", "غمم"), + (0xFD7A, "M", "غمي"), + (0xFD7B, "M", "غمى"), + (0xFD7C, "M", "فخم"), + (0xFD7E, "M", "قمح"), + (0xFD7F, "M", "قمم"), + (0xFD80, "M", "لحم"), + (0xFD81, "M", "لحي"), + (0xFD82, "M", "لحى"), + (0xFD83, "M", "لجج"), + (0xFD85, "M", "لخم"), + (0xFD87, "M", "لمح"), + (0xFD89, "M", "محج"), + (0xFD8A, "M", "محم"), + (0xFD8B, "M", "محي"), + (0xFD8C, "M", "مجح"), + (0xFD8D, "M", "مجم"), + (0xFD8E, "M", "مخج"), + (0xFD8F, "M", "مخم"), + (0xFD90, "X"), + (0xFD92, "M", "مجخ"), + (0xFD93, "M", "همج"), + (0xFD94, "M", "همم"), + (0xFD95, "M", "نحم"), + (0xFD96, "M", "نحى"), + (0xFD97, "M", "نجم"), + (0xFD99, "M", "نجى"), + (0xFD9A, "M", "نمي"), + (0xFD9B, "M", "نمى"), + (0xFD9C, "M", "يمم"), + (0xFD9E, "M", "بخي"), + (0xFD9F, "M", "تجي"), + (0xFDA0, "M", "تجى"), + (0xFDA1, "M", "تخي"), + (0xFDA2, "M", "تخى"), + (0xFDA3, "M", "تمي"), + (0xFDA4, "M", "تمى"), + (0xFDA5, "M", "جمي"), + (0xFDA6, "M", "جحى"), + (0xFDA7, "M", "جمى"), + (0xFDA8, "M", "سخى"), + (0xFDA9, "M", "صحي"), + (0xFDAA, "M", "شحي"), + ] + + +def _seg_49() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFDAB, "M", "ضحي"), + (0xFDAC, "M", "لجي"), + (0xFDAD, "M", "لمي"), + (0xFDAE, "M", "يحي"), + (0xFDAF, "M", "يجي"), + (0xFDB0, "M", "يمي"), + (0xFDB1, "M", "ممي"), + (0xFDB2, "M", "قمي"), + (0xFDB3, "M", "نحي"), + (0xFDB4, "M", "قمح"), + (0xFDB5, "M", "لحم"), + (0xFDB6, "M", "عمي"), + (0xFDB7, "M", "كمي"), + (0xFDB8, "M", "نجح"), + (0xFDB9, "M", "مخي"), + (0xFDBA, "M", "لجم"), + (0xFDBB, "M", "كمم"), + (0xFDBC, "M", "لجم"), + (0xFDBD, "M", "نجح"), + (0xFDBE, "M", "جحي"), + (0xFDBF, "M", "حجي"), + (0xFDC0, "M", "مجي"), + (0xFDC1, "M", "فمي"), + (0xFDC2, "M", "بحي"), + (0xFDC3, "M", "كمم"), + (0xFDC4, "M", "عجم"), + (0xFDC5, "M", "صمم"), + (0xFDC6, "M", "سخي"), + (0xFDC7, "M", "نجي"), + (0xFDC8, "X"), + (0xFDCF, "V"), + (0xFDD0, "X"), + (0xFDF0, "M", "صلے"), + (0xFDF1, "M", "قلے"), + (0xFDF2, "M", "الله"), + (0xFDF3, "M", "اكبر"), + (0xFDF4, "M", "محمد"), + (0xFDF5, "M", "صلعم"), + (0xFDF6, "M", "رسول"), + (0xFDF7, "M", "عليه"), + (0xFDF8, "M", "وسلم"), + (0xFDF9, "M", "صلى"), + (0xFDFA, "3", "صلى الله عليه وسلم"), + (0xFDFB, "3", "جل جلاله"), + (0xFDFC, "M", "ریال"), + (0xFDFD, "V"), + (0xFE00, "I"), + (0xFE10, "3", ","), + (0xFE11, "M", "、"), + (0xFE12, "X"), + (0xFE13, "3", ":"), + (0xFE14, "3", ";"), + (0xFE15, "3", "!"), + (0xFE16, "3", "?"), + (0xFE17, "M", "〖"), + (0xFE18, "M", "〗"), + (0xFE19, "X"), + (0xFE20, "V"), + (0xFE30, "X"), + (0xFE31, "M", "—"), + (0xFE32, "M", "–"), + (0xFE33, "3", "_"), + (0xFE35, "3", "("), + (0xFE36, "3", ")"), + (0xFE37, "3", "{"), + (0xFE38, "3", "}"), + (0xFE39, "M", "〔"), + (0xFE3A, "M", "〕"), + (0xFE3B, "M", "【"), + (0xFE3C, "M", "】"), + (0xFE3D, "M", "《"), + (0xFE3E, "M", "》"), + (0xFE3F, "M", "〈"), + (0xFE40, "M", "〉"), + (0xFE41, "M", "「"), + (0xFE42, "M", "」"), + (0xFE43, "M", "『"), + (0xFE44, "M", "』"), + (0xFE45, "V"), + (0xFE47, "3", "["), + (0xFE48, "3", "]"), + (0xFE49, "3", " ̅"), + (0xFE4D, "3", "_"), + (0xFE50, "3", ","), + (0xFE51, "M", "、"), + (0xFE52, "X"), + (0xFE54, "3", ";"), + (0xFE55, "3", ":"), + (0xFE56, "3", "?"), + (0xFE57, "3", "!"), + (0xFE58, "M", "—"), + (0xFE59, "3", "("), + (0xFE5A, "3", ")"), + (0xFE5B, "3", "{"), + (0xFE5C, "3", "}"), + (0xFE5D, "M", "〔"), + (0xFE5E, "M", "〕"), + (0xFE5F, "3", "#"), + (0xFE60, "3", "&"), + (0xFE61, "3", "*"), + ] + + +def _seg_50() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFE62, "3", "+"), + (0xFE63, "M", "-"), + (0xFE64, "3", "<"), + (0xFE65, "3", ">"), + (0xFE66, "3", "="), + (0xFE67, "X"), + (0xFE68, "3", "\\"), + (0xFE69, "3", "$"), + (0xFE6A, "3", "%"), + (0xFE6B, "3", "@"), + (0xFE6C, "X"), + (0xFE70, "3", " ً"), + (0xFE71, "M", "ـً"), + (0xFE72, "3", " ٌ"), + (0xFE73, "V"), + (0xFE74, "3", " ٍ"), + (0xFE75, "X"), + (0xFE76, "3", " َ"), + (0xFE77, "M", "ـَ"), + (0xFE78, "3", " ُ"), + (0xFE79, "M", "ـُ"), + (0xFE7A, "3", " ِ"), + (0xFE7B, "M", "ـِ"), + (0xFE7C, "3", " ّ"), + (0xFE7D, "M", "ـّ"), + (0xFE7E, "3", " ْ"), + (0xFE7F, "M", "ـْ"), + (0xFE80, "M", "ء"), + (0xFE81, "M", "آ"), + (0xFE83, "M", "أ"), + (0xFE85, "M", "ؤ"), + (0xFE87, "M", "إ"), + (0xFE89, "M", "ئ"), + (0xFE8D, "M", "ا"), + (0xFE8F, "M", "ب"), + (0xFE93, "M", "ة"), + (0xFE95, "M", "ت"), + (0xFE99, "M", "ث"), + (0xFE9D, "M", "ج"), + (0xFEA1, "M", "ح"), + (0xFEA5, "M", "خ"), + (0xFEA9, "M", "د"), + (0xFEAB, "M", "ذ"), + (0xFEAD, "M", "ر"), + (0xFEAF, "M", "ز"), + (0xFEB1, "M", "س"), + (0xFEB5, "M", "ش"), + (0xFEB9, "M", "ص"), + (0xFEBD, "M", "ض"), + (0xFEC1, "M", "ط"), + (0xFEC5, "M", "ظ"), + (0xFEC9, "M", "ع"), + (0xFECD, "M", "غ"), + (0xFED1, "M", "ف"), + (0xFED5, "M", "ق"), + (0xFED9, "M", "ك"), + (0xFEDD, "M", "ل"), + (0xFEE1, "M", "م"), + (0xFEE5, "M", "ن"), + (0xFEE9, "M", "ه"), + (0xFEED, "M", "و"), + (0xFEEF, "M", "ى"), + (0xFEF1, "M", "ي"), + (0xFEF5, "M", "لآ"), + (0xFEF7, "M", "لأ"), + (0xFEF9, "M", "لإ"), + (0xFEFB, "M", "لا"), + (0xFEFD, "X"), + (0xFEFF, "I"), + (0xFF00, "X"), + (0xFF01, "3", "!"), + (0xFF02, "3", '"'), + (0xFF03, "3", "#"), + (0xFF04, "3", "$"), + (0xFF05, "3", "%"), + (0xFF06, "3", "&"), + (0xFF07, "3", "'"), + (0xFF08, "3", "("), + (0xFF09, "3", ")"), + (0xFF0A, "3", "*"), + (0xFF0B, "3", "+"), + (0xFF0C, "3", ","), + (0xFF0D, "M", "-"), + (0xFF0E, "M", "."), + (0xFF0F, "3", "/"), + (0xFF10, "M", "0"), + (0xFF11, "M", "1"), + (0xFF12, "M", "2"), + (0xFF13, "M", "3"), + (0xFF14, "M", "4"), + (0xFF15, "M", "5"), + (0xFF16, "M", "6"), + (0xFF17, "M", "7"), + (0xFF18, "M", "8"), + (0xFF19, "M", "9"), + (0xFF1A, "3", ":"), + (0xFF1B, "3", ";"), + (0xFF1C, "3", "<"), + (0xFF1D, "3", "="), + (0xFF1E, "3", ">"), + ] + + +def _seg_51() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFF1F, "3", "?"), + (0xFF20, "3", "@"), + (0xFF21, "M", "a"), + (0xFF22, "M", "b"), + (0xFF23, "M", "c"), + (0xFF24, "M", "d"), + (0xFF25, "M", "e"), + (0xFF26, "M", "f"), + (0xFF27, "M", "g"), + (0xFF28, "M", "h"), + (0xFF29, "M", "i"), + (0xFF2A, "M", "j"), + (0xFF2B, "M", "k"), + (0xFF2C, "M", "l"), + (0xFF2D, "M", "m"), + (0xFF2E, "M", "n"), + (0xFF2F, "M", "o"), + (0xFF30, "M", "p"), + (0xFF31, "M", "q"), + (0xFF32, "M", "r"), + (0xFF33, "M", "s"), + (0xFF34, "M", "t"), + (0xFF35, "M", "u"), + (0xFF36, "M", "v"), + (0xFF37, "M", "w"), + (0xFF38, "M", "x"), + (0xFF39, "M", "y"), + (0xFF3A, "M", "z"), + (0xFF3B, "3", "["), + (0xFF3C, "3", "\\"), + (0xFF3D, "3", "]"), + (0xFF3E, "3", "^"), + (0xFF3F, "3", "_"), + (0xFF40, "3", "`"), + (0xFF41, "M", "a"), + (0xFF42, "M", "b"), + (0xFF43, "M", "c"), + (0xFF44, "M", "d"), + (0xFF45, "M", "e"), + (0xFF46, "M", "f"), + (0xFF47, "M", "g"), + (0xFF48, "M", "h"), + (0xFF49, "M", "i"), + (0xFF4A, "M", "j"), + (0xFF4B, "M", "k"), + (0xFF4C, "M", "l"), + (0xFF4D, "M", "m"), + (0xFF4E, "M", "n"), + (0xFF4F, "M", "o"), + (0xFF50, "M", "p"), + (0xFF51, "M", "q"), + (0xFF52, "M", "r"), + (0xFF53, "M", "s"), + (0xFF54, "M", "t"), + (0xFF55, "M", "u"), + (0xFF56, "M", "v"), + (0xFF57, "M", "w"), + (0xFF58, "M", "x"), + (0xFF59, "M", "y"), + (0xFF5A, "M", "z"), + (0xFF5B, "3", "{"), + (0xFF5C, "3", "|"), + (0xFF5D, "3", "}"), + (0xFF5E, "3", "~"), + (0xFF5F, "M", "⦅"), + (0xFF60, "M", "⦆"), + (0xFF61, "M", "."), + (0xFF62, "M", "「"), + (0xFF63, "M", "」"), + (0xFF64, "M", "、"), + (0xFF65, "M", "・"), + (0xFF66, "M", "ヲ"), + (0xFF67, "M", "ァ"), + (0xFF68, "M", "ィ"), + (0xFF69, "M", "ゥ"), + (0xFF6A, "M", "ェ"), + (0xFF6B, "M", "ォ"), + (0xFF6C, "M", "ャ"), + (0xFF6D, "M", "ュ"), + (0xFF6E, "M", "ョ"), + (0xFF6F, "M", "ッ"), + (0xFF70, "M", "ー"), + (0xFF71, "M", "ア"), + (0xFF72, "M", "イ"), + (0xFF73, "M", "ウ"), + (0xFF74, "M", "エ"), + (0xFF75, "M", "オ"), + (0xFF76, "M", "カ"), + (0xFF77, "M", "キ"), + (0xFF78, "M", "ク"), + (0xFF79, "M", "ケ"), + (0xFF7A, "M", "コ"), + (0xFF7B, "M", "サ"), + (0xFF7C, "M", "シ"), + (0xFF7D, "M", "ス"), + (0xFF7E, "M", "セ"), + (0xFF7F, "M", "ソ"), + (0xFF80, "M", "タ"), + (0xFF81, "M", "チ"), + (0xFF82, "M", "ツ"), + ] + + +def _seg_52() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFF83, "M", "テ"), + (0xFF84, "M", "ト"), + (0xFF85, "M", "ナ"), + (0xFF86, "M", "ニ"), + (0xFF87, "M", "ヌ"), + (0xFF88, "M", "ネ"), + (0xFF89, "M", "ノ"), + (0xFF8A, "M", "ハ"), + (0xFF8B, "M", "ヒ"), + (0xFF8C, "M", "フ"), + (0xFF8D, "M", "ヘ"), + (0xFF8E, "M", "ホ"), + (0xFF8F, "M", "マ"), + (0xFF90, "M", "ミ"), + (0xFF91, "M", "ム"), + (0xFF92, "M", "メ"), + (0xFF93, "M", "モ"), + (0xFF94, "M", "ヤ"), + (0xFF95, "M", "ユ"), + (0xFF96, "M", "ヨ"), + (0xFF97, "M", "ラ"), + (0xFF98, "M", "リ"), + (0xFF99, "M", "ル"), + (0xFF9A, "M", "レ"), + (0xFF9B, "M", "ロ"), + (0xFF9C, "M", "ワ"), + (0xFF9D, "M", "ン"), + (0xFF9E, "M", "゙"), + (0xFF9F, "M", "゚"), + (0xFFA0, "X"), + (0xFFA1, "M", "ᄀ"), + (0xFFA2, "M", "ᄁ"), + (0xFFA3, "M", "ᆪ"), + (0xFFA4, "M", "ᄂ"), + (0xFFA5, "M", "ᆬ"), + (0xFFA6, "M", "ᆭ"), + (0xFFA7, "M", "ᄃ"), + (0xFFA8, "M", "ᄄ"), + (0xFFA9, "M", "ᄅ"), + (0xFFAA, "M", "ᆰ"), + (0xFFAB, "M", "ᆱ"), + (0xFFAC, "M", "ᆲ"), + (0xFFAD, "M", "ᆳ"), + (0xFFAE, "M", "ᆴ"), + (0xFFAF, "M", "ᆵ"), + (0xFFB0, "M", "ᄚ"), + (0xFFB1, "M", "ᄆ"), + (0xFFB2, "M", "ᄇ"), + (0xFFB3, "M", "ᄈ"), + (0xFFB4, "M", "ᄡ"), + (0xFFB5, "M", "ᄉ"), + (0xFFB6, "M", "ᄊ"), + (0xFFB7, "M", "ᄋ"), + (0xFFB8, "M", "ᄌ"), + (0xFFB9, "M", "ᄍ"), + (0xFFBA, "M", "ᄎ"), + (0xFFBB, "M", "ᄏ"), + (0xFFBC, "M", "ᄐ"), + (0xFFBD, "M", "ᄑ"), + (0xFFBE, "M", "ᄒ"), + (0xFFBF, "X"), + (0xFFC2, "M", "ᅡ"), + (0xFFC3, "M", "ᅢ"), + (0xFFC4, "M", "ᅣ"), + (0xFFC5, "M", "ᅤ"), + (0xFFC6, "M", "ᅥ"), + (0xFFC7, "M", "ᅦ"), + (0xFFC8, "X"), + (0xFFCA, "M", "ᅧ"), + (0xFFCB, "M", "ᅨ"), + (0xFFCC, "M", "ᅩ"), + (0xFFCD, "M", "ᅪ"), + (0xFFCE, "M", "ᅫ"), + (0xFFCF, "M", "ᅬ"), + (0xFFD0, "X"), + (0xFFD2, "M", "ᅭ"), + (0xFFD3, "M", "ᅮ"), + (0xFFD4, "M", "ᅯ"), + (0xFFD5, "M", "ᅰ"), + (0xFFD6, "M", "ᅱ"), + (0xFFD7, "M", "ᅲ"), + (0xFFD8, "X"), + (0xFFDA, "M", "ᅳ"), + (0xFFDB, "M", "ᅴ"), + (0xFFDC, "M", "ᅵ"), + (0xFFDD, "X"), + (0xFFE0, "M", "¢"), + (0xFFE1, "M", "£"), + (0xFFE2, "M", "¬"), + (0xFFE3, "3", " ̄"), + (0xFFE4, "M", "¦"), + (0xFFE5, "M", "¥"), + (0xFFE6, "M", "₩"), + (0xFFE7, "X"), + (0xFFE8, "M", "│"), + (0xFFE9, "M", "←"), + (0xFFEA, "M", "↑"), + (0xFFEB, "M", "→"), + (0xFFEC, "M", "↓"), + (0xFFED, "M", "■"), + ] + + +def _seg_53() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFFEE, "M", "○"), + (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"), + (0x1019D, "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"), + (0x1034B, "X"), + (0x10350, "V"), + (0x1037B, "X"), + (0x10380, "V"), + (0x1039E, "X"), + (0x1039F, "V"), + (0x103C4, "X"), + (0x103C8, "V"), + (0x103D6, "X"), + (0x10400, "M", "𐐨"), + (0x10401, "M", "𐐩"), + (0x10402, "M", "𐐪"), + (0x10403, "M", "𐐫"), + (0x10404, "M", "𐐬"), + (0x10405, "M", "𐐭"), + (0x10406, "M", "𐐮"), + (0x10407, "M", "𐐯"), + (0x10408, "M", "𐐰"), + (0x10409, "M", "𐐱"), + (0x1040A, "M", "𐐲"), + (0x1040B, "M", "𐐳"), + (0x1040C, "M", "𐐴"), + (0x1040D, "M", "𐐵"), + (0x1040E, "M", "𐐶"), + (0x1040F, "M", "𐐷"), + (0x10410, "M", "𐐸"), + (0x10411, "M", "𐐹"), + (0x10412, "M", "𐐺"), + (0x10413, "M", "𐐻"), + (0x10414, "M", "𐐼"), + (0x10415, "M", "𐐽"), + (0x10416, "M", "𐐾"), + (0x10417, "M", "𐐿"), + (0x10418, "M", "𐑀"), + (0x10419, "M", "𐑁"), + (0x1041A, "M", "𐑂"), + (0x1041B, "M", "𐑃"), + (0x1041C, "M", "𐑄"), + (0x1041D, "M", "𐑅"), + (0x1041E, "M", "𐑆"), + (0x1041F, "M", "𐑇"), + (0x10420, "M", "𐑈"), + (0x10421, "M", "𐑉"), + (0x10422, "M", "𐑊"), + (0x10423, "M", "𐑋"), + (0x10424, "M", "𐑌"), + (0x10425, "M", "𐑍"), + (0x10426, "M", "𐑎"), + (0x10427, "M", "𐑏"), + (0x10428, "V"), + (0x1049E, "X"), + (0x104A0, "V"), + (0x104AA, "X"), + (0x104B0, "M", "𐓘"), + (0x104B1, "M", "𐓙"), + (0x104B2, "M", "𐓚"), + (0x104B3, "M", "𐓛"), + (0x104B4, "M", "𐓜"), + (0x104B5, "M", "𐓝"), + (0x104B6, "M", "𐓞"), + (0x104B7, "M", "𐓟"), + (0x104B8, "M", "𐓠"), + (0x104B9, "M", "𐓡"), + ] + + +def _seg_54() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x104BA, "M", "𐓢"), + (0x104BB, "M", "𐓣"), + (0x104BC, "M", "𐓤"), + (0x104BD, "M", "𐓥"), + (0x104BE, "M", "𐓦"), + (0x104BF, "M", "𐓧"), + (0x104C0, "M", "𐓨"), + (0x104C1, "M", "𐓩"), + (0x104C2, "M", "𐓪"), + (0x104C3, "M", "𐓫"), + (0x104C4, "M", "𐓬"), + (0x104C5, "M", "𐓭"), + (0x104C6, "M", "𐓮"), + (0x104C7, "M", "𐓯"), + (0x104C8, "M", "𐓰"), + (0x104C9, "M", "𐓱"), + (0x104CA, "M", "𐓲"), + (0x104CB, "M", "𐓳"), + (0x104CC, "M", "𐓴"), + (0x104CD, "M", "𐓵"), + (0x104CE, "M", "𐓶"), + (0x104CF, "M", "𐓷"), + (0x104D0, "M", "𐓸"), + (0x104D1, "M", "𐓹"), + (0x104D2, "M", "𐓺"), + (0x104D3, "M", "𐓻"), + (0x104D4, "X"), + (0x104D8, "V"), + (0x104FC, "X"), + (0x10500, "V"), + (0x10528, "X"), + (0x10530, "V"), + (0x10564, "X"), + (0x1056F, "V"), + (0x10570, "M", "𐖗"), + (0x10571, "M", "𐖘"), + (0x10572, "M", "𐖙"), + (0x10573, "M", "𐖚"), + (0x10574, "M", "𐖛"), + (0x10575, "M", "𐖜"), + (0x10576, "M", "𐖝"), + (0x10577, "M", "𐖞"), + (0x10578, "M", "𐖟"), + (0x10579, "M", "𐖠"), + (0x1057A, "M", "𐖡"), + (0x1057B, "X"), + (0x1057C, "M", "𐖣"), + (0x1057D, "M", "𐖤"), + (0x1057E, "M", "𐖥"), + (0x1057F, "M", "𐖦"), + (0x10580, "M", "𐖧"), + (0x10581, "M", "𐖨"), + (0x10582, "M", "𐖩"), + (0x10583, "M", "𐖪"), + (0x10584, "M", "𐖫"), + (0x10585, "M", "𐖬"), + (0x10586, "M", "𐖭"), + (0x10587, "M", "𐖮"), + (0x10588, "M", "𐖯"), + (0x10589, "M", "𐖰"), + (0x1058A, "M", "𐖱"), + (0x1058B, "X"), + (0x1058C, "M", "𐖳"), + (0x1058D, "M", "𐖴"), + (0x1058E, "M", "𐖵"), + (0x1058F, "M", "𐖶"), + (0x10590, "M", "𐖷"), + (0x10591, "M", "𐖸"), + (0x10592, "M", "𐖹"), + (0x10593, "X"), + (0x10594, "M", "𐖻"), + (0x10595, "M", "𐖼"), + (0x10596, "X"), + (0x10597, "V"), + (0x105A2, "X"), + (0x105A3, "V"), + (0x105B2, "X"), + (0x105B3, "V"), + (0x105BA, "X"), + (0x105BB, "V"), + (0x105BD, "X"), + (0x10600, "V"), + (0x10737, "X"), + (0x10740, "V"), + (0x10756, "X"), + (0x10760, "V"), + (0x10768, "X"), + (0x10780, "V"), + (0x10781, "M", "ː"), + (0x10782, "M", "ˑ"), + (0x10783, "M", "æ"), + (0x10784, "M", "ʙ"), + (0x10785, "M", "ɓ"), + (0x10786, "X"), + (0x10787, "M", "ʣ"), + (0x10788, "M", "ꭦ"), + (0x10789, "M", "ʥ"), + (0x1078A, "M", "ʤ"), + (0x1078B, "M", "ɖ"), + (0x1078C, "M", "ɗ"), + ] + + +def _seg_55() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1078D, "M", "ᶑ"), + (0x1078E, "M", "ɘ"), + (0x1078F, "M", "ɞ"), + (0x10790, "M", "ʩ"), + (0x10791, "M", "ɤ"), + (0x10792, "M", "ɢ"), + (0x10793, "M", "ɠ"), + (0x10794, "M", "ʛ"), + (0x10795, "M", "ħ"), + (0x10796, "M", "ʜ"), + (0x10797, "M", "ɧ"), + (0x10798, "M", "ʄ"), + (0x10799, "M", "ʪ"), + (0x1079A, "M", "ʫ"), + (0x1079B, "M", "ɬ"), + (0x1079C, "M", "𝼄"), + (0x1079D, "M", "ꞎ"), + (0x1079E, "M", "ɮ"), + (0x1079F, "M", "𝼅"), + (0x107A0, "M", "ʎ"), + (0x107A1, "M", "𝼆"), + (0x107A2, "M", "ø"), + (0x107A3, "M", "ɶ"), + (0x107A4, "M", "ɷ"), + (0x107A5, "M", "q"), + (0x107A6, "M", "ɺ"), + (0x107A7, "M", "𝼈"), + (0x107A8, "M", "ɽ"), + (0x107A9, "M", "ɾ"), + (0x107AA, "M", "ʀ"), + (0x107AB, "M", "ʨ"), + (0x107AC, "M", "ʦ"), + (0x107AD, "M", "ꭧ"), + (0x107AE, "M", "ʧ"), + (0x107AF, "M", "ʈ"), + (0x107B0, "M", "ⱱ"), + (0x107B1, "X"), + (0x107B2, "M", "ʏ"), + (0x107B3, "M", "ʡ"), + (0x107B4, "M", "ʢ"), + (0x107B5, "M", "ʘ"), + (0x107B6, "M", "ǀ"), + (0x107B7, "M", "ǁ"), + (0x107B8, "M", "ǂ"), + (0x107B9, "M", "𝼊"), + (0x107BA, "M", "𝼞"), + (0x107BB, "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"), + (0x10A36, "X"), + (0x10A38, "V"), + (0x10A3B, "X"), + (0x10A3F, "V"), + (0x10A49, "X"), + (0x10A50, "V"), + (0x10A59, "X"), + (0x10A60, "V"), + (0x10AA0, "X"), + (0x10AC0, "V"), + (0x10AE7, "X"), + (0x10AEB, "V"), + (0x10AF7, "X"), + (0x10B00, "V"), + ] + + +def _seg_56() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (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", "𐳀"), + (0x10C81, "M", "𐳁"), + (0x10C82, "M", "𐳂"), + (0x10C83, "M", "𐳃"), + (0x10C84, "M", "𐳄"), + (0x10C85, "M", "𐳅"), + (0x10C86, "M", "𐳆"), + (0x10C87, "M", "𐳇"), + (0x10C88, "M", "𐳈"), + (0x10C89, "M", "𐳉"), + (0x10C8A, "M", "𐳊"), + (0x10C8B, "M", "𐳋"), + (0x10C8C, "M", "𐳌"), + (0x10C8D, "M", "𐳍"), + (0x10C8E, "M", "𐳎"), + (0x10C8F, "M", "𐳏"), + (0x10C90, "M", "𐳐"), + (0x10C91, "M", "𐳑"), + (0x10C92, "M", "𐳒"), + (0x10C93, "M", "𐳓"), + (0x10C94, "M", "𐳔"), + (0x10C95, "M", "𐳕"), + (0x10C96, "M", "𐳖"), + (0x10C97, "M", "𐳗"), + (0x10C98, "M", "𐳘"), + (0x10C99, "M", "𐳙"), + (0x10C9A, "M", "𐳚"), + (0x10C9B, "M", "𐳛"), + (0x10C9C, "M", "𐳜"), + (0x10C9D, "M", "𐳝"), + (0x10C9E, "M", "𐳞"), + (0x10C9F, "M", "𐳟"), + (0x10CA0, "M", "𐳠"), + (0x10CA1, "M", "𐳡"), + (0x10CA2, "M", "𐳢"), + (0x10CA3, "M", "𐳣"), + (0x10CA4, "M", "𐳤"), + (0x10CA5, "M", "𐳥"), + (0x10CA6, "M", "𐳦"), + (0x10CA7, "M", "𐳧"), + (0x10CA8, "M", "𐳨"), + (0x10CA9, "M", "𐳩"), + (0x10CAA, "M", "𐳪"), + (0x10CAB, "M", "𐳫"), + (0x10CAC, "M", "𐳬"), + (0x10CAD, "M", "𐳭"), + (0x10CAE, "M", "𐳮"), + (0x10CAF, "M", "𐳯"), + (0x10CB0, "M", "𐳰"), + (0x10CB1, "M", "𐳱"), + (0x10CB2, "M", "𐳲"), + (0x10CB3, "X"), + (0x10CC0, "V"), + (0x10CF3, "X"), + (0x10CFA, "V"), + (0x10D28, "X"), + (0x10D30, "V"), + (0x10D3A, "X"), + (0x10E60, "V"), + (0x10E7F, "X"), + (0x10E80, "V"), + (0x10EAA, "X"), + (0x10EAB, "V"), + (0x10EAE, "X"), + (0x10EB0, "V"), + (0x10EB2, "X"), + (0x10EFD, "V"), + (0x10F28, "X"), + (0x10F30, "V"), + (0x10F5A, "X"), + (0x10F70, "V"), + (0x10F8A, "X"), + (0x10FB0, "V"), + (0x10FCC, "X"), + (0x10FE0, "V"), + (0x10FF7, "X"), + (0x11000, "V"), + (0x1104E, "X"), + (0x11052, "V"), + (0x11076, "X"), + (0x1107F, "V"), + (0x110BD, "X"), + (0x110BE, "V"), + (0x110C3, "X"), + (0x110D0, "V"), + (0x110E9, "X"), + (0x110F0, "V"), + ] + + +def _seg_57() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x110FA, "X"), + (0x11100, "V"), + (0x11135, "X"), + (0x11136, "V"), + (0x11148, "X"), + (0x11150, "V"), + (0x11177, "X"), + (0x11180, "V"), + (0x111E0, "X"), + (0x111E1, "V"), + (0x111F5, "X"), + (0x11200, "V"), + (0x11212, "X"), + (0x11213, "V"), + (0x11242, "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"), + (0x1133B, "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"), + (0x11400, "V"), + (0x1145C, "X"), + (0x1145D, "V"), + (0x11462, "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"), + (0x116BA, "X"), + (0x116C0, "V"), + (0x116CA, "X"), + (0x11700, "V"), + (0x1171B, "X"), + (0x1171D, "V"), + (0x1172C, "X"), + (0x11730, "V"), + (0x11747, "X"), + (0x11800, "V"), + (0x1183C, "X"), + (0x118A0, "M", "𑣀"), + (0x118A1, "M", "𑣁"), + (0x118A2, "M", "𑣂"), + (0x118A3, "M", "𑣃"), + (0x118A4, "M", "𑣄"), + (0x118A5, "M", "𑣅"), + (0x118A6, "M", "𑣆"), + (0x118A7, "M", "𑣇"), + (0x118A8, "M", "𑣈"), + (0x118A9, "M", "𑣉"), + (0x118AA, "M", "𑣊"), + ] + + +def _seg_58() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x118AB, "M", "𑣋"), + (0x118AC, "M", "𑣌"), + (0x118AD, "M", "𑣍"), + (0x118AE, "M", "𑣎"), + (0x118AF, "M", "𑣏"), + (0x118B0, "M", "𑣐"), + (0x118B1, "M", "𑣑"), + (0x118B2, "M", "𑣒"), + (0x118B3, "M", "𑣓"), + (0x118B4, "M", "𑣔"), + (0x118B5, "M", "𑣕"), + (0x118B6, "M", "𑣖"), + (0x118B7, "M", "𑣗"), + (0x118B8, "M", "𑣘"), + (0x118B9, "M", "𑣙"), + (0x118BA, "M", "𑣚"), + (0x118BB, "M", "𑣛"), + (0x118BC, "M", "𑣜"), + (0x118BD, "M", "𑣝"), + (0x118BE, "M", "𑣞"), + (0x118BF, "M", "𑣟"), + (0x118C0, "V"), + (0x118F3, "X"), + (0x118FF, "V"), + (0x11907, "X"), + (0x11909, "V"), + (0x1190A, "X"), + (0x1190C, "V"), + (0x11914, "X"), + (0x11915, "V"), + (0x11917, "X"), + (0x11918, "V"), + (0x11936, "X"), + (0x11937, "V"), + (0x11939, "X"), + (0x1193B, "V"), + (0x11947, "X"), + (0x11950, "V"), + (0x1195A, "X"), + (0x119A0, "V"), + (0x119A8, "X"), + (0x119AA, "V"), + (0x119D8, "X"), + (0x119DA, "V"), + (0x119E5, "X"), + (0x11A00, "V"), + (0x11A48, "X"), + (0x11A50, "V"), + (0x11AA3, "X"), + (0x11AB0, "V"), + (0x11AF9, "X"), + (0x11B00, "V"), + (0x11B0A, "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"), + (0x11D3F, "V"), + (0x11D48, "X"), + (0x11D50, "V"), + (0x11D5A, "X"), + (0x11D60, "V"), + (0x11D66, "X"), + (0x11D67, "V"), + (0x11D69, "X"), + (0x11D6A, "V"), + (0x11D8F, "X"), + (0x11D90, "V"), + (0x11D92, "X"), + (0x11D93, "V"), + (0x11D99, "X"), + (0x11DA0, "V"), + (0x11DAA, "X"), + (0x11EE0, "V"), + (0x11EF9, "X"), + (0x11F00, "V"), + (0x11F11, "X"), + (0x11F12, "V"), + (0x11F3B, "X"), + (0x11F3E, "V"), + ] + + +def _seg_59() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x11F5A, "X"), + (0x11FB0, "V"), + (0x11FB1, "X"), + (0x11FC0, "V"), + (0x11FF2, "X"), + (0x11FFF, "V"), + (0x1239A, "X"), + (0x12400, "V"), + (0x1246F, "X"), + (0x12470, "V"), + (0x12475, "X"), + (0x12480, "V"), + (0x12544, "X"), + (0x12F90, "V"), + (0x12FF3, "X"), + (0x13000, "V"), + (0x13430, "X"), + (0x13440, "V"), + (0x13456, "X"), + (0x14400, "V"), + (0x14647, "X"), + (0x16800, "V"), + (0x16A39, "X"), + (0x16A40, "V"), + (0x16A5F, "X"), + (0x16A60, "V"), + (0x16A6A, "X"), + (0x16A6E, "V"), + (0x16ABF, "X"), + (0x16AC0, "V"), + (0x16ACA, "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"), + (0x16E40, "M", "𖹠"), + (0x16E41, "M", "𖹡"), + (0x16E42, "M", "𖹢"), + (0x16E43, "M", "𖹣"), + (0x16E44, "M", "𖹤"), + (0x16E45, "M", "𖹥"), + (0x16E46, "M", "𖹦"), + (0x16E47, "M", "𖹧"), + (0x16E48, "M", "𖹨"), + (0x16E49, "M", "𖹩"), + (0x16E4A, "M", "𖹪"), + (0x16E4B, "M", "𖹫"), + (0x16E4C, "M", "𖹬"), + (0x16E4D, "M", "𖹭"), + (0x16E4E, "M", "𖹮"), + (0x16E4F, "M", "𖹯"), + (0x16E50, "M", "𖹰"), + (0x16E51, "M", "𖹱"), + (0x16E52, "M", "𖹲"), + (0x16E53, "M", "𖹳"), + (0x16E54, "M", "𖹴"), + (0x16E55, "M", "𖹵"), + (0x16E56, "M", "𖹶"), + (0x16E57, "M", "𖹷"), + (0x16E58, "M", "𖹸"), + (0x16E59, "M", "𖹹"), + (0x16E5A, "M", "𖹺"), + (0x16E5B, "M", "𖹻"), + (0x16E5C, "M", "𖹼"), + (0x16E5D, "M", "𖹽"), + (0x16E5E, "M", "𖹾"), + (0x16E5F, "M", "𖹿"), + (0x16E60, "V"), + (0x16E9B, "X"), + (0x16F00, "V"), + (0x16F4B, "X"), + (0x16F4F, "V"), + (0x16F88, "X"), + (0x16F8F, "V"), + (0x16FA0, "X"), + (0x16FE0, "V"), + (0x16FE5, "X"), + (0x16FF0, "V"), + (0x16FF2, "X"), + (0x17000, "V"), + (0x187F8, "X"), + (0x18800, "V"), + (0x18CD6, "X"), + (0x18D00, "V"), + (0x18D09, "X"), + (0x1AFF0, "V"), + (0x1AFF4, "X"), + (0x1AFF5, "V"), + (0x1AFFC, "X"), + (0x1AFFD, "V"), + ] + + +def _seg_60() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1AFFF, "X"), + (0x1B000, "V"), + (0x1B123, "X"), + (0x1B132, "V"), + (0x1B133, "X"), + (0x1B150, "V"), + (0x1B153, "X"), + (0x1B155, "V"), + (0x1B156, "X"), + (0x1B164, "V"), + (0x1B168, "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"), + (0x1CF00, "V"), + (0x1CF2E, "X"), + (0x1CF30, "V"), + (0x1CF47, "X"), + (0x1CF50, "V"), + (0x1CFC4, "X"), + (0x1D000, "V"), + (0x1D0F6, "X"), + (0x1D100, "V"), + (0x1D127, "X"), + (0x1D129, "V"), + (0x1D15E, "M", "𝅗𝅥"), + (0x1D15F, "M", "𝅘𝅥"), + (0x1D160, "M", "𝅘𝅥𝅮"), + (0x1D161, "M", "𝅘𝅥𝅯"), + (0x1D162, "M", "𝅘𝅥𝅰"), + (0x1D163, "M", "𝅘𝅥𝅱"), + (0x1D164, "M", "𝅘𝅥𝅲"), + (0x1D165, "V"), + (0x1D173, "X"), + (0x1D17B, "V"), + (0x1D1BB, "M", "𝆹𝅥"), + (0x1D1BC, "M", "𝆺𝅥"), + (0x1D1BD, "M", "𝆹𝅥𝅮"), + (0x1D1BE, "M", "𝆺𝅥𝅮"), + (0x1D1BF, "M", "𝆹𝅥𝅯"), + (0x1D1C0, "M", "𝆺𝅥𝅯"), + (0x1D1C1, "V"), + (0x1D1EB, "X"), + (0x1D200, "V"), + (0x1D246, "X"), + (0x1D2C0, "V"), + (0x1D2D4, "X"), + (0x1D2E0, "V"), + (0x1D2F4, "X"), + (0x1D300, "V"), + (0x1D357, "X"), + (0x1D360, "V"), + (0x1D379, "X"), + (0x1D400, "M", "a"), + (0x1D401, "M", "b"), + (0x1D402, "M", "c"), + (0x1D403, "M", "d"), + (0x1D404, "M", "e"), + (0x1D405, "M", "f"), + (0x1D406, "M", "g"), + (0x1D407, "M", "h"), + (0x1D408, "M", "i"), + (0x1D409, "M", "j"), + (0x1D40A, "M", "k"), + (0x1D40B, "M", "l"), + (0x1D40C, "M", "m"), + (0x1D40D, "M", "n"), + (0x1D40E, "M", "o"), + (0x1D40F, "M", "p"), + (0x1D410, "M", "q"), + (0x1D411, "M", "r"), + (0x1D412, "M", "s"), + (0x1D413, "M", "t"), + (0x1D414, "M", "u"), + (0x1D415, "M", "v"), + (0x1D416, "M", "w"), + (0x1D417, "M", "x"), + (0x1D418, "M", "y"), + (0x1D419, "M", "z"), + (0x1D41A, "M", "a"), + (0x1D41B, "M", "b"), + (0x1D41C, "M", "c"), + (0x1D41D, "M", "d"), + (0x1D41E, "M", "e"), + (0x1D41F, "M", "f"), + (0x1D420, "M", "g"), + (0x1D421, "M", "h"), + (0x1D422, "M", "i"), + (0x1D423, "M", "j"), + (0x1D424, "M", "k"), + ] + + +def _seg_61() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D425, "M", "l"), + (0x1D426, "M", "m"), + (0x1D427, "M", "n"), + (0x1D428, "M", "o"), + (0x1D429, "M", "p"), + (0x1D42A, "M", "q"), + (0x1D42B, "M", "r"), + (0x1D42C, "M", "s"), + (0x1D42D, "M", "t"), + (0x1D42E, "M", "u"), + (0x1D42F, "M", "v"), + (0x1D430, "M", "w"), + (0x1D431, "M", "x"), + (0x1D432, "M", "y"), + (0x1D433, "M", "z"), + (0x1D434, "M", "a"), + (0x1D435, "M", "b"), + (0x1D436, "M", "c"), + (0x1D437, "M", "d"), + (0x1D438, "M", "e"), + (0x1D439, "M", "f"), + (0x1D43A, "M", "g"), + (0x1D43B, "M", "h"), + (0x1D43C, "M", "i"), + (0x1D43D, "M", "j"), + (0x1D43E, "M", "k"), + (0x1D43F, "M", "l"), + (0x1D440, "M", "m"), + (0x1D441, "M", "n"), + (0x1D442, "M", "o"), + (0x1D443, "M", "p"), + (0x1D444, "M", "q"), + (0x1D445, "M", "r"), + (0x1D446, "M", "s"), + (0x1D447, "M", "t"), + (0x1D448, "M", "u"), + (0x1D449, "M", "v"), + (0x1D44A, "M", "w"), + (0x1D44B, "M", "x"), + (0x1D44C, "M", "y"), + (0x1D44D, "M", "z"), + (0x1D44E, "M", "a"), + (0x1D44F, "M", "b"), + (0x1D450, "M", "c"), + (0x1D451, "M", "d"), + (0x1D452, "M", "e"), + (0x1D453, "M", "f"), + (0x1D454, "M", "g"), + (0x1D455, "X"), + (0x1D456, "M", "i"), + (0x1D457, "M", "j"), + (0x1D458, "M", "k"), + (0x1D459, "M", "l"), + (0x1D45A, "M", "m"), + (0x1D45B, "M", "n"), + (0x1D45C, "M", "o"), + (0x1D45D, "M", "p"), + (0x1D45E, "M", "q"), + (0x1D45F, "M", "r"), + (0x1D460, "M", "s"), + (0x1D461, "M", "t"), + (0x1D462, "M", "u"), + (0x1D463, "M", "v"), + (0x1D464, "M", "w"), + (0x1D465, "M", "x"), + (0x1D466, "M", "y"), + (0x1D467, "M", "z"), + (0x1D468, "M", "a"), + (0x1D469, "M", "b"), + (0x1D46A, "M", "c"), + (0x1D46B, "M", "d"), + (0x1D46C, "M", "e"), + (0x1D46D, "M", "f"), + (0x1D46E, "M", "g"), + (0x1D46F, "M", "h"), + (0x1D470, "M", "i"), + (0x1D471, "M", "j"), + (0x1D472, "M", "k"), + (0x1D473, "M", "l"), + (0x1D474, "M", "m"), + (0x1D475, "M", "n"), + (0x1D476, "M", "o"), + (0x1D477, "M", "p"), + (0x1D478, "M", "q"), + (0x1D479, "M", "r"), + (0x1D47A, "M", "s"), + (0x1D47B, "M", "t"), + (0x1D47C, "M", "u"), + (0x1D47D, "M", "v"), + (0x1D47E, "M", "w"), + (0x1D47F, "M", "x"), + (0x1D480, "M", "y"), + (0x1D481, "M", "z"), + (0x1D482, "M", "a"), + (0x1D483, "M", "b"), + (0x1D484, "M", "c"), + (0x1D485, "M", "d"), + (0x1D486, "M", "e"), + (0x1D487, "M", "f"), + (0x1D488, "M", "g"), + ] + + +def _seg_62() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D489, "M", "h"), + (0x1D48A, "M", "i"), + (0x1D48B, "M", "j"), + (0x1D48C, "M", "k"), + (0x1D48D, "M", "l"), + (0x1D48E, "M", "m"), + (0x1D48F, "M", "n"), + (0x1D490, "M", "o"), + (0x1D491, "M", "p"), + (0x1D492, "M", "q"), + (0x1D493, "M", "r"), + (0x1D494, "M", "s"), + (0x1D495, "M", "t"), + (0x1D496, "M", "u"), + (0x1D497, "M", "v"), + (0x1D498, "M", "w"), + (0x1D499, "M", "x"), + (0x1D49A, "M", "y"), + (0x1D49B, "M", "z"), + (0x1D49C, "M", "a"), + (0x1D49D, "X"), + (0x1D49E, "M", "c"), + (0x1D49F, "M", "d"), + (0x1D4A0, "X"), + (0x1D4A2, "M", "g"), + (0x1D4A3, "X"), + (0x1D4A5, "M", "j"), + (0x1D4A6, "M", "k"), + (0x1D4A7, "X"), + (0x1D4A9, "M", "n"), + (0x1D4AA, "M", "o"), + (0x1D4AB, "M", "p"), + (0x1D4AC, "M", "q"), + (0x1D4AD, "X"), + (0x1D4AE, "M", "s"), + (0x1D4AF, "M", "t"), + (0x1D4B0, "M", "u"), + (0x1D4B1, "M", "v"), + (0x1D4B2, "M", "w"), + (0x1D4B3, "M", "x"), + (0x1D4B4, "M", "y"), + (0x1D4B5, "M", "z"), + (0x1D4B6, "M", "a"), + (0x1D4B7, "M", "b"), + (0x1D4B8, "M", "c"), + (0x1D4B9, "M", "d"), + (0x1D4BA, "X"), + (0x1D4BB, "M", "f"), + (0x1D4BC, "X"), + (0x1D4BD, "M", "h"), + (0x1D4BE, "M", "i"), + (0x1D4BF, "M", "j"), + (0x1D4C0, "M", "k"), + (0x1D4C1, "M", "l"), + (0x1D4C2, "M", "m"), + (0x1D4C3, "M", "n"), + (0x1D4C4, "X"), + (0x1D4C5, "M", "p"), + (0x1D4C6, "M", "q"), + (0x1D4C7, "M", "r"), + (0x1D4C8, "M", "s"), + (0x1D4C9, "M", "t"), + (0x1D4CA, "M", "u"), + (0x1D4CB, "M", "v"), + (0x1D4CC, "M", "w"), + (0x1D4CD, "M", "x"), + (0x1D4CE, "M", "y"), + (0x1D4CF, "M", "z"), + (0x1D4D0, "M", "a"), + (0x1D4D1, "M", "b"), + (0x1D4D2, "M", "c"), + (0x1D4D3, "M", "d"), + (0x1D4D4, "M", "e"), + (0x1D4D5, "M", "f"), + (0x1D4D6, "M", "g"), + (0x1D4D7, "M", "h"), + (0x1D4D8, "M", "i"), + (0x1D4D9, "M", "j"), + (0x1D4DA, "M", "k"), + (0x1D4DB, "M", "l"), + (0x1D4DC, "M", "m"), + (0x1D4DD, "M", "n"), + (0x1D4DE, "M", "o"), + (0x1D4DF, "M", "p"), + (0x1D4E0, "M", "q"), + (0x1D4E1, "M", "r"), + (0x1D4E2, "M", "s"), + (0x1D4E3, "M", "t"), + (0x1D4E4, "M", "u"), + (0x1D4E5, "M", "v"), + (0x1D4E6, "M", "w"), + (0x1D4E7, "M", "x"), + (0x1D4E8, "M", "y"), + (0x1D4E9, "M", "z"), + (0x1D4EA, "M", "a"), + (0x1D4EB, "M", "b"), + (0x1D4EC, "M", "c"), + (0x1D4ED, "M", "d"), + (0x1D4EE, "M", "e"), + (0x1D4EF, "M", "f"), + ] + + +def _seg_63() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D4F0, "M", "g"), + (0x1D4F1, "M", "h"), + (0x1D4F2, "M", "i"), + (0x1D4F3, "M", "j"), + (0x1D4F4, "M", "k"), + (0x1D4F5, "M", "l"), + (0x1D4F6, "M", "m"), + (0x1D4F7, "M", "n"), + (0x1D4F8, "M", "o"), + (0x1D4F9, "M", "p"), + (0x1D4FA, "M", "q"), + (0x1D4FB, "M", "r"), + (0x1D4FC, "M", "s"), + (0x1D4FD, "M", "t"), + (0x1D4FE, "M", "u"), + (0x1D4FF, "M", "v"), + (0x1D500, "M", "w"), + (0x1D501, "M", "x"), + (0x1D502, "M", "y"), + (0x1D503, "M", "z"), + (0x1D504, "M", "a"), + (0x1D505, "M", "b"), + (0x1D506, "X"), + (0x1D507, "M", "d"), + (0x1D508, "M", "e"), + (0x1D509, "M", "f"), + (0x1D50A, "M", "g"), + (0x1D50B, "X"), + (0x1D50D, "M", "j"), + (0x1D50E, "M", "k"), + (0x1D50F, "M", "l"), + (0x1D510, "M", "m"), + (0x1D511, "M", "n"), + (0x1D512, "M", "o"), + (0x1D513, "M", "p"), + (0x1D514, "M", "q"), + (0x1D515, "X"), + (0x1D516, "M", "s"), + (0x1D517, "M", "t"), + (0x1D518, "M", "u"), + (0x1D519, "M", "v"), + (0x1D51A, "M", "w"), + (0x1D51B, "M", "x"), + (0x1D51C, "M", "y"), + (0x1D51D, "X"), + (0x1D51E, "M", "a"), + (0x1D51F, "M", "b"), + (0x1D520, "M", "c"), + (0x1D521, "M", "d"), + (0x1D522, "M", "e"), + (0x1D523, "M", "f"), + (0x1D524, "M", "g"), + (0x1D525, "M", "h"), + (0x1D526, "M", "i"), + (0x1D527, "M", "j"), + (0x1D528, "M", "k"), + (0x1D529, "M", "l"), + (0x1D52A, "M", "m"), + (0x1D52B, "M", "n"), + (0x1D52C, "M", "o"), + (0x1D52D, "M", "p"), + (0x1D52E, "M", "q"), + (0x1D52F, "M", "r"), + (0x1D530, "M", "s"), + (0x1D531, "M", "t"), + (0x1D532, "M", "u"), + (0x1D533, "M", "v"), + (0x1D534, "M", "w"), + (0x1D535, "M", "x"), + (0x1D536, "M", "y"), + (0x1D537, "M", "z"), + (0x1D538, "M", "a"), + (0x1D539, "M", "b"), + (0x1D53A, "X"), + (0x1D53B, "M", "d"), + (0x1D53C, "M", "e"), + (0x1D53D, "M", "f"), + (0x1D53E, "M", "g"), + (0x1D53F, "X"), + (0x1D540, "M", "i"), + (0x1D541, "M", "j"), + (0x1D542, "M", "k"), + (0x1D543, "M", "l"), + (0x1D544, "M", "m"), + (0x1D545, "X"), + (0x1D546, "M", "o"), + (0x1D547, "X"), + (0x1D54A, "M", "s"), + (0x1D54B, "M", "t"), + (0x1D54C, "M", "u"), + (0x1D54D, "M", "v"), + (0x1D54E, "M", "w"), + (0x1D54F, "M", "x"), + (0x1D550, "M", "y"), + (0x1D551, "X"), + (0x1D552, "M", "a"), + (0x1D553, "M", "b"), + (0x1D554, "M", "c"), + (0x1D555, "M", "d"), + (0x1D556, "M", "e"), + ] + + +def _seg_64() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D557, "M", "f"), + (0x1D558, "M", "g"), + (0x1D559, "M", "h"), + (0x1D55A, "M", "i"), + (0x1D55B, "M", "j"), + (0x1D55C, "M", "k"), + (0x1D55D, "M", "l"), + (0x1D55E, "M", "m"), + (0x1D55F, "M", "n"), + (0x1D560, "M", "o"), + (0x1D561, "M", "p"), + (0x1D562, "M", "q"), + (0x1D563, "M", "r"), + (0x1D564, "M", "s"), + (0x1D565, "M", "t"), + (0x1D566, "M", "u"), + (0x1D567, "M", "v"), + (0x1D568, "M", "w"), + (0x1D569, "M", "x"), + (0x1D56A, "M", "y"), + (0x1D56B, "M", "z"), + (0x1D56C, "M", "a"), + (0x1D56D, "M", "b"), + (0x1D56E, "M", "c"), + (0x1D56F, "M", "d"), + (0x1D570, "M", "e"), + (0x1D571, "M", "f"), + (0x1D572, "M", "g"), + (0x1D573, "M", "h"), + (0x1D574, "M", "i"), + (0x1D575, "M", "j"), + (0x1D576, "M", "k"), + (0x1D577, "M", "l"), + (0x1D578, "M", "m"), + (0x1D579, "M", "n"), + (0x1D57A, "M", "o"), + (0x1D57B, "M", "p"), + (0x1D57C, "M", "q"), + (0x1D57D, "M", "r"), + (0x1D57E, "M", "s"), + (0x1D57F, "M", "t"), + (0x1D580, "M", "u"), + (0x1D581, "M", "v"), + (0x1D582, "M", "w"), + (0x1D583, "M", "x"), + (0x1D584, "M", "y"), + (0x1D585, "M", "z"), + (0x1D586, "M", "a"), + (0x1D587, "M", "b"), + (0x1D588, "M", "c"), + (0x1D589, "M", "d"), + (0x1D58A, "M", "e"), + (0x1D58B, "M", "f"), + (0x1D58C, "M", "g"), + (0x1D58D, "M", "h"), + (0x1D58E, "M", "i"), + (0x1D58F, "M", "j"), + (0x1D590, "M", "k"), + (0x1D591, "M", "l"), + (0x1D592, "M", "m"), + (0x1D593, "M", "n"), + (0x1D594, "M", "o"), + (0x1D595, "M", "p"), + (0x1D596, "M", "q"), + (0x1D597, "M", "r"), + (0x1D598, "M", "s"), + (0x1D599, "M", "t"), + (0x1D59A, "M", "u"), + (0x1D59B, "M", "v"), + (0x1D59C, "M", "w"), + (0x1D59D, "M", "x"), + (0x1D59E, "M", "y"), + (0x1D59F, "M", "z"), + (0x1D5A0, "M", "a"), + (0x1D5A1, "M", "b"), + (0x1D5A2, "M", "c"), + (0x1D5A3, "M", "d"), + (0x1D5A4, "M", "e"), + (0x1D5A5, "M", "f"), + (0x1D5A6, "M", "g"), + (0x1D5A7, "M", "h"), + (0x1D5A8, "M", "i"), + (0x1D5A9, "M", "j"), + (0x1D5AA, "M", "k"), + (0x1D5AB, "M", "l"), + (0x1D5AC, "M", "m"), + (0x1D5AD, "M", "n"), + (0x1D5AE, "M", "o"), + (0x1D5AF, "M", "p"), + (0x1D5B0, "M", "q"), + (0x1D5B1, "M", "r"), + (0x1D5B2, "M", "s"), + (0x1D5B3, "M", "t"), + (0x1D5B4, "M", "u"), + (0x1D5B5, "M", "v"), + (0x1D5B6, "M", "w"), + (0x1D5B7, "M", "x"), + (0x1D5B8, "M", "y"), + (0x1D5B9, "M", "z"), + (0x1D5BA, "M", "a"), + ] + + +def _seg_65() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D5BB, "M", "b"), + (0x1D5BC, "M", "c"), + (0x1D5BD, "M", "d"), + (0x1D5BE, "M", "e"), + (0x1D5BF, "M", "f"), + (0x1D5C0, "M", "g"), + (0x1D5C1, "M", "h"), + (0x1D5C2, "M", "i"), + (0x1D5C3, "M", "j"), + (0x1D5C4, "M", "k"), + (0x1D5C5, "M", "l"), + (0x1D5C6, "M", "m"), + (0x1D5C7, "M", "n"), + (0x1D5C8, "M", "o"), + (0x1D5C9, "M", "p"), + (0x1D5CA, "M", "q"), + (0x1D5CB, "M", "r"), + (0x1D5CC, "M", "s"), + (0x1D5CD, "M", "t"), + (0x1D5CE, "M", "u"), + (0x1D5CF, "M", "v"), + (0x1D5D0, "M", "w"), + (0x1D5D1, "M", "x"), + (0x1D5D2, "M", "y"), + (0x1D5D3, "M", "z"), + (0x1D5D4, "M", "a"), + (0x1D5D5, "M", "b"), + (0x1D5D6, "M", "c"), + (0x1D5D7, "M", "d"), + (0x1D5D8, "M", "e"), + (0x1D5D9, "M", "f"), + (0x1D5DA, "M", "g"), + (0x1D5DB, "M", "h"), + (0x1D5DC, "M", "i"), + (0x1D5DD, "M", "j"), + (0x1D5DE, "M", "k"), + (0x1D5DF, "M", "l"), + (0x1D5E0, "M", "m"), + (0x1D5E1, "M", "n"), + (0x1D5E2, "M", "o"), + (0x1D5E3, "M", "p"), + (0x1D5E4, "M", "q"), + (0x1D5E5, "M", "r"), + (0x1D5E6, "M", "s"), + (0x1D5E7, "M", "t"), + (0x1D5E8, "M", "u"), + (0x1D5E9, "M", "v"), + (0x1D5EA, "M", "w"), + (0x1D5EB, "M", "x"), + (0x1D5EC, "M", "y"), + (0x1D5ED, "M", "z"), + (0x1D5EE, "M", "a"), + (0x1D5EF, "M", "b"), + (0x1D5F0, "M", "c"), + (0x1D5F1, "M", "d"), + (0x1D5F2, "M", "e"), + (0x1D5F3, "M", "f"), + (0x1D5F4, "M", "g"), + (0x1D5F5, "M", "h"), + (0x1D5F6, "M", "i"), + (0x1D5F7, "M", "j"), + (0x1D5F8, "M", "k"), + (0x1D5F9, "M", "l"), + (0x1D5FA, "M", "m"), + (0x1D5FB, "M", "n"), + (0x1D5FC, "M", "o"), + (0x1D5FD, "M", "p"), + (0x1D5FE, "M", "q"), + (0x1D5FF, "M", "r"), + (0x1D600, "M", "s"), + (0x1D601, "M", "t"), + (0x1D602, "M", "u"), + (0x1D603, "M", "v"), + (0x1D604, "M", "w"), + (0x1D605, "M", "x"), + (0x1D606, "M", "y"), + (0x1D607, "M", "z"), + (0x1D608, "M", "a"), + (0x1D609, "M", "b"), + (0x1D60A, "M", "c"), + (0x1D60B, "M", "d"), + (0x1D60C, "M", "e"), + (0x1D60D, "M", "f"), + (0x1D60E, "M", "g"), + (0x1D60F, "M", "h"), + (0x1D610, "M", "i"), + (0x1D611, "M", "j"), + (0x1D612, "M", "k"), + (0x1D613, "M", "l"), + (0x1D614, "M", "m"), + (0x1D615, "M", "n"), + (0x1D616, "M", "o"), + (0x1D617, "M", "p"), + (0x1D618, "M", "q"), + (0x1D619, "M", "r"), + (0x1D61A, "M", "s"), + (0x1D61B, "M", "t"), + (0x1D61C, "M", "u"), + (0x1D61D, "M", "v"), + (0x1D61E, "M", "w"), + ] + + +def _seg_66() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D61F, "M", "x"), + (0x1D620, "M", "y"), + (0x1D621, "M", "z"), + (0x1D622, "M", "a"), + (0x1D623, "M", "b"), + (0x1D624, "M", "c"), + (0x1D625, "M", "d"), + (0x1D626, "M", "e"), + (0x1D627, "M", "f"), + (0x1D628, "M", "g"), + (0x1D629, "M", "h"), + (0x1D62A, "M", "i"), + (0x1D62B, "M", "j"), + (0x1D62C, "M", "k"), + (0x1D62D, "M", "l"), + (0x1D62E, "M", "m"), + (0x1D62F, "M", "n"), + (0x1D630, "M", "o"), + (0x1D631, "M", "p"), + (0x1D632, "M", "q"), + (0x1D633, "M", "r"), + (0x1D634, "M", "s"), + (0x1D635, "M", "t"), + (0x1D636, "M", "u"), + (0x1D637, "M", "v"), + (0x1D638, "M", "w"), + (0x1D639, "M", "x"), + (0x1D63A, "M", "y"), + (0x1D63B, "M", "z"), + (0x1D63C, "M", "a"), + (0x1D63D, "M", "b"), + (0x1D63E, "M", "c"), + (0x1D63F, "M", "d"), + (0x1D640, "M", "e"), + (0x1D641, "M", "f"), + (0x1D642, "M", "g"), + (0x1D643, "M", "h"), + (0x1D644, "M", "i"), + (0x1D645, "M", "j"), + (0x1D646, "M", "k"), + (0x1D647, "M", "l"), + (0x1D648, "M", "m"), + (0x1D649, "M", "n"), + (0x1D64A, "M", "o"), + (0x1D64B, "M", "p"), + (0x1D64C, "M", "q"), + (0x1D64D, "M", "r"), + (0x1D64E, "M", "s"), + (0x1D64F, "M", "t"), + (0x1D650, "M", "u"), + (0x1D651, "M", "v"), + (0x1D652, "M", "w"), + (0x1D653, "M", "x"), + (0x1D654, "M", "y"), + (0x1D655, "M", "z"), + (0x1D656, "M", "a"), + (0x1D657, "M", "b"), + (0x1D658, "M", "c"), + (0x1D659, "M", "d"), + (0x1D65A, "M", "e"), + (0x1D65B, "M", "f"), + (0x1D65C, "M", "g"), + (0x1D65D, "M", "h"), + (0x1D65E, "M", "i"), + (0x1D65F, "M", "j"), + (0x1D660, "M", "k"), + (0x1D661, "M", "l"), + (0x1D662, "M", "m"), + (0x1D663, "M", "n"), + (0x1D664, "M", "o"), + (0x1D665, "M", "p"), + (0x1D666, "M", "q"), + (0x1D667, "M", "r"), + (0x1D668, "M", "s"), + (0x1D669, "M", "t"), + (0x1D66A, "M", "u"), + (0x1D66B, "M", "v"), + (0x1D66C, "M", "w"), + (0x1D66D, "M", "x"), + (0x1D66E, "M", "y"), + (0x1D66F, "M", "z"), + (0x1D670, "M", "a"), + (0x1D671, "M", "b"), + (0x1D672, "M", "c"), + (0x1D673, "M", "d"), + (0x1D674, "M", "e"), + (0x1D675, "M", "f"), + (0x1D676, "M", "g"), + (0x1D677, "M", "h"), + (0x1D678, "M", "i"), + (0x1D679, "M", "j"), + (0x1D67A, "M", "k"), + (0x1D67B, "M", "l"), + (0x1D67C, "M", "m"), + (0x1D67D, "M", "n"), + (0x1D67E, "M", "o"), + (0x1D67F, "M", "p"), + (0x1D680, "M", "q"), + (0x1D681, "M", "r"), + (0x1D682, "M", "s"), + ] + + +def _seg_67() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D683, "M", "t"), + (0x1D684, "M", "u"), + (0x1D685, "M", "v"), + (0x1D686, "M", "w"), + (0x1D687, "M", "x"), + (0x1D688, "M", "y"), + (0x1D689, "M", "z"), + (0x1D68A, "M", "a"), + (0x1D68B, "M", "b"), + (0x1D68C, "M", "c"), + (0x1D68D, "M", "d"), + (0x1D68E, "M", "e"), + (0x1D68F, "M", "f"), + (0x1D690, "M", "g"), + (0x1D691, "M", "h"), + (0x1D692, "M", "i"), + (0x1D693, "M", "j"), + (0x1D694, "M", "k"), + (0x1D695, "M", "l"), + (0x1D696, "M", "m"), + (0x1D697, "M", "n"), + (0x1D698, "M", "o"), + (0x1D699, "M", "p"), + (0x1D69A, "M", "q"), + (0x1D69B, "M", "r"), + (0x1D69C, "M", "s"), + (0x1D69D, "M", "t"), + (0x1D69E, "M", "u"), + (0x1D69F, "M", "v"), + (0x1D6A0, "M", "w"), + (0x1D6A1, "M", "x"), + (0x1D6A2, "M", "y"), + (0x1D6A3, "M", "z"), + (0x1D6A4, "M", "ı"), + (0x1D6A5, "M", "ȷ"), + (0x1D6A6, "X"), + (0x1D6A8, "M", "α"), + (0x1D6A9, "M", "β"), + (0x1D6AA, "M", "γ"), + (0x1D6AB, "M", "δ"), + (0x1D6AC, "M", "ε"), + (0x1D6AD, "M", "ζ"), + (0x1D6AE, "M", "η"), + (0x1D6AF, "M", "θ"), + (0x1D6B0, "M", "ι"), + (0x1D6B1, "M", "κ"), + (0x1D6B2, "M", "λ"), + (0x1D6B3, "M", "μ"), + (0x1D6B4, "M", "ν"), + (0x1D6B5, "M", "ξ"), + (0x1D6B6, "M", "ο"), + (0x1D6B7, "M", "π"), + (0x1D6B8, "M", "ρ"), + (0x1D6B9, "M", "θ"), + (0x1D6BA, "M", "σ"), + (0x1D6BB, "M", "τ"), + (0x1D6BC, "M", "υ"), + (0x1D6BD, "M", "φ"), + (0x1D6BE, "M", "χ"), + (0x1D6BF, "M", "ψ"), + (0x1D6C0, "M", "ω"), + (0x1D6C1, "M", "∇"), + (0x1D6C2, "M", "α"), + (0x1D6C3, "M", "β"), + (0x1D6C4, "M", "γ"), + (0x1D6C5, "M", "δ"), + (0x1D6C6, "M", "ε"), + (0x1D6C7, "M", "ζ"), + (0x1D6C8, "M", "η"), + (0x1D6C9, "M", "θ"), + (0x1D6CA, "M", "ι"), + (0x1D6CB, "M", "κ"), + (0x1D6CC, "M", "λ"), + (0x1D6CD, "M", "μ"), + (0x1D6CE, "M", "ν"), + (0x1D6CF, "M", "ξ"), + (0x1D6D0, "M", "ο"), + (0x1D6D1, "M", "π"), + (0x1D6D2, "M", "ρ"), + (0x1D6D3, "M", "σ"), + (0x1D6D5, "M", "τ"), + (0x1D6D6, "M", "υ"), + (0x1D6D7, "M", "φ"), + (0x1D6D8, "M", "χ"), + (0x1D6D9, "M", "ψ"), + (0x1D6DA, "M", "ω"), + (0x1D6DB, "M", "∂"), + (0x1D6DC, "M", "ε"), + (0x1D6DD, "M", "θ"), + (0x1D6DE, "M", "κ"), + (0x1D6DF, "M", "φ"), + (0x1D6E0, "M", "ρ"), + (0x1D6E1, "M", "π"), + (0x1D6E2, "M", "α"), + (0x1D6E3, "M", "β"), + (0x1D6E4, "M", "γ"), + (0x1D6E5, "M", "δ"), + (0x1D6E6, "M", "ε"), + (0x1D6E7, "M", "ζ"), + (0x1D6E8, "M", "η"), + ] + + +def _seg_68() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D6E9, "M", "θ"), + (0x1D6EA, "M", "ι"), + (0x1D6EB, "M", "κ"), + (0x1D6EC, "M", "λ"), + (0x1D6ED, "M", "μ"), + (0x1D6EE, "M", "ν"), + (0x1D6EF, "M", "ξ"), + (0x1D6F0, "M", "ο"), + (0x1D6F1, "M", "π"), + (0x1D6F2, "M", "ρ"), + (0x1D6F3, "M", "θ"), + (0x1D6F4, "M", "σ"), + (0x1D6F5, "M", "τ"), + (0x1D6F6, "M", "υ"), + (0x1D6F7, "M", "φ"), + (0x1D6F8, "M", "χ"), + (0x1D6F9, "M", "ψ"), + (0x1D6FA, "M", "ω"), + (0x1D6FB, "M", "∇"), + (0x1D6FC, "M", "α"), + (0x1D6FD, "M", "β"), + (0x1D6FE, "M", "γ"), + (0x1D6FF, "M", "δ"), + (0x1D700, "M", "ε"), + (0x1D701, "M", "ζ"), + (0x1D702, "M", "η"), + (0x1D703, "M", "θ"), + (0x1D704, "M", "ι"), + (0x1D705, "M", "κ"), + (0x1D706, "M", "λ"), + (0x1D707, "M", "μ"), + (0x1D708, "M", "ν"), + (0x1D709, "M", "ξ"), + (0x1D70A, "M", "ο"), + (0x1D70B, "M", "π"), + (0x1D70C, "M", "ρ"), + (0x1D70D, "M", "σ"), + (0x1D70F, "M", "τ"), + (0x1D710, "M", "υ"), + (0x1D711, "M", "φ"), + (0x1D712, "M", "χ"), + (0x1D713, "M", "ψ"), + (0x1D714, "M", "ω"), + (0x1D715, "M", "∂"), + (0x1D716, "M", "ε"), + (0x1D717, "M", "θ"), + (0x1D718, "M", "κ"), + (0x1D719, "M", "φ"), + (0x1D71A, "M", "ρ"), + (0x1D71B, "M", "π"), + (0x1D71C, "M", "α"), + (0x1D71D, "M", "β"), + (0x1D71E, "M", "γ"), + (0x1D71F, "M", "δ"), + (0x1D720, "M", "ε"), + (0x1D721, "M", "ζ"), + (0x1D722, "M", "η"), + (0x1D723, "M", "θ"), + (0x1D724, "M", "ι"), + (0x1D725, "M", "κ"), + (0x1D726, "M", "λ"), + (0x1D727, "M", "μ"), + (0x1D728, "M", "ν"), + (0x1D729, "M", "ξ"), + (0x1D72A, "M", "ο"), + (0x1D72B, "M", "π"), + (0x1D72C, "M", "ρ"), + (0x1D72D, "M", "θ"), + (0x1D72E, "M", "σ"), + (0x1D72F, "M", "τ"), + (0x1D730, "M", "υ"), + (0x1D731, "M", "φ"), + (0x1D732, "M", "χ"), + (0x1D733, "M", "ψ"), + (0x1D734, "M", "ω"), + (0x1D735, "M", "∇"), + (0x1D736, "M", "α"), + (0x1D737, "M", "β"), + (0x1D738, "M", "γ"), + (0x1D739, "M", "δ"), + (0x1D73A, "M", "ε"), + (0x1D73B, "M", "ζ"), + (0x1D73C, "M", "η"), + (0x1D73D, "M", "θ"), + (0x1D73E, "M", "ι"), + (0x1D73F, "M", "κ"), + (0x1D740, "M", "λ"), + (0x1D741, "M", "μ"), + (0x1D742, "M", "ν"), + (0x1D743, "M", "ξ"), + (0x1D744, "M", "ο"), + (0x1D745, "M", "π"), + (0x1D746, "M", "ρ"), + (0x1D747, "M", "σ"), + (0x1D749, "M", "τ"), + (0x1D74A, "M", "υ"), + (0x1D74B, "M", "φ"), + (0x1D74C, "M", "χ"), + (0x1D74D, "M", "ψ"), + (0x1D74E, "M", "ω"), + ] + + +def _seg_69() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D74F, "M", "∂"), + (0x1D750, "M", "ε"), + (0x1D751, "M", "θ"), + (0x1D752, "M", "κ"), + (0x1D753, "M", "φ"), + (0x1D754, "M", "ρ"), + (0x1D755, "M", "π"), + (0x1D756, "M", "α"), + (0x1D757, "M", "β"), + (0x1D758, "M", "γ"), + (0x1D759, "M", "δ"), + (0x1D75A, "M", "ε"), + (0x1D75B, "M", "ζ"), + (0x1D75C, "M", "η"), + (0x1D75D, "M", "θ"), + (0x1D75E, "M", "ι"), + (0x1D75F, "M", "κ"), + (0x1D760, "M", "λ"), + (0x1D761, "M", "μ"), + (0x1D762, "M", "ν"), + (0x1D763, "M", "ξ"), + (0x1D764, "M", "ο"), + (0x1D765, "M", "π"), + (0x1D766, "M", "ρ"), + (0x1D767, "M", "θ"), + (0x1D768, "M", "σ"), + (0x1D769, "M", "τ"), + (0x1D76A, "M", "υ"), + (0x1D76B, "M", "φ"), + (0x1D76C, "M", "χ"), + (0x1D76D, "M", "ψ"), + (0x1D76E, "M", "ω"), + (0x1D76F, "M", "∇"), + (0x1D770, "M", "α"), + (0x1D771, "M", "β"), + (0x1D772, "M", "γ"), + (0x1D773, "M", "δ"), + (0x1D774, "M", "ε"), + (0x1D775, "M", "ζ"), + (0x1D776, "M", "η"), + (0x1D777, "M", "θ"), + (0x1D778, "M", "ι"), + (0x1D779, "M", "κ"), + (0x1D77A, "M", "λ"), + (0x1D77B, "M", "μ"), + (0x1D77C, "M", "ν"), + (0x1D77D, "M", "ξ"), + (0x1D77E, "M", "ο"), + (0x1D77F, "M", "π"), + (0x1D780, "M", "ρ"), + (0x1D781, "M", "σ"), + (0x1D783, "M", "τ"), + (0x1D784, "M", "υ"), + (0x1D785, "M", "φ"), + (0x1D786, "M", "χ"), + (0x1D787, "M", "ψ"), + (0x1D788, "M", "ω"), + (0x1D789, "M", "∂"), + (0x1D78A, "M", "ε"), + (0x1D78B, "M", "θ"), + (0x1D78C, "M", "κ"), + (0x1D78D, "M", "φ"), + (0x1D78E, "M", "ρ"), + (0x1D78F, "M", "π"), + (0x1D790, "M", "α"), + (0x1D791, "M", "β"), + (0x1D792, "M", "γ"), + (0x1D793, "M", "δ"), + (0x1D794, "M", "ε"), + (0x1D795, "M", "ζ"), + (0x1D796, "M", "η"), + (0x1D797, "M", "θ"), + (0x1D798, "M", "ι"), + (0x1D799, "M", "κ"), + (0x1D79A, "M", "λ"), + (0x1D79B, "M", "μ"), + (0x1D79C, "M", "ν"), + (0x1D79D, "M", "ξ"), + (0x1D79E, "M", "ο"), + (0x1D79F, "M", "π"), + (0x1D7A0, "M", "ρ"), + (0x1D7A1, "M", "θ"), + (0x1D7A2, "M", "σ"), + (0x1D7A3, "M", "τ"), + (0x1D7A4, "M", "υ"), + (0x1D7A5, "M", "φ"), + (0x1D7A6, "M", "χ"), + (0x1D7A7, "M", "ψ"), + (0x1D7A8, "M", "ω"), + (0x1D7A9, "M", "∇"), + (0x1D7AA, "M", "α"), + (0x1D7AB, "M", "β"), + (0x1D7AC, "M", "γ"), + (0x1D7AD, "M", "δ"), + (0x1D7AE, "M", "ε"), + (0x1D7AF, "M", "ζ"), + (0x1D7B0, "M", "η"), + (0x1D7B1, "M", "θ"), + (0x1D7B2, "M", "ι"), + (0x1D7B3, "M", "κ"), + ] + + +def _seg_70() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D7B4, "M", "λ"), + (0x1D7B5, "M", "μ"), + (0x1D7B6, "M", "ν"), + (0x1D7B7, "M", "ξ"), + (0x1D7B8, "M", "ο"), + (0x1D7B9, "M", "π"), + (0x1D7BA, "M", "ρ"), + (0x1D7BB, "M", "σ"), + (0x1D7BD, "M", "τ"), + (0x1D7BE, "M", "υ"), + (0x1D7BF, "M", "φ"), + (0x1D7C0, "M", "χ"), + (0x1D7C1, "M", "ψ"), + (0x1D7C2, "M", "ω"), + (0x1D7C3, "M", "∂"), + (0x1D7C4, "M", "ε"), + (0x1D7C5, "M", "θ"), + (0x1D7C6, "M", "κ"), + (0x1D7C7, "M", "φ"), + (0x1D7C8, "M", "ρ"), + (0x1D7C9, "M", "π"), + (0x1D7CA, "M", "ϝ"), + (0x1D7CC, "X"), + (0x1D7CE, "M", "0"), + (0x1D7CF, "M", "1"), + (0x1D7D0, "M", "2"), + (0x1D7D1, "M", "3"), + (0x1D7D2, "M", "4"), + (0x1D7D3, "M", "5"), + (0x1D7D4, "M", "6"), + (0x1D7D5, "M", "7"), + (0x1D7D6, "M", "8"), + (0x1D7D7, "M", "9"), + (0x1D7D8, "M", "0"), + (0x1D7D9, "M", "1"), + (0x1D7DA, "M", "2"), + (0x1D7DB, "M", "3"), + (0x1D7DC, "M", "4"), + (0x1D7DD, "M", "5"), + (0x1D7DE, "M", "6"), + (0x1D7DF, "M", "7"), + (0x1D7E0, "M", "8"), + (0x1D7E1, "M", "9"), + (0x1D7E2, "M", "0"), + (0x1D7E3, "M", "1"), + (0x1D7E4, "M", "2"), + (0x1D7E5, "M", "3"), + (0x1D7E6, "M", "4"), + (0x1D7E7, "M", "5"), + (0x1D7E8, "M", "6"), + (0x1D7E9, "M", "7"), + (0x1D7EA, "M", "8"), + (0x1D7EB, "M", "9"), + (0x1D7EC, "M", "0"), + (0x1D7ED, "M", "1"), + (0x1D7EE, "M", "2"), + (0x1D7EF, "M", "3"), + (0x1D7F0, "M", "4"), + (0x1D7F1, "M", "5"), + (0x1D7F2, "M", "6"), + (0x1D7F3, "M", "7"), + (0x1D7F4, "M", "8"), + (0x1D7F5, "M", "9"), + (0x1D7F6, "M", "0"), + (0x1D7F7, "M", "1"), + (0x1D7F8, "M", "2"), + (0x1D7F9, "M", "3"), + (0x1D7FA, "M", "4"), + (0x1D7FB, "M", "5"), + (0x1D7FC, "M", "6"), + (0x1D7FD, "M", "7"), + (0x1D7FE, "M", "8"), + (0x1D7FF, "M", "9"), + (0x1D800, "V"), + (0x1DA8C, "X"), + (0x1DA9B, "V"), + (0x1DAA0, "X"), + (0x1DAA1, "V"), + (0x1DAB0, "X"), + (0x1DF00, "V"), + (0x1DF1F, "X"), + (0x1DF25, "V"), + (0x1DF2B, "X"), + (0x1E000, "V"), + (0x1E007, "X"), + (0x1E008, "V"), + (0x1E019, "X"), + (0x1E01B, "V"), + (0x1E022, "X"), + (0x1E023, "V"), + (0x1E025, "X"), + (0x1E026, "V"), + (0x1E02B, "X"), + (0x1E030, "M", "а"), + (0x1E031, "M", "б"), + (0x1E032, "M", "в"), + (0x1E033, "M", "г"), + (0x1E034, "M", "д"), + (0x1E035, "M", "е"), + (0x1E036, "M", "ж"), + ] + + +def _seg_71() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E037, "M", "з"), + (0x1E038, "M", "и"), + (0x1E039, "M", "к"), + (0x1E03A, "M", "л"), + (0x1E03B, "M", "м"), + (0x1E03C, "M", "о"), + (0x1E03D, "M", "п"), + (0x1E03E, "M", "р"), + (0x1E03F, "M", "с"), + (0x1E040, "M", "т"), + (0x1E041, "M", "у"), + (0x1E042, "M", "ф"), + (0x1E043, "M", "х"), + (0x1E044, "M", "ц"), + (0x1E045, "M", "ч"), + (0x1E046, "M", "ш"), + (0x1E047, "M", "ы"), + (0x1E048, "M", "э"), + (0x1E049, "M", "ю"), + (0x1E04A, "M", "ꚉ"), + (0x1E04B, "M", "ә"), + (0x1E04C, "M", "і"), + (0x1E04D, "M", "ј"), + (0x1E04E, "M", "ө"), + (0x1E04F, "M", "ү"), + (0x1E050, "M", "ӏ"), + (0x1E051, "M", "а"), + (0x1E052, "M", "б"), + (0x1E053, "M", "в"), + (0x1E054, "M", "г"), + (0x1E055, "M", "д"), + (0x1E056, "M", "е"), + (0x1E057, "M", "ж"), + (0x1E058, "M", "з"), + (0x1E059, "M", "и"), + (0x1E05A, "M", "к"), + (0x1E05B, "M", "л"), + (0x1E05C, "M", "о"), + (0x1E05D, "M", "п"), + (0x1E05E, "M", "с"), + (0x1E05F, "M", "у"), + (0x1E060, "M", "ф"), + (0x1E061, "M", "х"), + (0x1E062, "M", "ц"), + (0x1E063, "M", "ч"), + (0x1E064, "M", "ш"), + (0x1E065, "M", "ъ"), + (0x1E066, "M", "ы"), + (0x1E067, "M", "ґ"), + (0x1E068, "M", "і"), + (0x1E069, "M", "ѕ"), + (0x1E06A, "M", "џ"), + (0x1E06B, "M", "ҫ"), + (0x1E06C, "M", "ꙑ"), + (0x1E06D, "M", "ұ"), + (0x1E06E, "X"), + (0x1E08F, "V"), + (0x1E090, "X"), + (0x1E100, "V"), + (0x1E12D, "X"), + (0x1E130, "V"), + (0x1E13E, "X"), + (0x1E140, "V"), + (0x1E14A, "X"), + (0x1E14E, "V"), + (0x1E150, "X"), + (0x1E290, "V"), + (0x1E2AF, "X"), + (0x1E2C0, "V"), + (0x1E2FA, "X"), + (0x1E2FF, "V"), + (0x1E300, "X"), + (0x1E4D0, "V"), + (0x1E4FA, "X"), + (0x1E7E0, "V"), + (0x1E7E7, "X"), + (0x1E7E8, "V"), + (0x1E7EC, "X"), + (0x1E7ED, "V"), + (0x1E7EF, "X"), + (0x1E7F0, "V"), + (0x1E7FF, "X"), + (0x1E800, "V"), + (0x1E8C5, "X"), + (0x1E8C7, "V"), + (0x1E8D7, "X"), + (0x1E900, "M", "𞤢"), + (0x1E901, "M", "𞤣"), + (0x1E902, "M", "𞤤"), + (0x1E903, "M", "𞤥"), + (0x1E904, "M", "𞤦"), + (0x1E905, "M", "𞤧"), + (0x1E906, "M", "𞤨"), + (0x1E907, "M", "𞤩"), + (0x1E908, "M", "𞤪"), + (0x1E909, "M", "𞤫"), + (0x1E90A, "M", "𞤬"), + (0x1E90B, "M", "𞤭"), + (0x1E90C, "M", "𞤮"), + (0x1E90D, "M", "𞤯"), + ] + + +def _seg_72() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E90E, "M", "𞤰"), + (0x1E90F, "M", "𞤱"), + (0x1E910, "M", "𞤲"), + (0x1E911, "M", "𞤳"), + (0x1E912, "M", "𞤴"), + (0x1E913, "M", "𞤵"), + (0x1E914, "M", "𞤶"), + (0x1E915, "M", "𞤷"), + (0x1E916, "M", "𞤸"), + (0x1E917, "M", "𞤹"), + (0x1E918, "M", "𞤺"), + (0x1E919, "M", "𞤻"), + (0x1E91A, "M", "𞤼"), + (0x1E91B, "M", "𞤽"), + (0x1E91C, "M", "𞤾"), + (0x1E91D, "M", "𞤿"), + (0x1E91E, "M", "𞥀"), + (0x1E91F, "M", "𞥁"), + (0x1E920, "M", "𞥂"), + (0x1E921, "M", "𞥃"), + (0x1E922, "V"), + (0x1E94C, "X"), + (0x1E950, "V"), + (0x1E95A, "X"), + (0x1E95E, "V"), + (0x1E960, "X"), + (0x1EC71, "V"), + (0x1ECB5, "X"), + (0x1ED01, "V"), + (0x1ED3E, "X"), + (0x1EE00, "M", "ا"), + (0x1EE01, "M", "ب"), + (0x1EE02, "M", "ج"), + (0x1EE03, "M", "د"), + (0x1EE04, "X"), + (0x1EE05, "M", "و"), + (0x1EE06, "M", "ز"), + (0x1EE07, "M", "ح"), + (0x1EE08, "M", "ط"), + (0x1EE09, "M", "ي"), + (0x1EE0A, "M", "ك"), + (0x1EE0B, "M", "ل"), + (0x1EE0C, "M", "م"), + (0x1EE0D, "M", "ن"), + (0x1EE0E, "M", "س"), + (0x1EE0F, "M", "ع"), + (0x1EE10, "M", "ف"), + (0x1EE11, "M", "ص"), + (0x1EE12, "M", "ق"), + (0x1EE13, "M", "ر"), + (0x1EE14, "M", "ش"), + (0x1EE15, "M", "ت"), + (0x1EE16, "M", "ث"), + (0x1EE17, "M", "خ"), + (0x1EE18, "M", "ذ"), + (0x1EE19, "M", "ض"), + (0x1EE1A, "M", "ظ"), + (0x1EE1B, "M", "غ"), + (0x1EE1C, "M", "ٮ"), + (0x1EE1D, "M", "ں"), + (0x1EE1E, "M", "ڡ"), + (0x1EE1F, "M", "ٯ"), + (0x1EE20, "X"), + (0x1EE21, "M", "ب"), + (0x1EE22, "M", "ج"), + (0x1EE23, "X"), + (0x1EE24, "M", "ه"), + (0x1EE25, "X"), + (0x1EE27, "M", "ح"), + (0x1EE28, "X"), + (0x1EE29, "M", "ي"), + (0x1EE2A, "M", "ك"), + (0x1EE2B, "M", "ل"), + (0x1EE2C, "M", "م"), + (0x1EE2D, "M", "ن"), + (0x1EE2E, "M", "س"), + (0x1EE2F, "M", "ع"), + (0x1EE30, "M", "ف"), + (0x1EE31, "M", "ص"), + (0x1EE32, "M", "ق"), + (0x1EE33, "X"), + (0x1EE34, "M", "ش"), + (0x1EE35, "M", "ت"), + (0x1EE36, "M", "ث"), + (0x1EE37, "M", "خ"), + (0x1EE38, "X"), + (0x1EE39, "M", "ض"), + (0x1EE3A, "X"), + (0x1EE3B, "M", "غ"), + (0x1EE3C, "X"), + (0x1EE42, "M", "ج"), + (0x1EE43, "X"), + (0x1EE47, "M", "ح"), + (0x1EE48, "X"), + (0x1EE49, "M", "ي"), + (0x1EE4A, "X"), + (0x1EE4B, "M", "ل"), + (0x1EE4C, "X"), + (0x1EE4D, "M", "ن"), + (0x1EE4E, "M", "س"), + ] + + +def _seg_73() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1EE4F, "M", "ع"), + (0x1EE50, "X"), + (0x1EE51, "M", "ص"), + (0x1EE52, "M", "ق"), + (0x1EE53, "X"), + (0x1EE54, "M", "ش"), + (0x1EE55, "X"), + (0x1EE57, "M", "خ"), + (0x1EE58, "X"), + (0x1EE59, "M", "ض"), + (0x1EE5A, "X"), + (0x1EE5B, "M", "غ"), + (0x1EE5C, "X"), + (0x1EE5D, "M", "ں"), + (0x1EE5E, "X"), + (0x1EE5F, "M", "ٯ"), + (0x1EE60, "X"), + (0x1EE61, "M", "ب"), + (0x1EE62, "M", "ج"), + (0x1EE63, "X"), + (0x1EE64, "M", "ه"), + (0x1EE65, "X"), + (0x1EE67, "M", "ح"), + (0x1EE68, "M", "ط"), + (0x1EE69, "M", "ي"), + (0x1EE6A, "M", "ك"), + (0x1EE6B, "X"), + (0x1EE6C, "M", "م"), + (0x1EE6D, "M", "ن"), + (0x1EE6E, "M", "س"), + (0x1EE6F, "M", "ع"), + (0x1EE70, "M", "ف"), + (0x1EE71, "M", "ص"), + (0x1EE72, "M", "ق"), + (0x1EE73, "X"), + (0x1EE74, "M", "ش"), + (0x1EE75, "M", "ت"), + (0x1EE76, "M", "ث"), + (0x1EE77, "M", "خ"), + (0x1EE78, "X"), + (0x1EE79, "M", "ض"), + (0x1EE7A, "M", "ظ"), + (0x1EE7B, "M", "غ"), + (0x1EE7C, "M", "ٮ"), + (0x1EE7D, "X"), + (0x1EE7E, "M", "ڡ"), + (0x1EE7F, "X"), + (0x1EE80, "M", "ا"), + (0x1EE81, "M", "ب"), + (0x1EE82, "M", "ج"), + (0x1EE83, "M", "د"), + (0x1EE84, "M", "ه"), + (0x1EE85, "M", "و"), + (0x1EE86, "M", "ز"), + (0x1EE87, "M", "ح"), + (0x1EE88, "M", "ط"), + (0x1EE89, "M", "ي"), + (0x1EE8A, "X"), + (0x1EE8B, "M", "ل"), + (0x1EE8C, "M", "م"), + (0x1EE8D, "M", "ن"), + (0x1EE8E, "M", "س"), + (0x1EE8F, "M", "ع"), + (0x1EE90, "M", "ف"), + (0x1EE91, "M", "ص"), + (0x1EE92, "M", "ق"), + (0x1EE93, "M", "ر"), + (0x1EE94, "M", "ش"), + (0x1EE95, "M", "ت"), + (0x1EE96, "M", "ث"), + (0x1EE97, "M", "خ"), + (0x1EE98, "M", "ذ"), + (0x1EE99, "M", "ض"), + (0x1EE9A, "M", "ظ"), + (0x1EE9B, "M", "غ"), + (0x1EE9C, "X"), + (0x1EEA1, "M", "ب"), + (0x1EEA2, "M", "ج"), + (0x1EEA3, "M", "د"), + (0x1EEA4, "X"), + (0x1EEA5, "M", "و"), + (0x1EEA6, "M", "ز"), + (0x1EEA7, "M", "ح"), + (0x1EEA8, "M", "ط"), + (0x1EEA9, "M", "ي"), + (0x1EEAA, "X"), + (0x1EEAB, "M", "ل"), + (0x1EEAC, "M", "م"), + (0x1EEAD, "M", "ن"), + (0x1EEAE, "M", "س"), + (0x1EEAF, "M", "ع"), + (0x1EEB0, "M", "ف"), + (0x1EEB1, "M", "ص"), + (0x1EEB2, "M", "ق"), + (0x1EEB3, "M", "ر"), + (0x1EEB4, "M", "ش"), + (0x1EEB5, "M", "ت"), + (0x1EEB6, "M", "ث"), + (0x1EEB7, "M", "خ"), + (0x1EEB8, "M", "ذ"), + ] + + +def _seg_74() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1EEB9, "M", "ض"), + (0x1EEBA, "M", "ظ"), + (0x1EEBB, "M", "غ"), + (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", "0,"), + (0x1F102, "3", "1,"), + (0x1F103, "3", "2,"), + (0x1F104, "3", "3,"), + (0x1F105, "3", "4,"), + (0x1F106, "3", "5,"), + (0x1F107, "3", "6,"), + (0x1F108, "3", "7,"), + (0x1F109, "3", "8,"), + (0x1F10A, "3", "9,"), + (0x1F10B, "V"), + (0x1F110, "3", "(a)"), + (0x1F111, "3", "(b)"), + (0x1F112, "3", "(c)"), + (0x1F113, "3", "(d)"), + (0x1F114, "3", "(e)"), + (0x1F115, "3", "(f)"), + (0x1F116, "3", "(g)"), + (0x1F117, "3", "(h)"), + (0x1F118, "3", "(i)"), + (0x1F119, "3", "(j)"), + (0x1F11A, "3", "(k)"), + (0x1F11B, "3", "(l)"), + (0x1F11C, "3", "(m)"), + (0x1F11D, "3", "(n)"), + (0x1F11E, "3", "(o)"), + (0x1F11F, "3", "(p)"), + (0x1F120, "3", "(q)"), + (0x1F121, "3", "(r)"), + (0x1F122, "3", "(s)"), + (0x1F123, "3", "(t)"), + (0x1F124, "3", "(u)"), + (0x1F125, "3", "(v)"), + (0x1F126, "3", "(w)"), + (0x1F127, "3", "(x)"), + (0x1F128, "3", "(y)"), + (0x1F129, "3", "(z)"), + (0x1F12A, "M", "〔s〕"), + (0x1F12B, "M", "c"), + (0x1F12C, "M", "r"), + (0x1F12D, "M", "cd"), + (0x1F12E, "M", "wz"), + (0x1F12F, "V"), + (0x1F130, "M", "a"), + (0x1F131, "M", "b"), + (0x1F132, "M", "c"), + (0x1F133, "M", "d"), + (0x1F134, "M", "e"), + (0x1F135, "M", "f"), + (0x1F136, "M", "g"), + (0x1F137, "M", "h"), + (0x1F138, "M", "i"), + (0x1F139, "M", "j"), + (0x1F13A, "M", "k"), + (0x1F13B, "M", "l"), + (0x1F13C, "M", "m"), + (0x1F13D, "M", "n"), + (0x1F13E, "M", "o"), + (0x1F13F, "M", "p"), + (0x1F140, "M", "q"), + (0x1F141, "M", "r"), + (0x1F142, "M", "s"), + (0x1F143, "M", "t"), + (0x1F144, "M", "u"), + (0x1F145, "M", "v"), + (0x1F146, "M", "w"), + (0x1F147, "M", "x"), + (0x1F148, "M", "y"), + (0x1F149, "M", "z"), + (0x1F14A, "M", "hv"), + (0x1F14B, "M", "mv"), + (0x1F14C, "M", "sd"), + (0x1F14D, "M", "ss"), + (0x1F14E, "M", "ppv"), + (0x1F14F, "M", "wc"), + (0x1F150, "V"), + (0x1F16A, "M", "mc"), + (0x1F16B, "M", "md"), + (0x1F16C, "M", "mr"), + (0x1F16D, "V"), + (0x1F190, "M", "dj"), + (0x1F191, "V"), + ] + + +def _seg_75() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1F1AE, "X"), + (0x1F1E6, "V"), + (0x1F200, "M", "ほか"), + (0x1F201, "M", "ココ"), + (0x1F202, "M", "サ"), + (0x1F203, "X"), + (0x1F210, "M", "手"), + (0x1F211, "M", "字"), + (0x1F212, "M", "双"), + (0x1F213, "M", "デ"), + (0x1F214, "M", "二"), + (0x1F215, "M", "多"), + (0x1F216, "M", "解"), + (0x1F217, "M", "天"), + (0x1F218, "M", "交"), + (0x1F219, "M", "映"), + (0x1F21A, "M", "無"), + (0x1F21B, "M", "料"), + (0x1F21C, "M", "前"), + (0x1F21D, "M", "後"), + (0x1F21E, "M", "再"), + (0x1F21F, "M", "新"), + (0x1F220, "M", "初"), + (0x1F221, "M", "終"), + (0x1F222, "M", "生"), + (0x1F223, "M", "販"), + (0x1F224, "M", "声"), + (0x1F225, "M", "吹"), + (0x1F226, "M", "演"), + (0x1F227, "M", "投"), + (0x1F228, "M", "捕"), + (0x1F229, "M", "一"), + (0x1F22A, "M", "三"), + (0x1F22B, "M", "遊"), + (0x1F22C, "M", "左"), + (0x1F22D, "M", "中"), + (0x1F22E, "M", "右"), + (0x1F22F, "M", "指"), + (0x1F230, "M", "走"), + (0x1F231, "M", "打"), + (0x1F232, "M", "禁"), + (0x1F233, "M", "空"), + (0x1F234, "M", "合"), + (0x1F235, "M", "満"), + (0x1F236, "M", "有"), + (0x1F237, "M", "月"), + (0x1F238, "M", "申"), + (0x1F239, "M", "割"), + (0x1F23A, "M", "営"), + (0x1F23B, "M", "配"), + (0x1F23C, "X"), + (0x1F240, "M", "〔本〕"), + (0x1F241, "M", "〔三〕"), + (0x1F242, "M", "〔二〕"), + (0x1F243, "M", "〔安〕"), + (0x1F244, "M", "〔点〕"), + (0x1F245, "M", "〔打〕"), + (0x1F246, "M", "〔盗〕"), + (0x1F247, "M", "〔勝〕"), + (0x1F248, "M", "〔敗〕"), + (0x1F249, "X"), + (0x1F250, "M", "得"), + (0x1F251, "M", "可"), + (0x1F252, "X"), + (0x1F260, "V"), + (0x1F266, "X"), + (0x1F300, "V"), + (0x1F6D8, "X"), + (0x1F6DC, "V"), + (0x1F6ED, "X"), + (0x1F6F0, "V"), + (0x1F6FD, "X"), + (0x1F700, "V"), + (0x1F777, "X"), + (0x1F77B, "V"), + (0x1F7DA, "X"), + (0x1F7E0, "V"), + (0x1F7EC, "X"), + (0x1F7F0, "V"), + (0x1F7F1, "X"), + (0x1F800, "V"), + (0x1F80C, "X"), + (0x1F810, "V"), + (0x1F848, "X"), + (0x1F850, "V"), + (0x1F85A, "X"), + (0x1F860, "V"), + (0x1F888, "X"), + (0x1F890, "V"), + (0x1F8AE, "X"), + (0x1F8B0, "V"), + (0x1F8B2, "X"), + (0x1F900, "V"), + (0x1FA54, "X"), + (0x1FA60, "V"), + (0x1FA6E, "X"), + (0x1FA70, "V"), + (0x1FA7D, "X"), + (0x1FA80, "V"), + (0x1FA89, "X"), + ] + + +def _seg_76() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1FA90, "V"), + (0x1FABE, "X"), + (0x1FABF, "V"), + (0x1FAC6, "X"), + (0x1FACE, "V"), + (0x1FADC, "X"), + (0x1FAE0, "V"), + (0x1FAE9, "X"), + (0x1FAF0, "V"), + (0x1FAF9, "X"), + (0x1FB00, "V"), + (0x1FB93, "X"), + (0x1FB94, "V"), + (0x1FBCB, "X"), + (0x1FBF0, "M", "0"), + (0x1FBF1, "M", "1"), + (0x1FBF2, "M", "2"), + (0x1FBF3, "M", "3"), + (0x1FBF4, "M", "4"), + (0x1FBF5, "M", "5"), + (0x1FBF6, "M", "6"), + (0x1FBF7, "M", "7"), + (0x1FBF8, "M", "8"), + (0x1FBF9, "M", "9"), + (0x1FBFA, "X"), + (0x20000, "V"), + (0x2A6E0, "X"), + (0x2A700, "V"), + (0x2B73A, "X"), + (0x2B740, "V"), + (0x2B81E, "X"), + (0x2B820, "V"), + (0x2CEA2, "X"), + (0x2CEB0, "V"), + (0x2EBE1, "X"), + (0x2EBF0, "V"), + (0x2EE5E, "X"), + (0x2F800, "M", "丽"), + (0x2F801, "M", "丸"), + (0x2F802, "M", "乁"), + (0x2F803, "M", "𠄢"), + (0x2F804, "M", "你"), + (0x2F805, "M", "侮"), + (0x2F806, "M", "侻"), + (0x2F807, "M", "倂"), + (0x2F808, "M", "偺"), + (0x2F809, "M", "備"), + (0x2F80A, "M", "僧"), + (0x2F80B, "M", "像"), + (0x2F80C, "M", "㒞"), + (0x2F80D, "M", "𠘺"), + (0x2F80E, "M", "免"), + (0x2F80F, "M", "兔"), + (0x2F810, "M", "兤"), + (0x2F811, "M", "具"), + (0x2F812, "M", "𠔜"), + (0x2F813, "M", "㒹"), + (0x2F814, "M", "內"), + (0x2F815, "M", "再"), + (0x2F816, "M", "𠕋"), + (0x2F817, "M", "冗"), + (0x2F818, "M", "冤"), + (0x2F819, "M", "仌"), + (0x2F81A, "M", "冬"), + (0x2F81B, "M", "况"), + (0x2F81C, "M", "𩇟"), + (0x2F81D, "M", "凵"), + (0x2F81E, "M", "刃"), + (0x2F81F, "M", "㓟"), + (0x2F820, "M", "刻"), + (0x2F821, "M", "剆"), + (0x2F822, "M", "割"), + (0x2F823, "M", "剷"), + (0x2F824, "M", "㔕"), + (0x2F825, "M", "勇"), + (0x2F826, "M", "勉"), + (0x2F827, "M", "勤"), + (0x2F828, "M", "勺"), + (0x2F829, "M", "包"), + (0x2F82A, "M", "匆"), + (0x2F82B, "M", "北"), + (0x2F82C, "M", "卉"), + (0x2F82D, "M", "卑"), + (0x2F82E, "M", "博"), + (0x2F82F, "M", "即"), + (0x2F830, "M", "卽"), + (0x2F831, "M", "卿"), + (0x2F834, "M", "𠨬"), + (0x2F835, "M", "灰"), + (0x2F836, "M", "及"), + (0x2F837, "M", "叟"), + (0x2F838, "M", "𠭣"), + (0x2F839, "M", "叫"), + (0x2F83A, "M", "叱"), + (0x2F83B, "M", "吆"), + (0x2F83C, "M", "咞"), + (0x2F83D, "M", "吸"), + (0x2F83E, "M", "呈"), + (0x2F83F, "M", "周"), + (0x2F840, "M", "咢"), + ] + + +def _seg_77() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F841, "M", "哶"), + (0x2F842, "M", "唐"), + (0x2F843, "M", "啓"), + (0x2F844, "M", "啣"), + (0x2F845, "M", "善"), + (0x2F847, "M", "喙"), + (0x2F848, "M", "喫"), + (0x2F849, "M", "喳"), + (0x2F84A, "M", "嗂"), + (0x2F84B, "M", "圖"), + (0x2F84C, "M", "嘆"), + (0x2F84D, "M", "圗"), + (0x2F84E, "M", "噑"), + (0x2F84F, "M", "噴"), + (0x2F850, "M", "切"), + (0x2F851, "M", "壮"), + (0x2F852, "M", "城"), + (0x2F853, "M", "埴"), + (0x2F854, "M", "堍"), + (0x2F855, "M", "型"), + (0x2F856, "M", "堲"), + (0x2F857, "M", "報"), + (0x2F858, "M", "墬"), + (0x2F859, "M", "𡓤"), + (0x2F85A, "M", "売"), + (0x2F85B, "M", "壷"), + (0x2F85C, "M", "夆"), + (0x2F85D, "M", "多"), + (0x2F85E, "M", "夢"), + (0x2F85F, "M", "奢"), + (0x2F860, "M", "𡚨"), + (0x2F861, "M", "𡛪"), + (0x2F862, "M", "姬"), + (0x2F863, "M", "娛"), + (0x2F864, "M", "娧"), + (0x2F865, "M", "姘"), + (0x2F866, "M", "婦"), + (0x2F867, "M", "㛮"), + (0x2F868, "X"), + (0x2F869, "M", "嬈"), + (0x2F86A, "M", "嬾"), + (0x2F86C, "M", "𡧈"), + (0x2F86D, "M", "寃"), + (0x2F86E, "M", "寘"), + (0x2F86F, "M", "寧"), + (0x2F870, "M", "寳"), + (0x2F871, "M", "𡬘"), + (0x2F872, "M", "寿"), + (0x2F873, "M", "将"), + (0x2F874, "X"), + (0x2F875, "M", "尢"), + (0x2F876, "M", "㞁"), + (0x2F877, "M", "屠"), + (0x2F878, "M", "屮"), + (0x2F879, "M", "峀"), + (0x2F87A, "M", "岍"), + (0x2F87B, "M", "𡷤"), + (0x2F87C, "M", "嵃"), + (0x2F87D, "M", "𡷦"), + (0x2F87E, "M", "嵮"), + (0x2F87F, "M", "嵫"), + (0x2F880, "M", "嵼"), + (0x2F881, "M", "巡"), + (0x2F882, "M", "巢"), + (0x2F883, "M", "㠯"), + (0x2F884, "M", "巽"), + (0x2F885, "M", "帨"), + (0x2F886, "M", "帽"), + (0x2F887, "M", "幩"), + (0x2F888, "M", "㡢"), + (0x2F889, "M", "𢆃"), + (0x2F88A, "M", "㡼"), + (0x2F88B, "M", "庰"), + (0x2F88C, "M", "庳"), + (0x2F88D, "M", "庶"), + (0x2F88E, "M", "廊"), + (0x2F88F, "M", "𪎒"), + (0x2F890, "M", "廾"), + (0x2F891, "M", "𢌱"), + (0x2F893, "M", "舁"), + (0x2F894, "M", "弢"), + (0x2F896, "M", "㣇"), + (0x2F897, "M", "𣊸"), + (0x2F898, "M", "𦇚"), + (0x2F899, "M", "形"), + (0x2F89A, "M", "彫"), + (0x2F89B, "M", "㣣"), + (0x2F89C, "M", "徚"), + (0x2F89D, "M", "忍"), + (0x2F89E, "M", "志"), + (0x2F89F, "M", "忹"), + (0x2F8A0, "M", "悁"), + (0x2F8A1, "M", "㤺"), + (0x2F8A2, "M", "㤜"), + (0x2F8A3, "M", "悔"), + (0x2F8A4, "M", "𢛔"), + (0x2F8A5, "M", "惇"), + (0x2F8A6, "M", "慈"), + (0x2F8A7, "M", "慌"), + (0x2F8A8, "M", "慎"), + ] + + +def _seg_78() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F8A9, "M", "慌"), + (0x2F8AA, "M", "慺"), + (0x2F8AB, "M", "憎"), + (0x2F8AC, "M", "憲"), + (0x2F8AD, "M", "憤"), + (0x2F8AE, "M", "憯"), + (0x2F8AF, "M", "懞"), + (0x2F8B0, "M", "懲"), + (0x2F8B1, "M", "懶"), + (0x2F8B2, "M", "成"), + (0x2F8B3, "M", "戛"), + (0x2F8B4, "M", "扝"), + (0x2F8B5, "M", "抱"), + (0x2F8B6, "M", "拔"), + (0x2F8B7, "M", "捐"), + (0x2F8B8, "M", "𢬌"), + (0x2F8B9, "M", "挽"), + (0x2F8BA, "M", "拼"), + (0x2F8BB, "M", "捨"), + (0x2F8BC, "M", "掃"), + (0x2F8BD, "M", "揤"), + (0x2F8BE, "M", "𢯱"), + (0x2F8BF, "M", "搢"), + (0x2F8C0, "M", "揅"), + (0x2F8C1, "M", "掩"), + (0x2F8C2, "M", "㨮"), + (0x2F8C3, "M", "摩"), + (0x2F8C4, "M", "摾"), + (0x2F8C5, "M", "撝"), + (0x2F8C6, "M", "摷"), + (0x2F8C7, "M", "㩬"), + (0x2F8C8, "M", "敏"), + (0x2F8C9, "M", "敬"), + (0x2F8CA, "M", "𣀊"), + (0x2F8CB, "M", "旣"), + (0x2F8CC, "M", "書"), + (0x2F8CD, "M", "晉"), + (0x2F8CE, "M", "㬙"), + (0x2F8CF, "M", "暑"), + (0x2F8D0, "M", "㬈"), + (0x2F8D1, "M", "㫤"), + (0x2F8D2, "M", "冒"), + (0x2F8D3, "M", "冕"), + (0x2F8D4, "M", "最"), + (0x2F8D5, "M", "暜"), + (0x2F8D6, "M", "肭"), + (0x2F8D7, "M", "䏙"), + (0x2F8D8, "M", "朗"), + (0x2F8D9, "M", "望"), + (0x2F8DA, "M", "朡"), + (0x2F8DB, "M", "杞"), + (0x2F8DC, "M", "杓"), + (0x2F8DD, "M", "𣏃"), + (0x2F8DE, "M", "㭉"), + (0x2F8DF, "M", "柺"), + (0x2F8E0, "M", "枅"), + (0x2F8E1, "M", "桒"), + (0x2F8E2, "M", "梅"), + (0x2F8E3, "M", "𣑭"), + (0x2F8E4, "M", "梎"), + (0x2F8E5, "M", "栟"), + (0x2F8E6, "M", "椔"), + (0x2F8E7, "M", "㮝"), + (0x2F8E8, "M", "楂"), + (0x2F8E9, "M", "榣"), + (0x2F8EA, "M", "槪"), + (0x2F8EB, "M", "檨"), + (0x2F8EC, "M", "𣚣"), + (0x2F8ED, "M", "櫛"), + (0x2F8EE, "M", "㰘"), + (0x2F8EF, "M", "次"), + (0x2F8F0, "M", "𣢧"), + (0x2F8F1, "M", "歔"), + (0x2F8F2, "M", "㱎"), + (0x2F8F3, "M", "歲"), + (0x2F8F4, "M", "殟"), + (0x2F8F5, "M", "殺"), + (0x2F8F6, "M", "殻"), + (0x2F8F7, "M", "𣪍"), + (0x2F8F8, "M", "𡴋"), + (0x2F8F9, "M", "𣫺"), + (0x2F8FA, "M", "汎"), + (0x2F8FB, "M", "𣲼"), + (0x2F8FC, "M", "沿"), + (0x2F8FD, "M", "泍"), + (0x2F8FE, "M", "汧"), + (0x2F8FF, "M", "洖"), + (0x2F900, "M", "派"), + (0x2F901, "M", "海"), + (0x2F902, "M", "流"), + (0x2F903, "M", "浩"), + (0x2F904, "M", "浸"), + (0x2F905, "M", "涅"), + (0x2F906, "M", "𣴞"), + (0x2F907, "M", "洴"), + (0x2F908, "M", "港"), + (0x2F909, "M", "湮"), + (0x2F90A, "M", "㴳"), + (0x2F90B, "M", "滋"), + (0x2F90C, "M", "滇"), + ] + + +def _seg_79() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F90D, "M", "𣻑"), + (0x2F90E, "M", "淹"), + (0x2F90F, "M", "潮"), + (0x2F910, "M", "𣽞"), + (0x2F911, "M", "𣾎"), + (0x2F912, "M", "濆"), + (0x2F913, "M", "瀹"), + (0x2F914, "M", "瀞"), + (0x2F915, "M", "瀛"), + (0x2F916, "M", "㶖"), + (0x2F917, "M", "灊"), + (0x2F918, "M", "災"), + (0x2F919, "M", "灷"), + (0x2F91A, "M", "炭"), + (0x2F91B, "M", "𠔥"), + (0x2F91C, "M", "煅"), + (0x2F91D, "M", "𤉣"), + (0x2F91E, "M", "熜"), + (0x2F91F, "X"), + (0x2F920, "M", "爨"), + (0x2F921, "M", "爵"), + (0x2F922, "M", "牐"), + (0x2F923, "M", "𤘈"), + (0x2F924, "M", "犀"), + (0x2F925, "M", "犕"), + (0x2F926, "M", "𤜵"), + (0x2F927, "M", "𤠔"), + (0x2F928, "M", "獺"), + (0x2F929, "M", "王"), + (0x2F92A, "M", "㺬"), + (0x2F92B, "M", "玥"), + (0x2F92C, "M", "㺸"), + (0x2F92E, "M", "瑇"), + (0x2F92F, "M", "瑜"), + (0x2F930, "M", "瑱"), + (0x2F931, "M", "璅"), + (0x2F932, "M", "瓊"), + (0x2F933, "M", "㼛"), + (0x2F934, "M", "甤"), + (0x2F935, "M", "𤰶"), + (0x2F936, "M", "甾"), + (0x2F937, "M", "𤲒"), + (0x2F938, "M", "異"), + (0x2F939, "M", "𢆟"), + (0x2F93A, "M", "瘐"), + (0x2F93B, "M", "𤾡"), + (0x2F93C, "M", "𤾸"), + (0x2F93D, "M", "𥁄"), + (0x2F93E, "M", "㿼"), + (0x2F93F, "M", "䀈"), + (0x2F940, "M", "直"), + (0x2F941, "M", "𥃳"), + (0x2F942, "M", "𥃲"), + (0x2F943, "M", "𥄙"), + (0x2F944, "M", "𥄳"), + (0x2F945, "M", "眞"), + (0x2F946, "M", "真"), + (0x2F948, "M", "睊"), + (0x2F949, "M", "䀹"), + (0x2F94A, "M", "瞋"), + (0x2F94B, "M", "䁆"), + (0x2F94C, "M", "䂖"), + (0x2F94D, "M", "𥐝"), + (0x2F94E, "M", "硎"), + (0x2F94F, "M", "碌"), + (0x2F950, "M", "磌"), + (0x2F951, "M", "䃣"), + (0x2F952, "M", "𥘦"), + (0x2F953, "M", "祖"), + (0x2F954, "M", "𥚚"), + (0x2F955, "M", "𥛅"), + (0x2F956, "M", "福"), + (0x2F957, "M", "秫"), + (0x2F958, "M", "䄯"), + (0x2F959, "M", "穀"), + (0x2F95A, "M", "穊"), + (0x2F95B, "M", "穏"), + (0x2F95C, "M", "𥥼"), + (0x2F95D, "M", "𥪧"), + (0x2F95F, "X"), + (0x2F960, "M", "䈂"), + (0x2F961, "M", "𥮫"), + (0x2F962, "M", "篆"), + (0x2F963, "M", "築"), + (0x2F964, "M", "䈧"), + (0x2F965, "M", "𥲀"), + (0x2F966, "M", "糒"), + (0x2F967, "M", "䊠"), + (0x2F968, "M", "糨"), + (0x2F969, "M", "糣"), + (0x2F96A, "M", "紀"), + (0x2F96B, "M", "𥾆"), + (0x2F96C, "M", "絣"), + (0x2F96D, "M", "䌁"), + (0x2F96E, "M", "緇"), + (0x2F96F, "M", "縂"), + (0x2F970, "M", "繅"), + (0x2F971, "M", "䌴"), + (0x2F972, "M", "𦈨"), + (0x2F973, "M", "𦉇"), + ] + + +def _seg_80() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F974, "M", "䍙"), + (0x2F975, "M", "𦋙"), + (0x2F976, "M", "罺"), + (0x2F977, "M", "𦌾"), + (0x2F978, "M", "羕"), + (0x2F979, "M", "翺"), + (0x2F97A, "M", "者"), + (0x2F97B, "M", "𦓚"), + (0x2F97C, "M", "𦔣"), + (0x2F97D, "M", "聠"), + (0x2F97E, "M", "𦖨"), + (0x2F97F, "M", "聰"), + (0x2F980, "M", "𣍟"), + (0x2F981, "M", "䏕"), + (0x2F982, "M", "育"), + (0x2F983, "M", "脃"), + (0x2F984, "M", "䐋"), + (0x2F985, "M", "脾"), + (0x2F986, "M", "媵"), + (0x2F987, "M", "𦞧"), + (0x2F988, "M", "𦞵"), + (0x2F989, "M", "𣎓"), + (0x2F98A, "M", "𣎜"), + (0x2F98B, "M", "舁"), + (0x2F98C, "M", "舄"), + (0x2F98D, "M", "辞"), + (0x2F98E, "M", "䑫"), + (0x2F98F, "M", "芑"), + (0x2F990, "M", "芋"), + (0x2F991, "M", "芝"), + (0x2F992, "M", "劳"), + (0x2F993, "M", "花"), + (0x2F994, "M", "芳"), + (0x2F995, "M", "芽"), + (0x2F996, "M", "苦"), + (0x2F997, "M", "𦬼"), + (0x2F998, "M", "若"), + (0x2F999, "M", "茝"), + (0x2F99A, "M", "荣"), + (0x2F99B, "M", "莭"), + (0x2F99C, "M", "茣"), + (0x2F99D, "M", "莽"), + (0x2F99E, "M", "菧"), + (0x2F99F, "M", "著"), + (0x2F9A0, "M", "荓"), + (0x2F9A1, "M", "菊"), + (0x2F9A2, "M", "菌"), + (0x2F9A3, "M", "菜"), + (0x2F9A4, "M", "𦰶"), + (0x2F9A5, "M", "𦵫"), + (0x2F9A6, "M", "𦳕"), + (0x2F9A7, "M", "䔫"), + (0x2F9A8, "M", "蓱"), + (0x2F9A9, "M", "蓳"), + (0x2F9AA, "M", "蔖"), + (0x2F9AB, "M", "𧏊"), + (0x2F9AC, "M", "蕤"), + (0x2F9AD, "M", "𦼬"), + (0x2F9AE, "M", "䕝"), + (0x2F9AF, "M", "䕡"), + (0x2F9B0, "M", "𦾱"), + (0x2F9B1, "M", "𧃒"), + (0x2F9B2, "M", "䕫"), + (0x2F9B3, "M", "虐"), + (0x2F9B4, "M", "虜"), + (0x2F9B5, "M", "虧"), + (0x2F9B6, "M", "虩"), + (0x2F9B7, "M", "蚩"), + (0x2F9B8, "M", "蚈"), + (0x2F9B9, "M", "蜎"), + (0x2F9BA, "M", "蛢"), + (0x2F9BB, "M", "蝹"), + (0x2F9BC, "M", "蜨"), + (0x2F9BD, "M", "蝫"), + (0x2F9BE, "M", "螆"), + (0x2F9BF, "X"), + (0x2F9C0, "M", "蟡"), + (0x2F9C1, "M", "蠁"), + (0x2F9C2, "M", "䗹"), + (0x2F9C3, "M", "衠"), + (0x2F9C4, "M", "衣"), + (0x2F9C5, "M", "𧙧"), + (0x2F9C6, "M", "裗"), + (0x2F9C7, "M", "裞"), + (0x2F9C8, "M", "䘵"), + (0x2F9C9, "M", "裺"), + (0x2F9CA, "M", "㒻"), + (0x2F9CB, "M", "𧢮"), + (0x2F9CC, "M", "𧥦"), + (0x2F9CD, "M", "䚾"), + (0x2F9CE, "M", "䛇"), + (0x2F9CF, "M", "誠"), + (0x2F9D0, "M", "諭"), + (0x2F9D1, "M", "變"), + (0x2F9D2, "M", "豕"), + (0x2F9D3, "M", "𧲨"), + (0x2F9D4, "M", "貫"), + (0x2F9D5, "M", "賁"), + (0x2F9D6, "M", "贛"), + (0x2F9D7, "M", "起"), + ] + + +def _seg_81() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F9D8, "M", "𧼯"), + (0x2F9D9, "M", "𠠄"), + (0x2F9DA, "M", "跋"), + (0x2F9DB, "M", "趼"), + (0x2F9DC, "M", "跰"), + (0x2F9DD, "M", "𠣞"), + (0x2F9DE, "M", "軔"), + (0x2F9DF, "M", "輸"), + (0x2F9E0, "M", "𨗒"), + (0x2F9E1, "M", "𨗭"), + (0x2F9E2, "M", "邔"), + (0x2F9E3, "M", "郱"), + (0x2F9E4, "M", "鄑"), + (0x2F9E5, "M", "𨜮"), + (0x2F9E6, "M", "鄛"), + (0x2F9E7, "M", "鈸"), + (0x2F9E8, "M", "鋗"), + (0x2F9E9, "M", "鋘"), + (0x2F9EA, "M", "鉼"), + (0x2F9EB, "M", "鏹"), + (0x2F9EC, "M", "鐕"), + (0x2F9ED, "M", "𨯺"), + (0x2F9EE, "M", "開"), + (0x2F9EF, "M", "䦕"), + (0x2F9F0, "M", "閷"), + (0x2F9F1, "M", "𨵷"), + (0x2F9F2, "M", "䧦"), + (0x2F9F3, "M", "雃"), + (0x2F9F4, "M", "嶲"), + (0x2F9F5, "M", "霣"), + (0x2F9F6, "M", "𩅅"), + (0x2F9F7, "M", "𩈚"), + (0x2F9F8, "M", "䩮"), + (0x2F9F9, "M", "䩶"), + (0x2F9FA, "M", "韠"), + (0x2F9FB, "M", "𩐊"), + (0x2F9FC, "M", "䪲"), + (0x2F9FD, "M", "𩒖"), + (0x2F9FE, "M", "頋"), + (0x2FA00, "M", "頩"), + (0x2FA01, "M", "𩖶"), + (0x2FA02, "M", "飢"), + (0x2FA03, "M", "䬳"), + (0x2FA04, "M", "餩"), + (0x2FA05, "M", "馧"), + (0x2FA06, "M", "駂"), + (0x2FA07, "M", "駾"), + (0x2FA08, "M", "䯎"), + (0x2FA09, "M", "𩬰"), + (0x2FA0A, "M", "鬒"), + (0x2FA0B, "M", "鱀"), + (0x2FA0C, "M", "鳽"), + (0x2FA0D, "M", "䳎"), + (0x2FA0E, "M", "䳭"), + (0x2FA0F, "M", "鵧"), + (0x2FA10, "M", "𪃎"), + (0x2FA11, "M", "䳸"), + (0x2FA12, "M", "𪄅"), + (0x2FA13, "M", "𪈎"), + (0x2FA14, "M", "𪊑"), + (0x2FA15, "M", "麻"), + (0x2FA16, "M", "䵖"), + (0x2FA17, "M", "黹"), + (0x2FA18, "M", "黾"), + (0x2FA19, "M", "鼅"), + (0x2FA1A, "M", "鼏"), + (0x2FA1B, "M", "鼖"), + (0x2FA1C, "M", "鼻"), + (0x2FA1D, "M", "𪘀"), + (0x2FA1E, "X"), + (0x30000, "V"), + (0x3134B, "X"), + (0x31350, "V"), + (0x323B0, "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() + + _seg_78() + + _seg_79() + + _seg_80() + + _seg_81() +) # type: Tuple[Union[Tuple[int, str], Tuple[int, str, str]], ...] diff --git a/venv/lib/python3.11/site-packages/nacl/__init__.py b/venv/lib/python3.11/site-packages/nacl/__init__.py new file mode 100644 index 0000000..cc8b7ea --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/__init__.py @@ -0,0 +1,39 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. + + +__all__ = [ + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", +] + +__title__ = "PyNaCl" +__summary__ = ( + "Python binding to the Networking and Cryptography (NaCl) library" +) +__uri__ = "https://github.com/pyca/pynacl/" + +__version__ = "1.5.0" + +__author__ = "The PyNaCl developers" +__email__ = "cryptography-dev@python.org" + +__license__ = "Apache License 2.0" +__copyright__ = "Copyright 2013-2018 {}".format(__author__) diff --git a/venv/lib/python3.11/site-packages/nacl/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8f0e5874c3dcce130e5fd6eaecb0a71277132af GIT binary patch literal 701 zcmYjO&59F25bnwU&n5&Rd-32P9yVaon_UEPMOFfyBrdoh3_{bHZfANkGd=Y5L}o;o zyAR-1JSgJD2k<2n!6m1FFA&+=o~+&&*lOnMs_w3D>Z|(P>9i2oyYGL!mlcHmm|$z= z|IWoJIPZ~%82V^Ah*^%sN=}KDoieL96;^estmf2M-Kn$2hsHMj`p&DLEQG$ow=t*5 zn$OXoHE1lGglM4yPRO!NNRoyjRT%_zLQ*9*rwgtUAtMM{gwRy`Qh^VdJftGnya|NM zqr}j32ytbcDdG7V!rDnTrIR2(KFJ_4vS%VIOKkjz{-K`+5HqcsGBw8DH=~ z#vmZS>0aX=!o_iXRnbT)FTe3PrY@vC-N>*HfM<8Im0=(3j}M0c_w6@tr-PR14h=xL zDnUb)nUsR@AyqX{Gf+2RhOw-@k}9NHH6i$dE&$QxGwjQd<1>b1CC|946D-38nNfG1 z#(2S_1qRh1%(U!qG#=wbXg-7*=hWi~zS2vGhy=8F6la%>hoNL?z#pj|@S8y=F96nM z%d*yXvt3%FEfn?jF6#7)=Bn~!T}IZqqbCSMR9kn5DYF{SQEL&Dj6| literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/__pycache__/encoding.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/__pycache__/encoding.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08c0295fc02ac2659becd5c0214849fcf2396677 GIT binary patch literal 5626 zcmcgw%WoS+7@xJ*>qp{j(zp+3fdyJ8P8*w~AykMKT3T9A2~yJvWYM~7?>KSm7qja& ziK;3>IaGi|ZYdH-IfYi`!kq(uLMr7D`GkZxaC79IdgA+L*6U{;s7==1-#or=X18@B}lunuADpW&dG6E!hCnu zlT+eK&Kvhi#6>O=LtY?;hq`}LR@{U^*z#ZYtJ7JYdeeXrqx9w=pB;zB-EFeod_ zh7KK27_~|)p8^&*5601(RWud2fqi$)y?vGGc{5#LIgROeH7u=J1 R44#foJSLAN z=7(Y?R-!%sA~s#f(bz2`R%C@+G-a8wLheo?si$t2im^L1eByt6# zl*M>=BJoX0&)Sl1)6%U>O7N7)*nlUA6lE$_)sMi? zd-^Lb$uqimtwJDpSmHq)HrzxBE!@Ch-@?}w8FVTN#CbW{(~adIz;Y1Op|xC-koTDz z6_Lt*=nW7=H_fIQ=B#ZKU~=OOgZU-H{E|D(uQ;q^4f3}66j$sS6u6?_y&&cgXF9`0 zb}OpgBa<*IIy;#U{#;+ZN}J9npw6n7kN96||AQ{x?d=+2uR(#1T;lF+YDQ4$9W3xV z0;kerFAHH}KLR?P;k06h5H@AWVU!{qhu6eKt%)T_k&vKBNKhn%6cJG42I_Eb>|EQa zLofmj*h>;zqBC2Q02fevt3v=w#A;YzZ#nUMWCh|+ob)8&K7?(=m(1jKGnL7dz0-6i zn@P{Mt`9bK>W0|V8He^voX+#)ANAmx`o^;SR6Vw)9$WPtYp2nRnaPeqJ7s?XYx7hgR^3kX2z?wR+>KhPLWE!ZnE=X@-9>TlucBWcbP%SK|7DlQGXrNly zq1vF(9u(Sxs4bvDyCGLl4Gq{sss+#KCLI~yRkkTfXk&b=>`#u2i+!py+d@sY*o6BC z#-myz-2PoA94<24OhKeJGdbZ}%oM8Up(Gnd;A>q+f<;h_@FBeXfY!E_{Xc^3Oxq!; zAQ&33*91E`x|;-Jw%bmQZp$vm5Sv|}p-UXMHEn?}xOO=ihtT9inlpU)y}zImKMF~W6tJD*OX;=B z(`Bzcxy5zI#j6y6*DYjM^%H<4a!*=@u>G-6$9`JRy_=kZ#iipA6pFYQ*3K>hnAo_c zi90G@OXhkVV{MX6quQ$ga8Xqc{CNMn`@hiT^FQ7G`Sw$FXiXhj^$iI}MtrR|9)6v{ zE|tB!R>~UgKP?yJ3!ugjrrezTNOn;5n5aX81P5mn%+BZgI=e`nm4|@!jAI zy9~wfLSp_7SaC~|R5?PVp7|jD)`>dLf9qsmwbOr{gjYNLD}ina?)dHS@F36KK+&_h z{3z*CAI$s^o%dE0uLQTnc33>Lfw|A>qL5dD(|S7y%|X<(<)8`If_7NEgms2d)0Xd& gCQN&;)CvzzVe3(B-4=yh5-_M8HZbp52Lb2Kf3~A4;s5{u literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/__pycache__/exceptions.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/__pycache__/exceptions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc8b4c88e276b185565b8ed5f55bd579f971c176 GIT binary patch literal 3499 zcmb7G&2Jk;6rZ)%A8``rqiO3FgoYB)xTJ9dJ(Q?IG-)YN6qPnbRWA10J9ai%?`~&z zle)OYs(Oe(f=C?N6Uv2X)ce(3Iw5NKchww3#~gOI=Rqu#=`&i1TC$U~wMRno~czJ0os_f7jG;v<)d>VH5~ znfX`zgsj6;ZPT*g1%MZ1@-ALL@It@~Gcp^j&jFkaYrs=mBPehkfQtYwR3C4{g#@k> za9x0_>rL8lVS(!gToiDy-)d{abqHJ!;Cg|#b6*j`>jPdti|pcc3f>{$4Y1%YUYB~9 zb*o2MR6WXk%zvydoTxEX%7)cr59H|{Rk}{%$Nxp%WL)y(se;8a4J35nBt+Zphu1^G z$h4%AX`d=h`&A#z^?RKYykI%zCC*KL=WK*R8&_;b+3gIo9L+Rn*5p*tb!sRXopPot z4pS*Zye;69YqA$kCJiOel1VR;Oy*71)v@1|Ox|)8y~YV8ld73XCfCR|>h%26#Eh9| ziCHyaadVbs96Mp==aXqAGv``~d1lNfbS<5*3eJpayfZR7ny@v8owk6l!ooZ0c2%f#mE?VK{UEVZ9hna+f+3- zzgMtQGz60K@Yt^aX@*V3Cu0sm(nSIt^$B8Kf5@Q%~Z6 zA{eb0irfDHfg&s2^%s51&~I<5&+#=!SD?S%_`WL_ef+Y6`LfoE{$+o?-}-hMWseY$ z)H0)qT7m9*<5O)ZRx6D5(|x4g}M`6s@J(xjiYcSPt&HU z3lU=?i#LUV^Q0kX&#=rKQ(I@)?3T-n45N5})mhMU^UQESKQYS!|Ap)iA6OY0etWW7 zMzQj?H;`<@?lO+ag|sP{X&QQgDjBTLupCxbm0GAaa~P*!juh@6Ts=kIn!vgR7>X7P zHN@AHs|5?#Hif%Q;W`)>sVT5+)i!s|iG3#<))*=fP#D%wHp zo_>Djt{19l#L)w%CgVZRZ<&@z@gf0xK`4!R#qng$EbfJX3AH{S5AfGv0zZM|4Ips6 znE3EY^2X$)n^*apFkquY3bS!6m0pk;Hk4$J8T|v~-vUx1l>yTKiB$UdX|(^FnJ;IS z3g3@xL`Tcf(bDD3P-lfmfs4{#(W8$df5zf}#Ns~bMTc`~}C7c|p&TM}E`RXCrA&sQ&B z@A0=`0tTM_AJB?llBCKIk$Ou#_}e5$pX~fsf_@1yQ#)CTZ{g^(CabF*Bql!UY(q*? z2iUfaES)PK8d`m83t7*a{BS!`%wD=#K0LfSw{Lj3+w&i4d_HDCCiXu$u%suaD*DS)sha7U~p=kRPq=G<+JqhTc=#7C}AjqlTH?zCqQ$UiU zkF2z_GxI&>n{U3?@Yj(@h`{sn-+%t#iy=b(iUa#OW_8|B4)C37TknSc(#DPScAhyJ0xu*#db7*>-Abk#` zzX>wnK#n&-1|7&y6XY!iGTa0?;XqC{K~6c4x0@iR9SCjE=ZG^u+A#l)Gd~9NbcYmBA} zs+`IerCdI~Ch2Qg3gdE~QTDi`>P)9NB2 zSC>1|)`~f|edh2*zXcB`Z&smsMz&qM@NIpJI+}H-zl)SD&o+7KBIGr^ z;%OX#wp?3(3sHFHVT-V{Y}S%Ao28EwV~sA&r<0ej#6uh@RgyHRKrNIMMKxOkYN%XI zae-)TmK;!uu522hTwKQDU}+&m(=?ZtbRD!Q!9jp#SKx$zl|bN1M&-j9SnF8)h4yqI zLVFApp?>KJujvzPO)px78CX$@vQm7Yo4q-0vt+0lWR%g@B-rsQw}uMUFskaPWJUn z_f@eMh^VEq!Mz@0=#R_bb*wHd2=tbiP^SmMOhZx~+TkI7&81`UWIx{GyA((-kFQ#V`x9?mR>EtR^RuO)Y>lzSRglf_aO>tdk zf8u1pxUG$wa~~cmgyz-agF2D9SS<&HW|@NA2b+LADCLzc$xzfH#re*s(X5}P^uk@f za+a^!<}4HgQcpgQ%GhF>3h`5h+=_d*vMio-if0%hQj4U*bwE}sdUdiI8btig(gNcq zv$;KYXX*R5(hEn+OzBsU+7_=xZYM3G9a;l4i?Yt3T%jWAIsQ<0U=AVArULM_Ql!=o z;X%WKTRV;o7T6PRGniRPuJH88BjJQ!!)m=9GEbPMPk5}30n74B5flAZ0MW1t{}H_U zd(iBVe_nTy=wLO_{rtjj-u?9MpU%`g?x^o`0?j|L*|}cxS&8xanf>rcB|Ng{9pP~_ zhY`_!FkSNqxd5Hk2>B8+`D>?Sdg9r3cZiIhmdNOm{s2Lgt9Di`KzzeG@X$-Cy4p}Y zm36c;JV&T8HDi*8#7VVeKoPkGl_F|IS4vn7OeQBUiBeK4=g^}Xqw6=XwzxZ^D0ZzT zm0?sgl$>y2fb)>Ur4=$^;5n43&e9G;!#UeimTughPcO}9?2wY35cnd*Ii~raDfL>U z5`HU0;+70rKeXgmUQy<8i$~+phN021hbJVAHfSAG@{)!Z!Ji=p-s!+>N5N`;`DoX( z9~rAe#&)h(!@XF%{nu=C4vhP2*yvR9J-PxBY(vr%xX++5gE4#yjr89Crj_0k)rsvn znxxAyNF`>#(5GQdhXxt+mDP_BI6x>V`9qmXEL&y%Vf+5-?Du#;{~@h$HNHhPSoE+ z)`jf>D>6;V@p~J0bTeWXIAVCR6JloZ#w|0}fXt_kAV}Y9A%Lk9ZC0=&q1j_E;LMyp z0-X!c-%P@1k0t{#+K|C)yWKbi*x_ytr)V4T8Y&=jz?QFZ+9u@LPTZqKCP`irwrxi2 zJRwfz9c!g_1dg_PY#L|gH1N)JA_Xfndo7ZCne-3SHx|+}3v=ek5d@ZWQHM;3H+B?> zBTdYqa;DB%g!QIr6+Ia&S2K1=s^L$R=5VKVz@hN>NXNcf^n@-qf*1kYH_XsHdpu|T zz|_U7OVe+S`R@$;Dr$P*62j{*Gh8PmPiK~sgk+s;EAVCDudU6N0lr#jSjig+%DJ9!O+PUk;>5ZJu-mfv(BQ^ zxaj$+U<|B)@yx-%TTky-24?n1Z2}SzY6RPAq*n~9r$%1fubfJX(LqyMxd#Nj@3NyJ&5(!x^U7*V8)NV z015Zhg4hcYkUxyQZW8UqosJ3)QQ`~Njv)Yf)irlq8=I4e<~)fU-w8HxJ&s(V;auU%x#DCUR~!ni*hB1g4ZlPD3)&#Q AcK`qY literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/__pycache__/hashlib.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/__pycache__/hashlib.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55af393db7e561173488728dc47b2d0e21f77b8e GIT binary patch literal 6266 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 R=c~i_SfTGWD9YB}{{ZYs!Jz;E literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/__pycache__/secret.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/__pycache__/secret.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43f5bb4f801aeed7355530707673305f58db21bf GIT binary patch literal 13188 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/__pycache__/signing.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/__pycache__/signing.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d23048dc50111256f8b50dd051d4f7d12eb5d19f GIT binary patch literal 11659 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 ZJVtSAd8?<|Hn95k221|>5lU>N{|A>>Z*~9x literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/__pycache__/utils.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1cb6dcc45cbc9ddf1815d9f50ed328ed1e6f4ca GIT binary patch literal 3646 zcmb6bU2hx5aqo*f9z{_fv>HoFbFHYtY-_Pbk~$Gm1ursdgPR(N&=={^Pfm^W2lSy2`3Y1(AjAO$1mr1sIz#D8o-(t?Zy^s^a%XpE zX6I&RXJ_`)T+SfS{{Elmcb7ASe2I%*gSBYq9T<)YB~+@D3XXDJa^;HbDiy_5E2@;x zv`PwSN#&%_? z!7?<Mai~^ube2xCNx)Pgy?1a%7bOap$phZp=hodNzCDs7Nb z;VUGqmy{^C(QGt)9tJmdLl#8p2fGaxr4jzY<|Qf8ndkVl=G~2^t(%_1cN-z2cUTbE zcUd$wj)4tY)o*&#>3tff0+VCHNJXNgB7X?Jttd=o8kOGwikK;4mZB<4GyQUR zBSEjJGzC2kU1$21K{JQyQ=os==c#0v0W@_>rp5(Ywol7mpiR&T@JWvAAZm{pCbYNA zD*D3=npLN62Z0%G+o8Gb*J)tdrkmJLyI4CgtBiRjxGM1vY&LBnXI1Q8-P~XfXWeE%c(WC84uZmFjAa)5NQd)7{cq0?^bIbqfrW^G`Z)feX9w{^mY*A1R$n^N*CrMrXbVL%stf;~e;i(>E3tI2R5>n~uRyPX)|1$W-C+Ut0P+{}CX5kXgSUF>4TBrsI2|jp1e9uZ7z+?+2KJ zT5-Il!?s|&>@8fdW$?vUaRbIz*PwR(rI!AZuxP!Mi*(EKY?oP9WLTE#(`Fs#6PESo zrd{t+(w0Si2hf_hs8QasY|ryUJA@+%0G|~%&t(vLl&kP9o<=YSAkraR8*t}#2l4%k zh|ed7fr&t517X=0usRs}#j>L5F+pIE+|0q9gFAn{)0v)YsrWxt=gzdLSk7p(o!oS5 zW~rSk#tN*?@`YG~F;0<7^KlwyI+=YT&fv@-#zLIM8R>!N3Q0{L{!vJZ=SXTYmQ`)x zs2LL&1_0S64?hybc%sW@p4>zZa{z|ehOkKxfqngkp2BwiV*rC(O(mvK8FH&i6{tfR zg_Kd!qU=V9H{w?90polgc5tjYBTfV;y!sYv;uOsji&X{OtwMzEU=a2 zNC`q7Wh_gazh#X_VFVEZ9G0~=JEY`F7r6#90#x{b{4YOq^vdztKh{oXm)f&Sr}<(# zUu@~cZaAj+BCzon5ui^v8pE$3_&I_i0=$b!===<42z~=S_%(n*=)|(5Eg!itf#IKu z7`_)IB2iGJCl=Pci_S$|gmZrh6U<~!V7%C5I@#Gz-u(E@lk2D1rFM3yr7j7*zcPUeIj*+HMq;6_ zE_&{m49CJwKN9xIxU#(ym;E40H@WRm-vwo_fskQkQwfD*cDaSL831s;+1%sRBYK)$ zXlEB%>VnV^6EKw1G{e^o;|^-pYbs2HQ|mAREqizv2UgqebcYTIA^WMUfB8%}sRS=BDX2-74c)X($UBcWYiP2y2dAukV_7na8*duQIa{ zuqO2rFC_05Aq}glX`5)UArPxjVr|z%*{f#F3rCQ^wK}x9%iHzSs;G$Fg_*pJL}d(p ztcc)BQ9B^L(xw9%iSS9pL$+J=?L^`+cThtEi0M8C9t+$#v9C66vE4T8~dKj{%W6z5|MX BT#x_& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/_sodium.abi3.so b/venv/lib/python3.11/site-packages/nacl/_sodium.abi3.so new file mode 100755 index 0000000000000000000000000000000000000000..448331e8c9f1ae32f9c4b3288479eaaad35e92cc GIT binary patch literal 2740136 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%0D`Ph1p${t;y|GiMxI;B1TZ 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

    (>mCYP}malj4Zj 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

    +n$cYbZh|x<>rGSC^3W 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

    h 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 MYv!t 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 z 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%0DNAdcN7Y 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%0D+8cXrYCa#fn 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 G!T$#h4BNf{ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__init__.py b/venv/lib/python3.11/site-packages/nacl/bindings/__init__.py new file mode 100644 index 0000000..1e3b10e --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/__init__.py @@ -0,0 +1,451 @@ +# Copyright 2013-2019 Donald Stufft and individual contributors +# +# 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. + + +from nacl.bindings.crypto_aead import ( + crypto_aead_chacha20poly1305_ABYTES, + crypto_aead_chacha20poly1305_KEYBYTES, + crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX, + crypto_aead_chacha20poly1305_NPUBBYTES, + crypto_aead_chacha20poly1305_NSECBYTES, + crypto_aead_chacha20poly1305_decrypt, + crypto_aead_chacha20poly1305_encrypt, + crypto_aead_chacha20poly1305_ietf_ABYTES, + crypto_aead_chacha20poly1305_ietf_KEYBYTES, + crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, + crypto_aead_chacha20poly1305_ietf_NPUBBYTES, + crypto_aead_chacha20poly1305_ietf_NSECBYTES, + crypto_aead_chacha20poly1305_ietf_decrypt, + crypto_aead_chacha20poly1305_ietf_encrypt, + crypto_aead_xchacha20poly1305_ietf_ABYTES, + crypto_aead_xchacha20poly1305_ietf_KEYBYTES, + crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX, + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES, + crypto_aead_xchacha20poly1305_ietf_NSECBYTES, + crypto_aead_xchacha20poly1305_ietf_decrypt, + crypto_aead_xchacha20poly1305_ietf_encrypt, +) +from nacl.bindings.crypto_box import ( + crypto_box, + crypto_box_BEFORENMBYTES, + crypto_box_BOXZEROBYTES, + crypto_box_NONCEBYTES, + crypto_box_PUBLICKEYBYTES, + crypto_box_SEALBYTES, + crypto_box_SECRETKEYBYTES, + crypto_box_SEEDBYTES, + crypto_box_ZEROBYTES, + crypto_box_afternm, + crypto_box_beforenm, + crypto_box_keypair, + crypto_box_open, + crypto_box_open_afternm, + crypto_box_seal, + crypto_box_seal_open, + crypto_box_seed_keypair, +) +from nacl.bindings.crypto_core import ( + crypto_core_ed25519_BYTES, + crypto_core_ed25519_NONREDUCEDSCALARBYTES, + crypto_core_ed25519_SCALARBYTES, + crypto_core_ed25519_add, + crypto_core_ed25519_is_valid_point, + crypto_core_ed25519_scalar_add, + crypto_core_ed25519_scalar_complement, + crypto_core_ed25519_scalar_invert, + crypto_core_ed25519_scalar_mul, + crypto_core_ed25519_scalar_negate, + crypto_core_ed25519_scalar_reduce, + crypto_core_ed25519_scalar_sub, + crypto_core_ed25519_sub, + has_crypto_core_ed25519, +) +from nacl.bindings.crypto_generichash import ( + crypto_generichash_BYTES, + crypto_generichash_BYTES_MAX, + crypto_generichash_BYTES_MIN, + crypto_generichash_KEYBYTES, + crypto_generichash_KEYBYTES_MAX, + crypto_generichash_KEYBYTES_MIN, + crypto_generichash_PERSONALBYTES, + crypto_generichash_SALTBYTES, + crypto_generichash_STATEBYTES, + generichash_blake2b_final as crypto_generichash_blake2b_final, + generichash_blake2b_init as crypto_generichash_blake2b_init, + generichash_blake2b_salt_personal as crypto_generichash_blake2b_salt_personal, + generichash_blake2b_update as crypto_generichash_blake2b_update, +) +from nacl.bindings.crypto_hash import ( + crypto_hash, + crypto_hash_BYTES, + crypto_hash_sha256, + crypto_hash_sha256_BYTES, + crypto_hash_sha512, + crypto_hash_sha512_BYTES, +) +from nacl.bindings.crypto_kx import ( + crypto_kx_PUBLIC_KEY_BYTES, + crypto_kx_SECRET_KEY_BYTES, + crypto_kx_SEED_BYTES, + crypto_kx_SESSION_KEY_BYTES, + crypto_kx_client_session_keys, + crypto_kx_keypair, + crypto_kx_seed_keypair, + crypto_kx_server_session_keys, +) +from nacl.bindings.crypto_pwhash import ( + crypto_pwhash_ALG_ARGON2I13, + crypto_pwhash_ALG_ARGON2ID13, + crypto_pwhash_ALG_DEFAULT, + crypto_pwhash_BYTES_MAX, + crypto_pwhash_BYTES_MIN, + crypto_pwhash_PASSWD_MAX, + crypto_pwhash_PASSWD_MIN, + crypto_pwhash_SALTBYTES, + crypto_pwhash_STRBYTES, + crypto_pwhash_alg, + crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE, + crypto_pwhash_argon2i_MEMLIMIT_MAX, + crypto_pwhash_argon2i_MEMLIMIT_MIN, + crypto_pwhash_argon2i_MEMLIMIT_MODERATE, + crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE, + crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE, + crypto_pwhash_argon2i_OPSLIMIT_MAX, + crypto_pwhash_argon2i_OPSLIMIT_MIN, + crypto_pwhash_argon2i_OPSLIMIT_MODERATE, + crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE, + crypto_pwhash_argon2i_STRPREFIX, + crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE, + crypto_pwhash_argon2id_MEMLIMIT_MAX, + crypto_pwhash_argon2id_MEMLIMIT_MIN, + crypto_pwhash_argon2id_MEMLIMIT_MODERATE, + crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE, + crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE, + crypto_pwhash_argon2id_OPSLIMIT_MAX, + crypto_pwhash_argon2id_OPSLIMIT_MIN, + crypto_pwhash_argon2id_OPSLIMIT_MODERATE, + crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE, + crypto_pwhash_argon2id_STRPREFIX, + crypto_pwhash_scryptsalsa208sha256_BYTES_MAX, + crypto_pwhash_scryptsalsa208sha256_BYTES_MIN, + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE, + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX, + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN, + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE, + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE, + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX, + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN, + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE, + crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX, + crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN, + crypto_pwhash_scryptsalsa208sha256_SALTBYTES, + crypto_pwhash_scryptsalsa208sha256_STRBYTES, + crypto_pwhash_scryptsalsa208sha256_STRPREFIX, + crypto_pwhash_scryptsalsa208sha256_ll, + crypto_pwhash_scryptsalsa208sha256_str, + crypto_pwhash_scryptsalsa208sha256_str_verify, + crypto_pwhash_str_alg, + crypto_pwhash_str_verify, + has_crypto_pwhash_scryptsalsa208sha256, + nacl_bindings_pick_scrypt_params, +) +from nacl.bindings.crypto_scalarmult import ( + crypto_scalarmult, + crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES, + crypto_scalarmult_base, + crypto_scalarmult_ed25519, + crypto_scalarmult_ed25519_BYTES, + crypto_scalarmult_ed25519_SCALARBYTES, + crypto_scalarmult_ed25519_base, + crypto_scalarmult_ed25519_base_noclamp, + crypto_scalarmult_ed25519_noclamp, + has_crypto_scalarmult_ed25519, +) +from nacl.bindings.crypto_secretbox import ( + crypto_secretbox, + crypto_secretbox_BOXZEROBYTES, + crypto_secretbox_KEYBYTES, + crypto_secretbox_MACBYTES, + crypto_secretbox_MESSAGEBYTES_MAX, + crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES, + crypto_secretbox_open, +) +from nacl.bindings.crypto_secretstream import ( + crypto_secretstream_xchacha20poly1305_ABYTES, + crypto_secretstream_xchacha20poly1305_HEADERBYTES, + crypto_secretstream_xchacha20poly1305_KEYBYTES, + crypto_secretstream_xchacha20poly1305_STATEBYTES, + crypto_secretstream_xchacha20poly1305_TAG_FINAL, + crypto_secretstream_xchacha20poly1305_TAG_MESSAGE, + crypto_secretstream_xchacha20poly1305_TAG_PUSH, + crypto_secretstream_xchacha20poly1305_TAG_REKEY, + crypto_secretstream_xchacha20poly1305_init_pull, + crypto_secretstream_xchacha20poly1305_init_push, + crypto_secretstream_xchacha20poly1305_keygen, + crypto_secretstream_xchacha20poly1305_pull, + crypto_secretstream_xchacha20poly1305_push, + crypto_secretstream_xchacha20poly1305_rekey, + crypto_secretstream_xchacha20poly1305_state, +) +from nacl.bindings.crypto_shorthash import ( + BYTES as crypto_shorthash_siphash24_BYTES, + KEYBYTES as crypto_shorthash_siphash24_KEYBYTES, + XBYTES as crypto_shorthash_siphashx24_BYTES, + XKEYBYTES as crypto_shorthash_siphashx24_KEYBYTES, + crypto_shorthash_siphash24, + crypto_shorthash_siphashx24, + has_crypto_shorthash_siphashx24, +) +from nacl.bindings.crypto_sign import ( + crypto_sign, + crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES, + crypto_sign_ed25519_pk_to_curve25519, + crypto_sign_ed25519_sk_to_curve25519, + crypto_sign_ed25519_sk_to_pk, + crypto_sign_ed25519_sk_to_seed, + crypto_sign_ed25519ph_STATEBYTES, + crypto_sign_ed25519ph_final_create, + crypto_sign_ed25519ph_final_verify, + crypto_sign_ed25519ph_state, + crypto_sign_ed25519ph_update, + crypto_sign_keypair, + crypto_sign_open, + crypto_sign_seed_keypair, +) +from nacl.bindings.randombytes import ( + randombytes, + randombytes_buf_deterministic, +) +from nacl.bindings.sodium_core import sodium_init +from nacl.bindings.utils import ( + sodium_add, + sodium_increment, + sodium_memcmp, + sodium_pad, + sodium_unpad, +) + + +__all__ = [ + "crypto_aead_chacha20poly1305_ABYTES", + "crypto_aead_chacha20poly1305_KEYBYTES", + "crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX", + "crypto_aead_chacha20poly1305_NPUBBYTES", + "crypto_aead_chacha20poly1305_NSECBYTES", + "crypto_aead_chacha20poly1305_decrypt", + "crypto_aead_chacha20poly1305_encrypt", + "crypto_aead_chacha20poly1305_ietf_ABYTES", + "crypto_aead_chacha20poly1305_ietf_KEYBYTES", + "crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX", + "crypto_aead_chacha20poly1305_ietf_NPUBBYTES", + "crypto_aead_chacha20poly1305_ietf_NSECBYTES", + "crypto_aead_chacha20poly1305_ietf_decrypt", + "crypto_aead_chacha20poly1305_ietf_encrypt", + "crypto_aead_xchacha20poly1305_ietf_ABYTES", + "crypto_aead_xchacha20poly1305_ietf_KEYBYTES", + "crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX", + "crypto_aead_xchacha20poly1305_ietf_NPUBBYTES", + "crypto_aead_xchacha20poly1305_ietf_NSECBYTES", + "crypto_aead_xchacha20poly1305_ietf_decrypt", + "crypto_aead_xchacha20poly1305_ietf_encrypt", + "crypto_box_SECRETKEYBYTES", + "crypto_box_PUBLICKEYBYTES", + "crypto_box_SEEDBYTES", + "crypto_box_NONCEBYTES", + "crypto_box_ZEROBYTES", + "crypto_box_BOXZEROBYTES", + "crypto_box_BEFORENMBYTES", + "crypto_box_SEALBYTES", + "crypto_box_keypair", + "crypto_box", + "crypto_box_open", + "crypto_box_beforenm", + "crypto_box_afternm", + "crypto_box_open_afternm", + "crypto_box_seal", + "crypto_box_seal_open", + "crypto_box_seed_keypair", + "has_crypto_core_ed25519", + "crypto_core_ed25519_BYTES", + "crypto_core_ed25519_UNIFORMBYTES", + "crypto_core_ed25519_SCALARBYTES", + "crypto_core_ed25519_NONREDUCEDSCALARBYTES", + "crypto_core_ed25519_add", + "crypto_core_ed25519_from_uniform", + "crypto_core_ed25519_is_valid_point", + "crypto_core_ed25519_sub", + "crypto_core_ed25519_scalar_invert", + "crypto_core_ed25519_scalar_negate", + "crypto_core_ed25519_scalar_complement", + "crypto_core_ed25519_scalar_add", + "crypto_core_ed25519_scalar_sub", + "crypto_core_ed25519_scalar_mul", + "crypto_core_ed25519_scalar_reduce", + "crypto_hash_BYTES", + "crypto_hash_sha256_BYTES", + "crypto_hash_sha512_BYTES", + "crypto_hash", + "crypto_hash_sha256", + "crypto_hash_sha512", + "crypto_generichash_BYTES", + "crypto_generichash_BYTES_MIN", + "crypto_generichash_BYTES_MAX", + "crypto_generichash_KEYBYTES", + "crypto_generichash_KEYBYTES_MIN", + "crypto_generichash_KEYBYTES_MAX", + "crypto_generichash_SALTBYTES", + "crypto_generichash_PERSONALBYTES", + "crypto_generichash_STATEBYTES", + "crypto_generichash_blake2b_salt_personal", + "crypto_generichash_blake2b_init", + "crypto_generichash_blake2b_update", + "crypto_generichash_blake2b_final", + "crypto_kx_keypair", + "crypto_kx_seed_keypair", + "crypto_kx_client_session_keys", + "crypto_kx_server_session_keys", + "crypto_kx_PUBLIC_KEY_BYTES", + "crypto_kx_SECRET_KEY_BYTES", + "crypto_kx_SEED_BYTES", + "crypto_kx_SESSION_KEY_BYTES", + "has_crypto_scalarmult_ed25519", + "crypto_scalarmult_BYTES", + "crypto_scalarmult_SCALARBYTES", + "crypto_scalarmult", + "crypto_scalarmult_base", + "crypto_scalarmult_ed25519_BYTES", + "crypto_scalarmult_ed25519_SCALARBYTES", + "crypto_scalarmult_ed25519", + "crypto_scalarmult_ed25519_base", + "crypto_scalarmult_ed25519_noclamp", + "crypto_scalarmult_ed25519_base_noclamp", + "crypto_secretbox_KEYBYTES", + "crypto_secretbox_NONCEBYTES", + "crypto_secretbox_ZEROBYTES", + "crypto_secretbox_BOXZEROBYTES", + "crypto_secretbox_MACBYTES", + "crypto_secretbox_MESSAGEBYTES_MAX", + "crypto_secretbox", + "crypto_secretbox_open", + "crypto_secretstream_xchacha20poly1305_ABYTES", + "crypto_secretstream_xchacha20poly1305_HEADERBYTES", + "crypto_secretstream_xchacha20poly1305_KEYBYTES", + "crypto_secretstream_xchacha20poly1305_STATEBYTES", + "crypto_secretstream_xchacha20poly1305_TAG_FINAL", + "crypto_secretstream_xchacha20poly1305_TAG_MESSAGE", + "crypto_secretstream_xchacha20poly1305_TAG_PUSH", + "crypto_secretstream_xchacha20poly1305_TAG_REKEY", + "crypto_secretstream_xchacha20poly1305_init_pull", + "crypto_secretstream_xchacha20poly1305_init_push", + "crypto_secretstream_xchacha20poly1305_keygen", + "crypto_secretstream_xchacha20poly1305_pull", + "crypto_secretstream_xchacha20poly1305_push", + "crypto_secretstream_xchacha20poly1305_rekey", + "crypto_secretstream_xchacha20poly1305_state", + "has_crypto_shorthash_siphashx24", + "crypto_shorthash_siphash24_BYTES", + "crypto_shorthash_siphash24_KEYBYTES", + "crypto_shorthash_siphash24", + "crypto_shorthash_siphashx24_BYTES", + "crypto_shorthash_siphashx24_KEYBYTES", + "crypto_shorthash_siphashx24", + "crypto_sign_BYTES", + "crypto_sign_SEEDBYTES", + "crypto_sign_PUBLICKEYBYTES", + "crypto_sign_SECRETKEYBYTES", + "crypto_sign_keypair", + "crypto_sign_seed_keypair", + "crypto_sign", + "crypto_sign_open", + "crypto_sign_ed25519_pk_to_curve25519", + "crypto_sign_ed25519_sk_to_curve25519", + "crypto_sign_ed25519_sk_to_pk", + "crypto_sign_ed25519_sk_to_seed", + "crypto_sign_ed25519ph_STATEBYTES", + "crypto_sign_ed25519ph_final_create", + "crypto_sign_ed25519ph_final_verify", + "crypto_sign_ed25519ph_state", + "crypto_sign_ed25519ph_update", + "crypto_pwhash_ALG_ARGON2I13", + "crypto_pwhash_ALG_ARGON2ID13", + "crypto_pwhash_ALG_DEFAULT", + "crypto_pwhash_BYTES_MAX", + "crypto_pwhash_BYTES_MIN", + "crypto_pwhash_PASSWD_MAX", + "crypto_pwhash_PASSWD_MIN", + "crypto_pwhash_SALTBYTES", + "crypto_pwhash_STRBYTES", + "crypto_pwhash_alg", + "crypto_pwhash_argon2i_MEMLIMIT_MIN", + "crypto_pwhash_argon2i_MEMLIMIT_MAX", + "crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE", + "crypto_pwhash_argon2i_MEMLIMIT_MODERATE", + "crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE", + "crypto_pwhash_argon2i_OPSLIMIT_MIN", + "crypto_pwhash_argon2i_OPSLIMIT_MAX", + "crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE", + "crypto_pwhash_argon2i_OPSLIMIT_MODERATE", + "crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE", + "crypto_pwhash_argon2i_STRPREFIX", + "crypto_pwhash_argon2id_MEMLIMIT_MIN", + "crypto_pwhash_argon2id_MEMLIMIT_MAX", + "crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE", + "crypto_pwhash_argon2id_MEMLIMIT_MODERATE", + "crypto_pwhash_argon2id_OPSLIMIT_MIN", + "crypto_pwhash_argon2id_OPSLIMIT_MAX", + "crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE", + "crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE", + "crypto_pwhash_argon2id_OPSLIMIT_MODERATE", + "crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE", + "crypto_pwhash_argon2id_STRPREFIX", + "crypto_pwhash_str_alg", + "crypto_pwhash_str_verify", + "has_crypto_pwhash_scryptsalsa208sha256", + "crypto_pwhash_scryptsalsa208sha256_BYTES_MAX", + "crypto_pwhash_scryptsalsa208sha256_BYTES_MIN", + "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE", + "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX", + "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN", + "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE", + "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE", + "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX", + "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN", + "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE", + "crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX", + "crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN", + "crypto_pwhash_scryptsalsa208sha256_SALTBYTES", + "crypto_pwhash_scryptsalsa208sha256_STRBYTES", + "crypto_pwhash_scryptsalsa208sha256_STRPREFIX", + "crypto_pwhash_scryptsalsa208sha256_ll", + "crypto_pwhash_scryptsalsa208sha256_str", + "crypto_pwhash_scryptsalsa208sha256_str_verify", + "nacl_bindings_pick_scrypt_params", + "randombytes", + "randombytes_buf_deterministic", + "sodium_init", + "sodium_add", + "sodium_increment", + "sodium_memcmp", + "sodium_pad", + "sodium_unpad", +] + + +# Initialize Sodium +sodium_init() diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0620c5a1d55fdae1af723e3f6592fca1dacac432 GIT binary patch literal 12859 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_aead.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_aead.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..123d3958b096c5280cd20516f40f6f67c4f41e86 GIT binary patch literal 18135 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 I3cA$$FHlyuP5=M^ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_generichash.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_generichash.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7168335edbd78de3ae15a03a00472d890619e27c GIT binary patch literal 11931 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 ZdA{Q7s|GNO)C--1=kMgfcF3mqe*td$DyRSe literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_pwhash.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_pwhash.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3be967347b7acbc5277b672fb4d400ad921bceb0 GIT binary patch literal 23469 zcmc&+T}&HUmaekPc3}fHkN^n@sRZ(4AQ1i%;t)CnNGFru4kVo>)8ja<0-P9|E}JAU zWQQ5`N~AXP-S3|JTj!j6&aL{_k`gBazkm4btI@?%4D&yDk@=Nrk*|MT z#4x{NE-@k_vSDTz&z3MdZW*?)>OJc?H*6zuYuG;S7

    F!#ug>!q)Mk;Ubo?Fp^W^ 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_scalarmult.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_scalarmult.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f6a34920714955027048279208cfe0e98225e53 GIT binary patch literal 9889 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_secretbox.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_secretbox.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0aa05bd8fce7cc59a3fd7a95f8fb09faf24f0ee3 GIT binary patch literal 3878 zcmeHJT}&HS7QW*d|1gfhE|`R*$qralbxClDNt%`_OAJnvpoFS)S1qf`44z9c*kkw3 zK*1#vt+G=&ARW59A)BlFRk+9bg>hLkilRjo};NgrnPS*CPu2IwHr zKn{JGGun?uAZQq$n(7ys=JkS1(cbHjO z1(Kh`XV-$4 zj#~$fu2=4k-1BUV-5E1OXRXlL)yq%BfF&L)71z%^h~HcMdg%VpL-#|?6vr%aY<1+3 zAl{6B*8S;OBmDA%$o-fhBupV;2??k?0gs1Em+$iH7dHHN{AOs-3JtDaF8jk6#FdN=>VqO(Z|7Xl3G#Ml9l+bjG(C5kl#ewQl8=%-Pjnsjtij&eJCYhN` zTBb=9>4eSzm*fz2LgA9ohlbF{$H7U8a||cR5n5w78Qu#zseA#@mSP+^O35)wD8d3l zO0-@_NJ1gWZYgBtj7rgwbVGXwI+7l0-diKDQSDDa0Kg9Y-vDgT3=G~Ynt}5GV8QlV zUgJ>oZhU=lW9ZJ18GO|WzPfse0a#@1()!{9?VB@Se{}z&hsp2brZ{ei;|##cfTkaO z>MQ$(sEf9WS8#itA|O9gQlaFR0|>xOEWP$+di|x(=f9XYgQu+Esnttmf5%ohW`s|| zXZZ&VVSq$njaQ>xwm{LH&}@PognfXv`%_w8$t>iYb6`i%#^jA;*mW z3Srajwp2=1)x6FEKue{blNPhsbo$Z9(r(U;ioSb%i z&}_ z6$x<>1NH3r%Bb6T-dAq2tawn*AJ^Kg?sI1Mu+=?mpsrHfK){DhG+d4(*5XzqVMa!+ z$f$vilqL)WeAGmv<(}cSh}AP}_9U#HgnzH#km-H%4*_4?o0_+5U}+mW8b(L md)Uj^UNU%;J5>&bD?H`LA`X8g#`t5mSaE~Ag7zWo9R3X+L#Z18 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_secretstream.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_secretstream.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d23ac000fa7c2bf5cf23ba10dc12373b446ea357 GIT binary patch literal 13365 zcmeHNTWl0rdOp=%)m?q@6@zCOgUiEZ>A_&k&CugzvB6w+!E6TD?0U1?F8Y-1hQ3Wz zHDJq@ywODRBp!)KOlBTJWJMdYEAqfYA|+BDCsH2Wqeg0#WCuLyXw?`{&PS7cfND}wxuOZ;QF(Fem4DJKOz5y57jGT-#owTBjgKm zolruBG|31PLdG}Y%lIe!8F4}sFx;1xGJ%O8yZ5K%OlTsM2~ULCvzU%#q7zYp_=pz1 z*-|zC5N;k-AILjrw;n4awDb#I{e z4$})cdhc$ax1H&Q9liH9(CcA(5l3&w26{W0UewX+-9S%adM&6&TeZF^A8q?YoOs_y z&J)`H385Vip%ov&k6#nJXs5P|ZqfRfc7S$)_HMdW+YT}D%{F+`t@*S*r=WyF9Wd=M zefJY-Vh_{X4tmTA-8v=H_rS{D5TU*7T~7lWt(sr!)7qwdHM*JBlpl@#jO!n7PXF@Q)vF`t$5@=i<&mFShnkCb_1efa z9;?~HTpKx`uv4>|EDT2Z@%5`0tbyh-h58?jK^1H!!nup%BbTfIv|2&WChdOA{zQ;| z_&xs%5MK~eV4+OhbndBOqMm(uN5cX!gVi^L+;sHj$wP?$$gv@KZA;ZS^?KAteShNW z;n0u$b2O~LbzaMAx@u~Qs@&3Mm8qPr6bwzdlQL)6`}kBLn~YC3S@EfC%1q=7#?0iw zFpK`Gt&lZR(^-uw(4qC8|6)8A&}GP{<QYM0u4Qn8{_dftz$7ujg)RNz)j}Wo{>KsL5M}{J?E3dwT$e-#~uWoXKU692^`R zFjA&=AP?`=Y0VhOs>$@gjZ~Jxs5TmPo`d;W{T<9Silgu|&VyJaFQcTjWBCuu^1EyD z@n@31HSmIfSUmSqCX!qdk3RlMQ5-Ib!>i)(TBLP3es8K6*-?t@_)^7BDWa^3%5yM9 zJUyv8KR$mS-h4qcG9geh;iJNYe;T~pUkei=4NwVYCy9#CszGaib3NWLq0Q&USsRUH zmD~-iEai@_=JQZ=#hlTUrVJ^}klolZza_J0Xb>0}>K*oPs?+eVcR>lplTO!#Cuf*U zvcheCn9P#|4l{O9A3Qk&g*`dLf%;g7S1v;DOsVPA9QO8PT2r$;`*!gU>f69nwS(&D zdG$6F=;L$+MIQ+0bfTf9?JlRIL$%~Yf_44G+|j10Ey1g;8taE(!x#XuNWR(qy)*XZic^AC%x7k|FDEvVH2YK|=)q>wWFz5X= zVCOXG$teyLcD*5|?Nz;bpSLckOyxQs6;l5Q<_k7Qd53N@kV(<9Y$yUQQ(*o9Z(+|; z@w}?589wskimJGgmuEiU{?DAvYgOe^soc<5I6B_y6{o7HHtk@m zFl|yv=d#nT9I`ZS03$Z9aU8tr zyq?wW=D{ZcaF|k4X@JV(u?`*kxfRB=U=jh7Y>u-0fU>R7H7MMeuIF@1V(9|X*0Ky? zSmB?j=>mVrzz3h(qhO4Kk4B!p0SI@{4f6h z`t+nBLKwC=pJ3ythT=N>jQ;`w7-A=pB5QKzy<<f9<$g;gC`y56 z1jGvz6%;SSw)&9=Qc>Pnl6RKny>HTvES>pOUY4J9jeaeUmgOGQZ*6EjN;F~XdKOI`_+V>B; zN{2^R#WO|mOi4TgH{USilPX3O06Z%l_$ftpt%|#tdl?cT|3TNlP}3${g9~NN`>0eP`7V!>^S#E&1w7Nb(+Uly_18JJ&T7*UG6%N{A~+ex zN&V^_(;e6K#_JO1#aqmbzTI?a5O8)lZrMeH^P<kX^_3iB}Y5hIi;fRt@_3iEMBGYnWQDQ1qX6S)5b z7m3ux|Co=>#93xsd9yRz&%@QbsZ1fGaId4}rm#r3&bytWfQ?x}s~%Z#N|@r#wDw|i z&bpo>fkiQziZe(78FsmA4ir=hfP_+5r68H4ATq#OPGytn0@dK3l|?PU@(esrQbj!l zCQFxDG{N02tmMaYSq?aC%mb=*)uc}M!+IZTAU#`G2awNAArlu(GpXb_;;2>J+gM`+ zi>J<5{!>|#m$wRWlBxWRrkmQ`YWO;sqaTF%LdONxT-Rm0_ofUbn*&6KkZEpj*S5c!kw}lUZP9kReAsCH&;6U=6Z44{?fMnWqDv@ z+!H0ywxy3hJ-&SWN!RIOVr)ZF8cu|%k&pJW~lt2Jb>S_WgY4_7BXN!?oDH8ilAAU-a{#CJ`fh8-z z;bjtWQT1|`(0}#+OK7`JZaSW|fv0rgq^9wa4Pvt^}`^>=e)ZF$_FlY$`}1_aHni3&)g{vG)B|97W!<1VRLKzbh_qE ztE+ls`q|Q+yG>ez252F8M9@6Fu0xSMa@C85_z?b_w zA?a~-4khr%&<@`vB>+=yZDYY-5bBoY4*$G<+H)`LJnlwt^T6H(E%3RHMVO+SbvMrP zumR`nb~mgf)a!1X^xjZ{*QJ4*J@(~xZ%75)Vs4Ro+2bbD1Tw?lfXr|l7a?`ECpTSt zuPcqK#^#{kE%>1iAZ%wBkQwf{t~YgV*YA)Sh|cY+MoQ2SPyqnj9wGn9E+8|UR2Z3o zdye*1bJjp+gcn30Gu*kTgBS~<>73JmUgWrDD2EfvT_&?(O75Ny#D)`deIEm2L#(4U zBzNzhmuT1q4G~WZIW^s&@40Ku+52$ky1xFXpZeXjh8e5Y9wFv_*S)L%xXb8m4H~Xx zz}vD@xV;!vFINeZkH8%&s$xSF7hy7`=Q6)Xlu43v0k!2bat(H_--b1D8Tz(~6J32-=%X-_ z>N${Y8*?CisLr5TjSazRj#DBE-Z?~weg+>Id~2EqaU(azgIIp3QXM@E96iBdum2DQ zG9s3kK^Ej3J~Ju=wRk7vsO}QJLGhpPGxoy>2PWi$&7(TT419TZRaPpZ&~gg4NnmrO zwbByAT^$fFP*hO7Y`3isey$beo|4>Cmiyie0&NoI)YtMUTfgzHP8BpV{cob9YpwBT zexc>V|B%E`820l+EUnf`n~XUF@d5>I>jz$TLeBp85HLW+tY=|1LBYVmoltZ+eDB!( z;gznUytgFpUHKS4B>?4eG%Z~apG%V;sWrxe|@qL!ljigFCzRV05DD$Fkh7;g2P zc){+4d`*LcVIDyE?HqA%zyr8^OqpHa;GCmnUN;7ZWBuUBMD?rcx_s#i;3T7K2OtJGL>0JKO`~uJBsK0W*a<0< zlQ1t%0)ITk=f+Jl(Cif7BqjztI@kw~rZQ8WjR8D)iAUY;s5<5Q|H;{YI3-|0h9PQ3 zgX3XvU=4D1L&M{66iR8B;MSR`)D$ZhFAdJU5G9#|IVP7*gDM`K%Yi8*^6jHkP^j;A zV}#|?>9gPfiYn`7PA82F`;U897;MaiF91YuqoaW@d%%eU0g@r-HPJ#!Gw{csX~T( z7FOUk7G67^%a0Z`c?wZwzM50_mob&LL_*ENb^_axffH5Do^9oX2)BkDMzaT8p%r)} zq&uu8kL=n*fJIDX)Vs{%HhXTD9oph);$CR81%#fTu+!CX+0kqPF&^8~z*R=Gr*bh8 z@1eMk*i5Xc6zsR@xT@fLG`RlZn>XyB##wy4h=KtE*3mz}M?8PWI{zzqn4h;hr6(W^ z*SN+np?_BVf*@3Sh;VF`9DU>WDS3a@`z@2c)kfd4R}ErS;GpTTML1}2v?v}giN`B` zA{_WlvO;`Z=UL`gh>S_6;$4YYoMTBnNQ z>5_OFwTAw&k=9AnI#CqkB{7a#gO7LB+lqd>`8t6q4i&|dP*P0s(Bm!jDMC#&p%sn@ zeUG&Yfxmju(=Nb)$MxbFhP|l0*c%gemm|<1`2YP;_Wx80S0s3@z;RNy_@zMJ>n*pP zu7pkt!hs4w$>QS8(_pkBvG4#1b==#!+*S#)M;VUf*fGK+5UE61D2vQZ*z%n3uy9sj z_VDIuw4);7O(j6WV2j<#BoMBI*ezKn^O(I#@VX!X#6ihy;SI|h3$NvkJ%YW+(y@EH kmf|I8TP4K8SX6GnmU&-SHD`G9R0>rjys41aNjCoe8!I*ym;e9( literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_shorthash.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/crypto_shorthash.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b8fa0634cbc231eedb81ee01125c30bf0cae6617 GIT binary patch literal 3427 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 c*KJ-*p>_^cDDrA&B(I|V=*+HL z85h#xLZLqR79UNaZi+8C_Rv2Qow`h`PG>Vz;C?ZH-bSO3W zPWM1PLD5iOf!6j*GiNc)Ddck2vW8$c`BnZ#eA>uBq~wAQ(qrAAjntS z+BGo9r*h#Oudj`vpp<=m$2(cJtK=+A+%*^X*rvWeeTwMO0ctGvxlFrm?J zf&;a}Ry%r*?KG{b>l4?nb8BeQ`LM;tU=FEXg9={)^%%XJ zLivf^ciT7S4%Uv1+a2Tf}gX{e|N^?&R^owD@)M zb8UU@6v7}tiBjU6g8(LxwnXS3sEi`CtsDYGN9Q0#L*pJvXxPlvAdw3rzg40fgzrn^ z96q96LQ{>#2Y!I2*mx=1;0f!2S&!t*!U%8?!LkazTV4xFb8&w%q{M=!SZ;x(MJDVTM|98Yv{$Cy|in*o)K ziS~Sj2gHrNUh4A7k372K;N*+Z-!OPhlF3TN_WdBT<%3&?W8;{|QuAQxv6(kuujtZ(sO7M{l*S`u|xd?yq(V#pA+ar?A*YH}`lO sLAiL07Q1OfxwYqX5fuAW78lhUQ_8KUS{Fg_>;qZ+`al-1R5FeK0H>qHjsO4v literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/sodium_core.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/sodium_core.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee102aef3e4aa45d47494c52e06db93d28a8e6f2 GIT binary patch literal 1098 zcmZuwy>HV%6hD6@&Icq21}YF35QC*OR>g*@E{K7F3}p)vkz-$*OYO6DcaCVM4&7iy zWn?Ns?5Hms{$eI zGa1fvMh9RyoSPx@E#(#JqEr~s5GtO^cjEx|4~v^*MUb`GIsXf?bMHlxMWI6z;Sfp$ z@guT>9iD_Fiy`we^9d(()3unqoylbL+H|`o599_^o!8ehDoBi9GM2D!Xd**jzV!x4 zjJ;v#r7RiZKyWXKN4>ruY-Oo8!gS;TJzlyk1_^!EURm)t5qLR;eSZ^kkNQF6^$86j zKKEuZgM{IBx}Dd1SCU}2Al@DL_$t6IIy0+hcI{*1*j_rZmp-rmv>%?@PtTgSPnyoS zY+9uY1n^tJcoA3wE(qW&L=q{+_tY|pT0l_=;&(2xUY)nU;tAY2E+jh%N@2jo@3 zGM~}ha#9j(L6MFaV5g5cv?5L;9Ahec^_(1k`3YV~p{#21=@4f!i`cgYKTPJ4gXg<_I zS7&AL>$uh2lnr8%8&(I%>vG+m^+m;>K9`2F|Nl9rFG;p+n!sXGm-cF$gjs~w*j;du u6!Q#VY-pM`et@(mN9gg@af%)tT{lh_-QdW$WNFawMQB>uvb0?bs^ov22?W~! literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/utils.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/bindings/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce6b056cddd85b2516acf218258a9b8c60b98e1e GIT binary patch literal 6731 zcmdUz+iw%u8Ng>e$98;4LV)G6OTr|Ci-F)0?kN;4A-h7`(gLOGrfQS1XA&H2k8@@W zByzS9qEfPJDpzW?UI`>WbZJ%rseeHKfl3UXC@Ad z_R^}8_?$E6@}0|^@AsYW{He1u%E9x|U%s6F>n4u-JH9lZP$Ti;w~+XllR25sayfoH zz+*a)6>?;pbe($4vXtF~9MYIGr@p9QO$7t~yfm=ITI& z8K>4`-dl^`ST_GH$d0u}r+2o}CGHW-Xw{jOr;PWOdB?jD(7Ri5W;&W_IZz7tY6`Di zlXz-InleiQtnVvE{RqCqs`E8qCEX)yNg*ZPBgH>Izm!+>_$oO!*_U4k>Tfj158vHc zf0zq_74q~Y3yn6RQc&efA=tHK{_Us;�O!NK_HiYF=0Jx+bbqqJCQyb4pI7b0Sry zGiqKFGkL6`=~7-7^-NA-Z9n6!FqJY|COymH$LL+3g5mO^neTb-IJXNtKA$V}%7 zi7>_OPEl{HKsIlYRB;Lv48ma$KKnxqMl~$P>A~~zdh&*vQ<5`svOv`tC9P{oHFs+w zC8ci`3&~qb{#FunHd&a{Z>afWM~)s%Y8hP_DnPk3t!T--l+GqonY;}1)RIL#lhuwC z=IB-&1_t=k{t3Y%_pc5v7`s1Gkspp3u>mtS@MQGykLqN^AR{Ijfy5e#zN+|HB!2%| zW$W_$<@X;7)r+4*9z=}DfEgKByzng6RX$ZYQ%xDMelym;cyZ02@r;D;y;mX7`Dl%N za_PY(gX}ZOzB<{rwqeP$Xy=l=oG2&$pjD6mZtnMUpGU>T(Y0u&8GWmIu{O98FrtUd z=%JO_&!gX49Q|9YYw7!yV|B9a10Xn;iddr@LklPlOLa+{uJ95ag4i3Y>-guY;{kiAc z)szdp1?9lb=Bv+^$zeJC8&@fis$>4&j5a@!WKqAN0E!AlT|}BlluC2rLTqx<*_e})Oh6Gq#Y9}X_T%KGu~G5V>7yryj*C)uTBRBNMlQ3I*|7Z+@|y0uuKRlaZ1W$;Q(?u(al&)@q<(RS`MpvUA6fg0`N{L6tKJtEB8WR1+@tP zx)sc^NPrqvu)xv*ns%d^zKLxHn?V8++LsUjNO#yEl^(uf#CDsp-A}eW?yZwk203Mt zQ;@Jhn)!5#5!-9V_CC=bFVx97gPb$TIY>MWZ>qd~_k+a`*1CGi`Fh8$wRm@hUw)_j z&f?h9cu(b$5$|0b1J0HA*EbK=6eD`rj2;H^#k_ocT~`^|vG6Wm;^a_C zkV%V7J`RQFEvCCy;be465q%6nMP_P8)tnDgqKi}ieZmy;ug@3}R)Y3pfT*AExz5^p zXkwr2+R=m#U_&24@S|Aq20YkM=w8T51Y5YE`>{^2h=8DnAg!SdVn;Wd4@2-uF&M?d z8U(|P-%+D$*z6jv zcMLy`#h1pHij^znJ4@qbpwAAb&Pdln+Sy?+Y)7Y0Lhg60(~dvDaqG?`9xr9a(GT#f zd_E&+sAJ#3$8dZw&^Zq3f`)m#qV_tvPAZ%X+)|y9GEIh!*Ya#-K^A;kNTg|4Jf?`3 z@@cB%z-eLnb_=Z-8h(kHSr^$o>hhvIMz#f@N=Ms z2C^g_{2g12V{22HX(nY_p+`Il3?JBgNU)6|>t=)<5?Bq_F`;Sq{eyJ+2W2}f!Vo3V zGe9Pi=>!JtMt0b>3X_w%Isx-O0Np1Vryr+rrnzizib&0gYF;^F57=|?U|IIbV>fKw z%MF*Vt>XK1zIAHY)KGk6?fyJD_81iHj6u$rMZ_&s|7{2Li3Wvr`lWT3$Sm$V~uu^ z#B($BE#Ka(qeZ~&2k4Hr0#|(Z8>NPa;PDR}tK8;3%1r?`h1TEiylze6Axn!_?3}QU zS8l1Tx^Ror#&>GZwl;Sy8`4ei-&?h%TQ6)RrhD&Z;AR3akXDNgkLI8z<&+^j@5=`n zTzg-qy)x+v^3lb6?Iz#`dm3xE@t6=2M;+-Kw`dw zEno=)FdK>Ysz{ttDI1FA@}gWWfQBxGc3K3>d9UjbPtcOlmH-cn!D z2FhJ+zAlzUmuWc6Ch1_-c2(Je+Dl_Qr3V^hmJ;G2a9SCqQ;7twusHmy1E&wdvK){S zO=^#Lpp3%5DU+L?9DGWf#z8ua#65-qA{lP#ic=Gk9i{w-u@hJggIV}#|9}AK-1l0C zv5kE>fcKTSPZy z0f}y_8?OV8z%8ayKuyrBXe-TJYb(xbOxU*1_NI}7wi}Mjf!j(|&Ds};16VSM!4L+_ z_~G(?#<32WNqpIHmMNg}19}dM&=6=_Abc+HJpa6p bytes: + """ + Encrypt the given ``message`` using the IETF ratified chacha20poly1305 + construction described in RFC7539. + + :param message: + :type message: bytes + :param aad: + :type aad: Optional[bytes] + :param nonce: + :type nonce: bytes + :param key: + :type key: bytes + :return: authenticated ciphertext + :rtype: bytes + """ + ensure( + isinstance(message, bytes), + "Input message type must be bytes", + raising=exc.TypeError, + ) + + mlen = len(message) + + ensure( + mlen <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, + "Message must be at most {} bytes long".format( + crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX + ), + raising=exc.ValueError, + ) + + ensure( + isinstance(aad, bytes) or (aad is None), + "Additional data must be bytes or None", + raising=exc.TypeError, + ) + + ensure( + isinstance(nonce, bytes) + and len(nonce) == crypto_aead_chacha20poly1305_ietf_NPUBBYTES, + "Nonce must be a {} bytes long bytes sequence".format( + crypto_aead_chacha20poly1305_ietf_NPUBBYTES + ), + raising=exc.TypeError, + ) + + ensure( + isinstance(key, bytes) + and len(key) == crypto_aead_chacha20poly1305_ietf_KEYBYTES, + "Key must be a {} bytes long bytes sequence".format( + crypto_aead_chacha20poly1305_ietf_KEYBYTES + ), + raising=exc.TypeError, + ) + + if aad: + _aad = aad + aalen = len(aad) + else: + _aad = ffi.NULL + aalen = 0 + + mxout = mlen + crypto_aead_chacha20poly1305_ietf_ABYTES + + clen = ffi.new("unsigned long long *") + + ciphertext = ffi.new("unsigned char[]", mxout) + + res = lib.crypto_aead_chacha20poly1305_ietf_encrypt( + ciphertext, clen, message, mlen, _aad, aalen, ffi.NULL, nonce, key + ) + + ensure(res == 0, "Encryption failed.", raising=exc.CryptoError) + return ffi.buffer(ciphertext, clen[0])[:] + + +def crypto_aead_chacha20poly1305_ietf_decrypt( + ciphertext: bytes, aad: Optional[bytes], nonce: bytes, key: bytes +) -> bytes: + """ + Decrypt the given ``ciphertext`` using the IETF ratified chacha20poly1305 + construction described in RFC7539. + + :param ciphertext: + :type ciphertext: bytes + :param aad: + :type aad: Optional[bytes] + :param nonce: + :type nonce: bytes + :param key: + :type key: bytes + :return: message + :rtype: bytes + """ + ensure( + isinstance(ciphertext, bytes), + "Input ciphertext type must be bytes", + raising=exc.TypeError, + ) + + clen = len(ciphertext) + + ensure( + clen <= _aead_chacha20poly1305_ietf_CRYPTBYTES_MAX, + "Ciphertext must be at most {} bytes long".format( + _aead_chacha20poly1305_ietf_CRYPTBYTES_MAX + ), + raising=exc.ValueError, + ) + + ensure( + isinstance(aad, bytes) or (aad is None), + "Additional data must be bytes or None", + raising=exc.TypeError, + ) + + ensure( + isinstance(nonce, bytes) + and len(nonce) == crypto_aead_chacha20poly1305_ietf_NPUBBYTES, + "Nonce must be a {} bytes long bytes sequence".format( + crypto_aead_chacha20poly1305_ietf_NPUBBYTES + ), + raising=exc.TypeError, + ) + + ensure( + isinstance(key, bytes) + and len(key) == crypto_aead_chacha20poly1305_ietf_KEYBYTES, + "Key must be a {} bytes long bytes sequence".format( + crypto_aead_chacha20poly1305_ietf_KEYBYTES + ), + raising=exc.TypeError, + ) + + mxout = clen - crypto_aead_chacha20poly1305_ietf_ABYTES + + mlen = ffi.new("unsigned long long *") + message = ffi.new("unsigned char[]", mxout) + + if aad: + _aad = aad + aalen = len(aad) + else: + _aad = ffi.NULL + aalen = 0 + + res = lib.crypto_aead_chacha20poly1305_ietf_decrypt( + message, mlen, ffi.NULL, ciphertext, clen, _aad, aalen, nonce, key + ) + + ensure(res == 0, "Decryption failed.", raising=exc.CryptoError) + + return ffi.buffer(message, mlen[0])[:] + + +def crypto_aead_chacha20poly1305_encrypt( + message: bytes, aad: Optional[bytes], nonce: bytes, key: bytes +) -> bytes: + """ + Encrypt the given ``message`` using the "legacy" construction + described in draft-agl-tls-chacha20poly1305. + + :param message: + :type message: bytes + :param aad: + :type aad: Optional[bytes] + :param nonce: + :type nonce: bytes + :param key: + :type key: bytes + :return: authenticated ciphertext + :rtype: bytes + """ + ensure( + isinstance(message, bytes), + "Input message type must be bytes", + raising=exc.TypeError, + ) + + mlen = len(message) + + ensure( + mlen <= crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX, + "Message must be at most {} bytes long".format( + crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX + ), + raising=exc.ValueError, + ) + + ensure( + isinstance(aad, bytes) or (aad is None), + "Additional data must be bytes or None", + raising=exc.TypeError, + ) + + ensure( + isinstance(nonce, bytes) + and len(nonce) == crypto_aead_chacha20poly1305_NPUBBYTES, + "Nonce must be a {} bytes long bytes sequence".format( + crypto_aead_chacha20poly1305_NPUBBYTES + ), + raising=exc.TypeError, + ) + + ensure( + isinstance(key, bytes) + and len(key) == crypto_aead_chacha20poly1305_KEYBYTES, + "Key must be a {} bytes long bytes sequence".format( + crypto_aead_chacha20poly1305_KEYBYTES + ), + raising=exc.TypeError, + ) + + if aad: + _aad = aad + aalen = len(aad) + else: + _aad = ffi.NULL + aalen = 0 + + mlen = len(message) + mxout = mlen + crypto_aead_chacha20poly1305_ietf_ABYTES + + clen = ffi.new("unsigned long long *") + + ciphertext = ffi.new("unsigned char[]", mxout) + + res = lib.crypto_aead_chacha20poly1305_encrypt( + ciphertext, clen, message, mlen, _aad, aalen, ffi.NULL, nonce, key + ) + + ensure(res == 0, "Encryption failed.", raising=exc.CryptoError) + return ffi.buffer(ciphertext, clen[0])[:] + + +def crypto_aead_chacha20poly1305_decrypt( + ciphertext: bytes, aad: Optional[bytes], nonce: bytes, key: bytes +) -> bytes: + """ + Decrypt the given ``ciphertext`` using the "legacy" construction + described in draft-agl-tls-chacha20poly1305. + + :param ciphertext: authenticated ciphertext + :type ciphertext: bytes + :param aad: + :type aad: Optional[bytes] + :param nonce: + :type nonce: bytes + :param key: + :type key: bytes + :return: message + :rtype: bytes + """ + ensure( + isinstance(ciphertext, bytes), + "Input ciphertext type must be bytes", + raising=exc.TypeError, + ) + + clen = len(ciphertext) + + ensure( + clen <= _aead_chacha20poly1305_CRYPTBYTES_MAX, + "Ciphertext must be at most {} bytes long".format( + _aead_chacha20poly1305_CRYPTBYTES_MAX + ), + raising=exc.ValueError, + ) + + ensure( + isinstance(aad, bytes) or (aad is None), + "Additional data must be bytes or None", + raising=exc.TypeError, + ) + + ensure( + isinstance(nonce, bytes) + and len(nonce) == crypto_aead_chacha20poly1305_NPUBBYTES, + "Nonce must be a {} bytes long bytes sequence".format( + crypto_aead_chacha20poly1305_NPUBBYTES + ), + raising=exc.TypeError, + ) + + ensure( + isinstance(key, bytes) + and len(key) == crypto_aead_chacha20poly1305_KEYBYTES, + "Key must be a {} bytes long bytes sequence".format( + crypto_aead_chacha20poly1305_KEYBYTES + ), + raising=exc.TypeError, + ) + + mxout = clen - crypto_aead_chacha20poly1305_ABYTES + + mlen = ffi.new("unsigned long long *") + message = ffi.new("unsigned char[]", mxout) + + if aad: + _aad = aad + aalen = len(aad) + else: + _aad = ffi.NULL + aalen = 0 + + res = lib.crypto_aead_chacha20poly1305_decrypt( + message, mlen, ffi.NULL, ciphertext, clen, _aad, aalen, nonce, key + ) + + ensure(res == 0, "Decryption failed.", raising=exc.CryptoError) + + return ffi.buffer(message, mlen[0])[:] + + +def crypto_aead_xchacha20poly1305_ietf_encrypt( + message: bytes, aad: Optional[bytes], nonce: bytes, key: bytes +) -> bytes: + """ + Encrypt the given ``message`` using the long-nonces xchacha20poly1305 + construction. + + :param message: + :type message: bytes + :param aad: + :type aad: Optional[bytes] + :param nonce: + :type nonce: bytes + :param key: + :type key: bytes + :return: authenticated ciphertext + :rtype: bytes + """ + ensure( + isinstance(message, bytes), + "Input message type must be bytes", + raising=exc.TypeError, + ) + + mlen = len(message) + + ensure( + mlen <= crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX, + "Message must be at most {} bytes long".format( + crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX + ), + raising=exc.ValueError, + ) + + ensure( + isinstance(aad, bytes) or (aad is None), + "Additional data must be bytes or None", + raising=exc.TypeError, + ) + + ensure( + isinstance(nonce, bytes) + and len(nonce) == crypto_aead_xchacha20poly1305_ietf_NPUBBYTES, + "Nonce must be a {} bytes long bytes sequence".format( + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES + ), + raising=exc.TypeError, + ) + + ensure( + isinstance(key, bytes) + and len(key) == crypto_aead_xchacha20poly1305_ietf_KEYBYTES, + "Key must be a {} bytes long bytes sequence".format( + crypto_aead_xchacha20poly1305_ietf_KEYBYTES + ), + raising=exc.TypeError, + ) + + if aad: + _aad = aad + aalen = len(aad) + else: + _aad = ffi.NULL + aalen = 0 + + mlen = len(message) + mxout = mlen + crypto_aead_xchacha20poly1305_ietf_ABYTES + + clen = ffi.new("unsigned long long *") + + ciphertext = ffi.new("unsigned char[]", mxout) + + res = lib.crypto_aead_xchacha20poly1305_ietf_encrypt( + ciphertext, clen, message, mlen, _aad, aalen, ffi.NULL, nonce, key + ) + + ensure(res == 0, "Encryption failed.", raising=exc.CryptoError) + return ffi.buffer(ciphertext, clen[0])[:] + + +def crypto_aead_xchacha20poly1305_ietf_decrypt( + ciphertext: bytes, aad: Optional[bytes], nonce: bytes, key: bytes +) -> bytes: + """ + Decrypt the given ``ciphertext`` using the long-nonces xchacha20poly1305 + construction. + + :param ciphertext: authenticated ciphertext + :type ciphertext: bytes + :param aad: + :type aad: Optional[bytes] + :param nonce: + :type nonce: bytes + :param key: + :type key: bytes + :return: message + :rtype: bytes + """ + ensure( + isinstance(ciphertext, bytes), + "Input ciphertext type must be bytes", + raising=exc.TypeError, + ) + + clen = len(ciphertext) + + ensure( + clen <= _aead_xchacha20poly1305_ietf_CRYPTBYTES_MAX, + "Ciphertext must be at most {} bytes long".format( + _aead_xchacha20poly1305_ietf_CRYPTBYTES_MAX + ), + raising=exc.ValueError, + ) + + ensure( + isinstance(aad, bytes) or (aad is None), + "Additional data must be bytes or None", + raising=exc.TypeError, + ) + + ensure( + isinstance(nonce, bytes) + and len(nonce) == crypto_aead_xchacha20poly1305_ietf_NPUBBYTES, + "Nonce must be a {} bytes long bytes sequence".format( + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES + ), + raising=exc.TypeError, + ) + + ensure( + isinstance(key, bytes) + and len(key) == crypto_aead_xchacha20poly1305_ietf_KEYBYTES, + "Key must be a {} bytes long bytes sequence".format( + crypto_aead_xchacha20poly1305_ietf_KEYBYTES + ), + raising=exc.TypeError, + ) + + mxout = clen - crypto_aead_xchacha20poly1305_ietf_ABYTES + mlen = ffi.new("unsigned long long *") + message = ffi.new("unsigned char[]", mxout) + + if aad: + _aad = aad + aalen = len(aad) + else: + _aad = ffi.NULL + aalen = 0 + + res = lib.crypto_aead_xchacha20poly1305_ietf_decrypt( + message, mlen, ffi.NULL, ciphertext, clen, _aad, aalen, nonce, key + ) + + ensure(res == 0, "Decryption failed.", raising=exc.CryptoError) + + return ffi.buffer(message, mlen[0])[:] diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_box.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_box.py new file mode 100644 index 0000000..74f7f0a --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_box.py @@ -0,0 +1,324 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. +from typing import Tuple + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +__all__ = ["crypto_box_keypair", "crypto_box"] + + +crypto_box_SECRETKEYBYTES: int = lib.crypto_box_secretkeybytes() +crypto_box_PUBLICKEYBYTES: int = lib.crypto_box_publickeybytes() +crypto_box_SEEDBYTES: int = lib.crypto_box_seedbytes() +crypto_box_NONCEBYTES: int = lib.crypto_box_noncebytes() +crypto_box_ZEROBYTES: int = lib.crypto_box_zerobytes() +crypto_box_BOXZEROBYTES: int = lib.crypto_box_boxzerobytes() +crypto_box_BEFORENMBYTES: int = lib.crypto_box_beforenmbytes() +crypto_box_SEALBYTES: int = lib.crypto_box_sealbytes() + + +def crypto_box_keypair() -> Tuple[bytes, bytes]: + """ + Returns a randomly generated public and secret key. + + :rtype: (bytes(public_key), bytes(secret_key)) + """ + pk = ffi.new("unsigned char[]", crypto_box_PUBLICKEYBYTES) + sk = ffi.new("unsigned char[]", crypto_box_SECRETKEYBYTES) + + rc = lib.crypto_box_keypair(pk, sk) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ( + ffi.buffer(pk, crypto_box_PUBLICKEYBYTES)[:], + ffi.buffer(sk, crypto_box_SECRETKEYBYTES)[:], + ) + + +def crypto_box_seed_keypair(seed: bytes) -> Tuple[bytes, bytes]: + """ + Returns a (public, secret) keypair deterministically generated + from an input ``seed``. + + .. warning:: The seed **must** be high-entropy; therefore, + its generator **must** be a cryptographic quality + random function like, for example, :func:`~nacl.utils.random`. + + .. warning:: The seed **must** be protected and remain secret. + Anyone who knows the seed is really in possession of + the corresponding PrivateKey. + + + :param seed: bytes + :rtype: (bytes(public_key), bytes(secret_key)) + """ + ensure(isinstance(seed, bytes), "seed must be bytes", raising=TypeError) + + if len(seed) != crypto_box_SEEDBYTES: + raise exc.ValueError("Invalid seed") + + pk = ffi.new("unsigned char[]", crypto_box_PUBLICKEYBYTES) + sk = ffi.new("unsigned char[]", crypto_box_SECRETKEYBYTES) + + rc = lib.crypto_box_seed_keypair(pk, sk, seed) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ( + ffi.buffer(pk, crypto_box_PUBLICKEYBYTES)[:], + ffi.buffer(sk, crypto_box_SECRETKEYBYTES)[:], + ) + + +def crypto_box(message: bytes, nonce: bytes, pk: bytes, sk: bytes) -> bytes: + """ + Encrypts and returns a message ``message`` using the secret key ``sk``, + public key ``pk``, and the nonce ``nonce``. + + :param message: bytes + :param nonce: bytes + :param pk: bytes + :param sk: bytes + :rtype: bytes + """ + if len(nonce) != crypto_box_NONCEBYTES: + raise exc.ValueError("Invalid nonce size") + + if len(pk) != crypto_box_PUBLICKEYBYTES: + raise exc.ValueError("Invalid public key") + + if len(sk) != crypto_box_SECRETKEYBYTES: + raise exc.ValueError("Invalid secret key") + + padded = (b"\x00" * crypto_box_ZEROBYTES) + message + ciphertext = ffi.new("unsigned char[]", len(padded)) + + rc = lib.crypto_box(ciphertext, padded, len(padded), nonce, pk, sk) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(ciphertext, len(padded))[crypto_box_BOXZEROBYTES:] + + +def crypto_box_open( + ciphertext: bytes, nonce: bytes, pk: bytes, sk: bytes +) -> bytes: + """ + Decrypts and returns an encrypted message ``ciphertext``, using the secret + key ``sk``, public key ``pk``, and the nonce ``nonce``. + + :param ciphertext: bytes + :param nonce: bytes + :param pk: bytes + :param sk: bytes + :rtype: bytes + """ + if len(nonce) != crypto_box_NONCEBYTES: + raise exc.ValueError("Invalid nonce size") + + if len(pk) != crypto_box_PUBLICKEYBYTES: + raise exc.ValueError("Invalid public key") + + if len(sk) != crypto_box_SECRETKEYBYTES: + raise exc.ValueError("Invalid secret key") + + padded = (b"\x00" * crypto_box_BOXZEROBYTES) + ciphertext + plaintext = ffi.new("unsigned char[]", len(padded)) + + res = lib.crypto_box_open(plaintext, padded, len(padded), nonce, pk, sk) + ensure( + res == 0, + "An error occurred trying to decrypt the message", + raising=exc.CryptoError, + ) + + return ffi.buffer(plaintext, len(padded))[crypto_box_ZEROBYTES:] + + +def crypto_box_beforenm(pk: bytes, sk: bytes) -> bytes: + """ + Computes and returns the shared key for the public key ``pk`` and the + secret key ``sk``. This can be used to speed up operations where the same + set of keys is going to be used multiple times. + + :param pk: bytes + :param sk: bytes + :rtype: bytes + """ + if len(pk) != crypto_box_PUBLICKEYBYTES: + raise exc.ValueError("Invalid public key") + + if len(sk) != crypto_box_SECRETKEYBYTES: + raise exc.ValueError("Invalid secret key") + + k = ffi.new("unsigned char[]", crypto_box_BEFORENMBYTES) + + rc = lib.crypto_box_beforenm(k, pk, sk) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(k, crypto_box_BEFORENMBYTES)[:] + + +def crypto_box_afternm(message: bytes, nonce: bytes, k: bytes) -> bytes: + """ + Encrypts and returns the message ``message`` using the shared key ``k`` and + the nonce ``nonce``. + + :param message: bytes + :param nonce: bytes + :param k: bytes + :rtype: bytes + """ + if len(nonce) != crypto_box_NONCEBYTES: + raise exc.ValueError("Invalid nonce") + + if len(k) != crypto_box_BEFORENMBYTES: + raise exc.ValueError("Invalid shared key") + + padded = b"\x00" * crypto_box_ZEROBYTES + message + ciphertext = ffi.new("unsigned char[]", len(padded)) + + rc = lib.crypto_box_afternm(ciphertext, padded, len(padded), nonce, k) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(ciphertext, len(padded))[crypto_box_BOXZEROBYTES:] + + +def crypto_box_open_afternm( + ciphertext: bytes, nonce: bytes, k: bytes +) -> bytes: + """ + Decrypts and returns the encrypted message ``ciphertext``, using the shared + key ``k`` and the nonce ``nonce``. + + :param ciphertext: bytes + :param nonce: bytes + :param k: bytes + :rtype: bytes + """ + if len(nonce) != crypto_box_NONCEBYTES: + raise exc.ValueError("Invalid nonce") + + if len(k) != crypto_box_BEFORENMBYTES: + raise exc.ValueError("Invalid shared key") + + padded = (b"\x00" * crypto_box_BOXZEROBYTES) + ciphertext + plaintext = ffi.new("unsigned char[]", len(padded)) + + res = lib.crypto_box_open_afternm(plaintext, padded, len(padded), nonce, k) + ensure( + res == 0, + "An error occurred trying to decrypt the message", + raising=exc.CryptoError, + ) + + return ffi.buffer(plaintext, len(padded))[crypto_box_ZEROBYTES:] + + +def crypto_box_seal(message: bytes, pk: bytes) -> bytes: + """ + Encrypts and returns a message ``message`` using an ephemeral secret key + and the public key ``pk``. + The ephemeral public key, which is embedded in the sealed box, is also + used, in combination with ``pk``, to derive the nonce needed for the + underlying box construct. + + :param message: bytes + :param pk: bytes + :rtype: bytes + + .. versionadded:: 1.2 + """ + ensure( + isinstance(message, bytes), + "input message must be bytes", + raising=TypeError, + ) + + ensure( + isinstance(pk, bytes), "public key must be bytes", raising=TypeError + ) + + if len(pk) != crypto_box_PUBLICKEYBYTES: + raise exc.ValueError("Invalid public key") + + _mlen = len(message) + _clen = crypto_box_SEALBYTES + _mlen + + ciphertext = ffi.new("unsigned char[]", _clen) + + rc = lib.crypto_box_seal(ciphertext, message, _mlen, pk) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(ciphertext, _clen)[:] + + +def crypto_box_seal_open(ciphertext: bytes, pk: bytes, sk: bytes) -> bytes: + """ + Decrypts and returns an encrypted message ``ciphertext``, using the + recipent's secret key ``sk`` and the sender's ephemeral public key + embedded in the sealed box. The box contruct nonce is derived from + the recipient's public key ``pk`` and the sender's public key. + + :param ciphertext: bytes + :param pk: bytes + :param sk: bytes + :rtype: bytes + + .. versionadded:: 1.2 + """ + ensure( + isinstance(ciphertext, bytes), + "input ciphertext must be bytes", + raising=TypeError, + ) + + ensure( + isinstance(pk, bytes), "public key must be bytes", raising=TypeError + ) + + ensure( + isinstance(sk, bytes), "secret key must be bytes", raising=TypeError + ) + + if len(pk) != crypto_box_PUBLICKEYBYTES: + raise exc.ValueError("Invalid public key") + + if len(sk) != crypto_box_SECRETKEYBYTES: + raise exc.ValueError("Invalid secret key") + + _clen = len(ciphertext) + + ensure( + _clen >= crypto_box_SEALBYTES, + ("Input cyphertext must be at least {} long").format( + crypto_box_SEALBYTES + ), + raising=exc.TypeError, + ) + + _mlen = _clen - crypto_box_SEALBYTES + + # zero-length malloc results are implementation.dependent + plaintext = ffi.new("unsigned char[]", max(1, _mlen)) + + res = lib.crypto_box_seal_open(plaintext, ciphertext, _clen, pk, sk) + ensure( + res == 0, + "An error occurred trying to decrypt the message", + raising=exc.CryptoError, + ) + + return ffi.buffer(plaintext, _mlen)[:] diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_core.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_core.py new file mode 100644 index 0000000..d29da9b --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_core.py @@ -0,0 +1,412 @@ +# Copyright 2018 Donald Stufft and individual contributors +# +# 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. + + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +has_crypto_core_ed25519 = bool(lib.PYNACL_HAS_CRYPTO_CORE_ED25519) + +crypto_core_ed25519_BYTES = 0 +crypto_core_ed25519_SCALARBYTES = 0 +crypto_core_ed25519_NONREDUCEDSCALARBYTES = 0 + +if has_crypto_core_ed25519: + crypto_core_ed25519_BYTES = lib.crypto_core_ed25519_bytes() + crypto_core_ed25519_SCALARBYTES = lib.crypto_core_ed25519_scalarbytes() + crypto_core_ed25519_NONREDUCEDSCALARBYTES = ( + lib.crypto_core_ed25519_nonreducedscalarbytes() + ) + + +def crypto_core_ed25519_is_valid_point(p: bytes) -> bool: + """ + Check if ``p`` represents a point on the edwards25519 curve, in canonical + form, on the main subgroup, and that the point doesn't have a small order. + + :param p: a :py:data:`.crypto_core_ed25519_BYTES` long bytes sequence + representing a point on the edwards25519 curve + :type p: bytes + :return: point validity + :rtype: bool + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(p, bytes) and len(p) == crypto_core_ed25519_BYTES, + "Point must be a crypto_core_ed25519_BYTES long bytes sequence", + raising=exc.TypeError, + ) + + rc = lib.crypto_core_ed25519_is_valid_point(p) + return rc == 1 + + +def crypto_core_ed25519_add(p: bytes, q: bytes) -> bytes: + """ + Add two points on the edwards25519 curve. + + :param p: a :py:data:`.crypto_core_ed25519_BYTES` long bytes sequence + representing a point on the edwards25519 curve + :type p: bytes + :param q: a :py:data:`.crypto_core_ed25519_BYTES` long bytes sequence + representing a point on the edwards25519 curve + :type q: bytes + :return: a point on the edwards25519 curve represented as + a :py:data:`.crypto_core_ed25519_BYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(p, bytes) + and isinstance(q, bytes) + and len(p) == crypto_core_ed25519_BYTES + and len(q) == crypto_core_ed25519_BYTES, + "Each point must be a {} long bytes sequence".format( + "crypto_core_ed25519_BYTES" + ), + raising=exc.TypeError, + ) + + r = ffi.new("unsigned char[]", crypto_core_ed25519_BYTES) + + rc = lib.crypto_core_ed25519_add(r, p, q) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(r, crypto_core_ed25519_BYTES)[:] + + +def crypto_core_ed25519_sub(p: bytes, q: bytes) -> bytes: + """ + Subtract a point from another on the edwards25519 curve. + + :param p: a :py:data:`.crypto_core_ed25519_BYTES` long bytes sequence + representing a point on the edwards25519 curve + :type p: bytes + :param q: a :py:data:`.crypto_core_ed25519_BYTES` long bytes sequence + representing a point on the edwards25519 curve + :type q: bytes + :return: a point on the edwards25519 curve represented as + a :py:data:`.crypto_core_ed25519_BYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(p, bytes) + and isinstance(q, bytes) + and len(p) == crypto_core_ed25519_BYTES + and len(q) == crypto_core_ed25519_BYTES, + "Each point must be a {} long bytes sequence".format( + "crypto_core_ed25519_BYTES" + ), + raising=exc.TypeError, + ) + + r = ffi.new("unsigned char[]", crypto_core_ed25519_BYTES) + + rc = lib.crypto_core_ed25519_sub(r, p, q) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(r, crypto_core_ed25519_BYTES)[:] + + +def crypto_core_ed25519_scalar_invert(s: bytes) -> bytes: + """ + Return the multiplicative inverse of integer ``s`` modulo ``L``, + i.e an integer ``i`` such that ``s * i = 1 (mod L)``, where ``L`` + is the order of the main subgroup. + + Raises a ``exc.RuntimeError`` if ``s`` is the integer zero. + + :param s: a :py:data:`.crypto_core_ed25519_SCALARBYTES` + long bytes sequence representing an integer + :type s: bytes + :return: an integer represented as a + :py:data:`.crypto_core_ed25519_SCALARBYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(s, bytes) and len(s) == crypto_core_ed25519_SCALARBYTES, + "Integer s must be a {} long bytes sequence".format( + "crypto_core_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + r = ffi.new("unsigned char[]", crypto_core_ed25519_SCALARBYTES) + + rc = lib.crypto_core_ed25519_scalar_invert(r, s) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(r, crypto_core_ed25519_SCALARBYTES)[:] + + +def crypto_core_ed25519_scalar_negate(s: bytes) -> bytes: + """ + Return the integer ``n`` such that ``s + n = 0 (mod L)``, where ``L`` + is the order of the main subgroup. + + :param s: a :py:data:`.crypto_core_ed25519_SCALARBYTES` + long bytes sequence representing an integer + :type s: bytes + :return: an integer represented as a + :py:data:`.crypto_core_ed25519_SCALARBYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(s, bytes) and len(s) == crypto_core_ed25519_SCALARBYTES, + "Integer s must be a {} long bytes sequence".format( + "crypto_core_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + r = ffi.new("unsigned char[]", crypto_core_ed25519_SCALARBYTES) + + lib.crypto_core_ed25519_scalar_negate(r, s) + + return ffi.buffer(r, crypto_core_ed25519_SCALARBYTES)[:] + + +def crypto_core_ed25519_scalar_complement(s: bytes) -> bytes: + """ + Return the complement of integer ``s`` modulo ``L``, i.e. an integer + ``c`` such that ``s + c = 1 (mod L)``, where ``L`` is the order of + the main subgroup. + + :param s: a :py:data:`.crypto_core_ed25519_SCALARBYTES` + long bytes sequence representing an integer + :type s: bytes + :return: an integer represented as a + :py:data:`.crypto_core_ed25519_SCALARBYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(s, bytes) and len(s) == crypto_core_ed25519_SCALARBYTES, + "Integer s must be a {} long bytes sequence".format( + "crypto_core_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + r = ffi.new("unsigned char[]", crypto_core_ed25519_SCALARBYTES) + + lib.crypto_core_ed25519_scalar_complement(r, s) + + return ffi.buffer(r, crypto_core_ed25519_SCALARBYTES)[:] + + +def crypto_core_ed25519_scalar_add(p: bytes, q: bytes) -> bytes: + """ + Add integers ``p`` and ``q`` modulo ``L``, where ``L`` is the order of + the main subgroup. + + :param p: a :py:data:`.crypto_core_ed25519_SCALARBYTES` + long bytes sequence representing an integer + :type p: bytes + :param q: a :py:data:`.crypto_core_ed25519_SCALARBYTES` + long bytes sequence representing an integer + :type q: bytes + :return: an integer represented as a + :py:data:`.crypto_core_ed25519_SCALARBYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(p, bytes) + and isinstance(q, bytes) + and len(p) == crypto_core_ed25519_SCALARBYTES + and len(q) == crypto_core_ed25519_SCALARBYTES, + "Each integer must be a {} long bytes sequence".format( + "crypto_core_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + r = ffi.new("unsigned char[]", crypto_core_ed25519_SCALARBYTES) + + lib.crypto_core_ed25519_scalar_add(r, p, q) + + return ffi.buffer(r, crypto_core_ed25519_SCALARBYTES)[:] + + +def crypto_core_ed25519_scalar_sub(p: bytes, q: bytes) -> bytes: + """ + Subtract integers ``p`` and ``q`` modulo ``L``, where ``L`` is the + order of the main subgroup. + + :param p: a :py:data:`.crypto_core_ed25519_SCALARBYTES` + long bytes sequence representing an integer + :type p: bytes + :param q: a :py:data:`.crypto_core_ed25519_SCALARBYTES` + long bytes sequence representing an integer + :type q: bytes + :return: an integer represented as a + :py:data:`.crypto_core_ed25519_SCALARBYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(p, bytes) + and isinstance(q, bytes) + and len(p) == crypto_core_ed25519_SCALARBYTES + and len(q) == crypto_core_ed25519_SCALARBYTES, + "Each integer must be a {} long bytes sequence".format( + "crypto_core_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + r = ffi.new("unsigned char[]", crypto_core_ed25519_SCALARBYTES) + + lib.crypto_core_ed25519_scalar_sub(r, p, q) + + return ffi.buffer(r, crypto_core_ed25519_SCALARBYTES)[:] + + +def crypto_core_ed25519_scalar_mul(p: bytes, q: bytes) -> bytes: + """ + Multiply integers ``p`` and ``q`` modulo ``L``, where ``L`` is the + order of the main subgroup. + + :param p: a :py:data:`.crypto_core_ed25519_SCALARBYTES` + long bytes sequence representing an integer + :type p: bytes + :param q: a :py:data:`.crypto_core_ed25519_SCALARBYTES` + long bytes sequence representing an integer + :type q: bytes + :return: an integer represented as a + :py:data:`.crypto_core_ed25519_SCALARBYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(p, bytes) + and isinstance(q, bytes) + and len(p) == crypto_core_ed25519_SCALARBYTES + and len(q) == crypto_core_ed25519_SCALARBYTES, + "Each integer must be a {} long bytes sequence".format( + "crypto_core_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + r = ffi.new("unsigned char[]", crypto_core_ed25519_SCALARBYTES) + + lib.crypto_core_ed25519_scalar_mul(r, p, q) + + return ffi.buffer(r, crypto_core_ed25519_SCALARBYTES)[:] + + +def crypto_core_ed25519_scalar_reduce(s: bytes) -> bytes: + """ + Reduce integer ``s`` to ``s`` modulo ``L``, where ``L`` is the order + of the main subgroup. + + :param s: a :py:data:`.crypto_core_ed25519_NONREDUCEDSCALARBYTES` + long bytes sequence representing an integer + :type s: bytes + :return: an integer represented as a + :py:data:`.crypto_core_ed25519_SCALARBYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_core_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(s, bytes) + and len(s) == crypto_core_ed25519_NONREDUCEDSCALARBYTES, + "Integer s must be a {} long bytes sequence".format( + "crypto_core_ed25519_NONREDUCEDSCALARBYTES" + ), + raising=exc.TypeError, + ) + + r = ffi.new("unsigned char[]", crypto_core_ed25519_SCALARBYTES) + + lib.crypto_core_ed25519_scalar_reduce(r, s) + + return ffi.buffer(r, crypto_core_ed25519_SCALARBYTES)[:] diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_generichash.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_generichash.py new file mode 100644 index 0000000..6ab385a --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_generichash.py @@ -0,0 +1,281 @@ +# Copyright 2013-2019 Donald Stufft and individual contributors +# +# 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. +from typing import NoReturn, TypeVar + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +crypto_generichash_BYTES: int = lib.crypto_generichash_blake2b_bytes() +crypto_generichash_BYTES_MIN: int = lib.crypto_generichash_blake2b_bytes_min() +crypto_generichash_BYTES_MAX: int = lib.crypto_generichash_blake2b_bytes_max() +crypto_generichash_KEYBYTES: int = lib.crypto_generichash_blake2b_keybytes() +crypto_generichash_KEYBYTES_MIN: int = ( + lib.crypto_generichash_blake2b_keybytes_min() +) +crypto_generichash_KEYBYTES_MAX: int = ( + lib.crypto_generichash_blake2b_keybytes_max() +) +crypto_generichash_SALTBYTES: int = lib.crypto_generichash_blake2b_saltbytes() +crypto_generichash_PERSONALBYTES: int = ( + lib.crypto_generichash_blake2b_personalbytes() +) +crypto_generichash_STATEBYTES: int = lib.crypto_generichash_statebytes() + +_OVERLONG = "{0} length greater than {1} bytes" +_TOOBIG = "{0} greater than {1}" + + +def _checkparams( + digest_size: int, key: bytes, salt: bytes, person: bytes +) -> None: + """Check hash parameters""" + ensure( + isinstance(key, bytes), + "Key must be a bytes sequence", + raising=exc.TypeError, + ) + + ensure( + isinstance(salt, bytes), + "Salt must be a bytes sequence", + raising=exc.TypeError, + ) + + ensure( + isinstance(person, bytes), + "Person must be a bytes sequence", + raising=exc.TypeError, + ) + + ensure( + isinstance(digest_size, int), + "Digest size must be an integer number", + raising=exc.TypeError, + ) + + ensure( + digest_size <= crypto_generichash_BYTES_MAX, + _TOOBIG.format("Digest_size", crypto_generichash_BYTES_MAX), + raising=exc.ValueError, + ) + + ensure( + len(key) <= crypto_generichash_KEYBYTES_MAX, + _OVERLONG.format("Key", crypto_generichash_KEYBYTES_MAX), + raising=exc.ValueError, + ) + + ensure( + len(salt) <= crypto_generichash_SALTBYTES, + _OVERLONG.format("Salt", crypto_generichash_SALTBYTES), + raising=exc.ValueError, + ) + + ensure( + len(person) <= crypto_generichash_PERSONALBYTES, + _OVERLONG.format("Person", crypto_generichash_PERSONALBYTES), + raising=exc.ValueError, + ) + + +def generichash_blake2b_salt_personal( + data: bytes, + digest_size: int = crypto_generichash_BYTES, + key: bytes = b"", + salt: bytes = b"", + person: bytes = b"", +) -> bytes: + """One shot hash interface + + :param data: the input data to the hash function + :type data: bytes + :param digest_size: must be at most + :py:data:`.crypto_generichash_BYTES_MAX`; + the default digest size is + :py:data:`.crypto_generichash_BYTES` + :type digest_size: int + :param key: must be at most + :py:data:`.crypto_generichash_KEYBYTES_MAX` long + :type key: bytes + :param salt: must be at most + :py:data:`.crypto_generichash_SALTBYTES` long; + will be zero-padded if needed + :type salt: bytes + :param person: must be at most + :py:data:`.crypto_generichash_PERSONALBYTES` long: + will be zero-padded if needed + :type person: bytes + :return: digest_size long digest + :rtype: bytes + """ + + _checkparams(digest_size, key, salt, person) + + ensure( + isinstance(data, bytes), + "Input data must be a bytes sequence", + raising=exc.TypeError, + ) + + digest = ffi.new("unsigned char[]", digest_size) + + # both _salt and _personal must be zero-padded to the correct length + _salt = ffi.new("unsigned char []", crypto_generichash_SALTBYTES) + _person = ffi.new("unsigned char []", crypto_generichash_PERSONALBYTES) + + ffi.memmove(_salt, salt, len(salt)) + ffi.memmove(_person, person, len(person)) + + rc = lib.crypto_generichash_blake2b_salt_personal( + digest, digest_size, data, len(data), key, len(key), _salt, _person + ) + ensure(rc == 0, "Unexpected failure", raising=exc.RuntimeError) + + return ffi.buffer(digest, digest_size)[:] + + +_Blake2State = TypeVar("_Blake2State", bound="Blake2State") + + +class Blake2State: + """ + Python-level wrapper for the crypto_generichash_blake2b state buffer + """ + + __slots__ = ["_statebuf", "digest_size"] + + def __init__(self, digest_size: int): + self._statebuf = ffi.new( + "unsigned char[]", crypto_generichash_STATEBYTES + ) + self.digest_size = digest_size + + def __reduce__(self) -> NoReturn: + """ + Raise the same exception as hashlib's blake implementation + on copy.copy() + """ + raise TypeError( + "can't pickle {} objects".format(self.__class__.__name__) + ) + + def copy(self: _Blake2State) -> _Blake2State: + _st = self.__class__(self.digest_size) + ffi.memmove( + _st._statebuf, self._statebuf, crypto_generichash_STATEBYTES + ) + return _st + + +def generichash_blake2b_init( + key: bytes = b"", + salt: bytes = b"", + person: bytes = b"", + digest_size: int = crypto_generichash_BYTES, +) -> Blake2State: + """ + Create a new initialized blake2b hash state + + :param key: must be at most + :py:data:`.crypto_generichash_KEYBYTES_MAX` long + :type key: bytes + :param salt: must be at most + :py:data:`.crypto_generichash_SALTBYTES` long; + will be zero-padded if needed + :type salt: bytes + :param person: must be at most + :py:data:`.crypto_generichash_PERSONALBYTES` long: + will be zero-padded if needed + :type person: bytes + :param digest_size: must be at most + :py:data:`.crypto_generichash_BYTES_MAX`; + the default digest size is + :py:data:`.crypto_generichash_BYTES` + :type digest_size: int + :return: a initialized :py:class:`.Blake2State` + :rtype: object + """ + + _checkparams(digest_size, key, salt, person) + + state = Blake2State(digest_size) + + # both _salt and _personal must be zero-padded to the correct length + _salt = ffi.new("unsigned char []", crypto_generichash_SALTBYTES) + _person = ffi.new("unsigned char []", crypto_generichash_PERSONALBYTES) + + ffi.memmove(_salt, salt, len(salt)) + ffi.memmove(_person, person, len(person)) + + rc = lib.crypto_generichash_blake2b_init_salt_personal( + state._statebuf, key, len(key), digest_size, _salt, _person + ) + ensure(rc == 0, "Unexpected failure", raising=exc.RuntimeError) + + return state + + +def generichash_blake2b_update(state: Blake2State, data: bytes) -> None: + """Update the blake2b hash state + + :param state: a initialized Blake2bState object as returned from + :py:func:`.crypto_generichash_blake2b_init` + :type state: :py:class:`.Blake2State` + :param data: + :type data: bytes + """ + + ensure( + isinstance(state, Blake2State), + "State must be a Blake2State object", + raising=exc.TypeError, + ) + + ensure( + isinstance(data, bytes), + "Input data must be a bytes sequence", + raising=exc.TypeError, + ) + + rc = lib.crypto_generichash_blake2b_update( + state._statebuf, data, len(data) + ) + ensure(rc == 0, "Unexpected failure", raising=exc.RuntimeError) + + +def generichash_blake2b_final(state: Blake2State) -> bytes: + """Finalize the blake2b hash state and return the digest. + + :param state: a initialized Blake2bState object as returned from + :py:func:`.crypto_generichash_blake2b_init` + :type state: :py:class:`.Blake2State` + :return: the blake2 digest of the passed-in data stream + :rtype: bytes + """ + + ensure( + isinstance(state, Blake2State), + "State must be a Blake2State object", + raising=exc.TypeError, + ) + + _digest = ffi.new("unsigned char[]", crypto_generichash_BYTES_MAX) + rc = lib.crypto_generichash_blake2b_final( + state._statebuf, _digest, state.digest_size + ) + + ensure(rc == 0, "Unexpected failure", raising=exc.RuntimeError) + return ffi.buffer(_digest, state.digest_size)[:] diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_hash.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_hash.py new file mode 100644 index 0000000..2bab399 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_hash.py @@ -0,0 +1,63 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. + + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +# crypto_hash_BYTES = lib.crypto_hash_bytes() +crypto_hash_BYTES: int = lib.crypto_hash_sha512_bytes() +crypto_hash_sha256_BYTES: int = lib.crypto_hash_sha256_bytes() +crypto_hash_sha512_BYTES: int = lib.crypto_hash_sha512_bytes() + + +def crypto_hash(message: bytes) -> bytes: + """ + Hashes and returns the message ``message``. + + :param message: bytes + :rtype: bytes + """ + digest = ffi.new("unsigned char[]", crypto_hash_BYTES) + rc = lib.crypto_hash(digest, message, len(message)) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + return ffi.buffer(digest, crypto_hash_BYTES)[:] + + +def crypto_hash_sha256(message: bytes) -> bytes: + """ + Hashes and returns the message ``message``. + + :param message: bytes + :rtype: bytes + """ + digest = ffi.new("unsigned char[]", crypto_hash_sha256_BYTES) + rc = lib.crypto_hash_sha256(digest, message, len(message)) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + return ffi.buffer(digest, crypto_hash_sha256_BYTES)[:] + + +def crypto_hash_sha512(message: bytes) -> bytes: + """ + Hashes and returns the message ``message``. + + :param message: bytes + :rtype: bytes + """ + digest = ffi.new("unsigned char[]", crypto_hash_sha512_BYTES) + rc = lib.crypto_hash_sha512(digest, message, len(message)) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + return ffi.buffer(digest, crypto_hash_sha512_BYTES)[:] diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_kx.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_kx.py new file mode 100644 index 0000000..172a19f --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_kx.py @@ -0,0 +1,200 @@ +# Copyright 2018 Donald Stufft and individual contributors +# +# 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. +from typing import Tuple + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + +__all__ = [ + "crypto_kx_keypair", + "crypto_kx_client_session_keys", + "crypto_kx_server_session_keys", + "crypto_kx_PUBLIC_KEY_BYTES", + "crypto_kx_SECRET_KEY_BYTES", + "crypto_kx_SEED_BYTES", + "crypto_kx_SESSION_KEY_BYTES", +] + +""" +Implementations of client, server key exchange +""" +crypto_kx_PUBLIC_KEY_BYTES: int = lib.crypto_kx_publickeybytes() +crypto_kx_SECRET_KEY_BYTES: int = lib.crypto_kx_secretkeybytes() +crypto_kx_SEED_BYTES: int = lib.crypto_kx_seedbytes() +crypto_kx_SESSION_KEY_BYTES: int = lib.crypto_kx_sessionkeybytes() + + +def crypto_kx_keypair() -> Tuple[bytes, bytes]: + """ + Generate a keypair. + This is a duplicate crypto_box_keypair, but + is included for api consistency. + :return: (public_key, secret_key) + :rtype: (bytes, bytes) + """ + public_key = ffi.new("unsigned char[]", crypto_kx_PUBLIC_KEY_BYTES) + secret_key = ffi.new("unsigned char[]", crypto_kx_SECRET_KEY_BYTES) + res = lib.crypto_kx_keypair(public_key, secret_key) + ensure(res == 0, "Key generation failed.", raising=exc.CryptoError) + + return ( + ffi.buffer(public_key, crypto_kx_PUBLIC_KEY_BYTES)[:], + ffi.buffer(secret_key, crypto_kx_SECRET_KEY_BYTES)[:], + ) + + +def crypto_kx_seed_keypair(seed: bytes) -> Tuple[bytes, bytes]: + """ + Generate a keypair with a given seed. + This is functionally the same as crypto_box_seed_keypair, however + it uses the blake2b hash primitive instead of sha512. + It is included mainly for api consistency when using crypto_kx. + :param seed: random seed + :type seed: bytes + :return: (public_key, secret_key) + :rtype: (bytes, bytes) + """ + public_key = ffi.new("unsigned char[]", crypto_kx_PUBLIC_KEY_BYTES) + secret_key = ffi.new("unsigned char[]", crypto_kx_SECRET_KEY_BYTES) + ensure( + isinstance(seed, bytes) and len(seed) == crypto_kx_SEED_BYTES, + "Seed must be a {} byte long bytes sequence".format( + crypto_kx_SEED_BYTES + ), + raising=exc.TypeError, + ) + res = lib.crypto_kx_seed_keypair(public_key, secret_key, seed) + ensure(res == 0, "Key generation failed.", raising=exc.CryptoError) + + return ( + ffi.buffer(public_key, crypto_kx_PUBLIC_KEY_BYTES)[:], + ffi.buffer(secret_key, crypto_kx_SECRET_KEY_BYTES)[:], + ) + + +def crypto_kx_client_session_keys( + client_public_key: bytes, + client_secret_key: bytes, + server_public_key: bytes, +) -> Tuple[bytes, bytes]: + """ + Generate session keys for the client. + :param client_public_key: + :type client_public_key: bytes + :param client_secret_key: + :type client_secret_key: bytes + :param server_public_key: + :type server_public_key: bytes + :return: (rx_key, tx_key) + :rtype: (bytes, bytes) + """ + ensure( + isinstance(client_public_key, bytes) + and len(client_public_key) == crypto_kx_PUBLIC_KEY_BYTES, + "Client public key must be a {} bytes long bytes sequence".format( + crypto_kx_PUBLIC_KEY_BYTES + ), + raising=exc.TypeError, + ) + ensure( + isinstance(client_secret_key, bytes) + and len(client_secret_key) == crypto_kx_SECRET_KEY_BYTES, + "Client secret key must be a {} bytes long bytes sequence".format( + crypto_kx_PUBLIC_KEY_BYTES + ), + raising=exc.TypeError, + ) + ensure( + isinstance(server_public_key, bytes) + and len(server_public_key) == crypto_kx_PUBLIC_KEY_BYTES, + "Server public key must be a {} bytes long bytes sequence".format( + crypto_kx_PUBLIC_KEY_BYTES + ), + raising=exc.TypeError, + ) + + rx_key = ffi.new("unsigned char[]", crypto_kx_SESSION_KEY_BYTES) + tx_key = ffi.new("unsigned char[]", crypto_kx_SESSION_KEY_BYTES) + res = lib.crypto_kx_client_session_keys( + rx_key, tx_key, client_public_key, client_secret_key, server_public_key + ) + ensure( + res == 0, + "Client session key generation failed.", + raising=exc.CryptoError, + ) + + return ( + ffi.buffer(rx_key, crypto_kx_SESSION_KEY_BYTES)[:], + ffi.buffer(tx_key, crypto_kx_SESSION_KEY_BYTES)[:], + ) + + +def crypto_kx_server_session_keys( + server_public_key: bytes, + server_secret_key: bytes, + client_public_key: bytes, +) -> Tuple[bytes, bytes]: + """ + Generate session keys for the server. + :param server_public_key: + :type server_public_key: bytes + :param server_secret_key: + :type server_secret_key: bytes + :param client_public_key: + :type client_public_key: bytes + :return: (rx_key, tx_key) + :rtype: (bytes, bytes) + """ + ensure( + isinstance(server_public_key, bytes) + and len(server_public_key) == crypto_kx_PUBLIC_KEY_BYTES, + "Server public key must be a {} bytes long bytes sequence".format( + crypto_kx_PUBLIC_KEY_BYTES + ), + raising=exc.TypeError, + ) + ensure( + isinstance(server_secret_key, bytes) + and len(server_secret_key) == crypto_kx_SECRET_KEY_BYTES, + "Server secret key must be a {} bytes long bytes sequence".format( + crypto_kx_PUBLIC_KEY_BYTES + ), + raising=exc.TypeError, + ) + ensure( + isinstance(client_public_key, bytes) + and len(client_public_key) == crypto_kx_PUBLIC_KEY_BYTES, + "Client public key must be a {} bytes long bytes sequence".format( + crypto_kx_PUBLIC_KEY_BYTES + ), + raising=exc.TypeError, + ) + + rx_key = ffi.new("unsigned char[]", crypto_kx_SESSION_KEY_BYTES) + tx_key = ffi.new("unsigned char[]", crypto_kx_SESSION_KEY_BYTES) + res = lib.crypto_kx_server_session_keys( + rx_key, tx_key, server_public_key, server_secret_key, client_public_key + ) + ensure( + res == 0, + "Server session key generation failed.", + raising=exc.CryptoError, + ) + + return ( + ffi.buffer(rx_key, crypto_kx_SESSION_KEY_BYTES)[:], + ffi.buffer(tx_key, crypto_kx_SESSION_KEY_BYTES)[:], + ) diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_pwhash.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_pwhash.py new file mode 100644 index 0000000..0c4cc1a --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_pwhash.py @@ -0,0 +1,600 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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 sys +from typing import Tuple + +import nacl.exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +has_crypto_pwhash_scryptsalsa208sha256 = bool( + lib.PYNACL_HAS_CRYPTO_PWHASH_SCRYPTSALSA208SHA256 +) + +crypto_pwhash_scryptsalsa208sha256_STRPREFIX = b"" +crypto_pwhash_scryptsalsa208sha256_SALTBYTES = 0 +crypto_pwhash_scryptsalsa208sha256_STRBYTES = 0 +crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN = 0 +crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX = 0 +crypto_pwhash_scryptsalsa208sha256_BYTES_MIN = 0 +crypto_pwhash_scryptsalsa208sha256_BYTES_MAX = 0 +crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN = 0 +crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX = 0 +crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN = 0 +crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX = 0 +crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE = 0 +crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE = 0 +crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE = 0 +crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE = 0 + +if has_crypto_pwhash_scryptsalsa208sha256: + crypto_pwhash_scryptsalsa208sha256_STRPREFIX = ffi.string( + ffi.cast("char *", lib.crypto_pwhash_scryptsalsa208sha256_strprefix()) + )[:] + crypto_pwhash_scryptsalsa208sha256_SALTBYTES = ( + lib.crypto_pwhash_scryptsalsa208sha256_saltbytes() + ) + crypto_pwhash_scryptsalsa208sha256_STRBYTES = ( + lib.crypto_pwhash_scryptsalsa208sha256_strbytes() + ) + crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN = ( + lib.crypto_pwhash_scryptsalsa208sha256_passwd_min() + ) + crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX = ( + lib.crypto_pwhash_scryptsalsa208sha256_passwd_max() + ) + crypto_pwhash_scryptsalsa208sha256_BYTES_MIN = ( + lib.crypto_pwhash_scryptsalsa208sha256_bytes_min() + ) + crypto_pwhash_scryptsalsa208sha256_BYTES_MAX = ( + lib.crypto_pwhash_scryptsalsa208sha256_bytes_max() + ) + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN = ( + lib.crypto_pwhash_scryptsalsa208sha256_memlimit_min() + ) + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX = ( + lib.crypto_pwhash_scryptsalsa208sha256_memlimit_max() + ) + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN = ( + lib.crypto_pwhash_scryptsalsa208sha256_opslimit_min() + ) + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX = ( + lib.crypto_pwhash_scryptsalsa208sha256_opslimit_max() + ) + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE = ( + lib.crypto_pwhash_scryptsalsa208sha256_opslimit_interactive() + ) + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE = ( + lib.crypto_pwhash_scryptsalsa208sha256_memlimit_interactive() + ) + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE = ( + lib.crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive() + ) + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE = ( + lib.crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive() + ) + +crypto_pwhash_ALG_ARGON2I13: int = lib.crypto_pwhash_alg_argon2i13() +crypto_pwhash_ALG_ARGON2ID13: int = lib.crypto_pwhash_alg_argon2id13() +crypto_pwhash_ALG_DEFAULT: int = lib.crypto_pwhash_alg_default() + +crypto_pwhash_SALTBYTES: int = lib.crypto_pwhash_saltbytes() +crypto_pwhash_STRBYTES: int = lib.crypto_pwhash_strbytes() + +crypto_pwhash_PASSWD_MIN: int = lib.crypto_pwhash_passwd_min() +crypto_pwhash_PASSWD_MAX: int = lib.crypto_pwhash_passwd_max() +crypto_pwhash_BYTES_MIN: int = lib.crypto_pwhash_bytes_min() +crypto_pwhash_BYTES_MAX: int = lib.crypto_pwhash_bytes_max() + +crypto_pwhash_argon2i_STRPREFIX: bytes = ffi.string( + ffi.cast("char *", lib.crypto_pwhash_argon2i_strprefix()) +)[:] +crypto_pwhash_argon2i_MEMLIMIT_MIN: int = ( + lib.crypto_pwhash_argon2i_memlimit_min() +) +crypto_pwhash_argon2i_MEMLIMIT_MAX: int = ( + lib.crypto_pwhash_argon2i_memlimit_max() +) +crypto_pwhash_argon2i_OPSLIMIT_MIN: int = ( + lib.crypto_pwhash_argon2i_opslimit_min() +) +crypto_pwhash_argon2i_OPSLIMIT_MAX: int = ( + lib.crypto_pwhash_argon2i_opslimit_max() +) +crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE: int = ( + lib.crypto_pwhash_argon2i_opslimit_interactive() +) +crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE: int = ( + lib.crypto_pwhash_argon2i_memlimit_interactive() +) +crypto_pwhash_argon2i_OPSLIMIT_MODERATE: int = ( + lib.crypto_pwhash_argon2i_opslimit_moderate() +) +crypto_pwhash_argon2i_MEMLIMIT_MODERATE: int = ( + lib.crypto_pwhash_argon2i_memlimit_moderate() +) +crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE: int = ( + lib.crypto_pwhash_argon2i_opslimit_sensitive() +) +crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE: int = ( + lib.crypto_pwhash_argon2i_memlimit_sensitive() +) + +crypto_pwhash_argon2id_STRPREFIX: bytes = ffi.string( + ffi.cast("char *", lib.crypto_pwhash_argon2id_strprefix()) +)[:] +crypto_pwhash_argon2id_MEMLIMIT_MIN: int = ( + lib.crypto_pwhash_argon2id_memlimit_min() +) +crypto_pwhash_argon2id_MEMLIMIT_MAX: int = ( + lib.crypto_pwhash_argon2id_memlimit_max() +) +crypto_pwhash_argon2id_OPSLIMIT_MIN: int = ( + lib.crypto_pwhash_argon2id_opslimit_min() +) +crypto_pwhash_argon2id_OPSLIMIT_MAX: int = ( + lib.crypto_pwhash_argon2id_opslimit_max() +) +crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE: int = ( + lib.crypto_pwhash_argon2id_opslimit_interactive() +) +crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE: int = ( + lib.crypto_pwhash_argon2id_memlimit_interactive() +) +crypto_pwhash_argon2id_OPSLIMIT_MODERATE: int = ( + lib.crypto_pwhash_argon2id_opslimit_moderate() +) +crypto_pwhash_argon2id_MEMLIMIT_MODERATE: int = ( + lib.crypto_pwhash_argon2id_memlimit_moderate() +) +crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE: int = ( + lib.crypto_pwhash_argon2id_opslimit_sensitive() +) +crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE: int = ( + lib.crypto_pwhash_argon2id_memlimit_sensitive() +) + +SCRYPT_OPSLIMIT_INTERACTIVE = ( + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE +) +SCRYPT_MEMLIMIT_INTERACTIVE = ( + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE +) +SCRYPT_OPSLIMIT_SENSITIVE = ( + crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE +) +SCRYPT_MEMLIMIT_SENSITIVE = ( + crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE +) +SCRYPT_SALTBYTES = crypto_pwhash_scryptsalsa208sha256_SALTBYTES +SCRYPT_STRBYTES = crypto_pwhash_scryptsalsa208sha256_STRBYTES + +SCRYPT_PR_MAX = (1 << 30) - 1 +LOG2_UINT64_MAX = 63 +UINT64_MAX = (1 << 64) - 1 +SCRYPT_MAX_MEM = 32 * (1024 * 1024) + + +def _check_memory_occupation( + n: int, r: int, p: int, maxmem: int = SCRYPT_MAX_MEM +) -> None: + ensure(r != 0, "Invalid block size", raising=exc.ValueError) + + ensure(p != 0, "Invalid parallelization factor", raising=exc.ValueError) + + ensure( + (n & (n - 1)) == 0, + "Cost factor must be a power of 2", + raising=exc.ValueError, + ) + + ensure(n > 1, "Cost factor must be at least 2", raising=exc.ValueError) + + ensure( + p <= SCRYPT_PR_MAX / r, + "p*r is greater than {}".format(SCRYPT_PR_MAX), + raising=exc.ValueError, + ) + + ensure(n < (1 << (16 * r)), raising=exc.ValueError) + + Blen = p * 128 * r + + i = UINT64_MAX / 128 + + ensure(n + 2 <= i / r, raising=exc.ValueError) + + Vlen = 32 * r * (n + 2) * 4 + + ensure(Blen <= UINT64_MAX - Vlen, raising=exc.ValueError) + + ensure(Blen <= sys.maxsize - Vlen, raising=exc.ValueError) + + ensure( + Blen + Vlen <= maxmem, + "Memory limit would be exceeded with the choosen n, r, p", + raising=exc.ValueError, + ) + + +def nacl_bindings_pick_scrypt_params( + opslimit: int, memlimit: int +) -> Tuple[int, int, int]: + """Python implementation of libsodium's pickparams""" + + if opslimit < 32768: + opslimit = 32768 + + r = 8 + + if opslimit < (memlimit // 32): + p = 1 + maxn = opslimit // (4 * r) + for n_log2 in range(1, 63): # pragma: no branch + if (2 ** n_log2) > (maxn // 2): + break + else: + maxn = memlimit // (r * 128) + for n_log2 in range(1, 63): # pragma: no branch + if (2 ** n_log2) > maxn // 2: + break + + maxrp = (opslimit // 4) // (2 ** n_log2) + + if maxrp > 0x3FFFFFFF: # pragma: no cover + maxrp = 0x3FFFFFFF + + p = maxrp // r + + return n_log2, r, p + + +def crypto_pwhash_scryptsalsa208sha256_ll( + passwd: bytes, + salt: bytes, + n: int, + r: int, + p: int, + dklen: int = 64, + maxmem: int = SCRYPT_MAX_MEM, +) -> bytes: + """ + Derive a cryptographic key using the ``passwd`` and ``salt`` + given as input. + + The work factor can be tuned by by picking different + values for the parameters + + :param bytes passwd: + :param bytes salt: + :param bytes salt: *must* be *exactly* :py:const:`.SALTBYTES` long + :param int dklen: + :param int opslimit: + :param int n: + :param int r: block size, + :param int p: the parallelism factor + :param int maxmem: the maximum available memory available for scrypt's + operations + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_pwhash_scryptsalsa208sha256, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure(isinstance(n, int), raising=TypeError) + ensure(isinstance(r, int), raising=TypeError) + ensure(isinstance(p, int), raising=TypeError) + + ensure(isinstance(passwd, bytes), raising=TypeError) + ensure(isinstance(salt, bytes), raising=TypeError) + + _check_memory_occupation(n, r, p, maxmem) + + buf = ffi.new("uint8_t[]", dklen) + + ret = lib.crypto_pwhash_scryptsalsa208sha256_ll( + passwd, len(passwd), salt, len(salt), n, r, p, buf, dklen + ) + + ensure( + ret == 0, + "Unexpected failure in key derivation", + raising=exc.RuntimeError, + ) + + return ffi.buffer(ffi.cast("char *", buf), dklen)[:] + + +def crypto_pwhash_scryptsalsa208sha256_str( + passwd: bytes, + opslimit: int = SCRYPT_OPSLIMIT_INTERACTIVE, + memlimit: int = SCRYPT_MEMLIMIT_INTERACTIVE, +) -> bytes: + """ + Derive a cryptographic key using the ``passwd`` and ``salt`` + given as input, returning a string representation which includes + the salt and the tuning parameters. + + The returned string can be directly stored as a password hash. + + See :py:func:`.crypto_pwhash_scryptsalsa208sha256` for a short + discussion about ``opslimit`` and ``memlimit`` values. + + :param bytes passwd: + :param int opslimit: + :param int memlimit: + :return: serialized key hash, including salt and tuning parameters + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_pwhash_scryptsalsa208sha256, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + buf = ffi.new("char[]", SCRYPT_STRBYTES) + + ret = lib.crypto_pwhash_scryptsalsa208sha256_str( + buf, passwd, len(passwd), opslimit, memlimit + ) + + ensure( + ret == 0, + "Unexpected failure in password hashing", + raising=exc.RuntimeError, + ) + + return ffi.string(buf) + + +def crypto_pwhash_scryptsalsa208sha256_str_verify( + passwd_hash: bytes, passwd: bytes +) -> bool: + """ + Verifies the ``passwd`` against the ``passwd_hash`` that was generated. + Returns True or False depending on the success + + :param passwd_hash: bytes + :param passwd: bytes + :rtype: boolean + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_pwhash_scryptsalsa208sha256, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + len(passwd_hash) == SCRYPT_STRBYTES - 1, + "Invalid password hash", + raising=exc.ValueError, + ) + + ret = lib.crypto_pwhash_scryptsalsa208sha256_str_verify( + passwd_hash, passwd, len(passwd) + ) + ensure(ret == 0, "Wrong password", raising=exc.InvalidkeyError) + # all went well, therefore: + return True + + +def _check_argon2_limits_alg(opslimit: int, memlimit: int, alg: int) -> None: + + if alg == crypto_pwhash_ALG_ARGON2I13: + if memlimit < crypto_pwhash_argon2i_MEMLIMIT_MIN: + raise exc.ValueError( + "memlimit must be at least {} bytes".format( + crypto_pwhash_argon2i_MEMLIMIT_MIN + ) + ) + elif memlimit > crypto_pwhash_argon2i_MEMLIMIT_MAX: + raise exc.ValueError( + "memlimit must be at most {} bytes".format( + crypto_pwhash_argon2i_MEMLIMIT_MAX + ) + ) + if opslimit < crypto_pwhash_argon2i_OPSLIMIT_MIN: + raise exc.ValueError( + "opslimit must be at least {}".format( + crypto_pwhash_argon2i_OPSLIMIT_MIN + ) + ) + elif opslimit > crypto_pwhash_argon2i_OPSLIMIT_MAX: + raise exc.ValueError( + "opslimit must be at most {}".format( + crypto_pwhash_argon2i_OPSLIMIT_MAX + ) + ) + + elif alg == crypto_pwhash_ALG_ARGON2ID13: + if memlimit < crypto_pwhash_argon2id_MEMLIMIT_MIN: + raise exc.ValueError( + "memlimit must be at least {} bytes".format( + crypto_pwhash_argon2id_MEMLIMIT_MIN + ) + ) + elif memlimit > crypto_pwhash_argon2id_MEMLIMIT_MAX: + raise exc.ValueError( + "memlimit must be at most {} bytes".format( + crypto_pwhash_argon2id_MEMLIMIT_MAX + ) + ) + if opslimit < crypto_pwhash_argon2id_OPSLIMIT_MIN: + raise exc.ValueError( + "opslimit must be at least {}".format( + crypto_pwhash_argon2id_OPSLIMIT_MIN + ) + ) + elif opslimit > crypto_pwhash_argon2id_OPSLIMIT_MAX: + raise exc.ValueError( + "opslimit must be at most {}".format( + crypto_pwhash_argon2id_OPSLIMIT_MAX + ) + ) + else: + raise exc.TypeError("Unsupported algorithm") + + +def crypto_pwhash_alg( + outlen: int, + passwd: bytes, + salt: bytes, + opslimit: int, + memlimit: int, + alg: int, +) -> bytes: + """ + Derive a raw cryptographic key using the ``passwd`` and the ``salt`` + given as input to the ``alg`` algorithm. + + :param outlen: the length of the derived key + :type outlen: int + :param passwd: The input password + :type passwd: bytes + :param salt: + :type salt: bytes + :param opslimit: computational cost + :type opslimit: int + :param memlimit: memory cost + :type memlimit: int + :param alg: algorithm identifier + :type alg: int + :return: derived key + :rtype: bytes + """ + ensure(isinstance(outlen, int), raising=exc.TypeError) + ensure(isinstance(opslimit, int), raising=exc.TypeError) + ensure(isinstance(memlimit, int), raising=exc.TypeError) + ensure(isinstance(alg, int), raising=exc.TypeError) + ensure(isinstance(passwd, bytes), raising=exc.TypeError) + + if len(salt) != crypto_pwhash_SALTBYTES: + raise exc.ValueError( + "salt must be exactly {} bytes long".format( + crypto_pwhash_SALTBYTES + ) + ) + + if outlen < crypto_pwhash_BYTES_MIN: + raise exc.ValueError( + "derived key must be at least {} bytes long".format( + crypto_pwhash_BYTES_MIN + ) + ) + + elif outlen > crypto_pwhash_BYTES_MAX: + raise exc.ValueError( + "derived key must be at most {} bytes long".format( + crypto_pwhash_BYTES_MAX + ) + ) + + _check_argon2_limits_alg(opslimit, memlimit, alg) + + outbuf = ffi.new("unsigned char[]", outlen) + + ret = lib.crypto_pwhash( + outbuf, outlen, passwd, len(passwd), salt, opslimit, memlimit, alg + ) + + ensure( + ret == 0, + "Unexpected failure in key derivation", + raising=exc.RuntimeError, + ) + + return ffi.buffer(outbuf, outlen)[:] + + +def crypto_pwhash_str_alg( + passwd: bytes, + opslimit: int, + memlimit: int, + alg: int, +) -> bytes: + """ + Derive a cryptographic key using the ``passwd`` given as input + and a random salt, returning a string representation which + includes the salt, the tuning parameters and the used algorithm. + + :param passwd: The input password + :type passwd: bytes + :param opslimit: computational cost + :type opslimit: int + :param memlimit: memory cost + :type memlimit: int + :param alg: The algorithm to use + :type alg: int + :return: serialized derived key and parameters + :rtype: bytes + """ + ensure(isinstance(opslimit, int), raising=TypeError) + ensure(isinstance(memlimit, int), raising=TypeError) + ensure(isinstance(passwd, bytes), raising=TypeError) + + _check_argon2_limits_alg(opslimit, memlimit, alg) + + outbuf = ffi.new("char[]", 128) + + ret = lib.crypto_pwhash_str_alg( + outbuf, passwd, len(passwd), opslimit, memlimit, alg + ) + + ensure( + ret == 0, + "Unexpected failure in key derivation", + raising=exc.RuntimeError, + ) + + return ffi.string(outbuf) + + +def crypto_pwhash_str_verify(passwd_hash: bytes, passwd: bytes) -> bool: + """ + Verifies the ``passwd`` against a given password hash. + + Returns True on success, raises InvalidkeyError on failure + :param passwd_hash: saved password hash + :type passwd_hash: bytes + :param passwd: password to be checked + :type passwd: bytes + :return: success + :rtype: boolean + """ + ensure(isinstance(passwd_hash, bytes), raising=TypeError) + ensure(isinstance(passwd, bytes), raising=TypeError) + ensure( + len(passwd_hash) <= 127, + "Hash must be at most 127 bytes long", + raising=exc.ValueError, + ) + + ret = lib.crypto_pwhash_str_verify(passwd_hash, passwd, len(passwd)) + + ensure(ret == 0, "Wrong password", raising=exc.InvalidkeyError) + # all went well, therefore: + return True + + +crypto_pwhash_argon2i_str_verify = crypto_pwhash_str_verify diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_scalarmult.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_scalarmult.py new file mode 100644 index 0000000..ca4a281 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_scalarmult.py @@ -0,0 +1,240 @@ +# Copyright 2013-2018 Donald Stufft and individual contributors +# +# 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. + + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +has_crypto_scalarmult_ed25519 = bool(lib.PYNACL_HAS_CRYPTO_SCALARMULT_ED25519) + +crypto_scalarmult_BYTES: int = lib.crypto_scalarmult_bytes() +crypto_scalarmult_SCALARBYTES: int = lib.crypto_scalarmult_scalarbytes() + +crypto_scalarmult_ed25519_BYTES = 0 +crypto_scalarmult_ed25519_SCALARBYTES = 0 + +if has_crypto_scalarmult_ed25519: + crypto_scalarmult_ed25519_BYTES = lib.crypto_scalarmult_ed25519_bytes() + crypto_scalarmult_ed25519_SCALARBYTES = ( + lib.crypto_scalarmult_ed25519_scalarbytes() + ) + + +def crypto_scalarmult_base(n: bytes) -> bytes: + """ + Computes and returns the scalar product of a standard group element and an + integer ``n``. + + :param n: bytes + :rtype: bytes + """ + q = ffi.new("unsigned char[]", crypto_scalarmult_BYTES) + + rc = lib.crypto_scalarmult_base(q, n) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(q, crypto_scalarmult_SCALARBYTES)[:] + + +def crypto_scalarmult(n: bytes, p: bytes) -> bytes: + """ + Computes and returns the scalar product of the given group element and an + integer ``n``. + + :param p: bytes + :param n: bytes + :rtype: bytes + """ + q = ffi.new("unsigned char[]", crypto_scalarmult_BYTES) + + rc = lib.crypto_scalarmult(q, n, p) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(q, crypto_scalarmult_SCALARBYTES)[:] + + +def crypto_scalarmult_ed25519_base(n: bytes) -> bytes: + """ + Computes and returns the scalar product of a standard group element and an + integer ``n`` on the edwards25519 curve. + + :param n: a :py:data:`.crypto_scalarmult_ed25519_SCALARBYTES` long bytes + sequence representing a scalar + :type n: bytes + :return: a point on the edwards25519 curve, represented as a + :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_scalarmult_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(n, bytes) + and len(n) == crypto_scalarmult_ed25519_SCALARBYTES, + "Input must be a {} long bytes sequence".format( + "crypto_scalarmult_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + q = ffi.new("unsigned char[]", crypto_scalarmult_ed25519_BYTES) + + rc = lib.crypto_scalarmult_ed25519_base(q, n) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(q, crypto_scalarmult_ed25519_BYTES)[:] + + +def crypto_scalarmult_ed25519_base_noclamp(n: bytes) -> bytes: + """ + Computes and returns the scalar product of a standard group element and an + integer ``n`` on the edwards25519 curve. The integer ``n`` is not clamped. + + :param n: a :py:data:`.crypto_scalarmult_ed25519_SCALARBYTES` long bytes + sequence representing a scalar + :type n: bytes + :return: a point on the edwards25519 curve, represented as a + :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_scalarmult_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(n, bytes) + and len(n) == crypto_scalarmult_ed25519_SCALARBYTES, + "Input must be a {} long bytes sequence".format( + "crypto_scalarmult_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + q = ffi.new("unsigned char[]", crypto_scalarmult_ed25519_BYTES) + + rc = lib.crypto_scalarmult_ed25519_base_noclamp(q, n) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(q, crypto_scalarmult_ed25519_BYTES)[:] + + +def crypto_scalarmult_ed25519(n: bytes, p: bytes) -> bytes: + """ + Computes and returns the scalar product of a *clamped* integer ``n`` + and the given group element on the edwards25519 curve. + The scalar is clamped, as done in the public key generation case, + by setting to zero the bits in position [0, 1, 2, 255] and setting + to one the bit in position 254. + + :param n: a :py:data:`.crypto_scalarmult_ed25519_SCALARBYTES` long bytes + sequence representing a scalar + :type n: bytes + :param p: a :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence + representing a point on the edwards25519 curve + :type p: bytes + :return: a point on the edwards25519 curve, represented as a + :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_scalarmult_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(n, bytes) + and len(n) == crypto_scalarmult_ed25519_SCALARBYTES, + "Input must be a {} long bytes sequence".format( + "crypto_scalarmult_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + ensure( + isinstance(p, bytes) and len(p) == crypto_scalarmult_ed25519_BYTES, + "Input must be a {} long bytes sequence".format( + "crypto_scalarmult_ed25519_BYTES" + ), + raising=exc.TypeError, + ) + + q = ffi.new("unsigned char[]", crypto_scalarmult_ed25519_BYTES) + + rc = lib.crypto_scalarmult_ed25519(q, n, p) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(q, crypto_scalarmult_ed25519_BYTES)[:] + + +def crypto_scalarmult_ed25519_noclamp(n: bytes, p: bytes) -> bytes: + """ + Computes and returns the scalar product of an integer ``n`` + and the given group element on the edwards25519 curve. The integer + ``n`` is not clamped. + + :param n: a :py:data:`.crypto_scalarmult_ed25519_SCALARBYTES` long bytes + sequence representing a scalar + :type n: bytes + :param p: a :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence + representing a point on the edwards25519 curve + :type p: bytes + :return: a point on the edwards25519 curve, represented as a + :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_scalarmult_ed25519, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + isinstance(n, bytes) + and len(n) == crypto_scalarmult_ed25519_SCALARBYTES, + "Input must be a {} long bytes sequence".format( + "crypto_scalarmult_ed25519_SCALARBYTES" + ), + raising=exc.TypeError, + ) + + ensure( + isinstance(p, bytes) and len(p) == crypto_scalarmult_ed25519_BYTES, + "Input must be a {} long bytes sequence".format( + "crypto_scalarmult_ed25519_BYTES" + ), + raising=exc.TypeError, + ) + + q = ffi.new("unsigned char[]", crypto_scalarmult_ed25519_BYTES) + + rc = lib.crypto_scalarmult_ed25519_noclamp(q, n, p) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(q, crypto_scalarmult_ed25519_BYTES)[:] diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_secretbox.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_secretbox.py new file mode 100644 index 0000000..2a632a2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_secretbox.py @@ -0,0 +1,86 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. + + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +crypto_secretbox_KEYBYTES: int = lib.crypto_secretbox_keybytes() +crypto_secretbox_NONCEBYTES: int = lib.crypto_secretbox_noncebytes() +crypto_secretbox_ZEROBYTES: int = lib.crypto_secretbox_zerobytes() +crypto_secretbox_BOXZEROBYTES: int = lib.crypto_secretbox_boxzerobytes() +crypto_secretbox_MACBYTES: int = lib.crypto_secretbox_macbytes() +crypto_secretbox_MESSAGEBYTES_MAX: int = ( + lib.crypto_secretbox_messagebytes_max() +) + + +def crypto_secretbox(message: bytes, nonce: bytes, key: bytes) -> bytes: + """ + Encrypts and returns the message ``message`` with the secret ``key`` and + the nonce ``nonce``. + + :param message: bytes + :param nonce: bytes + :param key: bytes + :rtype: bytes + """ + if len(key) != crypto_secretbox_KEYBYTES: + raise exc.ValueError("Invalid key") + + if len(nonce) != crypto_secretbox_NONCEBYTES: + raise exc.ValueError("Invalid nonce") + + padded = b"\x00" * crypto_secretbox_ZEROBYTES + message + ciphertext = ffi.new("unsigned char[]", len(padded)) + + res = lib.crypto_secretbox(ciphertext, padded, len(padded), nonce, key) + ensure(res == 0, "Encryption failed", raising=exc.CryptoError) + + ciphertext = ffi.buffer(ciphertext, len(padded)) + return ciphertext[crypto_secretbox_BOXZEROBYTES:] + + +def crypto_secretbox_open( + ciphertext: bytes, nonce: bytes, key: bytes +) -> bytes: + """ + Decrypt and returns the encrypted message ``ciphertext`` with the secret + ``key`` and the nonce ``nonce``. + + :param ciphertext: bytes + :param nonce: bytes + :param key: bytes + :rtype: bytes + """ + if len(key) != crypto_secretbox_KEYBYTES: + raise exc.ValueError("Invalid key") + + if len(nonce) != crypto_secretbox_NONCEBYTES: + raise exc.ValueError("Invalid nonce") + + padded = b"\x00" * crypto_secretbox_BOXZEROBYTES + ciphertext + plaintext = ffi.new("unsigned char[]", len(padded)) + + res = lib.crypto_secretbox_open(plaintext, padded, len(padded), nonce, key) + ensure( + res == 0, + "Decryption failed. Ciphertext failed verification", + raising=exc.CryptoError, + ) + + plaintext = ffi.buffer(plaintext, len(padded)) + return plaintext[crypto_secretbox_ZEROBYTES:] diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_secretstream.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_secretstream.py new file mode 100644 index 0000000..d7c6725 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_secretstream.py @@ -0,0 +1,357 @@ +# Copyright 2013-2018 Donald Stufft and individual contributors +# +# 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. +from typing import ByteString, Optional, Tuple, cast + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +crypto_secretstream_xchacha20poly1305_ABYTES: int = ( + lib.crypto_secretstream_xchacha20poly1305_abytes() +) +crypto_secretstream_xchacha20poly1305_HEADERBYTES: int = ( + lib.crypto_secretstream_xchacha20poly1305_headerbytes() +) +crypto_secretstream_xchacha20poly1305_KEYBYTES: int = ( + lib.crypto_secretstream_xchacha20poly1305_keybytes() +) +crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX: int = ( + lib.crypto_secretstream_xchacha20poly1305_messagebytes_max() +) +crypto_secretstream_xchacha20poly1305_STATEBYTES: int = ( + lib.crypto_secretstream_xchacha20poly1305_statebytes() +) + + +crypto_secretstream_xchacha20poly1305_TAG_MESSAGE: int = ( + lib.crypto_secretstream_xchacha20poly1305_tag_message() +) +crypto_secretstream_xchacha20poly1305_TAG_PUSH: int = ( + lib.crypto_secretstream_xchacha20poly1305_tag_push() +) +crypto_secretstream_xchacha20poly1305_TAG_REKEY: int = ( + lib.crypto_secretstream_xchacha20poly1305_tag_rekey() +) +crypto_secretstream_xchacha20poly1305_TAG_FINAL: int = ( + lib.crypto_secretstream_xchacha20poly1305_tag_final() +) + + +def crypto_secretstream_xchacha20poly1305_keygen() -> bytes: + """ + Generate a key for use with + :func:`.crypto_secretstream_xchacha20poly1305_init_push`. + + """ + keybuf = ffi.new( + "unsigned char[]", + crypto_secretstream_xchacha20poly1305_KEYBYTES, + ) + lib.crypto_secretstream_xchacha20poly1305_keygen(keybuf) + return ffi.buffer(keybuf)[:] + + +class crypto_secretstream_xchacha20poly1305_state: + """ + An object wrapping the crypto_secretstream_xchacha20poly1305 state. + + """ + + __slots__ = ["statebuf", "rawbuf", "tagbuf"] + + def __init__(self) -> None: + """Initialize a clean state object.""" + self.statebuf: ByteString = ffi.new( + "unsigned char[]", + crypto_secretstream_xchacha20poly1305_STATEBYTES, + ) + + self.rawbuf: Optional[ByteString] = None + self.tagbuf: Optional[ByteString] = None + + +def crypto_secretstream_xchacha20poly1305_init_push( + state: crypto_secretstream_xchacha20poly1305_state, key: bytes +) -> bytes: + """ + Initialize a crypto_secretstream_xchacha20poly1305 encryption buffer. + + :param state: a secretstream state object + :type state: crypto_secretstream_xchacha20poly1305_state + :param key: must be + :data:`.crypto_secretstream_xchacha20poly1305_KEYBYTES` long + :type key: bytes + :return: header + :rtype: bytes + + """ + ensure( + isinstance(state, crypto_secretstream_xchacha20poly1305_state), + "State must be a crypto_secretstream_xchacha20poly1305_state object", + raising=exc.TypeError, + ) + ensure( + isinstance(key, bytes), + "Key must be a bytes sequence", + raising=exc.TypeError, + ) + ensure( + len(key) == crypto_secretstream_xchacha20poly1305_KEYBYTES, + "Invalid key length", + raising=exc.ValueError, + ) + + headerbuf = ffi.new( + "unsigned char []", + crypto_secretstream_xchacha20poly1305_HEADERBYTES, + ) + + rc = lib.crypto_secretstream_xchacha20poly1305_init_push( + state.statebuf, headerbuf, key + ) + ensure(rc == 0, "Unexpected failure", raising=exc.RuntimeError) + + return ffi.buffer(headerbuf)[:] + + +def crypto_secretstream_xchacha20poly1305_push( + state: crypto_secretstream_xchacha20poly1305_state, + m: bytes, + ad: Optional[bytes] = None, + tag: int = crypto_secretstream_xchacha20poly1305_TAG_MESSAGE, +) -> bytes: + """ + Add an encrypted message to the secret stream. + + :param state: a secretstream state object + :type state: crypto_secretstream_xchacha20poly1305_state + :param m: the message to encrypt, the maximum length of an individual + message is + :data:`.crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX`. + :type m: bytes + :param ad: additional data to include in the authentication tag + :type ad: bytes or None + :param tag: the message tag, usually + :data:`.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE` or + :data:`.crypto_secretstream_xchacha20poly1305_TAG_FINAL`. + :type tag: int + :return: ciphertext + :rtype: bytes + + """ + ensure( + isinstance(state, crypto_secretstream_xchacha20poly1305_state), + "State must be a crypto_secretstream_xchacha20poly1305_state object", + raising=exc.TypeError, + ) + ensure(isinstance(m, bytes), "Message is not bytes", raising=exc.TypeError) + ensure( + len(m) <= crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX, + "Message is too long", + raising=exc.ValueError, + ) + ensure( + ad is None or isinstance(ad, bytes), + "Additional data must be bytes or None", + raising=exc.TypeError, + ) + + clen = len(m) + crypto_secretstream_xchacha20poly1305_ABYTES + if state.rawbuf is None or len(state.rawbuf) < clen: + state.rawbuf = ffi.new("unsigned char[]", clen) + + if ad is None: + ad = ffi.NULL + adlen = 0 + else: + adlen = len(ad) + + rc = lib.crypto_secretstream_xchacha20poly1305_push( + state.statebuf, + state.rawbuf, + ffi.NULL, + m, + len(m), + ad, + adlen, + tag, + ) + ensure(rc == 0, "Unexpected failure", raising=exc.RuntimeError) + + return ffi.buffer(state.rawbuf, clen)[:] + + +def crypto_secretstream_xchacha20poly1305_init_pull( + state: crypto_secretstream_xchacha20poly1305_state, + header: bytes, + key: bytes, +) -> None: + """ + Initialize a crypto_secretstream_xchacha20poly1305 decryption buffer. + + :param state: a secretstream state object + :type state: crypto_secretstream_xchacha20poly1305_state + :param header: must be + :data:`.crypto_secretstream_xchacha20poly1305_HEADERBYTES` long + :type header: bytes + :param key: must be + :data:`.crypto_secretstream_xchacha20poly1305_KEYBYTES` long + :type key: bytes + + """ + ensure( + isinstance(state, crypto_secretstream_xchacha20poly1305_state), + "State must be a crypto_secretstream_xchacha20poly1305_state object", + raising=exc.TypeError, + ) + ensure( + isinstance(header, bytes), + "Header must be a bytes sequence", + raising=exc.TypeError, + ) + ensure( + len(header) == crypto_secretstream_xchacha20poly1305_HEADERBYTES, + "Invalid header length", + raising=exc.ValueError, + ) + ensure( + isinstance(key, bytes), + "Key must be a bytes sequence", + raising=exc.TypeError, + ) + ensure( + len(key) == crypto_secretstream_xchacha20poly1305_KEYBYTES, + "Invalid key length", + raising=exc.ValueError, + ) + + if state.tagbuf is None: + state.tagbuf = ffi.new("unsigned char *") + + rc = lib.crypto_secretstream_xchacha20poly1305_init_pull( + state.statebuf, header, key + ) + ensure(rc == 0, "Unexpected failure", raising=exc.RuntimeError) + + +def crypto_secretstream_xchacha20poly1305_pull( + state: crypto_secretstream_xchacha20poly1305_state, + c: bytes, + ad: Optional[bytes] = None, +) -> Tuple[bytes, int]: + """ + Read a decrypted message from the secret stream. + + :param state: a secretstream state object + :type state: crypto_secretstream_xchacha20poly1305_state + :param c: the ciphertext to decrypt, the maximum length of an individual + ciphertext is + :data:`.crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX` + + :data:`.crypto_secretstream_xchacha20poly1305_ABYTES`. + :type c: bytes + :param ad: additional data to include in the authentication tag + :type ad: bytes or None + :return: (message, tag) + :rtype: (bytes, int) + + """ + ensure( + isinstance(state, crypto_secretstream_xchacha20poly1305_state), + "State must be a crypto_secretstream_xchacha20poly1305_state object", + raising=exc.TypeError, + ) + ensure( + state.tagbuf is not None, + ( + "State must be initialized using " + "crypto_secretstream_xchacha20poly1305_init_pull" + ), + raising=exc.ValueError, + ) + ensure( + isinstance(c, bytes), + "Ciphertext is not bytes", + raising=exc.TypeError, + ) + ensure( + len(c) >= crypto_secretstream_xchacha20poly1305_ABYTES, + "Ciphertext is too short", + raising=exc.ValueError, + ) + ensure( + len(c) + <= ( + crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX + + crypto_secretstream_xchacha20poly1305_ABYTES + ), + "Ciphertext is too long", + raising=exc.ValueError, + ) + ensure( + ad is None or isinstance(ad, bytes), + "Additional data must be bytes or None", + raising=exc.TypeError, + ) + + mlen = len(c) - crypto_secretstream_xchacha20poly1305_ABYTES + if state.rawbuf is None or len(state.rawbuf) < mlen: + state.rawbuf = ffi.new("unsigned char[]", mlen) + + if ad is None: + ad = ffi.NULL + adlen = 0 + else: + adlen = len(ad) + + rc = lib.crypto_secretstream_xchacha20poly1305_pull( + state.statebuf, + state.rawbuf, + ffi.NULL, + state.tagbuf, + c, + len(c), + ad, + adlen, + ) + ensure(rc == 0, "Unexpected failure", raising=exc.RuntimeError) + + # Cast safety: we `ensure` above that `state.tagbuf is not None`. + return ( + ffi.buffer(state.rawbuf, mlen)[:], + int(cast(bytes, state.tagbuf)[0]), + ) + + +def crypto_secretstream_xchacha20poly1305_rekey( + state: crypto_secretstream_xchacha20poly1305_state, +) -> None: + """ + Explicitly change the encryption key in the stream. + + Normally the stream is re-keyed as needed or an explicit ``tag`` of + :data:`.crypto_secretstream_xchacha20poly1305_TAG_REKEY` is added to a + message to ensure forward secrecy, but this method can be used instead + if the re-keying is controlled without adding the tag. + + :param state: a secretstream state object + :type state: crypto_secretstream_xchacha20poly1305_state + + """ + ensure( + isinstance(state, crypto_secretstream_xchacha20poly1305_state), + "State must be a crypto_secretstream_xchacha20poly1305_state object", + raising=exc.TypeError, + ) + lib.crypto_secretstream_xchacha20poly1305_rekey(state.statebuf) diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_shorthash.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_shorthash.py new file mode 100644 index 0000000..8f7d209 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_shorthash.py @@ -0,0 +1,81 @@ +# Copyright 2016 Donald Stufft and individual contributors +# +# 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 nacl.exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +has_crypto_shorthash_siphashx24 = bool( + lib.PYNACL_HAS_CRYPTO_SHORTHASH_SIPHASHX24 +) + +BYTES: int = lib.crypto_shorthash_siphash24_bytes() +KEYBYTES: int = lib.crypto_shorthash_siphash24_keybytes() + +XBYTES = 0 +XKEYBYTES = 0 + +if has_crypto_shorthash_siphashx24: + XBYTES = lib.crypto_shorthash_siphashx24_bytes() + XKEYBYTES = lib.crypto_shorthash_siphashx24_keybytes() + + +def crypto_shorthash_siphash24(data: bytes, key: bytes) -> bytes: + """Compute a fast, cryptographic quality, keyed hash of the input data + + :param data: + :type data: bytes + :param key: len(key) must be equal to + :py:data:`.KEYBYTES` (16) + :type key: bytes + """ + if len(key) != KEYBYTES: + raise exc.ValueError( + "Key length must be exactly {} bytes".format(KEYBYTES) + ) + digest = ffi.new("unsigned char[]", BYTES) + rc = lib.crypto_shorthash_siphash24(digest, data, len(data), key) + + ensure(rc == 0, raising=exc.RuntimeError) + return ffi.buffer(digest, BYTES)[:] + + +def crypto_shorthash_siphashx24(data: bytes, key: bytes) -> bytes: + """Compute a fast, cryptographic quality, keyed hash of the input data + + :param data: + :type data: bytes + :param key: len(key) must be equal to + :py:data:`.XKEYBYTES` (16) + :type key: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + """ + ensure( + has_crypto_shorthash_siphashx24, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + if len(key) != XKEYBYTES: + raise exc.ValueError( + "Key length must be exactly {} bytes".format(XKEYBYTES) + ) + digest = ffi.new("unsigned char[]", XBYTES) + rc = lib.crypto_shorthash_siphashx24(digest, data, len(data), key) + + ensure(rc == 0, raising=exc.RuntimeError) + return ffi.buffer(digest, XBYTES)[:] diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/crypto_sign.py b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_sign.py new file mode 100644 index 0000000..de3be47 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/crypto_sign.py @@ -0,0 +1,327 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. +from typing import Tuple + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +crypto_sign_BYTES: int = lib.crypto_sign_bytes() +# crypto_sign_SEEDBYTES = lib.crypto_sign_seedbytes() +crypto_sign_SEEDBYTES: int = lib.crypto_sign_secretkeybytes() // 2 +crypto_sign_PUBLICKEYBYTES: int = lib.crypto_sign_publickeybytes() +crypto_sign_SECRETKEYBYTES: int = lib.crypto_sign_secretkeybytes() + +crypto_sign_curve25519_BYTES: int = lib.crypto_box_secretkeybytes() + +crypto_sign_ed25519ph_STATEBYTES: int = lib.crypto_sign_ed25519ph_statebytes() + + +def crypto_sign_keypair() -> Tuple[bytes, bytes]: + """ + Returns a randomly generated public key and secret key. + + :rtype: (bytes(public_key), bytes(secret_key)) + """ + pk = ffi.new("unsigned char[]", crypto_sign_PUBLICKEYBYTES) + sk = ffi.new("unsigned char[]", crypto_sign_SECRETKEYBYTES) + + rc = lib.crypto_sign_keypair(pk, sk) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ( + ffi.buffer(pk, crypto_sign_PUBLICKEYBYTES)[:], + ffi.buffer(sk, crypto_sign_SECRETKEYBYTES)[:], + ) + + +def crypto_sign_seed_keypair(seed: bytes) -> Tuple[bytes, bytes]: + """ + Computes and returns the public key and secret key using the seed ``seed``. + + :param seed: bytes + :rtype: (bytes(public_key), bytes(secret_key)) + """ + if len(seed) != crypto_sign_SEEDBYTES: + raise exc.ValueError("Invalid seed") + + pk = ffi.new("unsigned char[]", crypto_sign_PUBLICKEYBYTES) + sk = ffi.new("unsigned char[]", crypto_sign_SECRETKEYBYTES) + + rc = lib.crypto_sign_seed_keypair(pk, sk, seed) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ( + ffi.buffer(pk, crypto_sign_PUBLICKEYBYTES)[:], + ffi.buffer(sk, crypto_sign_SECRETKEYBYTES)[:], + ) + + +def crypto_sign(message: bytes, sk: bytes) -> bytes: + """ + Signs the message ``message`` using the secret key ``sk`` and returns the + signed message. + + :param message: bytes + :param sk: bytes + :rtype: bytes + """ + signed = ffi.new("unsigned char[]", len(message) + crypto_sign_BYTES) + signed_len = ffi.new("unsigned long long *") + + rc = lib.crypto_sign(signed, signed_len, message, len(message), sk) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(signed, signed_len[0])[:] + + +def crypto_sign_open(signed: bytes, pk: bytes) -> bytes: + """ + Verifies the signature of the signed message ``signed`` using the public + key ``pk`` and returns the unsigned message. + + :param signed: bytes + :param pk: bytes + :rtype: bytes + """ + message = ffi.new("unsigned char[]", len(signed)) + message_len = ffi.new("unsigned long long *") + + if ( + lib.crypto_sign_open(message, message_len, signed, len(signed), pk) + != 0 + ): + raise exc.BadSignatureError("Signature was forged or corrupt") + + return ffi.buffer(message, message_len[0])[:] + + +def crypto_sign_ed25519_pk_to_curve25519(public_key_bytes: bytes) -> bytes: + """ + Converts a public Ed25519 key (encoded as bytes ``public_key_bytes``) to + a public Curve25519 key as bytes. + + Raises a ValueError if ``public_key_bytes`` is not of length + ``crypto_sign_PUBLICKEYBYTES`` + + :param public_key_bytes: bytes + :rtype: bytes + """ + if len(public_key_bytes) != crypto_sign_PUBLICKEYBYTES: + raise exc.ValueError("Invalid curve public key") + + curve_public_key_len = crypto_sign_curve25519_BYTES + curve_public_key = ffi.new("unsigned char[]", curve_public_key_len) + + rc = lib.crypto_sign_ed25519_pk_to_curve25519( + curve_public_key, public_key_bytes + ) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(curve_public_key, curve_public_key_len)[:] + + +def crypto_sign_ed25519_sk_to_curve25519(secret_key_bytes: bytes) -> bytes: + """ + Converts a secret Ed25519 key (encoded as bytes ``secret_key_bytes``) to + a secret Curve25519 key as bytes. + + Raises a ValueError if ``secret_key_bytes``is not of length + ``crypto_sign_SECRETKEYBYTES`` + + :param secret_key_bytes: bytes + :rtype: bytes + """ + if len(secret_key_bytes) != crypto_sign_SECRETKEYBYTES: + raise exc.ValueError("Invalid curve secret key") + + curve_secret_key_len = crypto_sign_curve25519_BYTES + curve_secret_key = ffi.new("unsigned char[]", curve_secret_key_len) + + rc = lib.crypto_sign_ed25519_sk_to_curve25519( + curve_secret_key, secret_key_bytes + ) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(curve_secret_key, curve_secret_key_len)[:] + + +def crypto_sign_ed25519_sk_to_pk(secret_key_bytes: bytes) -> bytes: + """ + Extract the public Ed25519 key from a secret Ed25519 key (encoded + as bytes ``secret_key_bytes``). + + Raises a ValueError if ``secret_key_bytes``is not of length + ``crypto_sign_SECRETKEYBYTES`` + + :param secret_key_bytes: bytes + :rtype: bytes + """ + if len(secret_key_bytes) != crypto_sign_SECRETKEYBYTES: + raise exc.ValueError("Invalid secret key") + + return secret_key_bytes[crypto_sign_SEEDBYTES:] + + +def crypto_sign_ed25519_sk_to_seed(secret_key_bytes: bytes) -> bytes: + """ + Extract the seed from a secret Ed25519 key (encoded + as bytes ``secret_key_bytes``). + + Raises a ValueError if ``secret_key_bytes``is not of length + ``crypto_sign_SECRETKEYBYTES`` + + :param secret_key_bytes: bytes + :rtype: bytes + """ + if len(secret_key_bytes) != crypto_sign_SECRETKEYBYTES: + raise exc.ValueError("Invalid secret key") + + return secret_key_bytes[:crypto_sign_SEEDBYTES] + + +class crypto_sign_ed25519ph_state: + """ + State object wrapping the sha-512 state used in ed25519ph computation + """ + + __slots__ = ["state"] + + def __init__(self) -> None: + self.state: bytes = ffi.new( + "unsigned char[]", crypto_sign_ed25519ph_STATEBYTES + ) + + rc = lib.crypto_sign_ed25519ph_init(self.state) + + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + +def crypto_sign_ed25519ph_update( + edph: crypto_sign_ed25519ph_state, pmsg: bytes +) -> None: + """ + Update the hash state wrapped in edph + + :param edph: the ed25519ph state being updated + :type edph: crypto_sign_ed25519ph_state + :param pmsg: the partial message + :type pmsg: bytes + :rtype: None + """ + ensure( + isinstance(edph, crypto_sign_ed25519ph_state), + "edph parameter must be a ed25519ph_state object", + raising=exc.TypeError, + ) + ensure( + isinstance(pmsg, bytes), + "pmsg parameter must be a bytes object", + raising=exc.TypeError, + ) + rc = lib.crypto_sign_ed25519ph_update(edph.state, pmsg, len(pmsg)) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + +def crypto_sign_ed25519ph_final_create( + edph: crypto_sign_ed25519ph_state, sk: bytes +) -> bytes: + """ + Create a signature for the data hashed in edph + using the secret key sk + + :param edph: the ed25519ph state for the data + being signed + :type edph: crypto_sign_ed25519ph_state + :param sk: the ed25519 secret part of the signing key + :type sk: bytes + :return: ed25519ph signature + :rtype: bytes + """ + ensure( + isinstance(edph, crypto_sign_ed25519ph_state), + "edph parameter must be a ed25519ph_state object", + raising=exc.TypeError, + ) + ensure( + isinstance(sk, bytes), + "secret key parameter must be a bytes object", + raising=exc.TypeError, + ) + ensure( + len(sk) == crypto_sign_SECRETKEYBYTES, + ("secret key must be {} bytes long").format( + crypto_sign_SECRETKEYBYTES + ), + raising=exc.TypeError, + ) + signature = ffi.new("unsigned char[]", crypto_sign_BYTES) + rc = lib.crypto_sign_ed25519ph_final_create( + edph.state, signature, ffi.NULL, sk + ) + ensure(rc == 0, "Unexpected library error", raising=exc.RuntimeError) + + return ffi.buffer(signature, crypto_sign_BYTES)[:] + + +def crypto_sign_ed25519ph_final_verify( + edph: crypto_sign_ed25519ph_state, signature: bytes, pk: bytes +) -> bool: + """ + Verify a prehashed signature using the public key pk + + :param edph: the ed25519ph state for the data + being verified + :type edph: crypto_sign_ed25519ph_state + :param signature: the signature being verified + :type signature: bytes + :param pk: the ed25519 public part of the signing key + :type pk: bytes + :return: True if the signature is valid + :rtype: boolean + :raises exc.BadSignatureError: if the signature is not valid + """ + ensure( + isinstance(edph, crypto_sign_ed25519ph_state), + "edph parameter must be a ed25519ph_state object", + raising=exc.TypeError, + ) + ensure( + isinstance(signature, bytes), + "signature parameter must be a bytes object", + raising=exc.TypeError, + ) + ensure( + len(signature) == crypto_sign_BYTES, + ("signature must be {} bytes long").format(crypto_sign_BYTES), + raising=exc.TypeError, + ) + ensure( + isinstance(pk, bytes), + "public key parameter must be a bytes object", + raising=exc.TypeError, + ) + ensure( + len(pk) == crypto_sign_PUBLICKEYBYTES, + ("public key must be {} bytes long").format( + crypto_sign_PUBLICKEYBYTES + ), + raising=exc.TypeError, + ) + rc = lib.crypto_sign_ed25519ph_final_verify(edph.state, signature, pk) + if rc != 0: + raise exc.BadSignatureError("Signature was forged or corrupt") + + return True diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/randombytes.py b/venv/lib/python3.11/site-packages/nacl/bindings/randombytes.py new file mode 100644 index 0000000..ed76deb --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/randombytes.py @@ -0,0 +1,51 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. + + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib + +randombytes_SEEDBYTES: int = lib.randombytes_seedbytes() + + +def randombytes(size: int) -> bytes: + """ + Returns ``size`` number of random bytes from a cryptographically secure + random source. + + :param size: int + :rtype: bytes + """ + buf = ffi.new("unsigned char[]", size) + lib.randombytes(buf, size) + return ffi.buffer(buf, size)[:] + + +def randombytes_buf_deterministic(size: int, seed: bytes) -> bytes: + """ + Returns ``size`` number of deterministically generated pseudorandom bytes + from a seed + + :param size: int + :param seed: bytes + :rtype: bytes + """ + if len(seed) != randombytes_SEEDBYTES: + raise exc.TypeError( + "Deterministic random bytes must be generated from 32 bytes" + ) + + buf = ffi.new("unsigned char[]", size) + lib.randombytes_buf_deterministic(buf, size, seed) + return ffi.buffer(buf, size)[:] diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/sodium_core.py b/venv/lib/python3.11/site-packages/nacl/bindings/sodium_core.py new file mode 100644 index 0000000..7ebb84c --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/sodium_core.py @@ -0,0 +1,33 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. + +from nacl import exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +def _sodium_init() -> None: + ensure( + lib.sodium_init() != -1, + "Could not initialize sodium", + raising=exc.RuntimeError, + ) + + +def sodium_init() -> None: + """ + Initializes sodium, picking the best implementations available for this + machine. + """ + ffi.init_once(_sodium_init, "libsodium") diff --git a/venv/lib/python3.11/site-packages/nacl/bindings/utils.py b/venv/lib/python3.11/site-packages/nacl/bindings/utils.py new file mode 100644 index 0000000..0ff22e3 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/bindings/utils.py @@ -0,0 +1,141 @@ +# Copyright 2013-2017 Donald Stufft and individual contributors +# +# 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 nacl.exceptions as exc +from nacl._sodium import ffi, lib +from nacl.exceptions import ensure + + +def sodium_memcmp(inp1: bytes, inp2: bytes) -> bool: + """ + Compare contents of two memory regions in constant time + """ + ensure(isinstance(inp1, bytes), raising=exc.TypeError) + ensure(isinstance(inp2, bytes), raising=exc.TypeError) + + ln = max(len(inp1), len(inp2)) + + buf1 = ffi.new("char []", ln) + buf2 = ffi.new("char []", ln) + + ffi.memmove(buf1, inp1, len(inp1)) + ffi.memmove(buf2, inp2, len(inp2)) + + eqL = len(inp1) == len(inp2) + eqC = lib.sodium_memcmp(buf1, buf2, ln) == 0 + + return eqL and eqC + + +def sodium_pad(s: bytes, blocksize: int) -> bytes: + """ + Pad the input bytearray ``s`` to a multiple of ``blocksize`` + using the ISO/IEC 7816-4 algorithm + + :param s: input bytes string + :type s: bytes + :param blocksize: + :type blocksize: int + :return: padded string + :rtype: bytes + """ + ensure(isinstance(s, bytes), raising=exc.TypeError) + ensure(isinstance(blocksize, int), raising=exc.TypeError) + if blocksize <= 0: + raise exc.ValueError + s_len = len(s) + m_len = s_len + blocksize + buf = ffi.new("unsigned char []", m_len) + p_len = ffi.new("size_t []", 1) + ffi.memmove(buf, s, s_len) + rc = lib.sodium_pad(p_len, buf, s_len, blocksize, m_len) + ensure(rc == 0, "Padding failure", raising=exc.CryptoError) + return ffi.buffer(buf, p_len[0])[:] + + +def sodium_unpad(s: bytes, blocksize: int) -> bytes: + """ + Remove ISO/IEC 7816-4 padding from the input byte array ``s`` + + :param s: input bytes string + :type s: bytes + :param blocksize: + :type blocksize: int + :return: unpadded string + :rtype: bytes + """ + ensure(isinstance(s, bytes), raising=exc.TypeError) + ensure(isinstance(blocksize, int), raising=exc.TypeError) + s_len = len(s) + u_len = ffi.new("size_t []", 1) + rc = lib.sodium_unpad(u_len, s, s_len, blocksize) + if rc != 0: + raise exc.CryptoError("Unpadding failure") + return s[: u_len[0]] + + +def sodium_increment(inp: bytes) -> bytes: + """ + Increment the value of a byte-sequence interpreted + as the little-endian representation of a unsigned big integer. + + :param inp: input bytes buffer + :type inp: bytes + :return: a byte-sequence representing, as a little-endian + unsigned big integer, the value ``to_int(inp)`` + incremented by one. + :rtype: bytes + + """ + ensure(isinstance(inp, bytes), raising=exc.TypeError) + + ln = len(inp) + buf = ffi.new("unsigned char []", ln) + + ffi.memmove(buf, inp, ln) + + lib.sodium_increment(buf, ln) + + return ffi.buffer(buf, ln)[:] + + +def sodium_add(a: bytes, b: bytes) -> bytes: + """ + Given a couple of *same-sized* byte sequences, interpreted as the + little-endian representation of two unsigned integers, compute + the modular addition of the represented values, in constant time for + a given common length of the byte sequences. + + :param a: input bytes buffer + :type a: bytes + :param b: input bytes buffer + :type b: bytes + :return: a byte-sequence representing, as a little-endian big integer, + the integer value of ``(to_int(a) + to_int(b)) mod 2^(8*len(a))`` + :rtype: bytes + """ + ensure(isinstance(a, bytes), raising=exc.TypeError) + ensure(isinstance(b, bytes), raising=exc.TypeError) + ln = len(a) + ensure(len(b) == ln, raising=exc.TypeError) + + buf_a = ffi.new("unsigned char []", ln) + buf_b = ffi.new("unsigned char []", ln) + + ffi.memmove(buf_a, a, ln) + ffi.memmove(buf_b, b, ln) + + lib.sodium_add(buf_a, buf_b, ln) + + return ffi.buffer(buf_a, ln)[:] diff --git a/venv/lib/python3.11/site-packages/nacl/encoding.py b/venv/lib/python3.11/site-packages/nacl/encoding.py new file mode 100644 index 0000000..6740cfb --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/encoding.py @@ -0,0 +1,105 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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 base64 +import binascii +from abc import ABCMeta, abstractmethod +from typing import SupportsBytes, Type + + +# TODO: when the minimum supported version of Python is 3.8, we can import +# Protocol from typing, and replace Encoder with a Protocol instead. +class _Encoder(metaclass=ABCMeta): + @staticmethod + @abstractmethod + def encode(data: bytes) -> bytes: + """Transform raw data to encoded data.""" + + @staticmethod + @abstractmethod + def decode(data: bytes) -> bytes: + """Transform encoded data back to raw data. + + Decoding after encoding should be a no-op, i.e. `decode(encode(x)) == x`. + """ + + +# Functions that use encoders are passed a subclass of _Encoder, not an instance +# (because the methods are all static). Let's gloss over that detail by defining +# an alias for Type[_Encoder]. +Encoder = Type[_Encoder] + + +class RawEncoder(_Encoder): + @staticmethod + def encode(data: bytes) -> bytes: + return data + + @staticmethod + def decode(data: bytes) -> bytes: + return data + + +class HexEncoder(_Encoder): + @staticmethod + def encode(data: bytes) -> bytes: + return binascii.hexlify(data) + + @staticmethod + def decode(data: bytes) -> bytes: + return binascii.unhexlify(data) + + +class Base16Encoder(_Encoder): + @staticmethod + def encode(data: bytes) -> bytes: + return base64.b16encode(data) + + @staticmethod + def decode(data: bytes) -> bytes: + return base64.b16decode(data) + + +class Base32Encoder(_Encoder): + @staticmethod + def encode(data: bytes) -> bytes: + return base64.b32encode(data) + + @staticmethod + def decode(data: bytes) -> bytes: + return base64.b32decode(data) + + +class Base64Encoder(_Encoder): + @staticmethod + def encode(data: bytes) -> bytes: + return base64.b64encode(data) + + @staticmethod + def decode(data: bytes) -> bytes: + return base64.b64decode(data) + + +class URLSafeBase64Encoder(_Encoder): + @staticmethod + def encode(data: bytes) -> bytes: + return base64.urlsafe_b64encode(data) + + @staticmethod + def decode(data: bytes) -> bytes: + return base64.urlsafe_b64decode(data) + + +class Encodable: + def encode(self: SupportsBytes, encoder: Encoder = RawEncoder) -> bytes: + return encoder.encode(bytes(self)) diff --git a/venv/lib/python3.11/site-packages/nacl/exceptions.py b/venv/lib/python3.11/site-packages/nacl/exceptions.py new file mode 100644 index 0000000..e321df7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/exceptions.py @@ -0,0 +1,88 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. + + +# We create a clone of various builtin Exception types which additionally +# inherit from CryptoError. Below, we refer to the parent types via the +# `builtins` namespace, so mypy can distinguish between (e.g.) +# `nacl.exceptions.RuntimeError` and `builtins.RuntimeError`. +import builtins +from typing import Type + + +class CryptoError(Exception): + """ + Base exception for all nacl related errors + """ + + +class BadSignatureError(CryptoError): + """ + Raised when the signature was forged or otherwise corrupt. + """ + + +class RuntimeError(builtins.RuntimeError, CryptoError): + pass + + +class AssertionError(builtins.AssertionError, CryptoError): + pass + + +class TypeError(builtins.TypeError, CryptoError): + pass + + +class ValueError(builtins.ValueError, CryptoError): + pass + + +class InvalidkeyError(CryptoError): + pass + + +class CryptPrefixError(InvalidkeyError): + pass + + +class UnavailableError(RuntimeError): + """ + is a subclass of :class:`~nacl.exceptions.RuntimeError`, raised when + trying to call functions not available in a minimal build of + libsodium. + """ + + pass + + +def ensure(cond: bool, *args: object, **kwds: Type[Exception]) -> None: + """ + Return if a condition is true, otherwise raise a caller-configurable + :py:class:`Exception` + :param bool cond: the condition to be checked + :param sequence args: the arguments to be passed to the exception's + constructor + The only accepted named parameter is `raising` used to configure the + exception to be raised if `cond` is not `True` + """ + _CHK_UNEXP = "check_condition() got an unexpected keyword argument {0}" + + raising = kwds.pop("raising", AssertionError) + if kwds: + raise TypeError(_CHK_UNEXP.format(repr(kwds.popitem()[0]))) + + if cond is True: + return + raise raising(*args) diff --git a/venv/lib/python3.11/site-packages/nacl/hash.py b/venv/lib/python3.11/site-packages/nacl/hash.py new file mode 100644 index 0000000..eb8cff6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/hash.py @@ -0,0 +1,182 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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 :mod:`nacl.hash` module exposes one-shot interfaces +for libsodium selected hash primitives and the constants needed +for their usage. +""" + + +import nacl.bindings +import nacl.encoding + + +BLAKE2B_BYTES = nacl.bindings.crypto_generichash_BYTES +"""Default digest size for :func:`blake2b` hash""" +BLAKE2B_BYTES_MIN = nacl.bindings.crypto_generichash_BYTES_MIN +"""Minimum allowed digest size for :func:`blake2b` hash""" +BLAKE2B_BYTES_MAX = nacl.bindings.crypto_generichash_BYTES_MAX +"""Maximum allowed digest size for :func:`blake2b` hash""" +BLAKE2B_KEYBYTES = nacl.bindings.crypto_generichash_KEYBYTES +"""Default size of the ``key`` byte array for :func:`blake2b` hash""" +BLAKE2B_KEYBYTES_MIN = nacl.bindings.crypto_generichash_KEYBYTES_MIN +"""Minimum allowed size of the ``key`` byte array for :func:`blake2b` hash""" +BLAKE2B_KEYBYTES_MAX = nacl.bindings.crypto_generichash_KEYBYTES_MAX +"""Maximum allowed size of the ``key`` byte array for :func:`blake2b` hash""" +BLAKE2B_SALTBYTES = nacl.bindings.crypto_generichash_SALTBYTES +"""Maximum allowed length of the ``salt`` byte array for +:func:`blake2b` hash""" +BLAKE2B_PERSONALBYTES = nacl.bindings.crypto_generichash_PERSONALBYTES +"""Maximum allowed length of the ``personalization`` +byte array for :func:`blake2b` hash""" + +SIPHASH_BYTES = nacl.bindings.crypto_shorthash_siphash24_BYTES +"""Size of the :func:`siphash24` digest""" +SIPHASH_KEYBYTES = nacl.bindings.crypto_shorthash_siphash24_KEYBYTES +"""Size of the secret ``key`` used by the :func:`siphash24` MAC""" + +SIPHASHX_AVAILABLE = nacl.bindings.has_crypto_shorthash_siphashx24 +"""``True`` if :func:`siphashx24` is available to be called""" + +SIPHASHX_BYTES = nacl.bindings.crypto_shorthash_siphashx24_BYTES +"""Size of the :func:`siphashx24` digest""" +SIPHASHX_KEYBYTES = nacl.bindings.crypto_shorthash_siphashx24_KEYBYTES +"""Size of the secret ``key`` used by the :func:`siphashx24` MAC""" + +_b2b_hash = nacl.bindings.crypto_generichash_blake2b_salt_personal +_sip_hash = nacl.bindings.crypto_shorthash_siphash24 +_sip_hashx = nacl.bindings.crypto_shorthash_siphashx24 + + +def sha256( + message: bytes, encoder: nacl.encoding.Encoder = nacl.encoding.HexEncoder +) -> bytes: + """ + Hashes ``message`` with SHA256. + + :param message: The message to hash. + :type message: bytes + :param encoder: A class that is able to encode the hashed message. + :returns: The hashed message. + :rtype: bytes + """ + return encoder.encode(nacl.bindings.crypto_hash_sha256(message)) + + +def sha512( + message: bytes, encoder: nacl.encoding.Encoder = nacl.encoding.HexEncoder +) -> bytes: + """ + Hashes ``message`` with SHA512. + + :param message: The message to hash. + :type message: bytes + :param encoder: A class that is able to encode the hashed message. + :returns: The hashed message. + :rtype: bytes + """ + return encoder.encode(nacl.bindings.crypto_hash_sha512(message)) + + +def blake2b( + data: bytes, + digest_size: int = BLAKE2B_BYTES, + key: bytes = b"", + salt: bytes = b"", + person: bytes = b"", + encoder: nacl.encoding.Encoder = nacl.encoding.HexEncoder, +) -> bytes: + """ + Hashes ``data`` with blake2b. + + :param data: the digest input byte sequence + :type data: bytes + :param digest_size: the requested digest size; must be at most + :const:`BLAKE2B_BYTES_MAX`; + the default digest size is + :const:`BLAKE2B_BYTES` + :type digest_size: int + :param key: the key to be set for keyed MAC/PRF usage; if set, the key + must be at most :data:`~nacl.hash.BLAKE2B_KEYBYTES_MAX` long + :type key: bytes + :param salt: an initialization salt at most + :const:`BLAKE2B_SALTBYTES` long; + it will be zero-padded if needed + :type salt: bytes + :param person: a personalization string at most + :const:`BLAKE2B_PERSONALBYTES` long; + it will be zero-padded if needed + :type person: bytes + :param encoder: the encoder to use on returned digest + :type encoder: class + :returns: The hashed message. + :rtype: bytes + """ + + digest = _b2b_hash( + data, digest_size=digest_size, key=key, salt=salt, person=person + ) + return encoder.encode(digest) + + +generichash = blake2b + + +def siphash24( + message: bytes, + key: bytes = b"", + encoder: nacl.encoding.Encoder = nacl.encoding.HexEncoder, +) -> bytes: + """ + Computes a keyed MAC of ``message`` using the short-input-optimized + siphash-2-4 construction. + + :param message: The message to hash. + :type message: bytes + :param key: the message authentication key for the siphash MAC construct + :type key: bytes(:const:`SIPHASH_KEYBYTES`) + :param encoder: A class that is able to encode the hashed message. + :returns: The hashed message. + :rtype: bytes(:const:`SIPHASH_BYTES`) + """ + digest = _sip_hash(message, key) + return encoder.encode(digest) + + +shorthash = siphash24 + + +def siphashx24( + message: bytes, + key: bytes = b"", + encoder: nacl.encoding.Encoder = nacl.encoding.HexEncoder, +) -> bytes: + """ + Computes a keyed MAC of ``message`` using the 128 bit variant of the + siphash-2-4 construction. + + :param message: The message to hash. + :type message: bytes + :param key: the message authentication key for the siphash MAC construct + :type key: bytes(:const:`SIPHASHX_KEYBYTES`) + :param encoder: A class that is able to encode the hashed message. + :returns: The hashed message. + :rtype: bytes(:const:`SIPHASHX_BYTES`) + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + + .. versionadded:: 1.2 + """ + digest = _sip_hashx(message, key) + return encoder.encode(digest) diff --git a/venv/lib/python3.11/site-packages/nacl/hashlib.py b/venv/lib/python3.11/site-packages/nacl/hashlib.py new file mode 100644 index 0000000..4fd4a97 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/hashlib.py @@ -0,0 +1,143 @@ +# Copyright 2016-2019 Donald Stufft and individual contributors +# +# 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 binascii +from typing import NoReturn + +import nacl.bindings +from nacl.utils import bytes_as_string + +BYTES = nacl.bindings.crypto_generichash_BYTES +BYTES_MIN = nacl.bindings.crypto_generichash_BYTES_MIN +BYTES_MAX = nacl.bindings.crypto_generichash_BYTES_MAX +KEYBYTES = nacl.bindings.crypto_generichash_KEYBYTES +KEYBYTES_MIN = nacl.bindings.crypto_generichash_KEYBYTES_MIN +KEYBYTES_MAX = nacl.bindings.crypto_generichash_KEYBYTES_MAX +SALTBYTES = nacl.bindings.crypto_generichash_SALTBYTES +PERSONALBYTES = nacl.bindings.crypto_generichash_PERSONALBYTES + +SCRYPT_AVAILABLE = nacl.bindings.has_crypto_pwhash_scryptsalsa208sha256 + +_b2b_init = nacl.bindings.crypto_generichash_blake2b_init +_b2b_final = nacl.bindings.crypto_generichash_blake2b_final +_b2b_update = nacl.bindings.crypto_generichash_blake2b_update + + +class blake2b: + """ + :py:mod:`hashlib` API compatible blake2b algorithm implementation + """ + + MAX_DIGEST_SIZE = BYTES + MAX_KEY_SIZE = KEYBYTES_MAX + PERSON_SIZE = PERSONALBYTES + SALT_SIZE = SALTBYTES + + def __init__( + self, + data: bytes = b"", + digest_size: int = BYTES, + key: bytes = b"", + salt: bytes = b"", + person: bytes = b"", + ): + """ + :py:class:`.blake2b` algorithm initializer + + :param data: + :type data: bytes + :param int digest_size: the requested digest size; must be + at most :py:attr:`.MAX_DIGEST_SIZE`; + the default digest size is :py:data:`.BYTES` + :param key: the key to be set for keyed MAC/PRF usage; if set, + the key must be at most :py:data:`.KEYBYTES_MAX` long + :type key: bytes + :param salt: a initialization salt at most + :py:attr:`.SALT_SIZE` long; it will be zero-padded + if needed + :type salt: bytes + :param person: a personalization string at most + :py:attr:`.PERSONAL_SIZE` long; it will be zero-padded + if needed + :type person: bytes + """ + + self._state = _b2b_init( + key=key, salt=salt, person=person, digest_size=digest_size + ) + self._digest_size = digest_size + + if data: + self.update(data) + + @property + def digest_size(self) -> int: + return self._digest_size + + @property + def block_size(self) -> int: + return 128 + + @property + def name(self) -> str: + return "blake2b" + + def update(self, data: bytes) -> None: + _b2b_update(self._state, data) + + def digest(self) -> bytes: + _st = self._state.copy() + return _b2b_final(_st) + + def hexdigest(self) -> str: + return bytes_as_string(binascii.hexlify(self.digest())) + + def copy(self) -> "blake2b": + _cp = type(self)(digest_size=self.digest_size) + _st = self._state.copy() + _cp._state = _st + return _cp + + def __reduce__(self) -> NoReturn: + """ + Raise the same exception as hashlib's blake implementation + on copy.copy() + """ + raise TypeError( + "can't pickle {} objects".format(self.__class__.__name__) + ) + + +def scrypt( + password: bytes, + salt: bytes = b"", + n: int = 2 ** 20, + r: int = 8, + p: int = 1, + maxmem: int = 2 ** 25, + dklen: int = 64, +) -> bytes: + """ + Derive a cryptographic key using the scrypt KDF. + + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + + Implements the same signature as the ``hashlib.scrypt`` implemented + in cpython version 3.6 + """ + return nacl.bindings.crypto_pwhash_scryptsalsa208sha256_ll( + password, salt, n, r, p, maxmem=maxmem, dklen=dklen + ) diff --git a/venv/lib/python3.11/site-packages/nacl/public.py b/venv/lib/python3.11/site-packages/nacl/public.py new file mode 100644 index 0000000..be9410f --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/public.py @@ -0,0 +1,423 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. +from typing import ClassVar, Generic, Optional, Type, TypeVar + +import nacl.bindings +from nacl import encoding +from nacl import exceptions as exc +from nacl.encoding import Encoder +from nacl.utils import EncryptedMessage, StringFixer, random + + +class PublicKey(encoding.Encodable, StringFixer): + """ + The public key counterpart to an Curve25519 :class:`nacl.public.PrivateKey` + for encrypting messages. + + :param public_key: [:class:`bytes`] Encoded Curve25519 public key + :param encoder: A class that is able to decode the `public_key` + + :cvar SIZE: The size that the public key is required to be + """ + + SIZE: ClassVar[int] = nacl.bindings.crypto_box_PUBLICKEYBYTES + + def __init__( + self, + public_key: bytes, + encoder: encoding.Encoder = encoding.RawEncoder, + ): + self._public_key = encoder.decode(public_key) + if not isinstance(self._public_key, bytes): + raise exc.TypeError("PublicKey must be created from 32 bytes") + + if len(self._public_key) != self.SIZE: + raise exc.ValueError( + "The public key must be exactly {} bytes long".format( + self.SIZE + ) + ) + + def __bytes__(self) -> bytes: + return self._public_key + + def __hash__(self) -> int: + return hash(bytes(self)) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, self.__class__): + return False + return nacl.bindings.sodium_memcmp(bytes(self), bytes(other)) + + def __ne__(self, other: object) -> bool: + return not (self == other) + + +class PrivateKey(encoding.Encodable, StringFixer): + """ + Private key for decrypting messages using the Curve25519 algorithm. + + .. warning:: This **must** be protected and remain secret. Anyone who + knows the value of your :class:`~nacl.public.PrivateKey` can decrypt + any message encrypted by the corresponding + :class:`~nacl.public.PublicKey` + + :param private_key: The private key used to decrypt messages + :param encoder: The encoder class used to decode the given keys + + :cvar SIZE: The size that the private key is required to be + :cvar SEED_SIZE: The size that the seed used to generate the + private key is required to be + """ + + SIZE: ClassVar[int] = nacl.bindings.crypto_box_SECRETKEYBYTES + SEED_SIZE: ClassVar[int] = nacl.bindings.crypto_box_SEEDBYTES + + def __init__( + self, + private_key: bytes, + encoder: encoding.Encoder = encoding.RawEncoder, + ): + # Decode the secret_key + private_key = encoder.decode(private_key) + # verify the given secret key type and size are correct + if not ( + isinstance(private_key, bytes) and len(private_key) == self.SIZE + ): + raise exc.TypeError( + ( + "PrivateKey must be created from a {} " + "bytes long raw secret key" + ).format(self.SIZE) + ) + + raw_public_key = nacl.bindings.crypto_scalarmult_base(private_key) + + self._private_key = private_key + self.public_key = PublicKey(raw_public_key) + + @classmethod + def from_seed( + cls, + seed: bytes, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> "PrivateKey": + """ + Generate a PrivateKey using a deterministic construction + starting from a caller-provided seed + + .. warning:: The seed **must** be high-entropy; therefore, + its generator **must** be a cryptographic quality + random function like, for example, :func:`~nacl.utils.random`. + + .. warning:: The seed **must** be protected and remain secret. + Anyone who knows the seed is really in possession of + the corresponding PrivateKey. + + :param seed: The seed used to generate the private key + :rtype: :class:`~nacl.public.PrivateKey` + """ + # decode the seed + seed = encoder.decode(seed) + # Verify the given seed type and size are correct + if not (isinstance(seed, bytes) and len(seed) == cls.SEED_SIZE): + raise exc.TypeError( + ( + "PrivateKey seed must be a {} bytes long " + "binary sequence" + ).format(cls.SEED_SIZE) + ) + # generate a raw keypair from the given seed + raw_pk, raw_sk = nacl.bindings.crypto_box_seed_keypair(seed) + # construct a instance from the raw secret key + return cls(raw_sk) + + def __bytes__(self) -> bytes: + return self._private_key + + def __hash__(self) -> int: + return hash((type(self), bytes(self.public_key))) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, self.__class__): + return False + return self.public_key == other.public_key + + def __ne__(self, other: object) -> bool: + return not (self == other) + + @classmethod + def generate(cls) -> "PrivateKey": + """ + Generates a random :class:`~nacl.public.PrivateKey` object + + :rtype: :class:`~nacl.public.PrivateKey` + """ + return cls(random(PrivateKey.SIZE), encoder=encoding.RawEncoder) + + +_Box = TypeVar("_Box", bound="Box") + + +class Box(encoding.Encodable, StringFixer): + """ + The Box class boxes and unboxes messages between a pair of keys + + The ciphertexts generated by :class:`~nacl.public.Box` include a 16 + byte authenticator which is checked as part of the decryption. An invalid + authenticator will cause the decrypt function to raise an exception. The + authenticator is not a signature. Once you've decrypted the message you've + demonstrated the ability to create arbitrary valid message, so messages you + send are repudiable. For non-repudiable messages, sign them after + encryption. + + :param private_key: :class:`~nacl.public.PrivateKey` used to encrypt and + decrypt messages + :param public_key: :class:`~nacl.public.PublicKey` used to encrypt and + decrypt messages + + :cvar NONCE_SIZE: The size that the nonce is required to be. + """ + + NONCE_SIZE: ClassVar[int] = nacl.bindings.crypto_box_NONCEBYTES + _shared_key: bytes + + def __init__(self, private_key: PrivateKey, public_key: PublicKey): + if not isinstance(private_key, PrivateKey) or not isinstance( + public_key, PublicKey + ): + raise exc.TypeError( + "Box must be created from a PrivateKey and a PublicKey" + ) + self._shared_key = nacl.bindings.crypto_box_beforenm( + public_key.encode(encoder=encoding.RawEncoder), + private_key.encode(encoder=encoding.RawEncoder), + ) + + def __bytes__(self) -> bytes: + return self._shared_key + + @classmethod + def decode( + cls: Type[_Box], encoded: bytes, encoder: Encoder = encoding.RawEncoder + ) -> _Box: + """ + Alternative constructor. Creates a Box from an existing Box's shared key. + """ + # Create an empty box + box: _Box = cls.__new__(cls) + + # Assign our decoded value to the shared key of the box + box._shared_key = encoder.decode(encoded) + + return box + + def encrypt( + self, + plaintext: bytes, + nonce: Optional[bytes] = None, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> EncryptedMessage: + """ + Encrypts the plaintext message using the given `nonce` (or generates + one randomly if omitted) and returns the ciphertext encoded with the + encoder. + + .. warning:: It is **VITALLY** important that the nonce is a nonce, + i.e. it is a number used only once for any given key. If you fail + to do this, you compromise the privacy of the messages encrypted. + + :param plaintext: [:class:`bytes`] The plaintext message to encrypt + :param nonce: [:class:`bytes`] The nonce to use in the encryption + :param encoder: The encoder to use to encode the ciphertext + :rtype: [:class:`nacl.utils.EncryptedMessage`] + """ + if nonce is None: + nonce = random(self.NONCE_SIZE) + + if len(nonce) != self.NONCE_SIZE: + raise exc.ValueError( + "The nonce must be exactly %s bytes long" % self.NONCE_SIZE + ) + + ciphertext = nacl.bindings.crypto_box_afternm( + plaintext, + nonce, + self._shared_key, + ) + + encoded_nonce = encoder.encode(nonce) + encoded_ciphertext = encoder.encode(ciphertext) + + return EncryptedMessage._from_parts( + encoded_nonce, + encoded_ciphertext, + encoder.encode(nonce + ciphertext), + ) + + def decrypt( + self, + ciphertext: bytes, + nonce: Optional[bytes] = None, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> bytes: + """ + Decrypts the ciphertext using the `nonce` (explicitly, when passed as a + parameter or implicitly, when omitted, as part of the ciphertext) and + returns the plaintext message. + + :param ciphertext: [:class:`bytes`] The encrypted message to decrypt + :param nonce: [:class:`bytes`] The nonce used when encrypting the + ciphertext + :param encoder: The encoder used to decode the ciphertext. + :rtype: [:class:`bytes`] + """ + # Decode our ciphertext + ciphertext = encoder.decode(ciphertext) + + if nonce is None: + # If we were given the nonce and ciphertext combined, split them. + nonce = ciphertext[: self.NONCE_SIZE] + ciphertext = ciphertext[self.NONCE_SIZE :] + + if len(nonce) != self.NONCE_SIZE: + raise exc.ValueError( + "The nonce must be exactly %s bytes long" % self.NONCE_SIZE + ) + + plaintext = nacl.bindings.crypto_box_open_afternm( + ciphertext, + nonce, + self._shared_key, + ) + + return plaintext + + def shared_key(self) -> bytes: + """ + Returns the Curve25519 shared secret, that can then be used as a key in + other symmetric ciphers. + + .. warning:: It is **VITALLY** important that you use a nonce with your + symmetric cipher. If you fail to do this, you compromise the + privacy of the messages encrypted. Ensure that the key length of + your cipher is 32 bytes. + :rtype: [:class:`bytes`] + """ + + return self._shared_key + + +_Key = TypeVar("_Key", PublicKey, PrivateKey) + + +class SealedBox(Generic[_Key], encoding.Encodable, StringFixer): + """ + The SealedBox class boxes and unboxes messages addressed to + a specified key-pair by using ephemeral sender's keypairs, + whose private part will be discarded just after encrypting + a single plaintext message. + + The ciphertexts generated by :class:`~nacl.public.SecretBox` include + the public part of the ephemeral key before the :class:`~nacl.public.Box` + ciphertext. + + :param recipient_key: a :class:`~nacl.public.PublicKey` used to encrypt + messages and derive nonces, or a :class:`~nacl.public.PrivateKey` used + to decrypt messages. + + .. versionadded:: 1.2 + """ + + _public_key: bytes + _private_key: Optional[bytes] + + def __init__(self, recipient_key: _Key): + if isinstance(recipient_key, PublicKey): + self._public_key = recipient_key.encode( + encoder=encoding.RawEncoder + ) + self._private_key = None + elif isinstance(recipient_key, PrivateKey): + self._private_key = recipient_key.encode( + encoder=encoding.RawEncoder + ) + self._public_key = recipient_key.public_key.encode( + encoder=encoding.RawEncoder + ) + else: + raise exc.TypeError( + "SealedBox must be created from a PublicKey or a PrivateKey" + ) + + def __bytes__(self) -> bytes: + return self._public_key + + def encrypt( + self, + plaintext: bytes, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> bytes: + """ + Encrypts the plaintext message using a random-generated ephemeral + keypair and returns a "composed ciphertext", containing both + the public part of the keypair and the ciphertext proper, + encoded with the encoder. + + The private part of the ephemeral key-pair will be scrubbed before + returning the ciphertext, therefore, the sender will not be able to + decrypt the generated ciphertext. + + :param plaintext: [:class:`bytes`] The plaintext message to encrypt + :param encoder: The encoder to use to encode the ciphertext + :return bytes: encoded ciphertext + """ + + ciphertext = nacl.bindings.crypto_box_seal(plaintext, self._public_key) + + encoded_ciphertext = encoder.encode(ciphertext) + + return encoded_ciphertext + + def decrypt( + self: "SealedBox[PrivateKey]", + ciphertext: bytes, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> bytes: + """ + Decrypts the ciphertext using the ephemeral public key enclosed + in the ciphertext and the SealedBox private key, returning + the plaintext message. + + :param ciphertext: [:class:`bytes`] The encrypted message to decrypt + :param encoder: The encoder used to decode the ciphertext. + :return bytes: The original plaintext + :raises TypeError: if this SealedBox was created with a + :class:`~nacl.public.PublicKey` rather than a + :class:`~nacl.public.PrivateKey`. + """ + # Decode our ciphertext + ciphertext = encoder.decode(ciphertext) + + if self._private_key is None: + raise TypeError( + "SealedBoxes created with a public key cannot decrypt" + ) + plaintext = nacl.bindings.crypto_box_seal_open( + ciphertext, + self._public_key, + self._private_key, + ) + + return plaintext diff --git a/venv/lib/python3.11/site-packages/nacl/pwhash/__init__.py b/venv/lib/python3.11/site-packages/nacl/pwhash/__init__.py new file mode 100644 index 0000000..ffd76a6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/pwhash/__init__.py @@ -0,0 +1,75 @@ +# Copyright 2017 Donald Stufft and individual contributors +# +# 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. + + +from nacl.exceptions import CryptPrefixError + +from . import _argon2, argon2i, argon2id, scrypt + +STRPREFIX = argon2id.STRPREFIX + +PWHASH_SIZE = argon2id.PWHASH_SIZE + +assert _argon2.ALG_ARGON2_DEFAULT == _argon2.ALG_ARGON2ID13 +# since version 1.0.15 of libsodium + +PASSWD_MIN = argon2id.PASSWD_MIN +PASSWD_MAX = argon2id.PASSWD_MAX +MEMLIMIT_MAX = argon2id.MEMLIMIT_MAX +MEMLIMIT_MIN = argon2id.MEMLIMIT_MIN +OPSLIMIT_MAX = argon2id.OPSLIMIT_MAX +OPSLIMIT_MIN = argon2id.OPSLIMIT_MIN +OPSLIMIT_INTERACTIVE = argon2id.OPSLIMIT_INTERACTIVE +MEMLIMIT_INTERACTIVE = argon2id.MEMLIMIT_INTERACTIVE +OPSLIMIT_MODERATE = argon2id.OPSLIMIT_MODERATE +MEMLIMIT_MODERATE = argon2id.MEMLIMIT_MODERATE +OPSLIMIT_SENSITIVE = argon2id.OPSLIMIT_SENSITIVE +MEMLIMIT_SENSITIVE = argon2id.MEMLIMIT_SENSITIVE + +str = argon2id.str + +assert argon2i.ALG != argon2id.ALG + +SCRYPT_SALTBYTES = scrypt.SALTBYTES +SCRYPT_PWHASH_SIZE = scrypt.PWHASH_SIZE +SCRYPT_OPSLIMIT_INTERACTIVE = scrypt.OPSLIMIT_INTERACTIVE +SCRYPT_MEMLIMIT_INTERACTIVE = scrypt.MEMLIMIT_INTERACTIVE +SCRYPT_OPSLIMIT_SENSITIVE = scrypt.OPSLIMIT_SENSITIVE +SCRYPT_MEMLIMIT_SENSITIVE = scrypt.MEMLIMIT_SENSITIVE + + +kdf_scryptsalsa208sha256 = scrypt.kdf +scryptsalsa208sha256_str = scrypt.str +verify_scryptsalsa208sha256 = scrypt.verify + + +def verify(password_hash: bytes, password: bytes) -> bool: + """ + Takes a modular crypt encoded stored password hash derived using one + of the algorithms supported by `libsodium` and checks if the user provided + password will hash to the same string when using the parameters saved + in the stored hash + """ + if password_hash.startswith(argon2id.STRPREFIX): + return argon2id.verify(password_hash, password) + elif password_hash.startswith(argon2i.STRPREFIX): + return argon2id.verify(password_hash, password) + elif scrypt.AVAILABLE and password_hash.startswith(scrypt.STRPREFIX): + return scrypt.verify(password_hash, password) + else: + raise ( + CryptPrefixError( + "given password_hash is not in a supported format" + ) + ) diff --git a/venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50a3274dc3d204c6016ba6cc1b0479d96c021c7c GIT binary patch literal 2660 zcmb`I&2JM&6u@WwZO0#pW9Op@&L)H+OC^SUkW#8jh8W^12~q6wVX0a+-c7u=ch{O- zCxn6;A#UZ+L#5`xfeR@WmtK17AK^r+Vy%P}sV8nmv=mJiX-RwOYCZFQZ{C~t z-h6m}2n2ixo^O76y{Uop8-e!YY6)+CWf1xv2}oedNM>>jg9MvkFWY2$&MrH04%wM= z%C4M?L87zhZoB8)KpsjS(O&en31llS;gXHCn(cG+fB}ylLgdNy0Qs9TkRK>ODF76t z6a)%U3IX*}>ILef)CUx%6b9<2)DIM)6ak7-iUJK#8UPxkG$=ZXLv4Z)Dwpg;+p5e} z9B$j>J`i19D>DMr$#4{?li>-VP8KnsP8MT8ES+;4sFTwK&`CNrDLBMaf)jo&@xu+5 z;C|@HofJG76!*R&MsddMy^MD%`YIMTq&q2$Rs0Gz9mO4{o8$4Os!W^iW-pnZmLQle zEl<46K!w+|Z50b#f!7MAr;Vlyi+U9+d25SX={TS#3-hL89jkljNo(NUPVe$5Qh6VI zo|DY12S;^liJMfU@;!8q*$1EJ)GvdMjYE$pLjOk`ogQqMuYH9Oo;@~xw>{1GA9d1e z0ki&VojSb;2rlfq^E_bUw!44&Sa`C0Nz_=Ll~tiy<}qt+Br7U;RS*SM(^U*zdmmY{ zt*jtoX$!PfO;R>lRS~U;)D2cIh%8^;RI#KNWR2CTm5PdWuw36^Z1fDpsa$Tx)m1Bk#>*lkhDq@4f~d6eAi*mDDZTRA8y^p525h6k3~gWLZgL6;)@!hwsXNL&Y+$$33P`(|N3G+fX1T ze{iNZlU-X~OI=CdG+kS;E*m?T>@_Bb$@C_#C(}#GOG_zCwkmGJExv+UdJ ziGnJNiK38z>WgAt*Al9{#jW%CQniwR{I(LXaEZ!}UQm^psdMKNnxu<91 zGBo(;>%IHW3J0NiBQ#(0%-6jGFTCT2-tniWjft59@2ugSZ6NRaOka9KhIhDu+)m$~ z{33S#Fn0duEo1)bL2S{8En51Qq3EOgdtW|VJP6Ghp}Cr8?hh9VoT&F+dTqA_g1;kZ z8g_@*_XaXWEAi82h*UNu-pPv8w=cWdZi;LZ<_w))bdh#Ii2N} z-zBi~Ut7&|jdcjdB9ziA+0Y{Wz62p<+WR@S+1iAw=~@gHPX`2NZnbs2WiOe!QsDq zcJgTtQNPZRy(DayL(p)|Plm>qHGcZ+$6A4(o;z<2y-&+QdDdArN19jc{l3oi9bME+ z$GWPPe?*vkJ2Cm3zV&=+{ke&s;aNcP(a=iJHtY<;G+4x(siBX$-y?Lk_FwOjKVtY} zyWXSVfDxS7?KyG>4fpty8^)=Nhwh8D_S_dY_XmZzIKdv7fGX`gC zC{m|FWYmaE)lgrZ3egir6mksL+rp76_^`Zdhb$g`^=;w1@}Ya8)_#xrhmHP|HPl;= zju_F?#4R>y#4gm(NJki*Fh=KUXt>@MAoJ0Q$Dh>DP<>>)*~cay%iz>-g&E)8sRn}X Q*__q=l(o8J8*4NE0z-+BSO5S3 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/_argon2.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/_argon2.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ffa7091106fff3bd7c7a5fb77842441c115e73c GIT binary patch literal 1741 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/scrypt.cpython-311.pyc b/venv/lib/python3.11/site-packages/nacl/pwhash/__pycache__/scrypt.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63c7ad1c5382f01402eecfc4d79eecfaeb3b08f3 GIT binary patch literal 7591 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/nacl/pwhash/_argon2.py b/venv/lib/python3.11/site-packages/nacl/pwhash/_argon2.py new file mode 100644 index 0000000..856eda0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/pwhash/_argon2.py @@ -0,0 +1,49 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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 nacl.bindings + +_argon2_strbytes_plus_one = nacl.bindings.crypto_pwhash_STRBYTES + +PWHASH_SIZE = _argon2_strbytes_plus_one - 1 +SALTBYTES = nacl.bindings.crypto_pwhash_SALTBYTES + +PASSWD_MIN = nacl.bindings.crypto_pwhash_PASSWD_MIN +PASSWD_MAX = nacl.bindings.crypto_pwhash_PASSWD_MAX + +PWHASH_SIZE = _argon2_strbytes_plus_one - 1 + +BYTES_MAX = nacl.bindings.crypto_pwhash_BYTES_MAX +BYTES_MIN = nacl.bindings.crypto_pwhash_BYTES_MIN + +ALG_ARGON2I13 = nacl.bindings.crypto_pwhash_ALG_ARGON2I13 +ALG_ARGON2ID13 = nacl.bindings.crypto_pwhash_ALG_ARGON2ID13 +ALG_ARGON2_DEFAULT = nacl.bindings.crypto_pwhash_ALG_DEFAULT + + +def verify(password_hash: bytes, password: bytes) -> bool: + """ + Takes a modular crypt encoded argon2i or argon2id stored password hash + and checks if the user provided password will hash to the same string + when using the stored parameters + + :param password_hash: password hash serialized in modular crypt() format + :type password_hash: bytes + :param password: user provided password + :type password: bytes + :rtype: boolean + + .. versionadded:: 1.2 + """ + return nacl.bindings.crypto_pwhash_str_verify(password_hash, password) diff --git a/venv/lib/python3.11/site-packages/nacl/pwhash/argon2i.py b/venv/lib/python3.11/site-packages/nacl/pwhash/argon2i.py new file mode 100644 index 0000000..f9b3af7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/pwhash/argon2i.py @@ -0,0 +1,132 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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 nacl.bindings +import nacl.encoding + +from . import _argon2 + +ALG = _argon2.ALG_ARGON2I13 +STRPREFIX = nacl.bindings.crypto_pwhash_argon2i_STRPREFIX + +SALTBYTES = _argon2.SALTBYTES + +PASSWD_MIN = _argon2.PASSWD_MIN +PASSWD_MAX = _argon2.PASSWD_MAX + +PWHASH_SIZE = _argon2.PWHASH_SIZE + +BYTES_MIN = _argon2.BYTES_MIN +BYTES_MAX = _argon2.BYTES_MAX + +verify = _argon2.verify + +MEMLIMIT_MAX = nacl.bindings.crypto_pwhash_argon2i_MEMLIMIT_MAX +MEMLIMIT_MIN = nacl.bindings.crypto_pwhash_argon2i_MEMLIMIT_MIN +OPSLIMIT_MAX = nacl.bindings.crypto_pwhash_argon2i_OPSLIMIT_MAX +OPSLIMIT_MIN = nacl.bindings.crypto_pwhash_argon2i_OPSLIMIT_MIN + +OPSLIMIT_INTERACTIVE = nacl.bindings.crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE +MEMLIMIT_INTERACTIVE = nacl.bindings.crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE +OPSLIMIT_SENSITIVE = nacl.bindings.crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE +MEMLIMIT_SENSITIVE = nacl.bindings.crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE + +OPSLIMIT_MODERATE = nacl.bindings.crypto_pwhash_argon2i_OPSLIMIT_MODERATE +MEMLIMIT_MODERATE = nacl.bindings.crypto_pwhash_argon2i_MEMLIMIT_MODERATE + + +def kdf( + size: int, + password: bytes, + salt: bytes, + opslimit: int = OPSLIMIT_SENSITIVE, + memlimit: int = MEMLIMIT_SENSITIVE, + encoder: nacl.encoding.Encoder = nacl.encoding.RawEncoder, +) -> bytes: + """ + Derive a ``size`` bytes long key from a caller-supplied + ``password`` and ``salt`` pair using the argon2i + memory-hard construct. + + the enclosing module provides the constants + + - :py:const:`.OPSLIMIT_INTERACTIVE` + - :py:const:`.MEMLIMIT_INTERACTIVE` + - :py:const:`.OPSLIMIT_MODERATE` + - :py:const:`.MEMLIMIT_MODERATE` + - :py:const:`.OPSLIMIT_SENSITIVE` + - :py:const:`.MEMLIMIT_SENSITIVE` + + as a guidance for correct settings. + + :param size: derived key size, must be between + :py:const:`.BYTES_MIN` and + :py:const:`.BYTES_MAX` + :type size: int + :param password: password used to seed the key derivation procedure; + it length must be between + :py:const:`.PASSWD_MIN` and + :py:const:`.PASSWD_MAX` + :type password: bytes + :param salt: **RANDOM** salt used in the key derivation procedure; + its length must be exactly :py:const:`.SALTBYTES` + :type salt: bytes + :param opslimit: the time component (operation count) + of the key derivation procedure's computational cost; + it must be between + :py:const:`.OPSLIMIT_MIN` and + :py:const:`.OPSLIMIT_MAX` + :type opslimit: int + :param memlimit: the memory occupation component + of the key derivation procedure's computational cost; + it must be between + :py:const:`.MEMLIMIT_MIN` and + :py:const:`.MEMLIMIT_MAX` + :type memlimit: int + :rtype: bytes + + .. versionadded:: 1.2 + """ + + return encoder.encode( + nacl.bindings.crypto_pwhash_alg( + size, password, salt, opslimit, memlimit, ALG + ) + ) + + +def str( + password: bytes, + opslimit: int = OPSLIMIT_INTERACTIVE, + memlimit: int = MEMLIMIT_INTERACTIVE, +) -> bytes: + """ + Hashes a password with a random salt, using the memory-hard + argon2i construct and returning an ascii string that has all + the needed info to check against a future password + + + The default settings for opslimit and memlimit are those deemed + correct for the interactive user login case. + + :param bytes password: + :param int opslimit: + :param int memlimit: + :rtype: bytes + + .. versionadded:: 1.2 + """ + return nacl.bindings.crypto_pwhash_str_alg( + password, opslimit, memlimit, ALG + ) diff --git a/venv/lib/python3.11/site-packages/nacl/pwhash/argon2id.py b/venv/lib/python3.11/site-packages/nacl/pwhash/argon2id.py new file mode 100644 index 0000000..1b86d69 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/pwhash/argon2id.py @@ -0,0 +1,135 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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 nacl.bindings +import nacl.encoding + +from . import _argon2 + +ALG = _argon2.ALG_ARGON2ID13 +STRPREFIX = nacl.bindings.crypto_pwhash_argon2id_STRPREFIX + +SALTBYTES = _argon2.SALTBYTES + +PASSWD_MIN = _argon2.PASSWD_MIN +PASSWD_MAX = _argon2.PASSWD_MAX + +PWHASH_SIZE = _argon2.PWHASH_SIZE + +BYTES_MIN = _argon2.BYTES_MIN +BYTES_MAX = _argon2.BYTES_MAX + +verify = _argon2.verify + +MEMLIMIT_MIN = nacl.bindings.crypto_pwhash_argon2id_MEMLIMIT_MIN +MEMLIMIT_MAX = nacl.bindings.crypto_pwhash_argon2id_MEMLIMIT_MAX +OPSLIMIT_MIN = nacl.bindings.crypto_pwhash_argon2id_OPSLIMIT_MIN +OPSLIMIT_MAX = nacl.bindings.crypto_pwhash_argon2id_OPSLIMIT_MAX + +OPSLIMIT_INTERACTIVE = ( + nacl.bindings.crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE +) +MEMLIMIT_INTERACTIVE = ( + nacl.bindings.crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE +) +OPSLIMIT_SENSITIVE = nacl.bindings.crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE +MEMLIMIT_SENSITIVE = nacl.bindings.crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE + +OPSLIMIT_MODERATE = nacl.bindings.crypto_pwhash_argon2id_OPSLIMIT_MODERATE +MEMLIMIT_MODERATE = nacl.bindings.crypto_pwhash_argon2id_MEMLIMIT_MODERATE + + +def kdf( + size: int, + password: bytes, + salt: bytes, + opslimit: int = OPSLIMIT_SENSITIVE, + memlimit: int = MEMLIMIT_SENSITIVE, + encoder: nacl.encoding.Encoder = nacl.encoding.RawEncoder, +) -> bytes: + """ + Derive a ``size`` bytes long key from a caller-supplied + ``password`` and ``salt`` pair using the argon2i + memory-hard construct. + + the enclosing module provides the constants + + - :py:const:`.OPSLIMIT_INTERACTIVE` + - :py:const:`.MEMLIMIT_INTERACTIVE` + - :py:const:`.OPSLIMIT_MODERATE` + - :py:const:`.MEMLIMIT_MODERATE` + - :py:const:`.OPSLIMIT_SENSITIVE` + - :py:const:`.MEMLIMIT_SENSITIVE` + + as a guidance for correct settings. + + :param size: derived key size, must be between + :py:const:`.BYTES_MIN` and + :py:const:`.BYTES_MAX` + :type size: int + :param password: password used to seed the key derivation procedure; + it length must be between + :py:const:`.PASSWD_MIN` and + :py:const:`.PASSWD_MAX` + :type password: bytes + :param salt: **RANDOM** salt used in the key derivation procedure; + its length must be exactly :py:const:`.SALTBYTES` + :type salt: bytes + :param opslimit: the time component (operation count) + of the key derivation procedure's computational cost; + it must be between + :py:const:`.OPSLIMIT_MIN` and + :py:const:`.OPSLIMIT_MAX` + :type opslimit: int + :param memlimit: the memory occupation component + of the key derivation procedure's computational cost; + it must be between + :py:const:`.MEMLIMIT_MIN` and + :py:const:`.MEMLIMIT_MAX` + :type memlimit: int + :rtype: bytes + + .. versionadded:: 1.2 + """ + + return encoder.encode( + nacl.bindings.crypto_pwhash_alg( + size, password, salt, opslimit, memlimit, ALG + ) + ) + + +def str( + password: bytes, + opslimit: int = OPSLIMIT_INTERACTIVE, + memlimit: int = MEMLIMIT_INTERACTIVE, +) -> bytes: + """ + Hashes a password with a random salt, using the memory-hard + argon2id construct and returning an ascii string that has all + the needed info to check against a future password + + The default settings for opslimit and memlimit are those deemed + correct for the interactive user login case. + + :param bytes password: + :param int opslimit: + :param int memlimit: + :rtype: bytes + + .. versionadded:: 1.2 + """ + return nacl.bindings.crypto_pwhash_str_alg( + password, opslimit, memlimit, ALG + ) diff --git a/venv/lib/python3.11/site-packages/nacl/pwhash/scrypt.py b/venv/lib/python3.11/site-packages/nacl/pwhash/scrypt.py new file mode 100644 index 0000000..55bdf49 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/pwhash/scrypt.py @@ -0,0 +1,211 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. +from typing import cast + +import nacl.bindings +import nacl.encoding +from nacl import exceptions as exc +from nacl.exceptions import ensure + +_strbytes_plus_one = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_STRBYTES + +AVAILABLE = nacl.bindings.has_crypto_pwhash_scryptsalsa208sha256 + +STRPREFIX = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_STRPREFIX + +SALTBYTES = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_SALTBYTES + +PASSWD_MIN = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN +PASSWD_MAX = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX + +PWHASH_SIZE = _strbytes_plus_one - 1 + +BYTES_MIN = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_BYTES_MIN +BYTES_MAX = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_BYTES_MAX + +MEMLIMIT_MIN = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN +MEMLIMIT_MAX = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX +OPSLIMIT_MIN = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN +OPSLIMIT_MAX = nacl.bindings.crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX + +OPSLIMIT_INTERACTIVE = ( + nacl.bindings.crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE +) +MEMLIMIT_INTERACTIVE = ( + nacl.bindings.crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE +) +OPSLIMIT_SENSITIVE = ( + nacl.bindings.crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE +) +MEMLIMIT_SENSITIVE = ( + nacl.bindings.crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE +) + +OPSLIMIT_MODERATE = 8 * OPSLIMIT_INTERACTIVE +MEMLIMIT_MODERATE = 8 * MEMLIMIT_INTERACTIVE + + +def kdf( + size: int, + password: bytes, + salt: bytes, + opslimit: int = OPSLIMIT_SENSITIVE, + memlimit: int = MEMLIMIT_SENSITIVE, + encoder: nacl.encoding.Encoder = nacl.encoding.RawEncoder, +) -> bytes: + """ + Derive a ``size`` bytes long key from a caller-supplied + ``password`` and ``salt`` pair using the scryptsalsa208sha256 + memory-hard construct. + + + the enclosing module provides the constants + + - :py:const:`.OPSLIMIT_INTERACTIVE` + - :py:const:`.MEMLIMIT_INTERACTIVE` + - :py:const:`.OPSLIMIT_SENSITIVE` + - :py:const:`.MEMLIMIT_SENSITIVE` + - :py:const:`.OPSLIMIT_MODERATE` + - :py:const:`.MEMLIMIT_MODERATE` + + as a guidance for correct settings respectively for the + interactive login and the long term key protecting sensitive data + use cases. + + :param size: derived key size, must be between + :py:const:`.BYTES_MIN` and + :py:const:`.BYTES_MAX` + :type size: int + :param password: password used to seed the key derivation procedure; + it length must be between + :py:const:`.PASSWD_MIN` and + :py:const:`.PASSWD_MAX` + :type password: bytes + :param salt: **RANDOM** salt used in the key derivation procedure; + its length must be exactly :py:const:`.SALTBYTES` + :type salt: bytes + :param opslimit: the time component (operation count) + of the key derivation procedure's computational cost; + it must be between + :py:const:`.OPSLIMIT_MIN` and + :py:const:`.OPSLIMIT_MAX` + :type opslimit: int + :param memlimit: the memory occupation component + of the key derivation procedure's computational cost; + it must be between + :py:const:`.MEMLIMIT_MIN` and + :py:const:`.MEMLIMIT_MAX` + :type memlimit: int + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + + .. versionadded:: 1.2 + """ + ensure( + AVAILABLE, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + len(salt) == SALTBYTES, + "The salt must be exactly %s, not %s bytes long" + % (SALTBYTES, len(salt)), + raising=exc.ValueError, + ) + + n_log2, r, p = nacl.bindings.nacl_bindings_pick_scrypt_params( + opslimit, memlimit + ) + maxmem = memlimit + (2 ** 16) + + return encoder.encode( + nacl.bindings.crypto_pwhash_scryptsalsa208sha256_ll( + password, + salt, + # Cast safety: n_log2 is a positive integer, and so 2 ** n_log2 is also + # a positive integer. Mypy+typeshed can't deduce this, because there's no + # way to for them to know that n_log2: int is positive. + cast(int, 2 ** n_log2), + r, + p, + maxmem=maxmem, + dklen=size, + ) + ) + + +def str( + password: bytes, + opslimit: int = OPSLIMIT_INTERACTIVE, + memlimit: int = MEMLIMIT_INTERACTIVE, +) -> bytes: + """ + Hashes a password with a random salt, using the memory-hard + scryptsalsa208sha256 construct and returning an ascii string + that has all the needed info to check against a future password + + The default settings for opslimit and memlimit are those deemed + correct for the interactive user login case. + + :param bytes password: + :param int opslimit: + :param int memlimit: + :rtype: bytes + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + + .. versionadded:: 1.2 + """ + ensure( + AVAILABLE, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + return nacl.bindings.crypto_pwhash_scryptsalsa208sha256_str( + password, opslimit, memlimit + ) + + +def verify(password_hash: bytes, password: bytes) -> bool: + """ + Takes the output of scryptsalsa208sha256 and compares it against + a user provided password to see if they are the same + + :param password_hash: bytes + :param password: bytes + :rtype: boolean + :raises nacl.exceptions.UnavailableError: If called when using a + minimal build of libsodium. + + .. versionadded:: 1.2 + """ + ensure( + AVAILABLE, + "Not available in minimal build", + raising=exc.UnavailableError, + ) + + ensure( + len(password_hash) == PWHASH_SIZE, + "The password hash must be exactly %s bytes long" + % nacl.bindings.crypto_pwhash_scryptsalsa208sha256_STRBYTES, + raising=exc.ValueError, + ) + + return nacl.bindings.crypto_pwhash_scryptsalsa208sha256_str_verify( + password_hash, password + ) diff --git a/venv/lib/python3.11/site-packages/nacl/py.typed b/venv/lib/python3.11/site-packages/nacl/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/nacl/secret.py b/venv/lib/python3.11/site-packages/nacl/secret.py new file mode 100644 index 0000000..ba536a2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/secret.py @@ -0,0 +1,305 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. +from typing import ClassVar, Optional + +import nacl.bindings +from nacl import encoding +from nacl import exceptions as exc +from nacl.utils import EncryptedMessage, StringFixer, random + + +class SecretBox(encoding.Encodable, StringFixer): + """ + The SecretBox class encrypts and decrypts messages using the given secret + key. + + The ciphertexts generated by :class:`~nacl.secret.Secretbox` include a 16 + byte authenticator which is checked as part of the decryption. An invalid + authenticator will cause the decrypt function to raise an exception. The + authenticator is not a signature. Once you've decrypted the message you've + demonstrated the ability to create arbitrary valid message, so messages you + send are repudiable. For non-repudiable messages, sign them after + encryption. + + Encryption is done using `XSalsa20-Poly1305`_, and there are no practical + limits on the number or size of messages (up to 2⁶⁴ messages, each up to 2⁶⁴ + bytes). + + .. _XSalsa20-Poly1305: https://doc.libsodium.org/secret-key_cryptography/secretbox#algorithm-details + + :param key: The secret key used to encrypt and decrypt messages + :param encoder: The encoder class used to decode the given key + + :cvar KEY_SIZE: The size that the key is required to be. + :cvar NONCE_SIZE: The size that the nonce is required to be. + :cvar MACBYTES: The size of the authentication MAC tag in bytes. + :cvar MESSAGEBYTES_MAX: The maximum size of a message which can be + safely encrypted with a single key/nonce + pair. + """ + + KEY_SIZE: ClassVar[int] = nacl.bindings.crypto_secretbox_KEYBYTES + NONCE_SIZE: ClassVar[int] = nacl.bindings.crypto_secretbox_NONCEBYTES + MACBYTES: ClassVar[int] = nacl.bindings.crypto_secretbox_MACBYTES + MESSAGEBYTES_MAX: ClassVar[ + int + ] = nacl.bindings.crypto_secretbox_MESSAGEBYTES_MAX + + def __init__( + self, key: bytes, encoder: encoding.Encoder = encoding.RawEncoder + ): + key = encoder.decode(key) + if not isinstance(key, bytes): + raise exc.TypeError("SecretBox must be created from 32 bytes") + + if len(key) != self.KEY_SIZE: + raise exc.ValueError( + "The key must be exactly %s bytes long" % self.KEY_SIZE, + ) + + self._key = key + + def __bytes__(self) -> bytes: + return self._key + + def encrypt( + self, + plaintext: bytes, + nonce: Optional[bytes] = None, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> EncryptedMessage: + """ + Encrypts the plaintext message using the given `nonce` (or generates + one randomly if omitted) and returns the ciphertext encoded with the + encoder. + + .. warning:: It is **VITALLY** important that the nonce is a nonce, + i.e. it is a number used only once for any given key. If you fail + to do this, you compromise the privacy of the messages encrypted. + Give your nonces a different prefix, or have one side use an odd + counter and one an even counter. Just make sure they are different. + + :param plaintext: [:class:`bytes`] The plaintext message to encrypt + :param nonce: [:class:`bytes`] The nonce to use in the encryption + :param encoder: The encoder to use to encode the ciphertext + :rtype: [:class:`nacl.utils.EncryptedMessage`] + """ + if nonce is None: + nonce = random(self.NONCE_SIZE) + + if len(nonce) != self.NONCE_SIZE: + raise exc.ValueError( + "The nonce must be exactly %s bytes long" % self.NONCE_SIZE, + ) + + ciphertext = nacl.bindings.crypto_secretbox( + plaintext, nonce, self._key + ) + + encoded_nonce = encoder.encode(nonce) + encoded_ciphertext = encoder.encode(ciphertext) + + return EncryptedMessage._from_parts( + encoded_nonce, + encoded_ciphertext, + encoder.encode(nonce + ciphertext), + ) + + def decrypt( + self, + ciphertext: bytes, + nonce: Optional[bytes] = None, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> bytes: + """ + Decrypts the ciphertext using the `nonce` (explicitly, when passed as a + parameter or implicitly, when omitted, as part of the ciphertext) and + returns the plaintext message. + + :param ciphertext: [:class:`bytes`] The encrypted message to decrypt + :param nonce: [:class:`bytes`] The nonce used when encrypting the + ciphertext + :param encoder: The encoder used to decode the ciphertext. + :rtype: [:class:`bytes`] + """ + # Decode our ciphertext + ciphertext = encoder.decode(ciphertext) + + if nonce is None: + # If we were given the nonce and ciphertext combined, split them. + nonce = ciphertext[: self.NONCE_SIZE] + ciphertext = ciphertext[self.NONCE_SIZE :] + + if len(nonce) != self.NONCE_SIZE: + raise exc.ValueError( + "The nonce must be exactly %s bytes long" % self.NONCE_SIZE, + ) + + plaintext = nacl.bindings.crypto_secretbox_open( + ciphertext, nonce, self._key + ) + + return plaintext + + +class Aead(encoding.Encodable, StringFixer): + """ + The AEAD class encrypts and decrypts messages using the given secret key. + + Unlike :class:`~nacl.secret.SecretBox`, AEAD supports authenticating + non-confidential data received alongside the message, such as a length + or type tag. + + Like :class:`~nacl.secret.Secretbox`, this class provides authenticated + encryption. An inauthentic message will cause the decrypt function to raise + an exception. + + Likewise, the authenticator should not be mistaken for a (public-key) + signature: recipients (with the ability to decrypt messages) are capable of + creating arbitrary valid message; in particular, this means AEAD messages + are repudiable. For non-repudiable messages, sign them after encryption. + + The cryptosystem used is `XChacha20-Poly1305`_ as specified for + `standardization`_. There are `no practical limits`_ to how much can safely + be encrypted under a given key (up to 2⁶⁴ messages each containing up + to 2⁶⁴ bytes). + + .. _standardization: https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha + .. _XChacha20-Poly1305: https://doc.libsodium.org/secret-key_cryptography/aead#xchacha-20-poly1305 + .. _no practical limits: https://doc.libsodium.org/secret-key_cryptography/aead#limitations + + :param key: The secret key used to encrypt and decrypt messages + :param encoder: The encoder class used to decode the given key + + :cvar KEY_SIZE: The size that the key is required to be. + :cvar NONCE_SIZE: The size that the nonce is required to be. + :cvar MACBYTES: The size of the authentication MAC tag in bytes. + :cvar MESSAGEBYTES_MAX: The maximum size of a message which can be + safely encrypted with a single key/nonce + pair. + """ + + KEY_SIZE = nacl.bindings.crypto_aead_xchacha20poly1305_ietf_KEYBYTES + NONCE_SIZE = nacl.bindings.crypto_aead_xchacha20poly1305_ietf_NPUBBYTES + MACBYTES = nacl.bindings.crypto_aead_xchacha20poly1305_ietf_ABYTES + MESSAGEBYTES_MAX = ( + nacl.bindings.crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX + ) + + def __init__( + self, + key: bytes, + encoder: encoding.Encoder = encoding.RawEncoder, + ): + key = encoder.decode(key) + if not isinstance(key, bytes): + raise exc.TypeError("AEAD must be created from 32 bytes") + + if len(key) != self.KEY_SIZE: + raise exc.ValueError( + "The key must be exactly %s bytes long" % self.KEY_SIZE, + ) + + self._key = key + + def __bytes__(self) -> bytes: + return self._key + + def encrypt( + self, + plaintext: bytes, + aad: bytes = b"", + nonce: Optional[bytes] = None, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> EncryptedMessage: + """ + Encrypts the plaintext message using the given `nonce` (or generates + one randomly if omitted) and returns the ciphertext encoded with the + encoder. + + .. warning:: It is vitally important for :param nonce: to be unique. + By default, it is generated randomly; [:class:`Aead`] uses XChacha20 + for extended (192b) nonce size, so the risk of reusing random nonces + is negligible. It is *strongly recommended* to keep this behaviour, + as nonce reuse will compromise the privacy of encrypted messages. + Should implicit nonces be inadequate for your application, the + second best option is using split counters; e.g. if sending messages + encrypted under a shared key between 2 users, each user can use the + number of messages it sent so far, prefixed or suffixed with a 1bit + user id. Note that the counter must **never** be rolled back (due + to overflow, on-disk state being rolled back to an earlier backup, + ...) + + :param plaintext: [:class:`bytes`] The plaintext message to encrypt + :param nonce: [:class:`bytes`] The nonce to use in the encryption + :param encoder: The encoder to use to encode the ciphertext + :rtype: [:class:`nacl.utils.EncryptedMessage`] + """ + if nonce is None: + nonce = random(self.NONCE_SIZE) + + if len(nonce) != self.NONCE_SIZE: + raise exc.ValueError( + "The nonce must be exactly %s bytes long" % self.NONCE_SIZE, + ) + + ciphertext = nacl.bindings.crypto_aead_xchacha20poly1305_ietf_encrypt( + plaintext, aad, nonce, self._key + ) + + encoded_nonce = encoder.encode(nonce) + encoded_ciphertext = encoder.encode(ciphertext) + + return EncryptedMessage._from_parts( + encoded_nonce, + encoded_ciphertext, + encoder.encode(nonce + ciphertext), + ) + + def decrypt( + self, + ciphertext: bytes, + aad: bytes = b"", + nonce: Optional[bytes] = None, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> bytes: + """ + Decrypts the ciphertext using the `nonce` (explicitly, when passed as a + parameter or implicitly, when omitted, as part of the ciphertext) and + returns the plaintext message. + + :param ciphertext: [:class:`bytes`] The encrypted message to decrypt + :param nonce: [:class:`bytes`] The nonce used when encrypting the + ciphertext + :param encoder: The encoder used to decode the ciphertext. + :rtype: [:class:`bytes`] + """ + # Decode our ciphertext + ciphertext = encoder.decode(ciphertext) + + if nonce is None: + # If we were given the nonce and ciphertext combined, split them. + nonce = ciphertext[: self.NONCE_SIZE] + ciphertext = ciphertext[self.NONCE_SIZE :] + + if len(nonce) != self.NONCE_SIZE: + raise exc.ValueError( + "The nonce must be exactly %s bytes long" % self.NONCE_SIZE, + ) + + plaintext = nacl.bindings.crypto_aead_xchacha20poly1305_ietf_decrypt( + ciphertext, aad, nonce, self._key + ) + + return plaintext diff --git a/venv/lib/python3.11/site-packages/nacl/signing.py b/venv/lib/python3.11/site-packages/nacl/signing.py new file mode 100644 index 0000000..12ec8ec --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/signing.py @@ -0,0 +1,250 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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. +from typing import Optional + +import nacl.bindings +from nacl import encoding +from nacl import exceptions as exc +from nacl.public import ( + PrivateKey as _Curve25519_PrivateKey, + PublicKey as _Curve25519_PublicKey, +) +from nacl.utils import StringFixer, random + + +class SignedMessage(bytes): + """ + A bytes subclass that holds a messaged that has been signed by a + :class:`SigningKey`. + """ + + _signature: bytes + _message: bytes + + @classmethod + def _from_parts( + cls, signature: bytes, message: bytes, combined: bytes + ) -> "SignedMessage": + obj = cls(combined) + obj._signature = signature + obj._message = message + return obj + + @property + def signature(self) -> bytes: + """ + The signature contained within the :class:`SignedMessage`. + """ + return self._signature + + @property + def message(self) -> bytes: + """ + The message contained within the :class:`SignedMessage`. + """ + return self._message + + +class VerifyKey(encoding.Encodable, StringFixer): + """ + The public key counterpart to an Ed25519 SigningKey for producing digital + signatures. + + :param key: [:class:`bytes`] Serialized Ed25519 public key + :param encoder: A class that is able to decode the `key` + """ + + def __init__( + self, key: bytes, encoder: encoding.Encoder = encoding.RawEncoder + ): + # Decode the key + key = encoder.decode(key) + if not isinstance(key, bytes): + raise exc.TypeError("VerifyKey must be created from 32 bytes") + + if len(key) != nacl.bindings.crypto_sign_PUBLICKEYBYTES: + raise exc.ValueError( + "The key must be exactly %s bytes long" + % nacl.bindings.crypto_sign_PUBLICKEYBYTES, + ) + + self._key = key + + def __bytes__(self) -> bytes: + return self._key + + def __hash__(self) -> int: + return hash(bytes(self)) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, self.__class__): + return False + return nacl.bindings.sodium_memcmp(bytes(self), bytes(other)) + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def verify( + self, + smessage: bytes, + signature: Optional[bytes] = None, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> bytes: + """ + Verifies the signature of a signed message, returning the message + if it has not been tampered with else raising + :class:`~nacl.signing.BadSignatureError`. + + :param smessage: [:class:`bytes`] Either the original messaged or a + signature and message concated together. + :param signature: [:class:`bytes`] If an unsigned message is given for + smessage then the detached signature must be provided. + :param encoder: A class that is able to decode the secret message and + signature. + :rtype: :class:`bytes` + """ + if signature is not None: + # If we were given the message and signature separately, validate + # signature size and combine them. + if not isinstance(signature, bytes): + raise exc.TypeError( + "Verification signature must be created from %d bytes" + % nacl.bindings.crypto_sign_BYTES, + ) + + if len(signature) != nacl.bindings.crypto_sign_BYTES: + raise exc.ValueError( + "The signature must be exactly %d bytes long" + % nacl.bindings.crypto_sign_BYTES, + ) + + smessage = signature + encoder.decode(smessage) + else: + # Decode the signed message + smessage = encoder.decode(smessage) + + return nacl.bindings.crypto_sign_open(smessage, self._key) + + def to_curve25519_public_key(self) -> _Curve25519_PublicKey: + """ + Converts a :class:`~nacl.signing.VerifyKey` to a + :class:`~nacl.public.PublicKey` + + :rtype: :class:`~nacl.public.PublicKey` + """ + raw_pk = nacl.bindings.crypto_sign_ed25519_pk_to_curve25519(self._key) + return _Curve25519_PublicKey(raw_pk) + + +class SigningKey(encoding.Encodable, StringFixer): + """ + Private key for producing digital signatures using the Ed25519 algorithm. + + Signing keys are produced from a 32-byte (256-bit) random seed value. This + value can be passed into the :class:`~nacl.signing.SigningKey` as a + :func:`bytes` whose length is 32. + + .. warning:: This **must** be protected and remain secret. Anyone who knows + the value of your :class:`~nacl.signing.SigningKey` or it's seed can + masquerade as you. + + :param seed: [:class:`bytes`] Random 32-byte value (i.e. private key) + :param encoder: A class that is able to decode the seed + + :ivar: verify_key: [:class:`~nacl.signing.VerifyKey`] The verify + (i.e. public) key that corresponds with this signing key. + """ + + def __init__( + self, + seed: bytes, + encoder: encoding.Encoder = encoding.RawEncoder, + ): + # Decode the seed + seed = encoder.decode(seed) + if not isinstance(seed, bytes): + raise exc.TypeError( + "SigningKey must be created from a 32 byte seed" + ) + + # Verify that our seed is the proper size + if len(seed) != nacl.bindings.crypto_sign_SEEDBYTES: + raise exc.ValueError( + "The seed must be exactly %d bytes long" + % nacl.bindings.crypto_sign_SEEDBYTES + ) + + public_key, secret_key = nacl.bindings.crypto_sign_seed_keypair(seed) + + self._seed = seed + self._signing_key = secret_key + self.verify_key = VerifyKey(public_key) + + def __bytes__(self) -> bytes: + return self._seed + + def __hash__(self) -> int: + return hash(bytes(self)) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, self.__class__): + return False + return nacl.bindings.sodium_memcmp(bytes(self), bytes(other)) + + def __ne__(self, other: object) -> bool: + return not (self == other) + + @classmethod + def generate(cls) -> "SigningKey": + """ + Generates a random :class:`~nacl.signing.SigningKey` object. + + :rtype: :class:`~nacl.signing.SigningKey` + """ + return cls( + random(nacl.bindings.crypto_sign_SEEDBYTES), + encoder=encoding.RawEncoder, + ) + + def sign( + self, + message: bytes, + encoder: encoding.Encoder = encoding.RawEncoder, + ) -> SignedMessage: + """ + Sign a message using this key. + + :param message: [:class:`bytes`] The data to be signed. + :param encoder: A class that is used to encode the signed message. + :rtype: :class:`~nacl.signing.SignedMessage` + """ + raw_signed = nacl.bindings.crypto_sign(message, self._signing_key) + + crypto_sign_BYTES = nacl.bindings.crypto_sign_BYTES + signature = encoder.encode(raw_signed[:crypto_sign_BYTES]) + message = encoder.encode(raw_signed[crypto_sign_BYTES:]) + signed = encoder.encode(raw_signed) + + return SignedMessage._from_parts(signature, message, signed) + + def to_curve25519_private_key(self) -> _Curve25519_PrivateKey: + """ + Converts a :class:`~nacl.signing.SigningKey` to a + :class:`~nacl.public.PrivateKey` + + :rtype: :class:`~nacl.public.PrivateKey` + """ + sk = self._signing_key + raw_private = nacl.bindings.crypto_sign_ed25519_sk_to_curve25519(sk) + return _Curve25519_PrivateKey(raw_private) diff --git a/venv/lib/python3.11/site-packages/nacl/utils.py b/venv/lib/python3.11/site-packages/nacl/utils.py new file mode 100644 index 0000000..d19d236 --- /dev/null +++ b/venv/lib/python3.11/site-packages/nacl/utils.py @@ -0,0 +1,88 @@ +# Copyright 2013 Donald Stufft and individual contributors +# +# 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 os +from typing import SupportsBytes, Type, TypeVar + +import nacl.bindings +from nacl import encoding + +_EncryptedMessage = TypeVar("_EncryptedMessage", bound="EncryptedMessage") + + +class EncryptedMessage(bytes): + """ + A bytes subclass that holds a messaged that has been encrypted by a + :class:`SecretBox`. + """ + + _nonce: bytes + _ciphertext: bytes + + @classmethod + def _from_parts( + cls: Type[_EncryptedMessage], + nonce: bytes, + ciphertext: bytes, + combined: bytes, + ) -> _EncryptedMessage: + obj = cls(combined) + obj._nonce = nonce + obj._ciphertext = ciphertext + return obj + + @property + def nonce(self) -> bytes: + """ + The nonce used during the encryption of the :class:`EncryptedMessage`. + """ + return self._nonce + + @property + def ciphertext(self) -> bytes: + """ + The ciphertext contained within the :class:`EncryptedMessage`. + """ + return self._ciphertext + + +class StringFixer: + def __str__(self: SupportsBytes) -> str: + return str(self.__bytes__()) + + +def bytes_as_string(bytes_in: bytes) -> str: + return bytes_in.decode("ascii") + + +def random(size: int = 32) -> bytes: + return os.urandom(size) + + +def randombytes_deterministic( + size: int, seed: bytes, encoder: encoding.Encoder = encoding.RawEncoder +) -> bytes: + """ + Returns ``size`` number of deterministically generated pseudorandom bytes + from a seed + + :param size: int + :param seed: bytes + :param encoder: The encoder class used to encode the produced bytes + :rtype: bytes + """ + raw_data = nacl.bindings.randombytes_buf_deterministic(size, seed) + + return encoder.encode(raw_data) diff --git a/venv/lib/python3.11/site-packages/paho/__init__.py b/venv/lib/python3.11/site-packages/paho/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/paho/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/paho/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..727206f4a517c1496ff027557543b7dafdf98230 GIT binary patch literal 188 zcmZ3^%ge<81i$PG6G8N25CH>>P{wCAAY(d13PUi1CZpdQGQlxa!Ij%er{QOQetv;X@P!OYF?RsPG*vRL1jrsex9+Op`m_pW=X1U0Z=|M zJ+)ZBATc9fKR!M)FS8^*Uaz3?7l%!5eoARhs$CH)(0q^!iur-W2WCb_#t#fIqKFwN F1^{RCFK7S& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/__init__.py b/venv/lib/python3.11/site-packages/paho/mqtt/__init__.py new file mode 100644 index 0000000..0d349fc --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho/mqtt/__init__.py @@ -0,0 +1,5 @@ +__version__ = "1.6.1" + + +class MQTTException(Exception): + pass diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..276d5cb0f97d18eed670ba5e4b7936533292a5fa GIT binary patch literal 460 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

    a^ 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�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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/matcher.cpython-311.pyc b/venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/matcher.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a08daec5908f10c3c31c00a9fc966eded06cc7fc GIT binary patch literal 4655 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 Mr_%PY%dpLLnI^;pc^11 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 XEIqHIVUF{|X!#c;<+nSelbQIx>$(Y6 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/publish.cpython-311.pyc b/venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/publish.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..700e0a3726ac4b841285c0038b2fc50a6e49eaf4 GIT binary patch literal 10573 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 JpK6(^{u||@^_~C# literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/subscribeoptions.cpython-311.pyc b/venv/lib/python3.11/site-packages/paho/mqtt/__pycache__/subscribeoptions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a1b517d924ff40a86ef3d76bbd88ee3da222cfe GIT binary patch literal 6385 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 3: + # define some alias for python2 compatibility + unicode = str + basestring = str + +# Message types +CONNECT = 0x10 +CONNACK = 0x20 +PUBLISH = 0x30 +PUBACK = 0x40 +PUBREC = 0x50 +PUBREL = 0x60 +PUBCOMP = 0x70 +SUBSCRIBE = 0x80 +SUBACK = 0x90 +UNSUBSCRIBE = 0xA0 +UNSUBACK = 0xB0 +PINGREQ = 0xC0 +PINGRESP = 0xD0 +DISCONNECT = 0xE0 +AUTH = 0xF0 + +# Log levels +MQTT_LOG_INFO = 0x01 +MQTT_LOG_NOTICE = 0x02 +MQTT_LOG_WARNING = 0x04 +MQTT_LOG_ERR = 0x08 +MQTT_LOG_DEBUG = 0x10 +LOGGING_LEVEL = { + MQTT_LOG_DEBUG: logging.DEBUG, + MQTT_LOG_INFO: logging.INFO, + MQTT_LOG_NOTICE: logging.INFO, # This has no direct equivalent level + MQTT_LOG_WARNING: logging.WARNING, + MQTT_LOG_ERR: logging.ERROR, +} + +# CONNACK codes +CONNACK_ACCEPTED = 0 +CONNACK_REFUSED_PROTOCOL_VERSION = 1 +CONNACK_REFUSED_IDENTIFIER_REJECTED = 2 +CONNACK_REFUSED_SERVER_UNAVAILABLE = 3 +CONNACK_REFUSED_BAD_USERNAME_PASSWORD = 4 +CONNACK_REFUSED_NOT_AUTHORIZED = 5 + +# Connection state +mqtt_cs_new = 0 +mqtt_cs_connected = 1 +mqtt_cs_disconnecting = 2 +mqtt_cs_connect_async = 3 + +# Message state +mqtt_ms_invalid = 0 +mqtt_ms_publish = 1 +mqtt_ms_wait_for_puback = 2 +mqtt_ms_wait_for_pubrec = 3 +mqtt_ms_resend_pubrel = 4 +mqtt_ms_wait_for_pubrel = 5 +mqtt_ms_resend_pubcomp = 6 +mqtt_ms_wait_for_pubcomp = 7 +mqtt_ms_send_pubrec = 8 +mqtt_ms_queued = 9 + +# Error values +MQTT_ERR_AGAIN = -1 +MQTT_ERR_SUCCESS = 0 +MQTT_ERR_NOMEM = 1 +MQTT_ERR_PROTOCOL = 2 +MQTT_ERR_INVAL = 3 +MQTT_ERR_NO_CONN = 4 +MQTT_ERR_CONN_REFUSED = 5 +MQTT_ERR_NOT_FOUND = 6 +MQTT_ERR_CONN_LOST = 7 +MQTT_ERR_TLS = 8 +MQTT_ERR_PAYLOAD_SIZE = 9 +MQTT_ERR_NOT_SUPPORTED = 10 +MQTT_ERR_AUTH = 11 +MQTT_ERR_ACL_DENIED = 12 +MQTT_ERR_UNKNOWN = 13 +MQTT_ERR_ERRNO = 14 +MQTT_ERR_QUEUE_SIZE = 15 +MQTT_ERR_KEEPALIVE = 16 + +MQTT_CLIENT = 0 +MQTT_BRIDGE = 1 + +# For MQTT V5, use the clean start flag only on the first successful connect +MQTT_CLEAN_START_FIRST_ONLY = 3 + +sockpair_data = b"0" + + +class WebsocketConnectionError(ValueError): + pass + + +def error_string(mqtt_errno): + """Return the error string associated with an mqtt error number.""" + if mqtt_errno == MQTT_ERR_SUCCESS: + return "No error." + elif mqtt_errno == MQTT_ERR_NOMEM: + return "Out of memory." + elif mqtt_errno == MQTT_ERR_PROTOCOL: + return "A network protocol error occurred when communicating with the broker." + elif mqtt_errno == MQTT_ERR_INVAL: + return "Invalid function arguments provided." + elif mqtt_errno == MQTT_ERR_NO_CONN: + return "The client is not currently connected." + elif mqtt_errno == MQTT_ERR_CONN_REFUSED: + return "The connection was refused." + elif mqtt_errno == MQTT_ERR_NOT_FOUND: + return "Message not found (internal error)." + elif mqtt_errno == MQTT_ERR_CONN_LOST: + return "The connection was lost." + elif mqtt_errno == MQTT_ERR_TLS: + return "A TLS error occurred." + elif mqtt_errno == MQTT_ERR_PAYLOAD_SIZE: + return "Payload too large." + elif mqtt_errno == MQTT_ERR_NOT_SUPPORTED: + return "This feature is not supported." + elif mqtt_errno == MQTT_ERR_AUTH: + return "Authorisation failed." + elif mqtt_errno == MQTT_ERR_ACL_DENIED: + return "Access denied by ACL." + elif mqtt_errno == MQTT_ERR_UNKNOWN: + return "Unknown error." + elif mqtt_errno == MQTT_ERR_ERRNO: + return "Error defined by errno." + elif mqtt_errno == MQTT_ERR_QUEUE_SIZE: + return "Message queue full." + elif mqtt_errno == MQTT_ERR_KEEPALIVE: + return "Client or broker did not communicate in the keepalive interval." + else: + return "Unknown error." + + +def connack_string(connack_code): + """Return the string associated with a CONNACK result.""" + if connack_code == CONNACK_ACCEPTED: + return "Connection Accepted." + elif connack_code == CONNACK_REFUSED_PROTOCOL_VERSION: + return "Connection Refused: unacceptable protocol version." + elif connack_code == CONNACK_REFUSED_IDENTIFIER_REJECTED: + return "Connection Refused: identifier rejected." + elif connack_code == CONNACK_REFUSED_SERVER_UNAVAILABLE: + return "Connection Refused: broker unavailable." + elif connack_code == CONNACK_REFUSED_BAD_USERNAME_PASSWORD: + return "Connection Refused: bad user name or password." + elif connack_code == CONNACK_REFUSED_NOT_AUTHORIZED: + return "Connection Refused: not authorised." + else: + return "Connection Refused: unknown reason." + + +def base62(num, base=string.digits + string.ascii_letters, padding=1): + """Convert a number to base-62 representation.""" + assert num >= 0 + digits = [] + while num: + num, rest = divmod(num, 62) + digits.append(base[rest]) + digits.extend(base[0] for _ in range(len(digits), padding)) + return ''.join(reversed(digits)) + + +def topic_matches_sub(sub, topic): + """Check whether a topic matches a subscription. + + For example: + + foo/bar would match the subscription foo/# or +/bar + non/matching would not match the subscription non/+/+ + """ + matcher = MQTTMatcher() + matcher[sub] = True + try: + next(matcher.iter_match(topic)) + return True + except StopIteration: + return False + + +def _socketpair_compat(): + """TCP/IP socketpair including Windows support""" + listensock = socket.socket( + socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_IP) + listensock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + listensock.bind(("127.0.0.1", 0)) + listensock.listen(1) + + iface, port = listensock.getsockname() + sock1 = socket.socket( + socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_IP) + sock1.setblocking(0) + try: + sock1.connect(("127.0.0.1", port)) + except BlockingIOError: + pass + sock2, address = listensock.accept() + sock2.setblocking(0) + listensock.close() + return (sock1, sock2) + + +class MQTTMessageInfo(object): + """This is a class returned from Client.publish() and can be used to find + out the mid of the message that was published, and to determine whether the + message has been published, and/or wait until it is published. + """ + + __slots__ = 'mid', '_published', '_condition', 'rc', '_iterpos' + + def __init__(self, mid): + self.mid = mid + self._published = False + self._condition = threading.Condition() + self.rc = 0 + self._iterpos = 0 + + def __str__(self): + return str((self.rc, self.mid)) + + def __iter__(self): + self._iterpos = 0 + return self + + def __next__(self): + return self.next() + + def next(self): + if self._iterpos == 0: + self._iterpos = 1 + return self.rc + elif self._iterpos == 1: + self._iterpos = 2 + return self.mid + else: + raise StopIteration + + def __getitem__(self, index): + if index == 0: + return self.rc + elif index == 1: + return self.mid + else: + raise IndexError("index out of range") + + def _set_as_published(self): + with self._condition: + self._published = True + self._condition.notify() + + def wait_for_publish(self, timeout=None): + """Block until the message associated with this object is published, or + until the timeout occurs. If timeout is None, this will never time out. + Set timeout to a positive number of seconds, e.g. 1.2, to enable the + timeout. + + Raises ValueError if the message was not queued due to the outgoing + queue being full. + + Raises RuntimeError if the message was not published for another + reason. + """ + if self.rc == MQTT_ERR_QUEUE_SIZE: + raise ValueError('Message is not queued due to ERR_QUEUE_SIZE') + elif self.rc == MQTT_ERR_AGAIN: + pass + elif self.rc > 0: + raise RuntimeError('Message publish failed: %s' % (error_string(self.rc))) + + timeout_time = None if timeout is None else time.time() + timeout + timeout_tenth = None if timeout is None else timeout / 10. + def timed_out(): + return False if timeout is None else time.time() > timeout_time + + with self._condition: + while not self._published and not timed_out(): + self._condition.wait(timeout_tenth) + + def is_published(self): + """Returns True if the message associated with this object has been + published, else returns False.""" + if self.rc == MQTT_ERR_QUEUE_SIZE: + raise ValueError('Message is not queued due to ERR_QUEUE_SIZE') + elif self.rc == MQTT_ERR_AGAIN: + pass + elif self.rc > 0: + raise RuntimeError('Message publish failed: %s' % (error_string(self.rc))) + + with self._condition: + return self._published + + +class MQTTMessage(object): + """ This is a class that describes an incoming or outgoing message. It is + passed to the on_message callback as the message parameter. + + Members: + + topic : String. topic that the message was published on. + payload : Bytes/Byte array. the message payload. + qos : Integer. The message Quality of Service 0, 1 or 2. + retain : Boolean. If true, the message is a retained message and not fresh. + mid : Integer. The message id. + properties: Properties class. In MQTT v5.0, the properties associated with the message. + """ + + __slots__ = 'timestamp', 'state', 'dup', 'mid', '_topic', 'payload', 'qos', 'retain', 'info', 'properties' + + def __init__(self, mid=0, topic=b""): + self.timestamp = 0 + self.state = mqtt_ms_invalid + self.dup = False + self.mid = mid + self._topic = topic + self.payload = b"" + self.qos = 0 + self.retain = False + self.info = MQTTMessageInfo(mid) + + def __eq__(self, other): + """Override the default Equals behavior""" + if isinstance(other, self.__class__): + return self.mid == other.mid + return False + + def __ne__(self, other): + """Define a non-equality test""" + return not self.__eq__(other) + + @property + def topic(self): + return self._topic.decode('utf-8') + + @topic.setter + def topic(self, value): + self._topic = value + + +class Client(object): + """MQTT version 3.1/3.1.1/5.0 client class. + + This is the main class for use communicating with an MQTT broker. + + General usage flow: + + * Use connect()/connect_async() to connect to a broker + * Call loop() frequently to maintain network traffic flow with the broker + * Or use loop_start() to set a thread running to call loop() for you. + * Or use loop_forever() to handle calling loop() for you in a blocking + * function. + * Use subscribe() to subscribe to a topic and receive messages + * Use publish() to send messages + * Use disconnect() to disconnect from the broker + + Data returned from the broker is made available with the use of callback + functions as described below. + + Callbacks + ========= + + A number of callback functions are available to receive data back from the + broker. To use a callback, define a function and then assign it to the + client: + + def on_connect(client, userdata, flags, rc): + print("Connection returned " + str(rc)) + + client.on_connect = on_connect + + Callbacks can also be attached using decorators: + + client = paho.mqtt.Client() + + @client.connect_callback() + def on_connect(client, userdata, flags, rc): + print("Connection returned " + str(rc)) + + + **IMPORTANT** the required function signature for a callback can differ + depending on whether you are using MQTT v5 or MQTT v3.1.1/v3.1. See the + documentation for each callback. + + All of the callbacks as described below have a "client" and an "userdata" + argument. "client" is the Client instance that is calling the callback. + "userdata" is user data of any type and can be set when creating a new client + instance or with user_data_set(userdata). + + If you wish to suppress exceptions within a callback, you should set + `client.suppress_exceptions = True` + + The callbacks are listed below, documentation for each of them can be found + at the same function name: + + on_connect, on_connect_fail, on_disconnect, on_message, on_publish, + on_subscribe, on_unsubscribe, on_log, on_socket_open, on_socket_close, + on_socket_register_write, on_socket_unregister_write + """ + + def __init__(self, client_id="", clean_session=None, userdata=None, + protocol=MQTTv311, transport="tcp", reconnect_on_failure=True): + """client_id is the unique client id string used when connecting to the + broker. If client_id is zero length or None, then the behaviour is + defined by which protocol version is in use. If using MQTT v3.1.1, then + a zero length client id will be sent to the broker and the broker will + generate a random for the client. If using MQTT v3.1 then an id will be + randomly generated. In both cases, clean_session must be True. If this + is not the case a ValueError will be raised. + + clean_session is a boolean that determines the client type. If True, + the broker will remove all information about this client when it + disconnects. If False, the client is a persistent client and + subscription information and queued messages will be retained when the + client disconnects. + Note that a client will never discard its own outgoing messages on + disconnect. Calling connect() or reconnect() will cause the messages to + be resent. Use reinitialise() to reset a client to its original state. + The clean_session argument only applies to MQTT versions v3.1.1 and v3.1. + It is not accepted if the MQTT version is v5.0 - use the clean_start + argument on connect() instead. + + userdata is user defined data of any type that is passed as the "userdata" + parameter to callbacks. It may be updated at a later point with the + user_data_set() function. + + The protocol argument allows explicit setting of the MQTT version to + use for this client. Can be paho.mqtt.client.MQTTv311 (v3.1.1), + paho.mqtt.client.MQTTv31 (v3.1) or paho.mqtt.client.MQTTv5 (v5.0), + with the default being v3.1.1. + + Set transport to "websockets" to use WebSockets as the transport + mechanism. Set to "tcp" to use raw TCP, which is the default. + """ + + if transport.lower() not in ('websockets', 'tcp'): + raise ValueError( + 'transport must be "websockets" or "tcp", not %s' % transport) + self._transport = transport.lower() + self._protocol = protocol + self._userdata = userdata + self._sock = None + self._sockpairR, self._sockpairW = (None, None,) + self._keepalive = 60 + self._connect_timeout = 5.0 + self._client_mode = MQTT_CLIENT + + if protocol == MQTTv5: + if clean_session is not None: + raise ValueError('Clean session is not used for MQTT 5.0') + else: + if clean_session is None: + clean_session = True + if not clean_session and (client_id == "" or client_id is None): + raise ValueError( + 'A client id must be provided if clean session is False.') + self._clean_session = clean_session + + # [MQTT-3.1.3-4] Client Id must be UTF-8 encoded string. + if client_id == "" or client_id is None: + if protocol == MQTTv31: + self._client_id = base62(uuid.uuid4().int, padding=22) + else: + self._client_id = b"" + else: + self._client_id = client_id + if isinstance(self._client_id, unicode): + self._client_id = self._client_id.encode('utf-8') + + self._username = None + self._password = None + self._in_packet = { + "command": 0, + "have_remaining": 0, + "remaining_count": [], + "remaining_mult": 1, + "remaining_length": 0, + "packet": bytearray(b""), + "to_process": 0, + "pos": 0} + self._out_packet = collections.deque() + self._last_msg_in = time_func() + self._last_msg_out = time_func() + self._reconnect_min_delay = 1 + self._reconnect_max_delay = 120 + self._reconnect_delay = None + self._reconnect_on_failure = reconnect_on_failure + self._ping_t = 0 + self._last_mid = 0 + self._state = mqtt_cs_new + self._out_messages = collections.OrderedDict() + self._in_messages = collections.OrderedDict() + self._max_inflight_messages = 20 + self._inflight_messages = 0 + self._max_queued_messages = 0 + self._connect_properties = None + self._will_properties = None + self._will = False + self._will_topic = b"" + self._will_payload = b"" + self._will_qos = 0 + self._will_retain = False + self._on_message_filtered = MQTTMatcher() + self._host = "" + self._port = 1883 + self._bind_address = "" + self._bind_port = 0 + self._proxy = {} + self._in_callback_mutex = threading.Lock() + self._callback_mutex = threading.RLock() + self._msgtime_mutex = threading.Lock() + self._out_message_mutex = threading.RLock() + self._in_message_mutex = threading.Lock() + self._reconnect_delay_mutex = threading.Lock() + self._mid_generate_mutex = threading.Lock() + self._thread = None + self._thread_terminate = False + self._ssl = False + self._ssl_context = None + # Only used when SSL context does not have check_hostname attribute + self._tls_insecure = False + self._logger = None + self._registered_write = False + # No default callbacks + self._on_log = None + self._on_connect = None + self._on_connect_fail = None + self._on_subscribe = None + self._on_message = None + self._on_publish = None + self._on_unsubscribe = None + self._on_disconnect = None + self._on_socket_open = None + self._on_socket_close = None + self._on_socket_register_write = None + self._on_socket_unregister_write = None + self._websocket_path = "/mqtt" + self._websocket_extra_headers = None + # for clean_start == MQTT_CLEAN_START_FIRST_ONLY + self._mqttv5_first_connect = True + self.suppress_exceptions = False # For callbacks + + def __del__(self): + self._reset_sockets() + + def _sock_recv(self, bufsize): + try: + return self._sock.recv(bufsize) + except ssl.SSLWantReadError: + raise BlockingIOError + except ssl.SSLWantWriteError: + self._call_socket_register_write() + raise BlockingIOError + + def _sock_send(self, buf): + try: + return self._sock.send(buf) + except ssl.SSLWantReadError: + raise BlockingIOError + except ssl.SSLWantWriteError: + self._call_socket_register_write() + raise BlockingIOError + except BlockingIOError: + self._call_socket_register_write() + raise BlockingIOError + + def _sock_close(self): + """Close the connection to the server.""" + if not self._sock: + return + + try: + sock = self._sock + self._sock = None + self._call_socket_unregister_write(sock) + self._call_socket_close(sock) + finally: + # In case a callback fails, still close the socket to avoid leaking the file descriptor. + sock.close() + + def _reset_sockets(self, sockpair_only=False): + if sockpair_only == False: + self._sock_close() + + if self._sockpairR: + self._sockpairR.close() + self._sockpairR = None + if self._sockpairW: + self._sockpairW.close() + self._sockpairW = None + + def reinitialise(self, client_id="", clean_session=True, userdata=None): + self._reset_sockets() + + self.__init__(client_id, clean_session, userdata) + + def ws_set_options(self, path="/mqtt", headers=None): + """ Set the path and headers for a websocket connection + + path is a string starting with / which should be the endpoint of the + mqtt connection on the remote server + + headers can be either a dict or a callable object. If it is a dict then + the extra items in the dict are added to the websocket headers. If it is + a callable, then the default websocket headers are passed into this + function and the result is used as the new headers. + """ + self._websocket_path = path + + if headers is not None: + if isinstance(headers, dict) or callable(headers): + self._websocket_extra_headers = headers + else: + raise ValueError( + "'headers' option to ws_set_options has to be either a dictionary or callable") + + def tls_set_context(self, context=None): + """Configure network encryption and authentication context. Enables SSL/TLS support. + + context : an ssl.SSLContext object. By default this is given by + `ssl.create_default_context()`, if available. + + Must be called before connect() or connect_async().""" + if self._ssl_context is not None: + raise ValueError('SSL/TLS has already been configured.') + + # Assume that have SSL support, or at least that context input behaves like ssl.SSLContext + # in current versions of Python + + if context is None: + if hasattr(ssl, 'create_default_context'): + context = ssl.create_default_context() + else: + raise ValueError('SSL/TLS context must be specified') + + self._ssl = True + self._ssl_context = context + + # Ensure _tls_insecure is consistent with check_hostname attribute + if hasattr(context, 'check_hostname'): + self._tls_insecure = not context.check_hostname + + def tls_set(self, ca_certs=None, certfile=None, keyfile=None, cert_reqs=None, tls_version=None, ciphers=None, keyfile_password=None): + """Configure network encryption and authentication options. Enables SSL/TLS support. + + ca_certs : a string path to the Certificate Authority certificate files + that are to be treated as trusted by this client. If this is the only + option given then the client will operate in a similar manner to a web + browser. That is to say it will require the broker to have a + certificate signed by the Certificate Authorities in ca_certs and will + communicate using TLS v1,2, but will not attempt any form of + authentication. This provides basic network encryption but may not be + sufficient depending on how the broker is configured. + By default, on Python 2.7.9+ or 3.4+, the default certification + authority of the system is used. On older Python version this parameter + is mandatory. + + certfile and keyfile are strings pointing to the PEM encoded client + certificate and private keys respectively. If these arguments are not + None then they will be used as client information for TLS based + authentication. Support for this feature is broker dependent. Note + that if either of these files in encrypted and needs a password to + decrypt it, then this can be passed using the keyfile_password + argument - you should take precautions to ensure that your password is + not hard coded into your program by loading the password from a file + for example. If you do not provide keyfile_password, the password will + be requested to be typed in at a terminal window. + + cert_reqs allows the certificate requirements that the client imposes + on the broker to be changed. By default this is ssl.CERT_REQUIRED, + which means that the broker must provide a certificate. See the ssl + pydoc for more information on this parameter. + + tls_version allows the version of the SSL/TLS protocol used to be + specified. By default TLS v1.2 is used. Previous versions are allowed + but not recommended due to possible security problems. + + ciphers is a string specifying which encryption ciphers are allowable + for this connection, or None to use the defaults. See the ssl pydoc for + more information. + + Must be called before connect() or connect_async().""" + if ssl is None: + raise ValueError('This platform has no SSL/TLS.') + + if not hasattr(ssl, 'SSLContext'): + # Require Python version that has SSL context support in standard library + raise ValueError( + 'Python 2.7.9 and 3.2 are the minimum supported versions for TLS.') + + if ca_certs is None and not hasattr(ssl.SSLContext, 'load_default_certs'): + raise ValueError('ca_certs must not be None.') + + # Create SSLContext object + if tls_version is None: + tls_version = ssl.PROTOCOL_TLSv1_2 + # If the python version supports it, use highest TLS version automatically + if hasattr(ssl, "PROTOCOL_TLS"): + tls_version = ssl.PROTOCOL_TLS + context = ssl.SSLContext(tls_version) + + # Configure context + if certfile is not None: + context.load_cert_chain(certfile, keyfile, keyfile_password) + + if cert_reqs == ssl.CERT_NONE and hasattr(context, 'check_hostname'): + context.check_hostname = False + + context.verify_mode = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs + + if ca_certs is not None: + context.load_verify_locations(ca_certs) + else: + context.load_default_certs() + + if ciphers is not None: + context.set_ciphers(ciphers) + + self.tls_set_context(context) + + if cert_reqs != ssl.CERT_NONE: + # Default to secure, sets context.check_hostname attribute + # if available + self.tls_insecure_set(False) + else: + # But with ssl.CERT_NONE, we can not check_hostname + self.tls_insecure_set(True) + + def tls_insecure_set(self, value): + """Configure verification of the server hostname in the server certificate. + + If value is set to true, it is impossible to guarantee that the host + you are connecting to is not impersonating your server. This can be + useful in initial server testing, but makes it possible for a malicious + third party to impersonate your server through DNS spoofing, for + example. + + Do not use this function in a real system. Setting value to true means + there is no point using encryption. + + Must be called before connect() and after either tls_set() or + tls_set_context().""" + + if self._ssl_context is None: + raise ValueError( + 'Must configure SSL context before using tls_insecure_set.') + + self._tls_insecure = value + + # Ensure check_hostname is consistent with _tls_insecure attribute + if hasattr(self._ssl_context, 'check_hostname'): + # Rely on SSLContext to check host name + # If verify_mode is CERT_NONE then the host name will never be checked + self._ssl_context.check_hostname = not value + + def proxy_set(self, **proxy_args): + """Configure proxying of MQTT connection. Enables support for SOCKS or + HTTP proxies. + + Proxying is done through the PySocks library. Brief descriptions of the + proxy_args parameters are below; see the PySocks docs for more info. + + (Required) + proxy_type: One of {socks.HTTP, socks.SOCKS4, or socks.SOCKS5} + proxy_addr: IP address or DNS name of proxy server + + (Optional) + proxy_rdns: boolean indicating whether proxy lookup should be performed + remotely (True, default) or locally (False) + proxy_username: username for SOCKS5 proxy, or userid for SOCKS4 proxy + proxy_password: password for SOCKS5 proxy + + Must be called before connect() or connect_async().""" + if socks is None: + raise ValueError("PySocks must be installed for proxy support.") + elif not self._proxy_is_valid(proxy_args): + raise ValueError("proxy_type and/or proxy_addr are invalid.") + else: + self._proxy = proxy_args + + def enable_logger(self, logger=None): + """ Enables a logger to send log messages to """ + if logger is None: + if self._logger is not None: + # Do not replace existing logger + return + logger = logging.getLogger(__name__) + self._logger = logger + + def disable_logger(self): + self._logger = None + + def connect(self, host, port=1883, keepalive=60, bind_address="", bind_port=0, + clean_start=MQTT_CLEAN_START_FIRST_ONLY, properties=None): + """Connect to a remote broker. + + host is the hostname or IP address of the remote broker. + port is the network port of the server host to connect to. Defaults to + 1883. Note that the default port for MQTT over SSL/TLS is 8883 so if you + are using tls_set() the port may need providing. + keepalive: Maximum period in seconds between communications with the + broker. If no other messages are being exchanged, this controls the + rate at which the client will send ping messages to the broker. + clean_start: (MQTT v5.0 only) True, False or MQTT_CLEAN_START_FIRST_ONLY. + Sets the MQTT v5.0 clean_start flag always, never or on the first successful connect only, + respectively. MQTT session data (such as outstanding messages and subscriptions) + is cleared on successful connect when the clean_start flag is set. + properties: (MQTT v5.0 only) the MQTT v5.0 properties to be sent in the + MQTT connect packet. + """ + + if self._protocol == MQTTv5: + self._mqttv5_first_connect = True + else: + if clean_start != MQTT_CLEAN_START_FIRST_ONLY: + raise ValueError("Clean start only applies to MQTT V5") + if properties != None: + raise ValueError("Properties only apply to MQTT V5") + + self.connect_async(host, port, keepalive, + bind_address, bind_port, clean_start, properties) + return self.reconnect() + + def connect_srv(self, domain=None, keepalive=60, bind_address="", + clean_start=MQTT_CLEAN_START_FIRST_ONLY, properties=None): + """Connect to a remote broker. + + domain is the DNS domain to search for SRV records; if None, + try to determine local domain name. + keepalive, bind_address, clean_start and properties are as for connect() + """ + + if HAVE_DNS is False: + raise ValueError( + 'No DNS resolver library found, try "pip install dnspython" or "pip3 install dnspython3".') + + if domain is None: + domain = socket.getfqdn() + domain = domain[domain.find('.') + 1:] + + try: + rr = '_mqtt._tcp.%s' % domain + if self._ssl: + # IANA specifies secure-mqtt (not mqtts) for port 8883 + rr = '_secure-mqtt._tcp.%s' % domain + answers = [] + for answer in dns.resolver.query(rr, dns.rdatatype.SRV): + addr = answer.target.to_text()[:-1] + answers.append( + (addr, answer.port, answer.priority, answer.weight)) + except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer, dns.resolver.NoNameservers): + raise ValueError("No answer/NXDOMAIN for SRV in %s" % (domain)) + + # FIXME: doesn't account for weight + for answer in answers: + host, port, prio, weight = answer + + try: + return self.connect(host, port, keepalive, bind_address, clean_start, properties) + except Exception: + pass + + raise ValueError("No SRV hosts responded") + + def connect_async(self, host, port=1883, keepalive=60, bind_address="", bind_port=0, + clean_start=MQTT_CLEAN_START_FIRST_ONLY, properties=None): + """Connect to a remote broker asynchronously. This is a non-blocking + connect call that can be used with loop_start() to provide very quick + start. + + host is the hostname or IP address of the remote broker. + port is the network port of the server host to connect to. Defaults to + 1883. Note that the default port for MQTT over SSL/TLS is 8883 so if you + are using tls_set() the port may need providing. + keepalive: Maximum period in seconds between communications with the + broker. If no other messages are being exchanged, this controls the + rate at which the client will send ping messages to the broker. + clean_start: (MQTT v5.0 only) True, False or MQTT_CLEAN_START_FIRST_ONLY. + Sets the MQTT v5.0 clean_start flag always, never or on the first successful connect only, + respectively. MQTT session data (such as outstanding messages and subscriptions) + is cleared on successful connect when the clean_start flag is set. + properties: (MQTT v5.0 only) the MQTT v5.0 properties to be sent in the + MQTT connect packet. Use the Properties class. + """ + if host is None or len(host) == 0: + raise ValueError('Invalid host.') + if port <= 0: + raise ValueError('Invalid port number.') + if keepalive < 0: + raise ValueError('Keepalive must be >=0.') + if bind_address != "" and bind_address is not None: + if sys.version_info < (2, 7) or (3, 0) < sys.version_info < (3, 2): + raise ValueError('bind_address requires Python 2.7 or 3.2.') + if bind_port < 0: + raise ValueError('Invalid bind port number.') + + self._host = host + self._port = port + self._keepalive = keepalive + self._bind_address = bind_address + self._bind_port = bind_port + self._clean_start = clean_start + self._connect_properties = properties + self._state = mqtt_cs_connect_async + + + def reconnect_delay_set(self, min_delay=1, max_delay=120): + """ Configure the exponential reconnect delay + + When connection is lost, wait initially min_delay seconds and + double this time every attempt. The wait is capped at max_delay. + Once the client is fully connected (e.g. not only TCP socket, but + received a success CONNACK), the wait timer is reset to min_delay. + """ + with self._reconnect_delay_mutex: + self._reconnect_min_delay = min_delay + self._reconnect_max_delay = max_delay + self._reconnect_delay = None + + def reconnect(self): + """Reconnect the client after a disconnect. Can only be called after + connect()/connect_async().""" + if len(self._host) == 0: + raise ValueError('Invalid host.') + if self._port <= 0: + raise ValueError('Invalid port number.') + + self._in_packet = { + "command": 0, + "have_remaining": 0, + "remaining_count": [], + "remaining_mult": 1, + "remaining_length": 0, + "packet": bytearray(b""), + "to_process": 0, + "pos": 0} + + self._out_packet = collections.deque() + + with self._msgtime_mutex: + self._last_msg_in = time_func() + self._last_msg_out = time_func() + + self._ping_t = 0 + self._state = mqtt_cs_new + + self._sock_close() + + # Put messages in progress in a valid state. + self._messages_reconnect_reset() + + sock = self._create_socket_connection() + + if self._ssl: + # SSL is only supported when SSLContext is available (implies Python >= 2.7.9 or >= 3.2) + + verify_host = not self._tls_insecure + try: + # Try with server_hostname, even it's not supported in certain scenarios + sock = self._ssl_context.wrap_socket( + sock, + server_hostname=self._host, + do_handshake_on_connect=False, + ) + except ssl.CertificateError: + # CertificateError is derived from ValueError + raise + except ValueError: + # Python version requires SNI in order to handle server_hostname, but SNI is not available + sock = self._ssl_context.wrap_socket( + sock, + do_handshake_on_connect=False, + ) + else: + # If SSL context has already checked hostname, then don't need to do it again + if (hasattr(self._ssl_context, 'check_hostname') and + self._ssl_context.check_hostname): + verify_host = False + + sock.settimeout(self._keepalive) + sock.do_handshake() + + if verify_host: + ssl.match_hostname(sock.getpeercert(), self._host) + + if self._transport == "websockets": + sock.settimeout(self._keepalive) + sock = WebsocketWrapper(sock, self._host, self._port, self._ssl, + self._websocket_path, self._websocket_extra_headers) + + self._sock = sock + self._sock.setblocking(0) + self._registered_write = False + self._call_socket_open() + + return self._send_connect(self._keepalive) + + def loop(self, timeout=1.0, max_packets=1): + """Process network events. + + It is strongly recommended that you use loop_start(), or + loop_forever(), or if you are using an external event loop using + loop_read(), loop_write(), and loop_misc(). Using loop() on it's own is + no longer recommended. + + This function must be called regularly to ensure communication with the + broker is carried out. It calls select() on the network socket to wait + for network events. If incoming data is present it will then be + processed. Outgoing commands, from e.g. publish(), are normally sent + immediately that their function is called, but this is not always + possible. loop() will also attempt to send any remaining outgoing + messages, which also includes commands that are part of the flow for + messages with QoS>0. + + timeout: The time in seconds to wait for incoming/outgoing network + traffic before timing out and returning. + max_packets: Not currently used. + + Returns MQTT_ERR_SUCCESS on success. + Returns >0 on error. + + A ValueError will be raised if timeout < 0""" + + if self._sockpairR is None or self._sockpairW is None: + self._reset_sockets(sockpair_only=True) + self._sockpairR, self._sockpairW = _socketpair_compat() + + return self._loop(timeout) + + def _loop(self, timeout=1.0): + if timeout < 0.0: + raise ValueError('Invalid timeout.') + + try: + packet = self._out_packet.popleft() + self._out_packet.appendleft(packet) + wlist = [self._sock] + except IndexError: + wlist = [] + + # used to check if there are any bytes left in the (SSL) socket + pending_bytes = 0 + if hasattr(self._sock, 'pending'): + pending_bytes = self._sock.pending() + + # if bytes are pending do not wait in select + if pending_bytes > 0: + timeout = 0.0 + + # sockpairR is used to break out of select() before the timeout, on a + # call to publish() etc. + if self._sockpairR is None: + rlist = [self._sock] + else: + rlist = [self._sock, self._sockpairR] + + try: + socklist = select.select(rlist, wlist, [], timeout) + except TypeError: + # Socket isn't correct type, in likelihood connection is lost + return MQTT_ERR_CONN_LOST + except ValueError: + # Can occur if we just reconnected but rlist/wlist contain a -1 for + # some reason. + return MQTT_ERR_CONN_LOST + except Exception: + # Note that KeyboardInterrupt, etc. can still terminate since they + # are not derived from Exception + return MQTT_ERR_UNKNOWN + + if self._sock in socklist[0] or pending_bytes > 0: + rc = self.loop_read() + if rc or self._sock is None: + return rc + + if self._sockpairR and self._sockpairR in socklist[0]: + # Stimulate output write even though we didn't ask for it, because + # at that point the publish or other command wasn't present. + socklist[1].insert(0, self._sock) + # Clear sockpairR - only ever a single byte written. + try: + # Read many bytes at once - this allows up to 10000 calls to + # publish() inbetween calls to loop(). + self._sockpairR.recv(10000) + except BlockingIOError: + pass + + if self._sock in socklist[1]: + rc = self.loop_write() + if rc or self._sock is None: + return rc + + return self.loop_misc() + + def publish(self, topic, payload=None, qos=0, retain=False, properties=None): + """Publish a message on a topic. + + This causes a message to be sent to the broker and subsequently from + the broker to any clients subscribing to matching topics. + + topic: The topic that the message should be published on. + payload: The actual message to send. If not given, or set to None a + zero length message will be used. Passing an int or float will result + in the payload being converted to a string representing that number. If + you wish to send a true int/float, use struct.pack() to create the + payload you require. + qos: The quality of service level to use. + retain: If set to true, the message will be set as the "last known + good"/retained message for the topic. + properties: (MQTT v5.0 only) the MQTT v5.0 properties to be included. + Use the Properties class. + + Returns a MQTTMessageInfo class, which can be used to determine whether + the message has been delivered (using info.is_published()) or to block + waiting for the message to be delivered (info.wait_for_publish()). The + message ID and return code of the publish() call can be found at + info.mid and info.rc. + + For backwards compatibility, the MQTTMessageInfo class is iterable so + the old construct of (rc, mid) = client.publish(...) is still valid. + + rc is MQTT_ERR_SUCCESS to indicate success or MQTT_ERR_NO_CONN if the + client is not currently connected. mid is the message ID for the + publish request. The mid value can be used to track the publish request + by checking against the mid argument in the on_publish() callback if it + is defined. + + A ValueError will be raised if topic is None, has zero length or is + invalid (contains a wildcard), except if the MQTT version used is v5.0. + For v5.0, a zero length topic can be used when a Topic Alias has been set. + + A ValueError will be raised if qos is not one of 0, 1 or 2, or if + the length of the payload is greater than 268435455 bytes.""" + if self._protocol != MQTTv5: + if topic is None or len(topic) == 0: + raise ValueError('Invalid topic.') + + topic = topic.encode('utf-8') + + if self._topic_wildcard_len_check(topic) != MQTT_ERR_SUCCESS: + raise ValueError('Publish topic cannot contain wildcards.') + + if qos < 0 or qos > 2: + raise ValueError('Invalid QoS level.') + + if isinstance(payload, unicode): + local_payload = payload.encode('utf-8') + elif isinstance(payload, (bytes, bytearray)): + local_payload = payload + elif isinstance(payload, (int, float)): + local_payload = str(payload).encode('ascii') + elif payload is None: + local_payload = b'' + else: + raise TypeError( + 'payload must be a string, bytearray, int, float or None.') + + if len(local_payload) > 268435455: + raise ValueError('Payload too large.') + + local_mid = self._mid_generate() + + if qos == 0: + info = MQTTMessageInfo(local_mid) + rc = self._send_publish( + local_mid, topic, local_payload, qos, retain, False, info, properties) + info.rc = rc + return info + else: + message = MQTTMessage(local_mid, topic) + message.timestamp = time_func() + message.payload = local_payload + message.qos = qos + message.retain = retain + message.dup = False + message.properties = properties + + with self._out_message_mutex: + if self._max_queued_messages > 0 and len(self._out_messages) >= self._max_queued_messages: + message.info.rc = MQTT_ERR_QUEUE_SIZE + return message.info + + if local_mid in self._out_messages: + message.info.rc = MQTT_ERR_QUEUE_SIZE + return message.info + + self._out_messages[message.mid] = message + if self._max_inflight_messages == 0 or self._inflight_messages < self._max_inflight_messages: + self._inflight_messages += 1 + if qos == 1: + message.state = mqtt_ms_wait_for_puback + elif qos == 2: + message.state = mqtt_ms_wait_for_pubrec + + rc = self._send_publish(message.mid, topic, message.payload, message.qos, message.retain, + message.dup, message.info, message.properties) + + # remove from inflight messages so it will be send after a connection is made + if rc is MQTT_ERR_NO_CONN: + self._inflight_messages -= 1 + message.state = mqtt_ms_publish + + message.info.rc = rc + return message.info + else: + message.state = mqtt_ms_queued + message.info.rc = MQTT_ERR_SUCCESS + return message.info + + def username_pw_set(self, username, password=None): + """Set a username and optionally a password for broker authentication. + + Must be called before connect() to have any effect. + Requires a broker that supports MQTT v3.1. + + username: The username to authenticate with. Need have no relationship to the client id. Must be unicode + [MQTT-3.1.3-11]. + Set to None to reset client back to not using username/password for broker authentication. + password: The password to authenticate with. Optional, set to None if not required. If it is unicode, then it + will be encoded as UTF-8. + """ + + # [MQTT-3.1.3-11] User name must be UTF-8 encoded string + self._username = None if username is None else username.encode('utf-8') + self._password = password + if isinstance(self._password, unicode): + self._password = self._password.encode('utf-8') + + def enable_bridge_mode(self): + """Sets the client in a bridge mode instead of client mode. + + Must be called before connect() to have any effect. + Requires brokers that support bridge mode. + + Under bridge mode, the broker will identify the client as a bridge and + not send it's own messages back to it. Hence a subsciption of # is + possible without message loops. This feature also correctly propagates + the retain flag on the messages. + + Currently Mosquitto and RSMB support this feature. This feature can + be used to create a bridge between multiple broker. + """ + self._client_mode = MQTT_BRIDGE + + def is_connected(self): + """Returns the current status of the connection + + True if connection exists + False if connection is closed + """ + return self._state == mqtt_cs_connected + + def disconnect(self, reasoncode=None, properties=None): + """Disconnect a connected client from the broker. + reasoncode: (MQTT v5.0 only) a ReasonCodes instance setting the MQTT v5.0 + reasoncode to be sent with the disconnect. It is optional, the receiver + then assuming that 0 (success) is the value. + properties: (MQTT v5.0 only) a Properties instance setting the MQTT v5.0 properties + to be included. Optional - if not set, no properties are sent. + """ + self._state = mqtt_cs_disconnecting + + if self._sock is None: + return MQTT_ERR_NO_CONN + + return self._send_disconnect(reasoncode, properties) + + def subscribe(self, topic, qos=0, options=None, properties=None): + """Subscribe the client to one or more topics. + + This function may be called in three different ways (and a further three for MQTT v5.0): + + Simple string and integer + ------------------------- + e.g. subscribe("my/topic", 2) + + topic: A string specifying the subscription topic to subscribe to. + qos: The desired quality of service level for the subscription. + Defaults to 0. + options and properties: Not used. + + Simple string and subscribe options (MQTT v5.0 only) + ---------------------------------------------------- + e.g. subscribe("my/topic", options=SubscribeOptions(qos=2)) + + topic: A string specifying the subscription topic to subscribe to. + qos: Not used. + options: The MQTT v5.0 subscribe options. + properties: a Properties instance setting the MQTT v5.0 properties + to be included. Optional - if not set, no properties are sent. + + String and integer tuple + ------------------------ + e.g. subscribe(("my/topic", 1)) + + topic: A tuple of (topic, qos). Both topic and qos must be present in + the tuple. + qos and options: Not used. + properties: Only used for MQTT v5.0. A Properties instance setting the + MQTT v5.0 properties. Optional - if not set, no properties are sent. + + String and subscribe options tuple (MQTT v5.0 only) + --------------------------------------------------- + e.g. subscribe(("my/topic", SubscribeOptions(qos=1))) + + topic: A tuple of (topic, SubscribeOptions). Both topic and subscribe + options must be present in the tuple. + qos and options: Not used. + properties: a Properties instance setting the MQTT v5.0 properties + to be included. Optional - if not set, no properties are sent. + + List of string and integer tuples + --------------------------------- + e.g. subscribe([("my/topic", 0), ("another/topic", 2)]) + + This allows multiple topic subscriptions in a single SUBSCRIPTION + command, which is more efficient than using multiple calls to + subscribe(). + + topic: A list of tuple of format (topic, qos). Both topic and qos must + be present in all of the tuples. + qos, options and properties: Not used. + + List of string and subscribe option tuples (MQTT v5.0 only) + ----------------------------------------------------------- + e.g. subscribe([("my/topic", SubscribeOptions(qos=0), ("another/topic", SubscribeOptions(qos=2)]) + + This allows multiple topic subscriptions in a single SUBSCRIPTION + command, which is more efficient than using multiple calls to + subscribe(). + + topic: A list of tuple of format (topic, SubscribeOptions). Both topic and subscribe + options must be present in all of the tuples. + qos and options: Not used. + properties: a Properties instance setting the MQTT v5.0 properties + to be included. Optional - if not set, no properties are sent. + + The function returns a tuple (result, mid), where result is + MQTT_ERR_SUCCESS to indicate success or (MQTT_ERR_NO_CONN, None) if the + client is not currently connected. mid is the message ID for the + subscribe request. The mid value can be used to track the subscribe + request by checking against the mid argument in the on_subscribe() + callback if it is defined. + + Raises a ValueError if qos is not 0, 1 or 2, or if topic is None or has + zero string length, or if topic is not a string, tuple or list. + """ + topic_qos_list = None + + if isinstance(topic, tuple): + if self._protocol == MQTTv5: + topic, options = topic + if not isinstance(options, SubscribeOptions): + raise ValueError( + 'Subscribe options must be instance of SubscribeOptions class.') + else: + topic, qos = topic + + if isinstance(topic, basestring): + if qos < 0 or qos > 2: + raise ValueError('Invalid QoS level.') + if self._protocol == MQTTv5: + if options is None: + # if no options are provided, use the QoS passed instead + options = SubscribeOptions(qos=qos) + elif qos != 0: + raise ValueError( + 'Subscribe options and qos parameters cannot be combined.') + if not isinstance(options, SubscribeOptions): + raise ValueError( + 'Subscribe options must be instance of SubscribeOptions class.') + topic_qos_list = [(topic.encode('utf-8'), options)] + else: + if topic is None or len(topic) == 0: + raise ValueError('Invalid topic.') + topic_qos_list = [(topic.encode('utf-8'), qos)] + elif isinstance(topic, list): + topic_qos_list = [] + if self._protocol == MQTTv5: + for t, o in topic: + if not isinstance(o, SubscribeOptions): + # then the second value should be QoS + if o < 0 or o > 2: + raise ValueError('Invalid QoS level.') + o = SubscribeOptions(qos=o) + topic_qos_list.append((t.encode('utf-8'), o)) + else: + for t, q in topic: + if q < 0 or q > 2: + raise ValueError('Invalid QoS level.') + if t is None or len(t) == 0 or not isinstance(t, basestring): + raise ValueError('Invalid topic.') + topic_qos_list.append((t.encode('utf-8'), q)) + + if topic_qos_list is None: + raise ValueError("No topic specified, or incorrect topic type.") + + if any(self._filter_wildcard_len_check(topic) != MQTT_ERR_SUCCESS for topic, _ in topic_qos_list): + raise ValueError('Invalid subscription filter.') + + if self._sock is None: + return (MQTT_ERR_NO_CONN, None) + + return self._send_subscribe(False, topic_qos_list, properties) + + def unsubscribe(self, topic, properties=None): + """Unsubscribe the client from one or more topics. + + topic: A single string, or list of strings that are the subscription + topics to unsubscribe from. + properties: (MQTT v5.0 only) a Properties instance setting the MQTT v5.0 properties + to be included. Optional - if not set, no properties are sent. + + Returns a tuple (result, mid), where result is MQTT_ERR_SUCCESS + to indicate success or (MQTT_ERR_NO_CONN, None) if the client is not + currently connected. + mid is the message ID for the unsubscribe request. The mid value can be + used to track the unsubscribe request by checking against the mid + argument in the on_unsubscribe() callback if it is defined. + + Raises a ValueError if topic is None or has zero string length, or is + not a string or list. + """ + topic_list = None + if topic is None: + raise ValueError('Invalid topic.') + if isinstance(topic, basestring): + if len(topic) == 0: + raise ValueError('Invalid topic.') + topic_list = [topic.encode('utf-8')] + elif isinstance(topic, list): + topic_list = [] + for t in topic: + if len(t) == 0 or not isinstance(t, basestring): + raise ValueError('Invalid topic.') + topic_list.append(t.encode('utf-8')) + + if topic_list is None: + raise ValueError("No topic specified, or incorrect topic type.") + + if self._sock is None: + return (MQTT_ERR_NO_CONN, None) + + return self._send_unsubscribe(False, topic_list, properties) + + def loop_read(self, max_packets=1): + """Process read network events. Use in place of calling loop() if you + wish to handle your client reads as part of your own application. + + Use socket() to obtain the client socket to call select() or equivalent + on. + + Do not use if you are using the threaded interface loop_start().""" + if self._sock is None: + return MQTT_ERR_NO_CONN + + max_packets = len(self._out_messages) + len(self._in_messages) + if max_packets < 1: + max_packets = 1 + + for _ in range(0, max_packets): + if self._sock is None: + return MQTT_ERR_NO_CONN + rc = self._packet_read() + if rc > 0: + return self._loop_rc_handle(rc) + elif rc == MQTT_ERR_AGAIN: + return MQTT_ERR_SUCCESS + return MQTT_ERR_SUCCESS + + def loop_write(self, max_packets=1): + """Process write network events. Use in place of calling loop() if you + wish to handle your client writes as part of your own application. + + Use socket() to obtain the client socket to call select() or equivalent + on. + + Use want_write() to determine if there is data waiting to be written. + + Do not use if you are using the threaded interface loop_start().""" + if self._sock is None: + return MQTT_ERR_NO_CONN + + try: + rc = self._packet_write() + if rc == MQTT_ERR_AGAIN: + return MQTT_ERR_SUCCESS + elif rc > 0: + return self._loop_rc_handle(rc) + else: + return MQTT_ERR_SUCCESS + finally: + if self.want_write(): + self._call_socket_register_write() + else: + self._call_socket_unregister_write() + + def want_write(self): + """Call to determine if there is network data waiting to be written. + Useful if you are calling select() yourself rather than using loop(). + """ + try: + packet = self._out_packet.popleft() + self._out_packet.appendleft(packet) + return True + except IndexError: + return False + + def loop_misc(self): + """Process miscellaneous network events. Use in place of calling loop() if you + wish to call select() or equivalent on. + + Do not use if you are using the threaded interface loop_start().""" + if self._sock is None: + return MQTT_ERR_NO_CONN + + now = time_func() + self._check_keepalive() + + if self._ping_t > 0 and now - self._ping_t >= self._keepalive: + # client->ping_t != 0 means we are waiting for a pingresp. + # This hasn't happened in the keepalive time so we should disconnect. + self._sock_close() + + if self._state == mqtt_cs_disconnecting: + rc = MQTT_ERR_SUCCESS + else: + rc = MQTT_ERR_KEEPALIVE + + self._do_on_disconnect(rc) + + return MQTT_ERR_CONN_LOST + + return MQTT_ERR_SUCCESS + + def max_inflight_messages_set(self, inflight): + """Set the maximum number of messages with QoS>0 that can be part way + through their network flow at once. Defaults to 20.""" + if inflight < 0: + raise ValueError('Invalid inflight.') + self._max_inflight_messages = inflight + + def max_queued_messages_set(self, queue_size): + """Set the maximum number of messages in the outgoing message queue. + 0 means unlimited.""" + if queue_size < 0: + raise ValueError('Invalid queue size.') + if not isinstance(queue_size, int): + raise ValueError('Invalid type of queue size.') + self._max_queued_messages = queue_size + return self + + def message_retry_set(self, retry): + """No longer used, remove in version 2.0""" + pass + + def user_data_set(self, userdata): + """Set the user data variable passed to callbacks. May be any data type.""" + self._userdata = userdata + + def will_set(self, topic, payload=None, qos=0, retain=False, properties=None): + """Set a Will to be sent by the broker in case the client disconnects unexpectedly. + + This must be called before connect() to have any effect. + + topic: The topic that the will message should be published on. + payload: The message to send as a will. If not given, or set to None a + zero length message will be used as the will. Passing an int or float + will result in the payload being converted to a string representing + that number. If you wish to send a true int/float, use struct.pack() to + create the payload you require. + qos: The quality of service level to use for the will. + retain: If set to true, the will message will be set as the "last known + good"/retained message for the topic. + properties: (MQTT v5.0 only) a Properties instance setting the MQTT v5.0 properties + to be included with the will message. Optional - if not set, no properties are sent. + + Raises a ValueError if qos is not 0, 1 or 2, or if topic is None or has + zero string length. + """ + if topic is None or len(topic) == 0: + raise ValueError('Invalid topic.') + + if qos < 0 or qos > 2: + raise ValueError('Invalid QoS level.') + + if properties != None and not isinstance(properties, Properties): + raise ValueError( + "The properties argument must be an instance of the Properties class.") + + if isinstance(payload, unicode): + self._will_payload = payload.encode('utf-8') + elif isinstance(payload, (bytes, bytearray)): + self._will_payload = payload + elif isinstance(payload, (int, float)): + self._will_payload = str(payload).encode('ascii') + elif payload is None: + self._will_payload = b"" + else: + raise TypeError( + 'payload must be a string, bytearray, int, float or None.') + + self._will = True + self._will_topic = topic.encode('utf-8') + self._will_qos = qos + self._will_retain = retain + self._will_properties = properties + + def will_clear(self): + """ Removes a will that was previously configured with will_set(). + + Must be called before connect() to have any effect.""" + self._will = False + self._will_topic = b"" + self._will_payload = b"" + self._will_qos = 0 + self._will_retain = False + + def socket(self): + """Return the socket or ssl object for this client.""" + return self._sock + + def loop_forever(self, timeout=1.0, max_packets=1, retry_first_connection=False): + """This function calls the network loop functions for you in an + infinite blocking loop. It is useful for the case where you only want + to run the MQTT client loop in your program. + + loop_forever() will handle reconnecting for you if reconnect_on_failure is + true (this is the default behavior). If you call disconnect() in a callback + it will return. + + + timeout: The time in seconds to wait for incoming/outgoing network + traffic before timing out and returning. + max_packets: Not currently used. + retry_first_connection: Should the first connection attempt be retried on failure. + This is independent of the reconnect_on_failure setting. + + Raises OSError/WebsocketConnectionError on first connection failures unless retry_first_connection=True + """ + + run = True + + while run: + if self._thread_terminate is True: + break + + if self._state == mqtt_cs_connect_async: + try: + self.reconnect() + except (OSError, WebsocketConnectionError): + self._handle_on_connect_fail() + if not retry_first_connection: + raise + self._easy_log( + MQTT_LOG_DEBUG, "Connection failed, retrying") + self._reconnect_wait() + else: + break + + while run: + rc = MQTT_ERR_SUCCESS + while rc == MQTT_ERR_SUCCESS: + rc = self._loop(timeout) + # We don't need to worry about locking here, because we've + # either called loop_forever() when in single threaded mode, or + # in multi threaded mode when loop_stop() has been called and + # so no other threads can access _out_packet or _messages. + if (self._thread_terminate is True + and len(self._out_packet) == 0 + and len(self._out_messages) == 0): + rc = 1 + run = False + + def should_exit(): + return self._state == mqtt_cs_disconnecting or run is False or self._thread_terminate is True + + if should_exit() or not self._reconnect_on_failure: + run = False + else: + self._reconnect_wait() + + if should_exit(): + run = False + else: + try: + self.reconnect() + except (OSError, WebsocketConnectionError): + self._handle_on_connect_fail() + self._easy_log( + MQTT_LOG_DEBUG, "Connection failed, retrying") + + return rc + + def loop_start(self): + """This is part of the threaded client interface. Call this once to + start a new thread to process network traffic. This provides an + alternative to repeatedly calling loop() yourself. + """ + if self._thread is not None: + return MQTT_ERR_INVAL + + self._sockpairR, self._sockpairW = _socketpair_compat() + self._thread_terminate = False + self._thread = threading.Thread(target=self._thread_main) + self._thread.daemon = True + self._thread.start() + + def loop_stop(self, force=False): + """This is part of the threaded client interface. Call this once to + stop the network thread previously created with loop_start(). This call + will block until the network thread finishes. + + The force parameter is currently ignored. + """ + if self._thread is None: + return MQTT_ERR_INVAL + + self._thread_terminate = True + if threading.current_thread() != self._thread: + self._thread.join() + self._thread = None + + @property + def on_log(self): + """If implemented, called when the client has log information. + Defined to allow debugging.""" + return self._on_log + + @on_log.setter + def on_log(self, func): + """ Define the logging callback implementation. + + Expected signature is: + log_callback(client, userdata, level, buf) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + level: gives the severity of the message and will be one of + MQTT_LOG_INFO, MQTT_LOG_NOTICE, MQTT_LOG_WARNING, + MQTT_LOG_ERR, and MQTT_LOG_DEBUG. + buf: the message itself + + Decorator: @client.log_callback() (```client``` is the name of the + instance which this callback is being attached to) + """ + self._on_log = func + + def log_callback(self): + def decorator(func): + self.on_log = func + return func + return decorator + + @property + def on_connect(self): + """If implemented, called when the broker responds to our connection + request.""" + return self._on_connect + + @on_connect.setter + def on_connect(self, func): + """ Define the connect callback implementation. + + Expected signature for MQTT v3.1 and v3.1.1 is: + connect_callback(client, userdata, flags, rc) + + and for MQTT v5.0: + connect_callback(client, userdata, flags, reasonCode, properties) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + flags: response flags sent by the broker + rc: the connection result + reasonCode: the MQTT v5.0 reason code: an instance of the ReasonCode class. + ReasonCode may be compared to integer. + properties: the MQTT v5.0 properties returned from the broker. An instance + of the Properties class. + For MQTT v3.1 and v3.1.1 properties is not provided but for compatibility + with MQTT v5.0, we recommend adding properties=None. + + flags is a dict that contains response flags from the broker: + flags['session present'] - this flag is useful for clients that are + using clean session set to 0 only. If a client with clean + session=0, that reconnects to a broker that it has previously + connected to, this flag indicates whether the broker still has the + session information for the client. If 1, the session still exists. + + The value of rc indicates success or not: + 0: Connection successful + 1: Connection refused - incorrect protocol version + 2: Connection refused - invalid client identifier + 3: Connection refused - server unavailable + 4: Connection refused - bad username or password + 5: Connection refused - not authorised + 6-255: Currently unused. + + Decorator: @client.connect_callback() (```client``` is the name of the + instance which this callback is being attached to) + + """ + with self._callback_mutex: + self._on_connect = func + + def connect_callback(self): + def decorator(func): + self.on_connect = func + return func + return decorator + + @property + def on_connect_fail(self): + """If implemented, called when the client failed to connect + to the broker.""" + return self._on_connect_fail + + @on_connect_fail.setter + def on_connect_fail(self, func): + """ Define the connection failure callback implementation + + Expected signature is: + on_connect_fail(client, userdata) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + + Decorator: @client.connect_fail_callback() (```client``` is the name of the + instance which this callback is being attached to) + + """ + with self._callback_mutex: + self._on_connect_fail = func + + def connect_fail_callback(self): + def decorator(func): + self.on_connect_fail = func + return func + return decorator + + @property + def on_subscribe(self): + """If implemented, called when the broker responds to a subscribe + request.""" + return self._on_subscribe + + @on_subscribe.setter + def on_subscribe(self, func): + """ Define the subscribe callback implementation. + + Expected signature for MQTT v3.1.1 and v3.1 is: + subscribe_callback(client, userdata, mid, granted_qos) + + and for MQTT v5.0: + subscribe_callback(client, userdata, mid, reasonCodes, properties) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + mid: matches the mid variable returned from the corresponding + subscribe() call. + granted_qos: list of integers that give the QoS level the broker has + granted for each of the different subscription requests. + reasonCodes: the MQTT v5.0 reason codes received from the broker for each + subscription. A list of ReasonCodes instances. + properties: the MQTT v5.0 properties received from the broker. A + list of Properties class instances. + + Decorator: @client.subscribe_callback() (```client``` is the name of the + instance which this callback is being attached to) + """ + with self._callback_mutex: + self._on_subscribe = func + + def subscribe_callback(self): + def decorator(func): + self.on_subscribe = func + return func + return decorator + + @property + def on_message(self): + """If implemented, called when a message has been received on a topic + that the client subscribes to. + + This callback will be called for every message received. Use + message_callback_add() to define multiple callbacks that will be called + for specific topic filters.""" + return self._on_message + + @on_message.setter + def on_message(self, func): + """ Define the message received callback implementation. + + Expected signature is: + on_message_callback(client, userdata, message) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + message: an instance of MQTTMessage. + This is a class with members topic, payload, qos, retain. + + Decorator: @client.message_callback() (```client``` is the name of the + instance which this callback is being attached to) + + """ + with self._callback_mutex: + self._on_message = func + + def message_callback(self): + def decorator(func): + self.on_message = func + return func + return decorator + + @property + def on_publish(self): + """If implemented, called when a message that was to be sent using the + publish() call has completed transmission to the broker. + + For messages with QoS levels 1 and 2, this means that the appropriate + handshakes have completed. For QoS 0, this simply means that the message + has left the client. + This callback is important because even if the publish() call returns + success, it does not always mean that the message has been sent.""" + return self._on_publish + + @on_publish.setter + def on_publish(self, func): + """ Define the published message callback implementation. + + Expected signature is: + on_publish_callback(client, userdata, mid) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + mid: matches the mid variable returned from the corresponding + publish() call, to allow outgoing messages to be tracked. + + Decorator: @client.publish_callback() (```client``` is the name of the + instance which this callback is being attached to) + + """ + with self._callback_mutex: + self._on_publish = func + + def publish_callback(self): + def decorator(func): + self.on_publish = func + return func + return decorator + + @property + def on_unsubscribe(self): + """If implemented, called when the broker responds to an unsubscribe + request.""" + return self._on_unsubscribe + + @on_unsubscribe.setter + def on_unsubscribe(self, func): + """ Define the unsubscribe callback implementation. + + Expected signature for MQTT v3.1.1 and v3.1 is: + unsubscribe_callback(client, userdata, mid) + + and for MQTT v5.0: + unsubscribe_callback(client, userdata, mid, properties, reasonCodes) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + mid: matches the mid variable returned from the corresponding + unsubscribe() call. + properties: the MQTT v5.0 properties received from the broker. A + list of Properties class instances. + reasonCodes: the MQTT v5.0 reason codes received from the broker for each + unsubscribe topic. A list of ReasonCodes instances + + Decorator: @client.unsubscribe_callback() (```client``` is the name of the + instance which this callback is being attached to) + """ + with self._callback_mutex: + self._on_unsubscribe = func + + def unsubscribe_callback(self): + def decorator(func): + self.on_unsubscribe = func + return func + return decorator + + @property + def on_disconnect(self): + """If implemented, called when the client disconnects from the broker. + """ + return self._on_disconnect + + @on_disconnect.setter + def on_disconnect(self, func): + """ Define the disconnect callback implementation. + + Expected signature for MQTT v3.1.1 and v3.1 is: + disconnect_callback(client, userdata, rc) + + and for MQTT v5.0: + disconnect_callback(client, userdata, reasonCode, properties) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + rc: the disconnection result + The rc parameter indicates the disconnection state. If + MQTT_ERR_SUCCESS (0), the callback was called in response to + a disconnect() call. If any other value the disconnection + was unexpected, such as might be caused by a network error. + + Decorator: @client.disconnect_callback() (```client``` is the name of the + instance which this callback is being attached to) + + """ + with self._callback_mutex: + self._on_disconnect = func + + def disconnect_callback(self): + def decorator(func): + self.on_disconnect = func + return func + return decorator + + @property + def on_socket_open(self): + """If implemented, called just after the socket was opend.""" + return self._on_socket_open + + @on_socket_open.setter + def on_socket_open(self, func): + """Define the socket_open callback implementation. + + This should be used to register the socket to an external event loop for reading. + + Expected signature is: + socket_open_callback(client, userdata, socket) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + sock: the socket which was just opened. + + Decorator: @client.socket_open_callback() (```client``` is the name of the + instance which this callback is being attached to) + """ + with self._callback_mutex: + self._on_socket_open = func + + def socket_open_callback(self): + def decorator(func): + self.on_socket_open = func + return func + return decorator + + def _call_socket_open(self): + """Call the socket_open callback with the just-opened socket""" + with self._callback_mutex: + on_socket_open = self.on_socket_open + + if on_socket_open: + with self._in_callback_mutex: + try: + on_socket_open(self, self._userdata, self._sock) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_socket_open: %s', err) + if not self.suppress_exceptions: + raise + + @property + def on_socket_close(self): + """If implemented, called just before the socket is closed.""" + return self._on_socket_close + + @on_socket_close.setter + def on_socket_close(self, func): + """Define the socket_close callback implementation. + + This should be used to unregister the socket from an external event loop for reading. + + Expected signature is: + socket_close_callback(client, userdata, socket) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + sock: the socket which is about to be closed. + + Decorator: @client.socket_close_callback() (```client``` is the name of the + instance which this callback is being attached to) + """ + with self._callback_mutex: + self._on_socket_close = func + + def socket_close_callback(self): + def decorator(func): + self.on_socket_close = func + return func + return decorator + + def _call_socket_close(self, sock): + """Call the socket_close callback with the about-to-be-closed socket""" + with self._callback_mutex: + on_socket_close = self.on_socket_close + + if on_socket_close: + with self._in_callback_mutex: + try: + on_socket_close(self, self._userdata, sock) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_socket_close: %s', err) + if not self.suppress_exceptions: + raise + + @property + def on_socket_register_write(self): + """If implemented, called when the socket needs writing but can't.""" + return self._on_socket_register_write + + @on_socket_register_write.setter + def on_socket_register_write(self, func): + """Define the socket_register_write callback implementation. + + This should be used to register the socket with an external event loop for writing. + + Expected signature is: + socket_register_write_callback(client, userdata, socket) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + sock: the socket which should be registered for writing + + Decorator: @client.socket_register_write_callback() (```client``` is the name of the + instance which this callback is being attached to) + """ + with self._callback_mutex: + self._on_socket_register_write = func + + def socket_register_write_callback(self): + def decorator(func): + self._on_socket_register_write = func + return func + return decorator + + def _call_socket_register_write(self): + """Call the socket_register_write callback with the unwritable socket""" + if not self._sock or self._registered_write: + return + self._registered_write = True + with self._callback_mutex: + on_socket_register_write = self.on_socket_register_write + + if on_socket_register_write: + try: + on_socket_register_write( + self, self._userdata, self._sock) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_socket_register_write: %s', err) + if not self.suppress_exceptions: + raise + + @property + def on_socket_unregister_write(self): + """If implemented, called when the socket doesn't need writing anymore.""" + return self._on_socket_unregister_write + + @on_socket_unregister_write.setter + def on_socket_unregister_write(self, func): + """Define the socket_unregister_write callback implementation. + + This should be used to unregister the socket from an external event loop for writing. + + Expected signature is: + socket_unregister_write_callback(client, userdata, socket) + + client: the client instance for this callback + userdata: the private user data as set in Client() or userdata_set() + sock: the socket which should be unregistered for writing + + Decorator: @client.socket_unregister_write_callback() (```client``` is the name of the + instance which this callback is being attached to) + """ + with self._callback_mutex: + self._on_socket_unregister_write = func + + def socket_unregister_write_callback(self): + def decorator(func): + self._on_socket_unregister_write = func + return func + return decorator + + def _call_socket_unregister_write(self, sock=None): + """Call the socket_unregister_write callback with the writable socket""" + sock = sock or self._sock + if not sock or not self._registered_write: + return + self._registered_write = False + + with self._callback_mutex: + on_socket_unregister_write = self.on_socket_unregister_write + + if on_socket_unregister_write: + try: + on_socket_unregister_write(self, self._userdata, sock) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_socket_unregister_write: %s', err) + if not self.suppress_exceptions: + raise + + def message_callback_add(self, sub, callback): + """Register a message callback for a specific topic. + Messages that match 'sub' will be passed to 'callback'. Any + non-matching messages will be passed to the default on_message + callback. + + Call multiple times with different 'sub' to define multiple topic + specific callbacks. + + Topic specific callbacks may be removed with + message_callback_remove().""" + if callback is None or sub is None: + raise ValueError("sub and callback must both be defined.") + + with self._callback_mutex: + self._on_message_filtered[sub] = callback + + def topic_callback(self, sub): + def decorator(func): + self.message_callback_add(sub, func) + return func + return decorator + + def message_callback_remove(self, sub): + """Remove a message callback previously registered with + message_callback_add().""" + if sub is None: + raise ValueError("sub must defined.") + + with self._callback_mutex: + try: + del self._on_message_filtered[sub] + except KeyError: # no such subscription + pass + + # ============================================================ + # Private functions + # ============================================================ + + def _loop_rc_handle(self, rc, properties=None): + if rc: + self._sock_close() + + if self._state == mqtt_cs_disconnecting: + rc = MQTT_ERR_SUCCESS + + self._do_on_disconnect(rc, properties) + + return rc + + def _packet_read(self): + # This gets called if pselect() indicates that there is network data + # available - ie. at least one byte. What we do depends on what data we + # already have. + # If we've not got a command, attempt to read one and save it. This should + # always work because it's only a single byte. + # Then try to read the remaining length. This may fail because it is may + # be more than one byte - will need to save data pending next read if it + # does fail. + # Then try to read the remaining payload, where 'payload' here means the + # combined variable header and actual payload. This is the most likely to + # fail due to longer length, so save current data and current position. + # After all data is read, send to _mqtt_handle_packet() to deal with. + # Finally, free the memory and reset everything to starting conditions. + if self._in_packet['command'] == 0: + try: + command = self._sock_recv(1) + except BlockingIOError: + return MQTT_ERR_AGAIN + except ConnectionError as err: + self._easy_log( + MQTT_LOG_ERR, 'failed to receive on socket: %s', err) + return MQTT_ERR_CONN_LOST + else: + if len(command) == 0: + return MQTT_ERR_CONN_LOST + command, = struct.unpack("!B", command) + self._in_packet['command'] = command + + if self._in_packet['have_remaining'] == 0: + # Read remaining + # Algorithm for decoding taken from pseudo code at + # http://publib.boulder.ibm.com/infocenter/wmbhelp/v6r0m0/topic/com.ibm.etools.mft.doc/ac10870_.htm + while True: + try: + byte = self._sock_recv(1) + except BlockingIOError: + return MQTT_ERR_AGAIN + except ConnectionError as err: + self._easy_log( + MQTT_LOG_ERR, 'failed to receive on socket: %s', err) + return MQTT_ERR_CONN_LOST + else: + if len(byte) == 0: + return MQTT_ERR_CONN_LOST + byte, = struct.unpack("!B", byte) + self._in_packet['remaining_count'].append(byte) + # Max 4 bytes length for remaining length as defined by protocol. + # Anything more likely means a broken/malicious client. + if len(self._in_packet['remaining_count']) > 4: + return MQTT_ERR_PROTOCOL + + self._in_packet['remaining_length'] += ( + byte & 127) * self._in_packet['remaining_mult'] + self._in_packet['remaining_mult'] = self._in_packet['remaining_mult'] * 128 + + if (byte & 128) == 0: + break + + self._in_packet['have_remaining'] = 1 + self._in_packet['to_process'] = self._in_packet['remaining_length'] + + count = 100 # Don't get stuck in this loop if we have a huge message. + while self._in_packet['to_process'] > 0: + try: + data = self._sock_recv(self._in_packet['to_process']) + except BlockingIOError: + return MQTT_ERR_AGAIN + except ConnectionError as err: + self._easy_log( + MQTT_LOG_ERR, 'failed to receive on socket: %s', err) + return MQTT_ERR_CONN_LOST + else: + if len(data) == 0: + return MQTT_ERR_CONN_LOST + self._in_packet['to_process'] -= len(data) + self._in_packet['packet'] += data + count -= 1 + if count == 0: + with self._msgtime_mutex: + self._last_msg_in = time_func() + return MQTT_ERR_AGAIN + + # All data for this packet is read. + self._in_packet['pos'] = 0 + rc = self._packet_handle() + + # Free data and reset values + self._in_packet = { + 'command': 0, + 'have_remaining': 0, + 'remaining_count': [], + 'remaining_mult': 1, + 'remaining_length': 0, + 'packet': bytearray(b""), + 'to_process': 0, + 'pos': 0} + + with self._msgtime_mutex: + self._last_msg_in = time_func() + return rc + + def _packet_write(self): + while True: + try: + packet = self._out_packet.popleft() + except IndexError: + return MQTT_ERR_SUCCESS + + try: + write_length = self._sock_send( + packet['packet'][packet['pos']:]) + except (AttributeError, ValueError): + self._out_packet.appendleft(packet) + return MQTT_ERR_SUCCESS + except BlockingIOError: + self._out_packet.appendleft(packet) + return MQTT_ERR_AGAIN + except ConnectionError as err: + self._out_packet.appendleft(packet) + self._easy_log( + MQTT_LOG_ERR, 'failed to receive on socket: %s', err) + return MQTT_ERR_CONN_LOST + + if write_length > 0: + packet['to_process'] -= write_length + packet['pos'] += write_length + + if packet['to_process'] == 0: + if (packet['command'] & 0xF0) == PUBLISH and packet['qos'] == 0: + with self._callback_mutex: + on_publish = self.on_publish + + if on_publish: + with self._in_callback_mutex: + try: + on_publish( + self, self._userdata, packet['mid']) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_publish: %s', err) + if not self.suppress_exceptions: + raise + + packet['info']._set_as_published() + + if (packet['command'] & 0xF0) == DISCONNECT: + with self._msgtime_mutex: + self._last_msg_out = time_func() + + self._do_on_disconnect(MQTT_ERR_SUCCESS) + self._sock_close() + return MQTT_ERR_SUCCESS + + else: + # We haven't finished with this packet + self._out_packet.appendleft(packet) + else: + break + + with self._msgtime_mutex: + self._last_msg_out = time_func() + + return MQTT_ERR_SUCCESS + + def _easy_log(self, level, fmt, *args): + if self.on_log is not None: + buf = fmt % args + try: + self.on_log(self, self._userdata, level, buf) + except Exception: + # Can't _easy_log this, as we'll recurse until we break + pass # self._logger will pick this up, so we're fine + if self._logger is not None: + level_std = LOGGING_LEVEL[level] + self._logger.log(level_std, fmt, *args) + + def _check_keepalive(self): + if self._keepalive == 0: + return MQTT_ERR_SUCCESS + + now = time_func() + + with self._msgtime_mutex: + last_msg_out = self._last_msg_out + last_msg_in = self._last_msg_in + + if self._sock is not None and (now - last_msg_out >= self._keepalive or now - last_msg_in >= self._keepalive): + if self._state == mqtt_cs_connected and self._ping_t == 0: + try: + self._send_pingreq() + except Exception: + self._sock_close() + self._do_on_disconnect(MQTT_ERR_CONN_LOST) + else: + with self._msgtime_mutex: + self._last_msg_out = now + self._last_msg_in = now + else: + self._sock_close() + + if self._state == mqtt_cs_disconnecting: + rc = MQTT_ERR_SUCCESS + else: + rc = MQTT_ERR_KEEPALIVE + + self._do_on_disconnect(rc) + + def _mid_generate(self): + with self._mid_generate_mutex: + self._last_mid += 1 + if self._last_mid == 65536: + self._last_mid = 1 + return self._last_mid + + @staticmethod + def _topic_wildcard_len_check(topic): + # Search for + or # in a topic. Return MQTT_ERR_INVAL if found. + # Also returns MQTT_ERR_INVAL if the topic string is too long. + # Returns MQTT_ERR_SUCCESS if everything is fine. + if b'+' in topic or b'#' in topic or len(topic) > 65535: + return MQTT_ERR_INVAL + else: + return MQTT_ERR_SUCCESS + + @staticmethod + def _filter_wildcard_len_check(sub): + if (len(sub) == 0 or len(sub) > 65535 + or any(b'+' in p or b'#' in p for p in sub.split(b'/') if len(p) > 1) + or b'#/' in sub): + return MQTT_ERR_INVAL + else: + return MQTT_ERR_SUCCESS + + def _send_pingreq(self): + self._easy_log(MQTT_LOG_DEBUG, "Sending PINGREQ") + rc = self._send_simple_command(PINGREQ) + if rc == MQTT_ERR_SUCCESS: + self._ping_t = time_func() + return rc + + def _send_pingresp(self): + self._easy_log(MQTT_LOG_DEBUG, "Sending PINGRESP") + return self._send_simple_command(PINGRESP) + + def _send_puback(self, mid): + self._easy_log(MQTT_LOG_DEBUG, "Sending PUBACK (Mid: %d)", mid) + return self._send_command_with_mid(PUBACK, mid, False) + + def _send_pubcomp(self, mid): + self._easy_log(MQTT_LOG_DEBUG, "Sending PUBCOMP (Mid: %d)", mid) + return self._send_command_with_mid(PUBCOMP, mid, False) + + def _pack_remaining_length(self, packet, remaining_length): + remaining_bytes = [] + while True: + byte = remaining_length % 128 + remaining_length = remaining_length // 128 + # If there are more digits to encode, set the top bit of this digit + if remaining_length > 0: + byte |= 0x80 + + remaining_bytes.append(byte) + packet.append(byte) + if remaining_length == 0: + # FIXME - this doesn't deal with incorrectly large payloads + return packet + + def _pack_str16(self, packet, data): + if isinstance(data, unicode): + data = data.encode('utf-8') + packet.extend(struct.pack("!H", len(data))) + packet.extend(data) + + def _send_publish(self, mid, topic, payload=b'', qos=0, retain=False, dup=False, info=None, properties=None): + # we assume that topic and payload are already properly encoded + assert not isinstance(topic, unicode) and not isinstance( + payload, unicode) and payload is not None + + if self._sock is None: + return MQTT_ERR_NO_CONN + + command = PUBLISH | ((dup & 0x1) << 3) | (qos << 1) | retain + packet = bytearray() + packet.append(command) + + payloadlen = len(payload) + remaining_length = 2 + len(topic) + payloadlen + + if payloadlen == 0: + if self._protocol == MQTTv5: + self._easy_log( + MQTT_LOG_DEBUG, + "Sending PUBLISH (d%d, q%d, r%d, m%d), '%s', properties=%s (NULL payload)", + dup, qos, retain, mid, topic, properties + ) + else: + self._easy_log( + MQTT_LOG_DEBUG, + "Sending PUBLISH (d%d, q%d, r%d, m%d), '%s' (NULL payload)", + dup, qos, retain, mid, topic + ) + else: + if self._protocol == MQTTv5: + self._easy_log( + MQTT_LOG_DEBUG, + "Sending PUBLISH (d%d, q%d, r%d, m%d), '%s', properties=%s, ... (%d bytes)", + dup, qos, retain, mid, topic, properties, payloadlen + ) + else: + self._easy_log( + MQTT_LOG_DEBUG, + "Sending PUBLISH (d%d, q%d, r%d, m%d), '%s', ... (%d bytes)", + dup, qos, retain, mid, topic, payloadlen + ) + + if qos > 0: + # For message id + remaining_length += 2 + + if self._protocol == MQTTv5: + if properties is None: + packed_properties = b'\x00' + else: + packed_properties = properties.pack() + remaining_length += len(packed_properties) + + self._pack_remaining_length(packet, remaining_length) + self._pack_str16(packet, topic) + + if qos > 0: + # For message id + packet.extend(struct.pack("!H", mid)) + + if self._protocol == MQTTv5: + packet.extend(packed_properties) + + packet.extend(payload) + + return self._packet_queue(PUBLISH, packet, mid, qos, info) + + def _send_pubrec(self, mid): + self._easy_log(MQTT_LOG_DEBUG, "Sending PUBREC (Mid: %d)", mid) + return self._send_command_with_mid(PUBREC, mid, False) + + def _send_pubrel(self, mid): + self._easy_log(MQTT_LOG_DEBUG, "Sending PUBREL (Mid: %d)", mid) + return self._send_command_with_mid(PUBREL | 2, mid, False) + + def _send_command_with_mid(self, command, mid, dup): + # For PUBACK, PUBCOMP, PUBREC, and PUBREL + if dup: + command |= 0x8 + + remaining_length = 2 + packet = struct.pack('!BBH', command, remaining_length, mid) + return self._packet_queue(command, packet, mid, 1) + + def _send_simple_command(self, command): + # For DISCONNECT, PINGREQ and PINGRESP + remaining_length = 0 + packet = struct.pack('!BB', command, remaining_length) + return self._packet_queue(command, packet, 0, 0) + + def _send_connect(self, keepalive): + proto_ver = self._protocol + # hard-coded UTF-8 encoded string + protocol = b"MQTT" if proto_ver >= MQTTv311 else b"MQIsdp" + + remaining_length = 2 + len(protocol) + 1 + \ + 1 + 2 + 2 + len(self._client_id) + + connect_flags = 0 + if self._protocol == MQTTv5: + if self._clean_start == True: + connect_flags |= 0x02 + elif self._clean_start == MQTT_CLEAN_START_FIRST_ONLY and self._mqttv5_first_connect: + connect_flags |= 0x02 + elif self._clean_session: + connect_flags |= 0x02 + + if self._will: + remaining_length += 2 + \ + len(self._will_topic) + 2 + len(self._will_payload) + connect_flags |= 0x04 | ((self._will_qos & 0x03) << 3) | ( + (self._will_retain & 0x01) << 5) + + if self._username is not None: + remaining_length += 2 + len(self._username) + connect_flags |= 0x80 + if self._password is not None: + connect_flags |= 0x40 + remaining_length += 2 + len(self._password) + + if self._protocol == MQTTv5: + if self._connect_properties is None: + packed_connect_properties = b'\x00' + else: + packed_connect_properties = self._connect_properties.pack() + remaining_length += len(packed_connect_properties) + if self._will: + if self._will_properties is None: + packed_will_properties = b'\x00' + else: + packed_will_properties = self._will_properties.pack() + remaining_length += len(packed_will_properties) + + command = CONNECT + packet = bytearray() + packet.append(command) + + # as per the mosquitto broker, if the MSB of this version is set + # to 1, then it treats the connection as a bridge + if self._client_mode == MQTT_BRIDGE: + proto_ver |= 0x80 + + self._pack_remaining_length(packet, remaining_length) + packet.extend(struct.pack("!H" + str(len(protocol)) + "sBBH", len(protocol), protocol, proto_ver, connect_flags, + keepalive)) + + if self._protocol == MQTTv5: + packet += packed_connect_properties + + self._pack_str16(packet, self._client_id) + + if self._will: + if self._protocol == MQTTv5: + packet += packed_will_properties + self._pack_str16(packet, self._will_topic) + self._pack_str16(packet, self._will_payload) + + if self._username is not None: + self._pack_str16(packet, self._username) + + if self._password is not None: + self._pack_str16(packet, self._password) + + self._keepalive = keepalive + if self._protocol == MQTTv5: + self._easy_log( + MQTT_LOG_DEBUG, + "Sending CONNECT (u%d, p%d, wr%d, wq%d, wf%d, c%d, k%d) client_id=%s properties=%s", + (connect_flags & 0x80) >> 7, + (connect_flags & 0x40) >> 6, + (connect_flags & 0x20) >> 5, + (connect_flags & 0x18) >> 3, + (connect_flags & 0x4) >> 2, + (connect_flags & 0x2) >> 1, + keepalive, + self._client_id, + self._connect_properties + ) + else: + self._easy_log( + MQTT_LOG_DEBUG, + "Sending CONNECT (u%d, p%d, wr%d, wq%d, wf%d, c%d, k%d) client_id=%s", + (connect_flags & 0x80) >> 7, + (connect_flags & 0x40) >> 6, + (connect_flags & 0x20) >> 5, + (connect_flags & 0x18) >> 3, + (connect_flags & 0x4) >> 2, + (connect_flags & 0x2) >> 1, + keepalive, + self._client_id + ) + return self._packet_queue(command, packet, 0, 0) + + def _send_disconnect(self, reasoncode=None, properties=None): + if self._protocol == MQTTv5: + self._easy_log(MQTT_LOG_DEBUG, "Sending DISCONNECT reasonCode=%s properties=%s", + reasoncode, + properties + ) + else: + self._easy_log(MQTT_LOG_DEBUG, "Sending DISCONNECT") + + remaining_length = 0 + + command = DISCONNECT + packet = bytearray() + packet.append(command) + + if self._protocol == MQTTv5: + if properties is not None or reasoncode is not None: + if reasoncode is None: + reasoncode = ReasonCodes(DISCONNECT >> 4, identifier=0) + remaining_length += 1 + if properties is not None: + packed_props = properties.pack() + remaining_length += len(packed_props) + + self._pack_remaining_length(packet, remaining_length) + + if self._protocol == MQTTv5: + if reasoncode != None: + packet += reasoncode.pack() + if properties != None: + packet += packed_props + + return self._packet_queue(command, packet, 0, 0) + + def _send_subscribe(self, dup, topics, properties=None): + remaining_length = 2 + if self._protocol == MQTTv5: + if properties is None: + packed_subscribe_properties = b'\x00' + else: + packed_subscribe_properties = properties.pack() + remaining_length += len(packed_subscribe_properties) + for t, _ in topics: + remaining_length += 2 + len(t) + 1 + + command = SUBSCRIBE | (dup << 3) | 0x2 + packet = bytearray() + packet.append(command) + self._pack_remaining_length(packet, remaining_length) + local_mid = self._mid_generate() + packet.extend(struct.pack("!H", local_mid)) + + if self._protocol == MQTTv5: + packet += packed_subscribe_properties + + for t, q in topics: + self._pack_str16(packet, t) + if self._protocol == MQTTv5: + packet += q.pack() + else: + packet.append(q) + + self._easy_log( + MQTT_LOG_DEBUG, + "Sending SUBSCRIBE (d%d, m%d) %s", + dup, + local_mid, + topics, + ) + return (self._packet_queue(command, packet, local_mid, 1), local_mid) + + def _send_unsubscribe(self, dup, topics, properties=None): + remaining_length = 2 + if self._protocol == MQTTv5: + if properties is None: + packed_unsubscribe_properties = b'\x00' + else: + packed_unsubscribe_properties = properties.pack() + remaining_length += len(packed_unsubscribe_properties) + for t in topics: + remaining_length += 2 + len(t) + + command = UNSUBSCRIBE | (dup << 3) | 0x2 + packet = bytearray() + packet.append(command) + self._pack_remaining_length(packet, remaining_length) + local_mid = self._mid_generate() + packet.extend(struct.pack("!H", local_mid)) + + if self._protocol == MQTTv5: + packet += packed_unsubscribe_properties + + for t in topics: + self._pack_str16(packet, t) + + # topics_repr = ", ".join("'"+topic.decode('utf8')+"'" for topic in topics) + if self._protocol == MQTTv5: + self._easy_log( + MQTT_LOG_DEBUG, + "Sending UNSUBSCRIBE (d%d, m%d) %s %s", + dup, + local_mid, + properties, + topics, + ) + else: + self._easy_log( + MQTT_LOG_DEBUG, + "Sending UNSUBSCRIBE (d%d, m%d) %s", + dup, + local_mid, + topics, + ) + return (self._packet_queue(command, packet, local_mid, 1), local_mid) + + def _check_clean_session(self): + if self._protocol == MQTTv5: + if self._clean_start == MQTT_CLEAN_START_FIRST_ONLY: + return self._mqttv5_first_connect + else: + return self._clean_start + else: + return self._clean_session + + def _messages_reconnect_reset_out(self): + with self._out_message_mutex: + self._inflight_messages = 0 + for m in self._out_messages.values(): + m.timestamp = 0 + if self._max_inflight_messages == 0 or self._inflight_messages < self._max_inflight_messages: + if m.qos == 0: + m.state = mqtt_ms_publish + elif m.qos == 1: + # self._inflight_messages = self._inflight_messages + 1 + if m.state == mqtt_ms_wait_for_puback: + m.dup = True + m.state = mqtt_ms_publish + elif m.qos == 2: + # self._inflight_messages = self._inflight_messages + 1 + if self._check_clean_session(): + if m.state != mqtt_ms_publish: + m.dup = True + m.state = mqtt_ms_publish + else: + if m.state == mqtt_ms_wait_for_pubcomp: + m.state = mqtt_ms_resend_pubrel + else: + if m.state == mqtt_ms_wait_for_pubrec: + m.dup = True + m.state = mqtt_ms_publish + else: + m.state = mqtt_ms_queued + + def _messages_reconnect_reset_in(self): + with self._in_message_mutex: + if self._check_clean_session(): + self._in_messages = collections.OrderedDict() + return + for m in self._in_messages.values(): + m.timestamp = 0 + if m.qos != 2: + self._in_messages.pop(m.mid) + else: + # Preserve current state + pass + + def _messages_reconnect_reset(self): + self._messages_reconnect_reset_out() + self._messages_reconnect_reset_in() + + def _packet_queue(self, command, packet, mid, qos, info=None): + mpkt = { + 'command': command, + 'mid': mid, + 'qos': qos, + 'pos': 0, + 'to_process': len(packet), + 'packet': packet, + 'info': info} + + self._out_packet.append(mpkt) + + # Write a single byte to sockpairW (connected to sockpairR) to break + # out of select() if in threaded mode. + if self._sockpairW is not None: + try: + self._sockpairW.send(sockpair_data) + except BlockingIOError: + pass + + # If we have an external event loop registered, use that instead + # of calling loop_write() directly. + if self._thread is None and self._on_socket_register_write is None: + if self._in_callback_mutex.acquire(False): + self._in_callback_mutex.release() + return self.loop_write() + + self._call_socket_register_write() + + return MQTT_ERR_SUCCESS + + def _packet_handle(self): + cmd = self._in_packet['command'] & 0xF0 + if cmd == PINGREQ: + return self._handle_pingreq() + elif cmd == PINGRESP: + return self._handle_pingresp() + elif cmd == PUBACK: + return self._handle_pubackcomp("PUBACK") + elif cmd == PUBCOMP: + return self._handle_pubackcomp("PUBCOMP") + elif cmd == PUBLISH: + return self._handle_publish() + elif cmd == PUBREC: + return self._handle_pubrec() + elif cmd == PUBREL: + return self._handle_pubrel() + elif cmd == CONNACK: + return self._handle_connack() + elif cmd == SUBACK: + return self._handle_suback() + elif cmd == UNSUBACK: + return self._handle_unsuback() + elif cmd == DISCONNECT and self._protocol == MQTTv5: # only allowed in MQTT 5.0 + return self._handle_disconnect() + else: + # If we don't recognise the command, return an error straight away. + self._easy_log(MQTT_LOG_ERR, "Error: Unrecognised command %s", cmd) + return MQTT_ERR_PROTOCOL + + def _handle_pingreq(self): + if self._in_packet['remaining_length'] != 0: + return MQTT_ERR_PROTOCOL + + self._easy_log(MQTT_LOG_DEBUG, "Received PINGREQ") + return self._send_pingresp() + + def _handle_pingresp(self): + if self._in_packet['remaining_length'] != 0: + return MQTT_ERR_PROTOCOL + + # No longer waiting for a PINGRESP. + self._ping_t = 0 + self._easy_log(MQTT_LOG_DEBUG, "Received PINGRESP") + return MQTT_ERR_SUCCESS + + def _handle_connack(self): + if self._protocol == MQTTv5: + if self._in_packet['remaining_length'] < 2: + return MQTT_ERR_PROTOCOL + elif self._in_packet['remaining_length'] != 2: + return MQTT_ERR_PROTOCOL + + if self._protocol == MQTTv5: + (flags, result) = struct.unpack( + "!BB", self._in_packet['packet'][:2]) + if result == 1: + # This is probably a failure from a broker that doesn't support + # MQTT v5. + reason = 132 # Unsupported protocol version + properties = None + else: + reason = ReasonCodes(CONNACK >> 4, identifier=result) + properties = Properties(CONNACK >> 4) + properties.unpack(self._in_packet['packet'][2:]) + else: + (flags, result) = struct.unpack("!BB", self._in_packet['packet']) + if self._protocol == MQTTv311: + if result == CONNACK_REFUSED_PROTOCOL_VERSION: + if not self._reconnect_on_failure: + return MQTT_ERR_PROTOCOL + self._easy_log( + MQTT_LOG_DEBUG, + "Received CONNACK (%s, %s), attempting downgrade to MQTT v3.1.", + flags, result + ) + # Downgrade to MQTT v3.1 + self._protocol = MQTTv31 + return self.reconnect() + elif (result == CONNACK_REFUSED_IDENTIFIER_REJECTED + and self._client_id == b''): + if not self._reconnect_on_failure: + return MQTT_ERR_PROTOCOL + self._easy_log( + MQTT_LOG_DEBUG, + "Received CONNACK (%s, %s), attempting to use non-empty CID", + flags, result, + ) + self._client_id = base62(uuid.uuid4().int, padding=22) + return self.reconnect() + + if result == 0: + self._state = mqtt_cs_connected + self._reconnect_delay = None + + if self._protocol == MQTTv5: + self._easy_log( + MQTT_LOG_DEBUG, "Received CONNACK (%s, %s) properties=%s", flags, reason, properties) + else: + self._easy_log( + MQTT_LOG_DEBUG, "Received CONNACK (%s, %s)", flags, result) + + # it won't be the first successful connect any more + self._mqttv5_first_connect = False + + with self._callback_mutex: + on_connect = self.on_connect + + if on_connect: + flags_dict = {} + flags_dict['session present'] = flags & 0x01 + with self._in_callback_mutex: + try: + if self._protocol == MQTTv5: + on_connect(self, self._userdata, + flags_dict, reason, properties) + else: + on_connect( + self, self._userdata, flags_dict, result) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_connect: %s', err) + if not self.suppress_exceptions: + raise + + if result == 0: + rc = 0 + with self._out_message_mutex: + for m in self._out_messages.values(): + m.timestamp = time_func() + if m.state == mqtt_ms_queued: + self.loop_write() # Process outgoing messages that have just been queued up + return MQTT_ERR_SUCCESS + + if m.qos == 0: + with self._in_callback_mutex: # Don't call loop_write after _send_publish() + rc = self._send_publish( + m.mid, + m.topic.encode('utf-8'), + m.payload, + m.qos, + m.retain, + m.dup, + properties=m.properties + ) + if rc != 0: + return rc + elif m.qos == 1: + if m.state == mqtt_ms_publish: + self._inflight_messages += 1 + m.state = mqtt_ms_wait_for_puback + with self._in_callback_mutex: # Don't call loop_write after _send_publish() + rc = self._send_publish( + m.mid, + m.topic.encode('utf-8'), + m.payload, + m.qos, + m.retain, + m.dup, + properties=m.properties + ) + if rc != 0: + return rc + elif m.qos == 2: + if m.state == mqtt_ms_publish: + self._inflight_messages += 1 + m.state = mqtt_ms_wait_for_pubrec + with self._in_callback_mutex: # Don't call loop_write after _send_publish() + rc = self._send_publish( + m.mid, + m.topic.encode('utf-8'), + m.payload, + m.qos, + m.retain, + m.dup, + properties=m.properties + ) + if rc != 0: + return rc + elif m.state == mqtt_ms_resend_pubrel: + self._inflight_messages += 1 + m.state = mqtt_ms_wait_for_pubcomp + with self._in_callback_mutex: # Don't call loop_write after _send_publish() + rc = self._send_pubrel(m.mid) + if rc != 0: + return rc + self.loop_write() # Process outgoing messages that have just been queued up + + return rc + elif result > 0 and result < 6: + return MQTT_ERR_CONN_REFUSED + else: + return MQTT_ERR_PROTOCOL + + def _handle_disconnect(self): + packet_type = DISCONNECT >> 4 + reasonCode = properties = None + if self._in_packet['remaining_length'] > 2: + reasonCode = ReasonCodes(packet_type) + reasonCode.unpack(self._in_packet['packet']) + if self._in_packet['remaining_length'] > 3: + properties = Properties(packet_type) + props, props_len = properties.unpack( + self._in_packet['packet'][1:]) + self._easy_log(MQTT_LOG_DEBUG, "Received DISCONNECT %s %s", + reasonCode, + properties + ) + + self._loop_rc_handle(reasonCode, properties) + + return MQTT_ERR_SUCCESS + + def _handle_suback(self): + self._easy_log(MQTT_LOG_DEBUG, "Received SUBACK") + pack_format = "!H" + str(len(self._in_packet['packet']) - 2) + 's' + (mid, packet) = struct.unpack(pack_format, self._in_packet['packet']) + + if self._protocol == MQTTv5: + properties = Properties(SUBACK >> 4) + props, props_len = properties.unpack(packet) + reasoncodes = [] + for c in packet[props_len:]: + if sys.version_info[0] < 3: + c = ord(c) + reasoncodes.append(ReasonCodes(SUBACK >> 4, identifier=c)) + else: + pack_format = "!" + "B" * len(packet) + granted_qos = struct.unpack(pack_format, packet) + + with self._callback_mutex: + on_subscribe = self.on_subscribe + + if on_subscribe: + with self._in_callback_mutex: # Don't call loop_write after _send_publish() + try: + if self._protocol == MQTTv5: + on_subscribe( + self, self._userdata, mid, reasoncodes, properties) + else: + on_subscribe( + self, self._userdata, mid, granted_qos) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_subscribe: %s', err) + if not self.suppress_exceptions: + raise + + return MQTT_ERR_SUCCESS + + def _handle_publish(self): + rc = 0 + + header = self._in_packet['command'] + message = MQTTMessage() + message.dup = (header & 0x08) >> 3 + message.qos = (header & 0x06) >> 1 + message.retain = (header & 0x01) + + pack_format = "!H" + str(len(self._in_packet['packet']) - 2) + 's' + (slen, packet) = struct.unpack(pack_format, self._in_packet['packet']) + pack_format = '!' + str(slen) + 's' + str(len(packet) - slen) + 's' + (topic, packet) = struct.unpack(pack_format, packet) + + if self._protocol != MQTTv5 and len(topic) == 0: + return MQTT_ERR_PROTOCOL + + # Handle topics with invalid UTF-8 + # This replaces an invalid topic with a message and the hex + # representation of the topic for logging. When the user attempts to + # access message.topic in the callback, an exception will be raised. + try: + print_topic = topic.decode('utf-8') + except UnicodeDecodeError: + print_topic = "TOPIC WITH INVALID UTF-8: " + str(topic) + + message.topic = topic + + if message.qos > 0: + pack_format = "!H" + str(len(packet) - 2) + 's' + (message.mid, packet) = struct.unpack(pack_format, packet) + + if self._protocol == MQTTv5: + message.properties = Properties(PUBLISH >> 4) + props, props_len = message.properties.unpack(packet) + packet = packet[props_len:] + + message.payload = packet + + if self._protocol == MQTTv5: + self._easy_log( + MQTT_LOG_DEBUG, + "Received PUBLISH (d%d, q%d, r%d, m%d), '%s', properties=%s, ... (%d bytes)", + message.dup, message.qos, message.retain, message.mid, + print_topic, message.properties, len(message.payload) + ) + else: + self._easy_log( + MQTT_LOG_DEBUG, + "Received PUBLISH (d%d, q%d, r%d, m%d), '%s', ... (%d bytes)", + message.dup, message.qos, message.retain, message.mid, + print_topic, len(message.payload) + ) + + message.timestamp = time_func() + if message.qos == 0: + self._handle_on_message(message) + return MQTT_ERR_SUCCESS + elif message.qos == 1: + self._handle_on_message(message) + return self._send_puback(message.mid) + elif message.qos == 2: + rc = self._send_pubrec(message.mid) + message.state = mqtt_ms_wait_for_pubrel + with self._in_message_mutex: + self._in_messages[message.mid] = message + return rc + else: + return MQTT_ERR_PROTOCOL + + def _handle_pubrel(self): + if self._protocol == MQTTv5: + if self._in_packet['remaining_length'] < 2: + return MQTT_ERR_PROTOCOL + elif self._in_packet['remaining_length'] != 2: + return MQTT_ERR_PROTOCOL + + mid, = struct.unpack("!H", self._in_packet['packet']) + self._easy_log(MQTT_LOG_DEBUG, "Received PUBREL (Mid: %d)", mid) + + with self._in_message_mutex: + if mid in self._in_messages: + # Only pass the message on if we have removed it from the queue - this + # prevents multiple callbacks for the same message. + message = self._in_messages.pop(mid) + self._handle_on_message(message) + self._inflight_messages -= 1 + if self._max_inflight_messages > 0: + with self._out_message_mutex: + rc = self._update_inflight() + if rc != MQTT_ERR_SUCCESS: + return rc + + # FIXME: this should only be done if the message is known + # If unknown it's a protocol error and we should close the connection. + # But since we don't have (on disk) persistence for the session, it + # is possible that we must known about this message. + # Choose to acknwoledge this messsage (and thus losing a message) but + # avoid hanging. See #284. + return self._send_pubcomp(mid) + + def _update_inflight(self): + # Dont lock message_mutex here + for m in self._out_messages.values(): + if self._inflight_messages < self._max_inflight_messages: + if m.qos > 0 and m.state == mqtt_ms_queued: + self._inflight_messages += 1 + if m.qos == 1: + m.state = mqtt_ms_wait_for_puback + elif m.qos == 2: + m.state = mqtt_ms_wait_for_pubrec + rc = self._send_publish( + m.mid, + m.topic.encode('utf-8'), + m.payload, + m.qos, + m.retain, + m.dup, + properties=m.properties, + ) + if rc != 0: + return rc + else: + return MQTT_ERR_SUCCESS + return MQTT_ERR_SUCCESS + + def _handle_pubrec(self): + if self._protocol == MQTTv5: + if self._in_packet['remaining_length'] < 2: + return MQTT_ERR_PROTOCOL + elif self._in_packet['remaining_length'] != 2: + return MQTT_ERR_PROTOCOL + + mid, = struct.unpack("!H", self._in_packet['packet'][:2]) + if self._protocol == MQTTv5: + if self._in_packet['remaining_length'] > 2: + reasonCode = ReasonCodes(PUBREC >> 4) + reasonCode.unpack(self._in_packet['packet'][2:]) + if self._in_packet['remaining_length'] > 3: + properties = Properties(PUBREC >> 4) + props, props_len = properties.unpack( + self._in_packet['packet'][3:]) + self._easy_log(MQTT_LOG_DEBUG, "Received PUBREC (Mid: %d)", mid) + + with self._out_message_mutex: + if mid in self._out_messages: + msg = self._out_messages[mid] + msg.state = mqtt_ms_wait_for_pubcomp + msg.timestamp = time_func() + return self._send_pubrel(mid) + + return MQTT_ERR_SUCCESS + + def _handle_unsuback(self): + if self._protocol == MQTTv5: + if self._in_packet['remaining_length'] < 4: + return MQTT_ERR_PROTOCOL + elif self._in_packet['remaining_length'] != 2: + return MQTT_ERR_PROTOCOL + + mid, = struct.unpack("!H", self._in_packet['packet'][:2]) + if self._protocol == MQTTv5: + packet = self._in_packet['packet'][2:] + properties = Properties(UNSUBACK >> 4) + props, props_len = properties.unpack(packet) + reasoncodes = [] + for c in packet[props_len:]: + if sys.version_info[0] < 3: + c = ord(c) + reasoncodes.append(ReasonCodes(UNSUBACK >> 4, identifier=c)) + if len(reasoncodes) == 1: + reasoncodes = reasoncodes[0] + + self._easy_log(MQTT_LOG_DEBUG, "Received UNSUBACK (Mid: %d)", mid) + with self._callback_mutex: + on_unsubscribe = self.on_unsubscribe + + if on_unsubscribe: + with self._in_callback_mutex: + try: + if self._protocol == MQTTv5: + on_unsubscribe( + self, self._userdata, mid, properties, reasoncodes) + else: + on_unsubscribe(self, self._userdata, mid) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_unsubscribe: %s', err) + if not self.suppress_exceptions: + raise + + return MQTT_ERR_SUCCESS + + def _do_on_disconnect(self, rc, properties=None): + with self._callback_mutex: + on_disconnect = self.on_disconnect + + if on_disconnect: + with self._in_callback_mutex: + try: + if self._protocol == MQTTv5: + on_disconnect( + self, self._userdata, rc, properties) + else: + on_disconnect(self, self._userdata, rc) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_disconnect: %s', err) + if not self.suppress_exceptions: + raise + + def _do_on_publish(self, mid): + with self._callback_mutex: + on_publish = self.on_publish + + if on_publish: + with self._in_callback_mutex: + try: + on_publish(self, self._userdata, mid) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_publish: %s', err) + if not self.suppress_exceptions: + raise + + msg = self._out_messages.pop(mid) + msg.info._set_as_published() + if msg.qos > 0: + self._inflight_messages -= 1 + if self._max_inflight_messages > 0: + rc = self._update_inflight() + if rc != MQTT_ERR_SUCCESS: + return rc + return MQTT_ERR_SUCCESS + + def _handle_pubackcomp(self, cmd): + if self._protocol == MQTTv5: + if self._in_packet['remaining_length'] < 2: + return MQTT_ERR_PROTOCOL + elif self._in_packet['remaining_length'] != 2: + return MQTT_ERR_PROTOCOL + + packet_type = PUBACK if cmd == "PUBACK" else PUBCOMP + packet_type = packet_type >> 4 + mid, = struct.unpack("!H", self._in_packet['packet'][:2]) + if self._protocol == MQTTv5: + if self._in_packet['remaining_length'] > 2: + reasonCode = ReasonCodes(packet_type) + reasonCode.unpack(self._in_packet['packet'][2:]) + if self._in_packet['remaining_length'] > 3: + properties = Properties(packet_type) + props, props_len = properties.unpack( + self._in_packet['packet'][3:]) + self._easy_log(MQTT_LOG_DEBUG, "Received %s (Mid: %d)", cmd, mid) + + with self._out_message_mutex: + if mid in self._out_messages: + # Only inform the client the message has been sent once. + rc = self._do_on_publish(mid) + return rc + + return MQTT_ERR_SUCCESS + + def _handle_on_message(self, message): + matched = False + + try: + topic = message.topic + except UnicodeDecodeError: + topic = None + + on_message_callbacks = [] + with self._callback_mutex: + if topic is not None: + for callback in self._on_message_filtered.iter_match(message.topic): + on_message_callbacks.append(callback) + + if len(on_message_callbacks) == 0: + on_message = self.on_message + else: + on_message = None + + for callback in on_message_callbacks: + with self._in_callback_mutex: + try: + callback(self, self._userdata, message) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, + 'Caught exception in user defined callback function %s: %s', + callback.__name__, + err + ) + if not self.suppress_exceptions: + raise + + if on_message: + with self._in_callback_mutex: + try: + on_message(self, self._userdata, message) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_message: %s', err) + if not self.suppress_exceptions: + raise + + + def _handle_on_connect_fail(self): + with self._callback_mutex: + on_connect_fail = self.on_connect_fail + + if on_connect_fail: + with self._in_callback_mutex: + try: + on_connect_fail(self, self._userdata) + except Exception as err: + self._easy_log( + MQTT_LOG_ERR, 'Caught exception in on_connect_fail: %s', err) + + def _thread_main(self): + self.loop_forever(retry_first_connection=True) + + def _reconnect_wait(self): + # See reconnect_delay_set for details + now = time_func() + with self._reconnect_delay_mutex: + if self._reconnect_delay is None: + self._reconnect_delay = self._reconnect_min_delay + else: + self._reconnect_delay = min( + self._reconnect_delay * 2, + self._reconnect_max_delay, + ) + + target_time = now + self._reconnect_delay + + remaining = target_time - now + while (self._state != mqtt_cs_disconnecting + and not self._thread_terminate + and remaining > 0): + + time.sleep(min(remaining, 1)) + remaining = target_time - time_func() + + @staticmethod + def _proxy_is_valid(p): + def check(t, a): + return (socks is not None and + t in set([socks.HTTP, socks.SOCKS4, socks.SOCKS5]) and a) + + if isinstance(p, dict): + return check(p.get("proxy_type"), p.get("proxy_addr")) + elif isinstance(p, (list, tuple)): + return len(p) == 6 and check(p[0], p[1]) + else: + return False + + def _get_proxy(self): + if socks is None: + return None + + # First, check if the user explicitly passed us a proxy to use + if self._proxy_is_valid(self._proxy): + return self._proxy + + # Next, check for an mqtt_proxy environment variable as long as the host + # we're trying to connect to isn't listed under the no_proxy environment + # variable (matches built-in module urllib's behavior) + if not (hasattr(urllib_dot_request, "proxy_bypass") and + urllib_dot_request.proxy_bypass(self._host)): + env_proxies = urllib_dot_request.getproxies() + if "mqtt" in env_proxies: + parts = urllib_dot_parse.urlparse(env_proxies["mqtt"]) + if parts.scheme == "http": + proxy = { + "proxy_type": socks.HTTP, + "proxy_addr": parts.hostname, + "proxy_port": parts.port + } + return proxy + elif parts.scheme == "socks": + proxy = { + "proxy_type": socks.SOCKS5, + "proxy_addr": parts.hostname, + "proxy_port": parts.port + } + return proxy + + # Finally, check if the user has monkeypatched the PySocks library with + # a default proxy + socks_default = socks.get_default_proxy() + if self._proxy_is_valid(socks_default): + proxy_keys = ("proxy_type", "proxy_addr", "proxy_port", + "proxy_rdns", "proxy_username", "proxy_password") + return dict(zip(proxy_keys, socks_default)) + + # If we didn't find a proxy through any of the above methods, return + # None to indicate that the connection should be handled normally + return None + + def _create_socket_connection(self): + proxy = self._get_proxy() + addr = (self._host, self._port) + source = (self._bind_address, self._bind_port) + + + if sys.version_info < (2, 7) or (3, 0) < sys.version_info < (3, 2): + # Have to short-circuit here because of unsupported source_address + # param in earlier Python versions. + return socket.create_connection(addr, timeout=self._connect_timeout) + + if proxy: + return socks.create_connection(addr, timeout=self._connect_timeout, source_address=source, **proxy) + else: + return socket.create_connection(addr, timeout=self._connect_timeout, source_address=source) + + +class WebsocketWrapper(object): + OPCODE_CONTINUATION = 0x0 + OPCODE_TEXT = 0x1 + OPCODE_BINARY = 0x2 + OPCODE_CONNCLOSE = 0x8 + OPCODE_PING = 0x9 + OPCODE_PONG = 0xa + + def __init__(self, socket, host, port, is_ssl, path, extra_headers): + + self.connected = False + + self._ssl = is_ssl + self._host = host + self._port = port + self._socket = socket + self._path = path + + self._sendbuffer = bytearray() + self._readbuffer = bytearray() + + self._requested_size = 0 + self._payload_head = 0 + self._readbuffer_head = 0 + + self._do_handshake(extra_headers) + + def __del__(self): + + self._sendbuffer = None + self._readbuffer = None + + def _do_handshake(self, extra_headers): + + sec_websocket_key = uuid.uuid4().bytes + sec_websocket_key = base64.b64encode(sec_websocket_key) + + websocket_headers = { + "Host": "{self._host:s}:{self._port:d}".format(self=self), + "Upgrade": "websocket", + "Connection": "Upgrade", + "Origin": "https://{self._host:s}:{self._port:d}".format(self=self), + "Sec-WebSocket-Key": sec_websocket_key.decode("utf8"), + "Sec-Websocket-Version": "13", + "Sec-Websocket-Protocol": "mqtt", + } + + # This is checked in ws_set_options so it will either be None, a + # dictionary, or a callable + if isinstance(extra_headers, dict): + websocket_headers.update(extra_headers) + elif callable(extra_headers): + websocket_headers = extra_headers(websocket_headers) + + header = "\r\n".join([ + "GET {self._path} HTTP/1.1".format(self=self), + "\r\n".join("{}: {}".format(i, j) + for i, j in websocket_headers.items()), + "\r\n", + ]).encode("utf8") + + self._socket.send(header) + + has_secret = False + has_upgrade = False + + while True: + # read HTTP response header as lines + byte = self._socket.recv(1) + + self._readbuffer.extend(byte) + + # line end + if byte == b"\n": + if len(self._readbuffer) > 2: + # check upgrade + if b"connection" in str(self._readbuffer).lower().encode('utf-8'): + if b"upgrade" not in str(self._readbuffer).lower().encode('utf-8'): + raise WebsocketConnectionError( + "WebSocket handshake error, connection not upgraded") + else: + has_upgrade = True + + # check key hash + if b"sec-websocket-accept" in str(self._readbuffer).lower().encode('utf-8'): + GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" + + server_hash = self._readbuffer.decode( + 'utf-8').split(": ", 1)[1] + server_hash = server_hash.strip().encode('utf-8') + + client_hash = sec_websocket_key.decode('utf-8') + GUID + client_hash = hashlib.sha1(client_hash.encode('utf-8')) + client_hash = base64.b64encode(client_hash.digest()) + + if server_hash != client_hash: + raise WebsocketConnectionError( + "WebSocket handshake error, invalid secret key") + else: + has_secret = True + else: + # ending linebreak + break + + # reset linebuffer + self._readbuffer = bytearray() + + # connection reset + elif not byte: + raise WebsocketConnectionError("WebSocket handshake error") + + if not has_upgrade or not has_secret: + raise WebsocketConnectionError("WebSocket handshake error") + + self._readbuffer = bytearray() + self.connected = True + + def _create_frame(self, opcode, data, do_masking=1): + + header = bytearray() + length = len(data) + + mask_key = bytearray(os.urandom(4)) + mask_flag = do_masking + + # 1 << 7 is the final flag, we don't send continuated data + header.append(1 << 7 | opcode) + + if length < 126: + header.append(mask_flag << 7 | length) + + elif length < 65536: + header.append(mask_flag << 7 | 126) + header += struct.pack("!H", length) + + elif length < 0x8000000000000001: + header.append(mask_flag << 7 | 127) + header += struct.pack("!Q", length) + + else: + raise ValueError("Maximum payload size is 2^63") + + if mask_flag == 1: + for index in range(length): + data[index] ^= mask_key[index % 4] + data = mask_key + data + + return header + data + + def _buffered_read(self, length): + + # try to recv and store needed bytes + wanted_bytes = length - (len(self._readbuffer) - self._readbuffer_head) + if wanted_bytes > 0: + + data = self._socket.recv(wanted_bytes) + + if not data: + raise ConnectionAbortedError + else: + self._readbuffer.extend(data) + + if len(data) < wanted_bytes: + raise BlockingIOError + + self._readbuffer_head += length + return self._readbuffer[self._readbuffer_head - length:self._readbuffer_head] + + def _recv_impl(self, length): + + # try to decode websocket payload part from data + try: + + self._readbuffer_head = 0 + + result = None + + chunk_startindex = self._payload_head + chunk_endindex = self._payload_head + length + + header1 = self._buffered_read(1) + header2 = self._buffered_read(1) + + opcode = (header1[0] & 0x0f) + maskbit = (header2[0] & 0x80) == 0x80 + lengthbits = (header2[0] & 0x7f) + payload_length = lengthbits + mask_key = None + + # read length + if lengthbits == 0x7e: + + value = self._buffered_read(2) + payload_length, = struct.unpack("!H", value) + + elif lengthbits == 0x7f: + + value = self._buffered_read(8) + payload_length, = struct.unpack("!Q", value) + + # read mask + if maskbit: + mask_key = self._buffered_read(4) + + # if frame payload is shorter than the requested data, read only the possible part + readindex = chunk_endindex + if payload_length < readindex: + readindex = payload_length + + if readindex > 0: + # get payload chunk + payload = self._buffered_read(readindex) + + # unmask only the needed part + if maskbit: + for index in range(chunk_startindex, readindex): + payload[index] ^= mask_key[index % 4] + + result = payload[chunk_startindex:readindex] + self._payload_head = readindex + else: + payload = bytearray() + + # check if full frame arrived and reset readbuffer and payloadhead if needed + if readindex == payload_length: + self._readbuffer = bytearray() + self._payload_head = 0 + + # respond to non-binary opcodes, their arrival is not guaranteed beacause of non-blocking sockets + if opcode == WebsocketWrapper.OPCODE_CONNCLOSE: + frame = self._create_frame( + WebsocketWrapper.OPCODE_CONNCLOSE, payload, 0) + self._socket.send(frame) + + if opcode == WebsocketWrapper.OPCODE_PING: + frame = self._create_frame( + WebsocketWrapper.OPCODE_PONG, payload, 0) + self._socket.send(frame) + + # This isn't *proper* handling of continuation frames, but given + # that we only support binary frames, it is *probably* good enough. + if (opcode == WebsocketWrapper.OPCODE_BINARY or opcode == WebsocketWrapper.OPCODE_CONTINUATION) \ + and payload_length > 0: + return result + else: + raise BlockingIOError + + except ConnectionError: + self.connected = False + return b'' + + def _send_impl(self, data): + + # if previous frame was sent successfully + if len(self._sendbuffer) == 0: + # create websocket frame + frame = self._create_frame( + WebsocketWrapper.OPCODE_BINARY, bytearray(data)) + self._sendbuffer.extend(frame) + self._requested_size = len(data) + + # try to write out as much as possible + length = self._socket.send(self._sendbuffer) + + self._sendbuffer = self._sendbuffer[length:] + + if len(self._sendbuffer) == 0: + # buffer sent out completely, return with payload's size + return self._requested_size + else: + # couldn't send whole data, request the same data again with 0 as sent length + return 0 + + def recv(self, length): + return self._recv_impl(length) + + def read(self, length): + return self._recv_impl(length) + + def send(self, data): + return self._send_impl(data) + + def write(self, data): + return self._send_impl(data) + + def close(self): + self._socket.close() + + def fileno(self): + return self._socket.fileno() + + def pending(self): + # Fix for bug #131: a SSL socket may still have data available + # for reading without select() being aware of it. + if self._ssl: + return self._socket.pending() + else: + # normal socket rely only on select() + return 0 + + def setblocking(self, flag): + self._socket.setblocking(flag) diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/matcher.py b/venv/lib/python3.11/site-packages/paho/mqtt/matcher.py new file mode 100644 index 0000000..01ce295 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho/mqtt/matcher.py @@ -0,0 +1,78 @@ +class MQTTMatcher(object): + """Intended to manage topic filters including wildcards. + + Internally, MQTTMatcher use a prefix tree (trie) to store + values associated with filters, and has an iter_match() + method to iterate efficiently over all filters that match + some topic name.""" + + class Node(object): + __slots__ = '_children', '_content' + + def __init__(self): + self._children = {} + self._content = None + + def __init__(self): + self._root = self.Node() + + def __setitem__(self, key, value): + """Add a topic filter :key to the prefix tree + and associate it to :value""" + node = self._root + for sym in key.split('/'): + node = node._children.setdefault(sym, self.Node()) + node._content = value + + def __getitem__(self, key): + """Retrieve the value associated with some topic filter :key""" + try: + node = self._root + for sym in key.split('/'): + node = node._children[sym] + if node._content is None: + raise KeyError(key) + return node._content + except KeyError: + raise KeyError(key) + + def __delitem__(self, key): + """Delete the value associated with some topic filter :key""" + lst = [] + try: + parent, node = None, self._root + for k in key.split('/'): + parent, node = node, node._children[k] + lst.append((parent, k, node)) + # TODO + node._content = None + except KeyError: + raise KeyError(key) + else: # cleanup + for parent, k, node in reversed(lst): + if node._children or node._content is not None: + break + del parent._children[k] + + def iter_match(self, topic): + """Return an iterator on all values associated with filters + that match the :topic""" + lst = topic.split('/') + normal = not topic.startswith('$') + def rec(node, i=0): + if i == len(lst): + if node._content is not None: + yield node._content + else: + part = lst[i] + if part in node._children: + for content in rec(node._children[part], i + 1): + yield content + if '+' in node._children and (normal or i > 0): + for content in rec(node._children['+'], i + 1): + yield content + if '#' in node._children and (normal or i > 0): + content = node._children['#']._content + if content is not None: + yield content + return rec(self._root) diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/packettypes.py b/venv/lib/python3.11/site-packages/paho/mqtt/packettypes.py new file mode 100644 index 0000000..2fd6a1b --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho/mqtt/packettypes.py @@ -0,0 +1,43 @@ +""" +******************************************************************* + Copyright (c) 2017, 2019 IBM Corp. + + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v2.0 + and Eclipse Distribution License v1.0 which accompany this distribution. + + The Eclipse Public License is available at + http://www.eclipse.org/legal/epl-v10.html + and the Eclipse Distribution License is available at + http://www.eclipse.org/org/documents/edl-v10.php. + + Contributors: + Ian Craggs - initial implementation and/or documentation +******************************************************************* +""" + + +class PacketTypes: + + """ + Packet types class. Includes the AUTH packet for MQTT v5.0. + + Holds constants for each packet type such as PacketTypes.PUBLISH + and packet name strings: PacketTypes.Names[PacketTypes.PUBLISH]. + + """ + + indexes = range(1, 16) + + # Packet types + CONNECT, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, \ + PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, \ + PINGREQ, PINGRESP, DISCONNECT, AUTH = indexes + + # Dummy packet type for properties use - will delay only applies to will + WILLMESSAGE = 99 + + Names = [ "reserved", \ + "Connect", "Connack", "Publish", "Puback", "Pubrec", "Pubrel", \ + "Pubcomp", "Subscribe", "Suback", "Unsubscribe", "Unsuback", \ + "Pingreq", "Pingresp", "Disconnect", "Auth"] diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/properties.py b/venv/lib/python3.11/site-packages/paho/mqtt/properties.py new file mode 100644 index 0000000..dbcf543 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho/mqtt/properties.py @@ -0,0 +1,438 @@ +""" +******************************************************************* + Copyright (c) 2017, 2019 IBM Corp. + + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v2.0 + and Eclipse Distribution License v1.0 which accompany this distribution. + + The Eclipse Public License is available at + http://www.eclipse.org/legal/epl-v10.html + and the Eclipse Distribution License is available at + http://www.eclipse.org/org/documents/edl-v10.php. + + Contributors: + Ian Craggs - initial implementation and/or documentation +******************************************************************* +""" + +import struct +import sys + +from .packettypes import PacketTypes + + +class MQTTException(Exception): + pass + + +class MalformedPacket(MQTTException): + pass + + +def writeInt16(length): + # serialize a 16 bit integer to network format + return bytearray(struct.pack("!H", length)) + + +def readInt16(buf): + # deserialize a 16 bit integer from network format + return struct.unpack("!H", buf[:2])[0] + + +def writeInt32(length): + # serialize a 32 bit integer to network format + return bytearray(struct.pack("!L", length)) + + +def readInt32(buf): + # deserialize a 32 bit integer from network format + return struct.unpack("!L", buf[:4])[0] + + +def writeUTF(data): + # data could be a string, or bytes. If string, encode into bytes with utf-8 + if sys.version_info[0] < 3: + data = bytearray(data, 'utf-8') + else: + data = data if type(data) == type(b"") else bytes(data, "utf-8") + return writeInt16(len(data)) + data + + +def readUTF(buffer, maxlen): + if maxlen >= 2: + length = readInt16(buffer) + else: + raise MalformedPacket("Not enough data to read string length") + maxlen -= 2 + if length > maxlen: + raise MalformedPacket("Length delimited string too long") + buf = buffer[2:2+length].decode("utf-8") + # look for chars which are invalid for MQTT + for c in buf: # look for D800-DFFF in the UTF string + ord_c = ord(c) + if ord_c >= 0xD800 and ord_c <= 0xDFFF: + raise MalformedPacket("[MQTT-1.5.4-1] D800-DFFF found in UTF-8 data") + if ord_c == 0x00: # look for null in the UTF string + raise MalformedPacket("[MQTT-1.5.4-2] Null found in UTF-8 data") + if ord_c == 0xFEFF: + raise MalformedPacket("[MQTT-1.5.4-3] U+FEFF in UTF-8 data") + return buf, length+2 + + +def writeBytes(buffer): + return writeInt16(len(buffer)) + buffer + + +def readBytes(buffer): + length = readInt16(buffer) + return buffer[2:2+length], length+2 + + +class VariableByteIntegers: # Variable Byte Integer + """ + MQTT variable byte integer helper class. Used + in several places in MQTT v5.0 properties. + + """ + + @staticmethod + def encode(x): + """ + Convert an integer 0 <= x <= 268435455 into multi-byte format. + Returns the buffer convered from the integer. + """ + assert 0 <= x <= 268435455 + buffer = b'' + while 1: + digit = x % 128 + x //= 128 + if x > 0: + digit |= 0x80 + if sys.version_info[0] >= 3: + buffer += bytes([digit]) + else: + buffer += bytes(chr(digit)) + if x == 0: + break + return buffer + + @staticmethod + def decode(buffer): + """ + Get the value of a multi-byte integer from a buffer + Return the value, and the number of bytes used. + + [MQTT-1.5.5-1] the encoded value MUST use the minimum number of bytes necessary to represent the value + """ + multiplier = 1 + value = 0 + bytes = 0 + while 1: + bytes += 1 + digit = buffer[0] + buffer = buffer[1:] + value += (digit & 127) * multiplier + if digit & 128 == 0: + break + multiplier *= 128 + return (value, bytes) + + +class Properties(object): + """MQTT v5.0 properties class. + + See Properties.names for a list of accepted property names along with their numeric values. + + See Properties.properties for the data type of each property. + + Example of use: + + publish_properties = Properties(PacketTypes.PUBLISH) + publish_properties.UserProperty = ("a", "2") + publish_properties.UserProperty = ("c", "3") + + First the object is created with packet type as argument, no properties will be present at + this point. Then properties are added as attributes, the name of which is the string property + name without the spaces. + + """ + + def __init__(self, packetType): + self.packetType = packetType + self.types = ["Byte", "Two Byte Integer", "Four Byte Integer", "Variable Byte Integer", + "Binary Data", "UTF-8 Encoded String", "UTF-8 String Pair"] + + self.names = { + "Payload Format Indicator": 1, + "Message Expiry Interval": 2, + "Content Type": 3, + "Response Topic": 8, + "Correlation Data": 9, + "Subscription Identifier": 11, + "Session Expiry Interval": 17, + "Assigned Client Identifier": 18, + "Server Keep Alive": 19, + "Authentication Method": 21, + "Authentication Data": 22, + "Request Problem Information": 23, + "Will Delay Interval": 24, + "Request Response Information": 25, + "Response Information": 26, + "Server Reference": 28, + "Reason String": 31, + "Receive Maximum": 33, + "Topic Alias Maximum": 34, + "Topic Alias": 35, + "Maximum QoS": 36, + "Retain Available": 37, + "User Property": 38, + "Maximum Packet Size": 39, + "Wildcard Subscription Available": 40, + "Subscription Identifier Available": 41, + "Shared Subscription Available": 42 + } + + self.properties = { + # id: type, packets + # payload format indicator + 1: (self.types.index("Byte"), [PacketTypes.PUBLISH, PacketTypes.WILLMESSAGE]), + 2: (self.types.index("Four Byte Integer"), [PacketTypes.PUBLISH, PacketTypes.WILLMESSAGE]), + 3: (self.types.index("UTF-8 Encoded String"), [PacketTypes.PUBLISH, PacketTypes.WILLMESSAGE]), + 8: (self.types.index("UTF-8 Encoded String"), [PacketTypes.PUBLISH, PacketTypes.WILLMESSAGE]), + 9: (self.types.index("Binary Data"), [PacketTypes.PUBLISH, PacketTypes.WILLMESSAGE]), + 11: (self.types.index("Variable Byte Integer"), + [PacketTypes.PUBLISH, PacketTypes.SUBSCRIBE]), + 17: (self.types.index("Four Byte Integer"), + [PacketTypes.CONNECT, PacketTypes.CONNACK, PacketTypes.DISCONNECT]), + 18: (self.types.index("UTF-8 Encoded String"), [PacketTypes.CONNACK]), + 19: (self.types.index("Two Byte Integer"), [PacketTypes.CONNACK]), + 21: (self.types.index("UTF-8 Encoded String"), + [PacketTypes.CONNECT, PacketTypes.CONNACK, PacketTypes.AUTH]), + 22: (self.types.index("Binary Data"), + [PacketTypes.CONNECT, PacketTypes.CONNACK, PacketTypes.AUTH]), + 23: (self.types.index("Byte"), + [PacketTypes.CONNECT]), + 24: (self.types.index("Four Byte Integer"), [PacketTypes.WILLMESSAGE]), + 25: (self.types.index("Byte"), [PacketTypes.CONNECT]), + 26: (self.types.index("UTF-8 Encoded String"), [PacketTypes.CONNACK]), + 28: (self.types.index("UTF-8 Encoded String"), + [PacketTypes.CONNACK, PacketTypes.DISCONNECT]), + 31: (self.types.index("UTF-8 Encoded String"), + [PacketTypes.CONNACK, PacketTypes.PUBACK, PacketTypes.PUBREC, + PacketTypes.PUBREL, PacketTypes.PUBCOMP, PacketTypes.SUBACK, + PacketTypes.UNSUBACK, PacketTypes.DISCONNECT, PacketTypes.AUTH]), + 33: (self.types.index("Two Byte Integer"), + [PacketTypes.CONNECT, PacketTypes.CONNACK]), + 34: (self.types.index("Two Byte Integer"), + [PacketTypes.CONNECT, PacketTypes.CONNACK]), + 35: (self.types.index("Two Byte Integer"), [PacketTypes.PUBLISH]), + 36: (self.types.index("Byte"), [PacketTypes.CONNACK]), + 37: (self.types.index("Byte"), [PacketTypes.CONNACK]), + 38: (self.types.index("UTF-8 String Pair"), + [PacketTypes.CONNECT, PacketTypes.CONNACK, + PacketTypes.PUBLISH, PacketTypes.PUBACK, + PacketTypes.PUBREC, PacketTypes.PUBREL, PacketTypes.PUBCOMP, + PacketTypes.SUBSCRIBE, PacketTypes.SUBACK, + PacketTypes.UNSUBSCRIBE, PacketTypes.UNSUBACK, + PacketTypes.DISCONNECT, PacketTypes.AUTH, PacketTypes.WILLMESSAGE]), + 39: (self.types.index("Four Byte Integer"), + [PacketTypes.CONNECT, PacketTypes.CONNACK]), + 40: (self.types.index("Byte"), [PacketTypes.CONNACK]), + 41: (self.types.index("Byte"), [PacketTypes.CONNACK]), + 42: (self.types.index("Byte"), [PacketTypes.CONNACK]), + } + + def allowsMultiple(self, compressedName): + return self.getIdentFromName(compressedName) in [11, 38] + + def getIdentFromName(self, compressedName): + # return the identifier corresponding to the property name + result = -1 + for name in self.names.keys(): + if compressedName == name.replace(' ', ''): + result = self.names[name] + break + return result + + def __setattr__(self, name, value): + name = name.replace(' ', '') + privateVars = ["packetType", "types", "names", "properties"] + if name in privateVars: + object.__setattr__(self, name, value) + else: + # the name could have spaces in, or not. Remove spaces before assignment + if name not in [aname.replace(' ', '') for aname in self.names.keys()]: + raise MQTTException( + "Property name must be one of "+str(self.names.keys())) + # check that this attribute applies to the packet type + if self.packetType not in self.properties[self.getIdentFromName(name)][1]: + raise MQTTException("Property %s does not apply to packet type %s" + % (name, PacketTypes.Names[self.packetType])) + + # Check for forbidden values + if type(value) != type([]): + if name in ["ReceiveMaximum", "TopicAlias"] \ + and (value < 1 or value > 65535): + + raise MQTTException( + "%s property value must be in the range 1-65535" % (name)) + elif name in ["TopicAliasMaximum"] \ + and (value < 0 or value > 65535): + + raise MQTTException( + "%s property value must be in the range 0-65535" % (name)) + elif name in ["MaximumPacketSize", "SubscriptionIdentifier"] \ + and (value < 1 or value > 268435455): + + raise MQTTException( + "%s property value must be in the range 1-268435455" % (name)) + elif name in ["RequestResponseInformation", "RequestProblemInformation", "PayloadFormatIndicator"] \ + and (value != 0 and value != 1): + + raise MQTTException( + "%s property value must be 0 or 1" % (name)) + + if self.allowsMultiple(name): + if type(value) != type([]): + value = [value] + if hasattr(self, name): + value = object.__getattribute__(self, name) + value + object.__setattr__(self, name, value) + + def __str__(self): + buffer = "[" + first = True + for name in self.names.keys(): + compressedName = name.replace(' ', '') + if hasattr(self, compressedName): + if not first: + buffer += ", " + buffer += compressedName + " : " + \ + str(getattr(self, compressedName)) + first = False + buffer += "]" + return buffer + + def json(self): + data = {} + for name in self.names.keys(): + compressedName = name.replace(' ', '') + if hasattr(self, compressedName): + val = getattr(self, compressedName) + if compressedName == 'CorrelationData' and isinstance(val, bytes): + data[compressedName] = val.hex() + else: + data[compressedName] = val + return data + + def isEmpty(self): + rc = True + for name in self.names.keys(): + compressedName = name.replace(' ', '') + if hasattr(self, compressedName): + rc = False + break + return rc + + def clear(self): + for name in self.names.keys(): + compressedName = name.replace(' ', '') + if hasattr(self, compressedName): + delattr(self, compressedName) + + def writeProperty(self, identifier, type, value): + buffer = b"" + buffer += VariableByteIntegers.encode(identifier) # identifier + if type == self.types.index("Byte"): # value + if sys.version_info[0] < 3: + buffer += chr(value) + else: + buffer += bytes([value]) + elif type == self.types.index("Two Byte Integer"): + buffer += writeInt16(value) + elif type == self.types.index("Four Byte Integer"): + buffer += writeInt32(value) + elif type == self.types.index("Variable Byte Integer"): + buffer += VariableByteIntegers.encode(value) + elif type == self.types.index("Binary Data"): + buffer += writeBytes(value) + elif type == self.types.index("UTF-8 Encoded String"): + buffer += writeUTF(value) + elif type == self.types.index("UTF-8 String Pair"): + buffer += writeUTF(value[0]) + writeUTF(value[1]) + return buffer + + def pack(self): + # serialize properties into buffer for sending over network + buffer = b"" + for name in self.names.keys(): + compressedName = name.replace(' ', '') + if hasattr(self, compressedName): + identifier = self.getIdentFromName(compressedName) + attr_type = self.properties[identifier][0] + if self.allowsMultiple(compressedName): + for prop in getattr(self, compressedName): + buffer += self.writeProperty(identifier, + attr_type, prop) + else: + buffer += self.writeProperty(identifier, attr_type, + getattr(self, compressedName)) + return VariableByteIntegers.encode(len(buffer)) + buffer + + def readProperty(self, buffer, type, propslen): + if type == self.types.index("Byte"): + value = buffer[0] + valuelen = 1 + elif type == self.types.index("Two Byte Integer"): + value = readInt16(buffer) + valuelen = 2 + elif type == self.types.index("Four Byte Integer"): + value = readInt32(buffer) + valuelen = 4 + elif type == self.types.index("Variable Byte Integer"): + value, valuelen = VariableByteIntegers.decode(buffer) + elif type == self.types.index("Binary Data"): + value, valuelen = readBytes(buffer) + elif type == self.types.index("UTF-8 Encoded String"): + value, valuelen = readUTF(buffer, propslen) + elif type == self.types.index("UTF-8 String Pair"): + value, valuelen = readUTF(buffer, propslen) + buffer = buffer[valuelen:] # strip the bytes used by the value + value1, valuelen1 = readUTF(buffer, propslen - valuelen) + value = (value, value1) + valuelen += valuelen1 + return value, valuelen + + def getNameFromIdent(self, identifier): + rc = None + for name in self.names: + if self.names[name] == identifier: + rc = name + return rc + + def unpack(self, buffer): + if sys.version_info[0] < 3: + buffer = bytearray(buffer) + self.clear() + # deserialize properties into attributes from buffer received from network + propslen, VBIlen = VariableByteIntegers.decode(buffer) + buffer = buffer[VBIlen:] # strip the bytes used by the VBI + propslenleft = propslen + while propslenleft > 0: # properties length is 0 if there are none + identifier, VBIlen2 = VariableByteIntegers.decode( + buffer) # property identifier + buffer = buffer[VBIlen2:] # strip the bytes used by the VBI + propslenleft -= VBIlen2 + attr_type = self.properties[identifier][0] + value, valuelen = self.readProperty( + buffer, attr_type, propslenleft) + buffer = buffer[valuelen:] # strip the bytes used by the value + propslenleft -= valuelen + propname = self.getNameFromIdent(identifier) + compressedName = propname.replace(' ', '') + if not self.allowsMultiple(compressedName) and hasattr(self, compressedName): + raise MQTTException( + "Property '%s' must not exist more than once" % property) + setattr(self, propname, value) + return self, propslen + VBIlen diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/publish.py b/venv/lib/python3.11/site-packages/paho/mqtt/publish.py new file mode 100644 index 0000000..6d1589a --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho/mqtt/publish.py @@ -0,0 +1,241 @@ +# Copyright (c) 2014 Roger Light +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# and Eclipse Distribution License v1.0 which accompany this distribution. +# +# The Eclipse Public License is available at +# http://www.eclipse.org/legal/epl-v10.html +# and the Eclipse Distribution License is available at +# http://www.eclipse.org/org/documents/edl-v10.php. +# +# Contributors: +# Roger Light - initial API and implementation + +""" +This module provides some helper functions to allow straightforward publishing +of messages in a one-shot manner. In other words, they are useful for the +situation where you have a single/multiple messages you want to publish to a +broker, then disconnect and nothing else is required. +""" +from __future__ import absolute_import + +import collections + +try: + from collections.abc import Iterable +except ImportError: + from collections import Iterable + +from .. import mqtt +from . import client as paho + + +def _do_publish(client): + """Internal function""" + + message = client._userdata.popleft() + + if isinstance(message, dict): + client.publish(**message) + elif isinstance(message, (tuple, list)): + client.publish(*message) + else: + raise TypeError('message must be a dict, tuple, or list') + + +def _on_connect(client, userdata, flags, rc): + """Internal callback""" + #pylint: disable=invalid-name, unused-argument + + if rc == 0: + if len(userdata) > 0: + _do_publish(client) + else: + raise mqtt.MQTTException(paho.connack_string(rc)) + +def _on_connect_v5(client, userdata, flags, rc, properties): + """Internal v5 callback""" + _on_connect(client, userdata, flags, rc) + +def _on_publish(client, userdata, mid): + """Internal callback""" + #pylint: disable=unused-argument + + if len(userdata) == 0: + client.disconnect() + else: + _do_publish(client) + + +def multiple(msgs, hostname="localhost", port=1883, client_id="", keepalive=60, + will=None, auth=None, tls=None, protocol=paho.MQTTv311, + transport="tcp", proxy_args=None): + """Publish multiple messages to a broker, then disconnect cleanly. + + This function creates an MQTT client, connects to a broker and publishes a + list of messages. Once the messages have been delivered, it disconnects + cleanly from the broker. + + msgs : a list of messages to publish. Each message is either a dict or a + tuple. + + If a dict, only the topic must be present. Default values will be + used for any missing arguments. The dict must be of the form: + + msg = {'topic':"", 'payload':"", 'qos':, + 'retain':} + topic must be present and may not be empty. + If payload is "", None or not present then a zero length payload + will be published. + If qos is not present, the default of 0 is used. + If retain is not present, the default of False is used. + + If a tuple, then it must be of the form: + ("", "", qos, retain) + + hostname : a string containing the address of the broker to connect to. + Defaults to localhost. + + port : the port to connect to the broker on. Defaults to 1883. + + client_id : the MQTT client id to use. If "" or None, the Paho library will + generate a client id automatically. + + keepalive : the keepalive timeout value for the client. Defaults to 60 + seconds. + + will : a dict containing will parameters for the client: will = {'topic': + "", 'payload':", 'qos':, 'retain':}. + Topic is required, all other parameters are optional and will + default to None, 0 and False respectively. + Defaults to None, which indicates no will should be used. + + auth : a dict containing authentication parameters for the client: + auth = {'username':"", 'password':""} + Username is required, password is optional and will default to None + if not provided. + Defaults to None, which indicates no authentication is to be used. + + tls : a dict containing TLS configuration parameters for the client: + dict = {'ca_certs':"", 'certfile':"", + 'keyfile':"", 'tls_version':"", + 'ciphers':", 'insecure':""} + ca_certs is required, all other parameters are optional and will + default to None if not provided, which results in the client using + the default behaviour - see the paho.mqtt.client documentation. + Alternatively, tls input can be an SSLContext object, which will be + processed using the tls_set_context method. + Defaults to None, which indicates that TLS should not be used. + + transport : set to "tcp" to use the default setting of transport which is + raw TCP. Set to "websockets" to use WebSockets as the transport. + proxy_args: a dictionary that will be given to the client. + """ + + if not isinstance(msgs, Iterable): + raise TypeError('msgs must be an iterable') + + + client = paho.Client(client_id=client_id, userdata=collections.deque(msgs), + protocol=protocol, transport=transport) + + client.on_publish = _on_publish + if protocol == mqtt.client.MQTTv5: + client.on_connect = _on_connect_v5 + else: + client.on_connect = _on_connect + + if proxy_args is not None: + client.proxy_set(**proxy_args) + + if auth: + username = auth.get('username') + if username: + password = auth.get('password') + client.username_pw_set(username, password) + else: + raise KeyError("The 'username' key was not found, this is " + "required for auth") + + if will is not None: + client.will_set(**will) + + if tls is not None: + if isinstance(tls, dict): + insecure = tls.pop('insecure', False) + client.tls_set(**tls) + if insecure: + # Must be set *after* the `client.tls_set()` call since it sets + # up the SSL context that `client.tls_insecure_set` alters. + client.tls_insecure_set(insecure) + else: + # Assume input is SSLContext object + client.tls_set_context(tls) + + client.connect(hostname, port, keepalive) + client.loop_forever() + + +def single(topic, payload=None, qos=0, retain=False, hostname="localhost", + port=1883, client_id="", keepalive=60, will=None, auth=None, + tls=None, protocol=paho.MQTTv311, transport="tcp", proxy_args=None): + """Publish a single message to a broker, then disconnect cleanly. + + This function creates an MQTT client, connects to a broker and publishes a + single message. Once the message has been delivered, it disconnects cleanly + from the broker. + + topic : the only required argument must be the topic string to which the + payload will be published. + + payload : the payload to be published. If "" or None, a zero length payload + will be published. + + qos : the qos to use when publishing, default to 0. + + retain : set the message to be retained (True) or not (False). + + hostname : a string containing the address of the broker to connect to. + Defaults to localhost. + + port : the port to connect to the broker on. Defaults to 1883. + + client_id : the MQTT client id to use. If "" or None, the Paho library will + generate a client id automatically. + + keepalive : the keepalive timeout value for the client. Defaults to 60 + seconds. + + will : a dict containing will parameters for the client: will = {'topic': + "", 'payload':", 'qos':, 'retain':}. + Topic is required, all other parameters are optional and will + default to None, 0 and False respectively. + Defaults to None, which indicates no will should be used. + + auth : a dict containing authentication parameters for the client: + auth = {'username':"", 'password':""} + Username is required, password is optional and will default to None + if not provided. + Defaults to None, which indicates no authentication is to be used. + + tls : a dict containing TLS configuration parameters for the client: + dict = {'ca_certs':"", 'certfile':"", + 'keyfile':"", 'tls_version':"", + 'ciphers':", 'insecure':""} + ca_certs is required, all other parameters are optional and will + default to None if not provided, which results in the client using + the default behaviour - see the paho.mqtt.client documentation. + Defaults to None, which indicates that TLS should not be used. + Alternatively, tls input can be an SSLContext object, which will be + processed using the tls_set_context method. + + transport : set to "tcp" to use the default setting of transport which is + raw TCP. Set to "websockets" to use WebSockets as the transport. + proxy_args: a dictionary that will be given to the client. + """ + + msg = {'topic':topic, 'payload':payload, 'qos':qos, 'retain':retain} + + multiple([msg], hostname, port, client_id, keepalive, will, auth, tls, + protocol, transport, proxy_args) diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/reasoncodes.py b/venv/lib/python3.11/site-packages/paho/mqtt/reasoncodes.py new file mode 100644 index 0000000..c42e5ba --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho/mqtt/reasoncodes.py @@ -0,0 +1,192 @@ +""" +******************************************************************* + Copyright (c) 2017, 2019 IBM Corp. + + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v2.0 + and Eclipse Distribution License v1.0 which accompany this distribution. + + The Eclipse Public License is available at + http://www.eclipse.org/legal/epl-v10.html + and the Eclipse Distribution License is available at + http://www.eclipse.org/org/documents/edl-v10.php. + + Contributors: + Ian Craggs - initial implementation and/or documentation +******************************************************************* +""" + +import sys + +from .packettypes import PacketTypes + + +class ReasonCodes: + """MQTT version 5.0 reason codes class. + + See ReasonCodes.names for a list of possible numeric values along with their + names and the packets to which they apply. + + """ + + def __init__(self, packetType, aName="Success", identifier=-1): + """ + packetType: the type of the packet, such as PacketTypes.CONNECT that + this reason code will be used with. Some reason codes have different + names for the same identifier when used a different packet type. + + aName: the String name of the reason code to be created. Ignored + if the identifier is set. + + identifier: an integer value of the reason code to be created. + + """ + + self.packetType = packetType + self.names = { + 0: {"Success": [PacketTypes.CONNACK, PacketTypes.PUBACK, + PacketTypes.PUBREC, PacketTypes.PUBREL, PacketTypes.PUBCOMP, + PacketTypes.UNSUBACK, PacketTypes.AUTH], + "Normal disconnection": [PacketTypes.DISCONNECT], + "Granted QoS 0": [PacketTypes.SUBACK]}, + 1: {"Granted QoS 1": [PacketTypes.SUBACK]}, + 2: {"Granted QoS 2": [PacketTypes.SUBACK]}, + 4: {"Disconnect with will message": [PacketTypes.DISCONNECT]}, + 16: {"No matching subscribers": + [PacketTypes.PUBACK, PacketTypes.PUBREC]}, + 17: {"No subscription found": [PacketTypes.UNSUBACK]}, + 24: {"Continue authentication": [PacketTypes.AUTH]}, + 25: {"Re-authenticate": [PacketTypes.AUTH]}, + 128: {"Unspecified error": [PacketTypes.CONNACK, PacketTypes.PUBACK, + PacketTypes.PUBREC, PacketTypes.SUBACK, PacketTypes.UNSUBACK, + PacketTypes.DISCONNECT], }, + 129: {"Malformed packet": + [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 130: {"Protocol error": + [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 131: {"Implementation specific error": [PacketTypes.CONNACK, + PacketTypes.PUBACK, PacketTypes.PUBREC, PacketTypes.SUBACK, + PacketTypes.UNSUBACK, PacketTypes.DISCONNECT], }, + 132: {"Unsupported protocol version": [PacketTypes.CONNACK]}, + 133: {"Client identifier not valid": [PacketTypes.CONNACK]}, + 134: {"Bad user name or password": [PacketTypes.CONNACK]}, + 135: {"Not authorized": [PacketTypes.CONNACK, PacketTypes.PUBACK, + PacketTypes.PUBREC, PacketTypes.SUBACK, PacketTypes.UNSUBACK, + PacketTypes.DISCONNECT], }, + 136: {"Server unavailable": [PacketTypes.CONNACK]}, + 137: {"Server busy": [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 138: {"Banned": [PacketTypes.CONNACK]}, + 139: {"Server shutting down": [PacketTypes.DISCONNECT]}, + 140: {"Bad authentication method": + [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 141: {"Keep alive timeout": [PacketTypes.DISCONNECT]}, + 142: {"Session taken over": [PacketTypes.DISCONNECT]}, + 143: {"Topic filter invalid": + [PacketTypes.SUBACK, PacketTypes.UNSUBACK, PacketTypes.DISCONNECT]}, + 144: {"Topic name invalid": + [PacketTypes.CONNACK, PacketTypes.PUBACK, + PacketTypes.PUBREC, PacketTypes.DISCONNECT]}, + 145: {"Packet identifier in use": + [PacketTypes.PUBACK, PacketTypes.PUBREC, + PacketTypes.SUBACK, PacketTypes.UNSUBACK]}, + 146: {"Packet identifier not found": + [PacketTypes.PUBREL, PacketTypes.PUBCOMP]}, + 147: {"Receive maximum exceeded": [PacketTypes.DISCONNECT]}, + 148: {"Topic alias invalid": [PacketTypes.DISCONNECT]}, + 149: {"Packet too large": [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 150: {"Message rate too high": [PacketTypes.DISCONNECT]}, + 151: {"Quota exceeded": [PacketTypes.CONNACK, PacketTypes.PUBACK, + PacketTypes.PUBREC, PacketTypes.SUBACK, PacketTypes.DISCONNECT], }, + 152: {"Administrative action": [PacketTypes.DISCONNECT]}, + 153: {"Payload format invalid": + [PacketTypes.PUBACK, PacketTypes.PUBREC, PacketTypes.DISCONNECT]}, + 154: {"Retain not supported": + [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 155: {"QoS not supported": + [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 156: {"Use another server": + [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 157: {"Server moved": + [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 158: {"Shared subscription not supported": + [PacketTypes.SUBACK, PacketTypes.DISCONNECT]}, + 159: {"Connection rate exceeded": + [PacketTypes.CONNACK, PacketTypes.DISCONNECT]}, + 160: {"Maximum connect time": + [PacketTypes.DISCONNECT]}, + 161: {"Subscription identifiers not supported": + [PacketTypes.SUBACK, PacketTypes.DISCONNECT]}, + 162: {"Wildcard subscription not supported": + [PacketTypes.SUBACK, PacketTypes.DISCONNECT]}, + } + if identifier == -1: + if packetType == PacketTypes.DISCONNECT and aName == "Success": + aName = "Normal disconnection" + self.set(aName) + else: + self.value = identifier + self.getName() # check it's good + + def __getName__(self, packetType, identifier): + """ + Get the reason code string name for a specific identifier. + The name can vary by packet type for the same identifier, which + is why the packet type is also required. + + Used when displaying the reason code. + """ + assert identifier in self.names.keys(), identifier + names = self.names[identifier] + namelist = [name for name in names.keys() if packetType in names[name]] + assert len(namelist) == 1 + return namelist[0] + + def getId(self, name): + """ + Get the numeric id corresponding to a reason code name. + + Used when setting the reason code for a packetType + check that only valid codes for the packet are set. + """ + identifier = None + for code in self.names.keys(): + if name in self.names[code].keys(): + if self.packetType in self.names[code][name]: + identifier = code + break + assert identifier is not None, name + return identifier + + def set(self, name): + self.value = self.getId(name) + + def unpack(self, buffer): + c = buffer[0] + if sys.version_info[0] < 3: + c = ord(c) + name = self.__getName__(self.packetType, c) + self.value = self.getId(name) + return 1 + + def getName(self): + """Returns the reason code name corresponding to the numeric value which is set. + """ + return self.__getName__(self.packetType, self.value) + + def __eq__(self, other): + if isinstance(other, int): + return self.value == other + if isinstance(other, str): + return self.value == str(self) + if isinstance(other, ReasonCodes): + return self.value == other.value + return False + + def __str__(self): + return self.getName() + + def json(self): + return self.getName() + + def pack(self): + return bytearray([self.value]) diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/subscribe.py b/venv/lib/python3.11/site-packages/paho/mqtt/subscribe.py new file mode 100644 index 0000000..643df9c --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho/mqtt/subscribe.py @@ -0,0 +1,274 @@ +# Copyright (c) 2016 Roger Light +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# and Eclipse Distribution License v1.0 which accompany this distribution. +# +# The Eclipse Public License is available at +# http://www.eclipse.org/legal/epl-v10.html +# and the Eclipse Distribution License is available at +# http://www.eclipse.org/org/documents/edl-v10.php. +# +# Contributors: +# Roger Light - initial API and implementation + +""" +This module provides some helper functions to allow straightforward subscribing +to topics and retrieving messages. The two functions are simple(), which +returns one or messages matching a set of topics, and callback() which allows +you to pass a callback for processing of messages. +""" +from __future__ import absolute_import + +from .. import mqtt +from . import client as paho + + +def _on_connect_v5(client, userdata, flags, rc, properties): + """Internal callback""" + if rc != 0: + raise mqtt.MQTTException(paho.connack_string(rc)) + + if isinstance(userdata['topics'], list): + for topic in userdata['topics']: + client.subscribe(topic, userdata['qos']) + else: + client.subscribe(userdata['topics'], userdata['qos']) + +def _on_connect(client, userdata, flags, rc): + """Internal v5 callback""" + _on_connect_v5(client, userdata, flags, rc, None) + + +def _on_message_callback(client, userdata, message): + """Internal callback""" + userdata['callback'](client, userdata['userdata'], message) + + +def _on_message_simple(client, userdata, message): + """Internal callback""" + + if userdata['msg_count'] == 0: + return + + # Don't process stale retained messages if 'retained' was false + if message.retain and not userdata['retained']: + return + + userdata['msg_count'] = userdata['msg_count'] - 1 + + if userdata['messages'] is None and userdata['msg_count'] == 0: + userdata['messages'] = message + client.disconnect() + return + + userdata['messages'].append(message) + if userdata['msg_count'] == 0: + client.disconnect() + + +def callback(callback, topics, qos=0, userdata=None, hostname="localhost", + port=1883, client_id="", keepalive=60, will=None, auth=None, + tls=None, protocol=paho.MQTTv311, transport="tcp", + clean_session=True, proxy_args=None): + """Subscribe to a list of topics and process them in a callback function. + + This function creates an MQTT client, connects to a broker and subscribes + to a list of topics. Incoming messages are processed by the user provided + callback. This is a blocking function and will never return. + + callback : function of the form "on_message(client, userdata, message)" for + processing the messages received. + + topics : either a string containing a single topic to subscribe to, or a + list of topics to subscribe to. + + qos : the qos to use when subscribing. This is applied to all topics. + + userdata : passed to the callback + + hostname : a string containing the address of the broker to connect to. + Defaults to localhost. + + port : the port to connect to the broker on. Defaults to 1883. + + client_id : the MQTT client id to use. If "" or None, the Paho library will + generate a client id automatically. + + keepalive : the keepalive timeout value for the client. Defaults to 60 + seconds. + + will : a dict containing will parameters for the client: will = {'topic': + "", 'payload':", 'qos':, 'retain':}. + Topic is required, all other parameters are optional and will + default to None, 0 and False respectively. + Defaults to None, which indicates no will should be used. + + auth : a dict containing authentication parameters for the client: + auth = {'username':"", 'password':""} + Username is required, password is optional and will default to None + if not provided. + Defaults to None, which indicates no authentication is to be used. + + tls : a dict containing TLS configuration parameters for the client: + dict = {'ca_certs':"", 'certfile':"", + 'keyfile':"", 'tls_version':"", + 'ciphers':", 'insecure':""} + ca_certs is required, all other parameters are optional and will + default to None if not provided, which results in the client using + the default behaviour - see the paho.mqtt.client documentation. + Alternatively, tls input can be an SSLContext object, which will be + processed using the tls_set_context method. + Defaults to None, which indicates that TLS should not be used. + + transport : set to "tcp" to use the default setting of transport which is + raw TCP. Set to "websockets" to use WebSockets as the transport. + + clean_session : a boolean that determines the client type. If True, + the broker will remove all information about this client + when it disconnects. If False, the client is a persistent + client and subscription information and queued messages + will be retained when the client disconnects. + Defaults to True. + + proxy_args: a dictionary that will be given to the client. + """ + + if qos < 0 or qos > 2: + raise ValueError('qos must be in the range 0-2') + + callback_userdata = { + 'callback':callback, + 'topics':topics, + 'qos':qos, + 'userdata':userdata} + + client = paho.Client(client_id=client_id, userdata=callback_userdata, + protocol=protocol, transport=transport, + clean_session=clean_session) + client.on_message = _on_message_callback + if protocol == mqtt.client.MQTTv5: + client.on_connect = _on_connect_v5 + else: + client.on_connect = _on_connect + + if proxy_args is not None: + client.proxy_set(**proxy_args) + + if auth: + username = auth.get('username') + if username: + password = auth.get('password') + client.username_pw_set(username, password) + else: + raise KeyError("The 'username' key was not found, this is " + "required for auth") + + if will is not None: + client.will_set(**will) + + if tls is not None: + if isinstance(tls, dict): + insecure = tls.pop('insecure', False) + client.tls_set(**tls) + if insecure: + # Must be set *after* the `client.tls_set()` call since it sets + # up the SSL context that `client.tls_insecure_set` alters. + client.tls_insecure_set(insecure) + else: + # Assume input is SSLContext object + client.tls_set_context(tls) + + client.connect(hostname, port, keepalive) + client.loop_forever() + + +def simple(topics, qos=0, msg_count=1, retained=True, hostname="localhost", + port=1883, client_id="", keepalive=60, will=None, auth=None, + tls=None, protocol=paho.MQTTv311, transport="tcp", + clean_session=True, proxy_args=None): + """Subscribe to a list of topics and return msg_count messages. + + This function creates an MQTT client, connects to a broker and subscribes + to a list of topics. Once "msg_count" messages have been received, it + disconnects cleanly from the broker and returns the messages. + + topics : either a string containing a single topic to subscribe to, or a + list of topics to subscribe to. + + qos : the qos to use when subscribing. This is applied to all topics. + + msg_count : the number of messages to retrieve from the broker. + if msg_count == 1 then a single MQTTMessage will be returned. + if msg_count > 1 then a list of MQTTMessages will be returned. + + retained : If set to True, retained messages will be processed the same as + non-retained messages. If set to False, retained messages will + be ignored. This means that with retained=False and msg_count=1, + the function will return the first message received that does + not have the retained flag set. + + hostname : a string containing the address of the broker to connect to. + Defaults to localhost. + + port : the port to connect to the broker on. Defaults to 1883. + + client_id : the MQTT client id to use. If "" or None, the Paho library will + generate a client id automatically. + + keepalive : the keepalive timeout value for the client. Defaults to 60 + seconds. + + will : a dict containing will parameters for the client: will = {'topic': + "", 'payload':", 'qos':, 'retain':}. + Topic is required, all other parameters are optional and will + default to None, 0 and False respectively. + Defaults to None, which indicates no will should be used. + + auth : a dict containing authentication parameters for the client: + auth = {'username':"", 'password':""} + Username is required, password is optional and will default to None + if not provided. + Defaults to None, which indicates no authentication is to be used. + + tls : a dict containing TLS configuration parameters for the client: + dict = {'ca_certs':"", 'certfile':"", + 'keyfile':"", 'tls_version':"", + 'ciphers':", 'insecure':""} + ca_certs is required, all other parameters are optional and will + default to None if not provided, which results in the client using + the default behaviour - see the paho.mqtt.client documentation. + Alternatively, tls input can be an SSLContext object, which will be + processed using the tls_set_context method. + Defaults to None, which indicates that TLS should not be used. + + transport : set to "tcp" to use the default setting of transport which is + raw TCP. Set to "websockets" to use WebSockets as the transport. + + clean_session : a boolean that determines the client type. If True, + the broker will remove all information about this client + when it disconnects. If False, the client is a persistent + client and subscription information and queued messages + will be retained when the client disconnects. + Defaults to True. + + proxy_args: a dictionary that will be given to the client. + """ + + if msg_count < 1: + raise ValueError('msg_count must be > 0') + + # Set ourselves up to return a single message if msg_count == 1, or a list + # if > 1. + if msg_count == 1: + messages = None + else: + messages = [] + + userdata = {'retained':retained, 'msg_count':msg_count, 'messages':messages} + + callback(_on_message_simple, topics, qos, userdata, hostname, port, + client_id, keepalive, will, auth, tls, protocol, transport, + clean_session, proxy_args) + + return userdata['messages'] diff --git a/venv/lib/python3.11/site-packages/paho/mqtt/subscribeoptions.py b/venv/lib/python3.11/site-packages/paho/mqtt/subscribeoptions.py new file mode 100644 index 0000000..5b4f073 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho/mqtt/subscribeoptions.py @@ -0,0 +1,110 @@ +""" +******************************************************************* + Copyright (c) 2017, 2019 IBM Corp. + + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v2.0 + and Eclipse Distribution License v1.0 which accompany this distribution. + + The Eclipse Public License is available at + http://www.eclipse.org/legal/epl-v10.html + and the Eclipse Distribution License is available at + http://www.eclipse.org/org/documents/edl-v10.php. + + Contributors: + Ian Craggs - initial implementation and/or documentation +******************************************************************* +""" + +import sys + + +class MQTTException(Exception): + pass + + +class SubscribeOptions(object): + """The MQTT v5.0 subscribe options class. + + The options are: + qos: As in MQTT v3.1.1. + noLocal: True or False. If set to True, the subscriber will not receive its own publications. + retainAsPublished: True or False. If set to True, the retain flag on received publications will be as set + by the publisher. + retainHandling: RETAIN_SEND_ON_SUBSCRIBE, RETAIN_SEND_IF_NEW_SUB or RETAIN_DO_NOT_SEND + Controls when the broker should send retained messages: + - RETAIN_SEND_ON_SUBSCRIBE: on any successful subscribe request + - RETAIN_SEND_IF_NEW_SUB: only if the subscribe request is new + - RETAIN_DO_NOT_SEND: never send retained messages + """ + + # retain handling options + RETAIN_SEND_ON_SUBSCRIBE, RETAIN_SEND_IF_NEW_SUB, RETAIN_DO_NOT_SEND = range( + 0, 3) + + def __init__(self, qos=0, noLocal=False, retainAsPublished=False, retainHandling=RETAIN_SEND_ON_SUBSCRIBE): + """ + qos: 0, 1 or 2. 0 is the default. + noLocal: True or False. False is the default and corresponds to MQTT v3.1.1 behavior. + retainAsPublished: True or False. False is the default and corresponds to MQTT v3.1.1 behavior. + retainHandling: RETAIN_SEND_ON_SUBSCRIBE, RETAIN_SEND_IF_NEW_SUB or RETAIN_DO_NOT_SEND + RETAIN_SEND_ON_SUBSCRIBE is the default and corresponds to MQTT v3.1.1 behavior. + """ + object.__setattr__(self, "names", + ["QoS", "noLocal", "retainAsPublished", "retainHandling"]) + self.QoS = qos # bits 0,1 + self.noLocal = noLocal # bit 2 + self.retainAsPublished = retainAsPublished # bit 3 + self.retainHandling = retainHandling # bits 4 and 5: 0, 1 or 2 + assert self.QoS in [0, 1, 2] + assert self.retainHandling in [ + 0, 1, 2], "Retain handling should be 0, 1 or 2" + + def __setattr__(self, name, value): + if name not in self.names: + raise MQTTException( + name + " Attribute name must be one of "+str(self.names)) + object.__setattr__(self, name, value) + + def pack(self): + assert self.QoS in [0, 1, 2] + assert self.retainHandling in [ + 0, 1, 2], "Retain handling should be 0, 1 or 2" + noLocal = 1 if self.noLocal else 0 + retainAsPublished = 1 if self.retainAsPublished else 0 + data = [(self.retainHandling << 4) | (retainAsPublished << 3) | + (noLocal << 2) | self.QoS] + if sys.version_info[0] >= 3: + buffer = bytes(data) + else: + buffer = bytearray(data) + return buffer + + def unpack(self, buffer): + b0 = buffer[0] + self.retainHandling = ((b0 >> 4) & 0x03) + self.retainAsPublished = True if ((b0 >> 3) & 0x01) == 1 else False + self.noLocal = True if ((b0 >> 2) & 0x01) == 1 else False + self.QoS = (b0 & 0x03) + assert self.retainHandling in [ + 0, 1, 2], "Retain handling should be 0, 1 or 2, not %d" % self.retainHandling + assert self.QoS in [ + 0, 1, 2], "QoS should be 0, 1 or 2, not %d" % self.QoS + return 1 + + def __repr__(self): + return str(self) + + def __str__(self): + return "{QoS="+str(self.QoS)+", noLocal="+str(self.noLocal) +\ + ", retainAsPublished="+str(self.retainAsPublished) +\ + ", retainHandling="+str(self.retainHandling)+"}" + + def json(self): + data = { + "QoS": self.QoS, + "noLocal": self.noLocal, + "retainAsPublished": self.retainAsPublished, + "retainHandling": self.retainHandling, + } + return data diff --git a/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/PKG-INFO b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/PKG-INFO new file mode 100644 index 0000000..434517c --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/PKG-INFO @@ -0,0 +1,1508 @@ +Metadata-Version: 2.1 +Name: paho-mqtt +Version: 1.6.1 +Summary: MQTT version 5.0/3.1.1 client class +Home-page: http://eclipse.org/paho +Author: Roger Light +Author-email: roger@atchoo.org +License: Eclipse Public License v2.0 / Eclipse Distribution License v1.0 +Keywords: paho +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: POSIX +Classifier: Natural Language :: English +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.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Topic :: Communications +Classifier: Topic :: Internet +Provides-Extra: proxy +License-File: LICENSE.txt + +Eclipse Paho™ MQTT Python Client +================================ + +This document describes the source code for the `Eclipse Paho `_ MQTT Python client library, which implements versions 5.0, 3.1.1, and 3.1 of the MQTT protocol. + +This code provides a client class which enable applications to connect to an `MQTT `_ broker to publish messages, and to subscribe to topics and receive published messages. It also provides some helper functions to make publishing one off messages to an MQTT server very straightforward. + +It supports Python 2.7.9+ or 3.6+. + +The MQTT protocol is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. Designed as an extremely lightweight publish/subscribe messaging transport, it is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium. + +Paho is an `Eclipse Foundation `_ project. + + +Contents +-------- + +* Installation_ +* `Known limitations`_ +* `Usage and API`_ + * `Client`_ + * `Constructor / reinitialise`_ + * `Option functions`_ + * `Connect / reconnect / disconnect`_ + * `Network loop`_ + * `Publishing`_ + * `Subscribe / Unsubscribe`_ + * `Callbacks`_ + * `External event loop support`_ + * `Global helper functions`_ + * `Publish`_ + * `Single`_ + * `Multiple`_ + * `Subscribe`_ + * `Simple`_ + * `Using Callback`_ +* `Reporting bugs`_ +* `More information`_ + + +Installation +------------ + +The latest stable version is available in the Python Package Index (PyPi) and can be installed using + +:: + + pip install paho-mqtt + +Or with ``virtualenv``: + +:: + + virtualenv paho-mqtt + source paho-mqtt/bin/activate + pip install paho-mqtt + +To obtain the full code, including examples and tests, you can clone the git repository: + +:: + + git clone https://github.com/eclipse/paho.mqtt.python + + +Once you have the code, it can be installed from your repository as well: + +:: + + cd paho.mqtt.python + python setup.py install + +To perform all test (including MQTT v5 test), you also need to clone paho.mqtt.testing in paho.mqtt.python folder:: + + git clone https://github.com/eclipse/paho.mqtt.testing.git + +Known limitations +----------------- + +The following are the known unimplemented MQTT feature. + +When clean_session is False, the session is only stored in memory not persisted. This means that +when client is restarted (not just reconnected, the object is recreated usually because the +program was restarted) the session is lost. This result in possible message lost. + +The following part of client session is lost: + +* QoS 2 messages which have been received from the Server, but have not been completely acknowledged. + + Since the client will blindly acknowledge any PUBCOMP (last message of a QoS 2 transaction), it + won't hang but will lost this QoS 2 message. + +* QoS 1 and QoS 2 messages which have been sent to the Server, but have not been completely acknowledged. + + This means that message passed to publish() may be lost. This could be mitigated by taking care + that all message passed to publish() has a corresponding on_publish() call. + + It also means that the broker may have the Qos2 message in the session. Since the client start + with an empty session it don't know it and will re-use the mid. This is not yet fixed. + +Also when clean_session is True, this library will republish QoS > 0 message accross network +reconnection. This means that QoS > 0 message won't be lost. But the standard say that +if we should discard any message for which the publish packet was sent. Our choice means that +we are not compliant with the standard and it's possible for QoS 2 to be received twice. +You should you clean_session = False if you need the QoS 2 guarantee of only one delivery. + +Usage and API +------------- + +Detailed API documentation is available through **pydoc**. Samples are available in the **examples** directory. + +The package provides two modules, a full client and a helper for simple publishing. + +Getting Started +*************** + +Here is a very simple example that subscribes to the broker $SYS topic tree and prints out the resulting messages: + +.. code:: python + + import paho.mqtt.client as mqtt + + # The callback for when the client receives a CONNACK response from the server. + def on_connect(client, userdata, flags, rc): + print("Connected with result code "+str(rc)) + + # Subscribing in on_connect() means that if we lose the connection and + # reconnect then subscriptions will be renewed. + client.subscribe("$SYS/#") + + # The callback for when a PUBLISH message is received from the server. + def on_message(client, userdata, msg): + print(msg.topic+" "+str(msg.payload)) + + client = mqtt.Client() + client.on_connect = on_connect + client.on_message = on_message + + client.connect("mqtt.eclipseprojects.io", 1883, 60) + + # Blocking call that processes network traffic, dispatches callbacks and + # handles reconnecting. + # Other loop*() functions are available that give a threaded interface and a + # manual interface. + client.loop_forever() + +Client +****** + +You can use the client class as an instance, within a class or by subclassing. The general usage flow is as follows: + +* Create a client instance +* Connect to a broker using one of the ``connect*()`` functions +* Call one of the ``loop*()`` functions to maintain network traffic flow with the broker +* Use ``subscribe()`` to subscribe to a topic and receive messages +* Use ``publish()`` to publish messages to the broker +* Use ``disconnect()`` to disconnect from the broker + +Callbacks will be called to allow the application to process events as necessary. These callbacks are described below. + +Constructor / reinitialise +`````````````````````````` + +Client() +'''''''' + +.. code:: python + + Client(client_id="", clean_session=True, userdata=None, protocol=MQTTv311, transport="tcp") + +The ``Client()`` constructor takes the following arguments: + +client_id + the unique client id string used when connecting to the broker. If + ``client_id`` is zero length or ``None``, then one will be randomly + generated. In this case the ``clean_session`` parameter must be ``True``. + +clean_session + a boolean that determines the client type. If ``True``, the broker will + remove all information about this client when it disconnects. If ``False``, + the client is a durable client and subscription information and queued + messages will be retained when the client disconnects. + + Note that a client will never discard its own outgoing messages on + disconnect. Calling connect() or reconnect() will cause the messages to be + resent. Use reinitialise() to reset a client to its original state. + +userdata + user defined data of any type that is passed as the ``userdata`` parameter + to callbacks. It may be updated at a later point with the + ``user_data_set()`` function. + +protocol + the version of the MQTT protocol to use for this client. Can be either + ``MQTTv31``, ``MQTTv311`` or ``MQTTv5`` + +transport + set to "websockets" to send MQTT over WebSockets. Leave at the default of + "tcp" to use raw TCP. + + +Constructor Example +................... + +.. code:: python + + import paho.mqtt.client as mqtt + + mqttc = mqtt.Client() + + +reinitialise() +'''''''''''''' + +.. code:: python + + reinitialise(client_id="", clean_session=True, userdata=None) + +The ``reinitialise()`` function resets the client to its starting state as if it had just been created. It takes the same arguments as the ``Client()`` constructor. + +Reinitialise Example +.................... + +.. code:: python + + mqttc.reinitialise() + +Option functions +```````````````` + +These functions represent options that can be set on the client to modify its behaviour. In the majority of cases this must be done *before* connecting to a broker. + +max_inflight_messages_set() +''''''''''''''''''''''''''' + +.. code:: python + + max_inflight_messages_set(self, inflight) + +Set the maximum number of messages with QoS>0 that can be part way through their network flow at once. + +Defaults to 20. Increasing this value will consume more memory but can increase throughput. + +max_queued_messages_set() +''''''''''''''''''''''''' + +.. code:: python + + max_queued_messages_set(self, queue_size) + +Set the maximum number of outgoing messages with QoS>0 that can be pending in the outgoing message queue. + +Defaults to 0. 0 means unlimited, but due to implementation currently limited to 65555 (65535 messages in queue + 20 in flight). When the queue is full, any further outgoing messages would be dropped. + +message_retry_set() +''''''''''''''''''' + +.. code:: python + + message_retry_set(retry) + +Set the time in seconds before a message with QoS>0 is retried, if the broker does not respond. + +This is set to 5 seconds by default and should not normally need changing. + +ws_set_options() +'''''''''''''''' + +.. code:: python + + ws_set_options(self, path="/mqtt", headers=None) + +Set websocket connection options. These options will only be used if ``transport="websockets"`` was passed into the ``Client()`` constructor. + +path + The mqtt path to use on the broker. + +headers + Either a dictionary specifying a list of extra headers which should be appended to the standard websocket headers, or a callable that takes the normal websocket headers and returns a new dictionary with a set of headers to connect to the broker. + +Must be called before ``connect*()``. An example of how this can be used with the AWS IoT platform is in the **examples** folder. + + +tls_set() +''''''''' + +.. code:: python + + tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED, + tls_version=ssl.PROTOCOL_TLS, ciphers=None) + +Configure network encryption and authentication options. Enables SSL/TLS support. + +ca_certs + a string path to the Certificate Authority certificate files that are to be treated as trusted by this client. If this is the only option given then the client will operate in a similar manner to a web browser. That is to say it will require the broker to have a certificate signed by the Certificate Authorities in ``ca_certs`` and will communicate using TLS v1.2, but will not attempt any form of authentication. This provides basic network encryption but may not be sufficient depending on how the broker is configured. By default, on Python 2.7.9+ or 3.4+, the default certification authority of the system is used. On older Python version this parameter is mandatory. + +certfile, keyfile + strings pointing to the PEM encoded client certificate and private keys respectively. If these arguments are not ``None`` then they will be used as client information for TLS based authentication. Support for this feature is broker dependent. Note that if either of these files in encrypted and needs a password to decrypt it, Python will ask for the password at the command line. It is not currently possible to define a callback to provide the password. + +cert_reqs + defines the certificate requirements that the client imposes on the broker. By default this is ``ssl.CERT_REQUIRED``, which means that the broker must provide a certificate. See the ssl pydoc for more information on this parameter. + +tls_version + specifies the version of the SSL/TLS protocol to be used. By default (if the python version supports it) the highest TLS version is detected. If unavailable, TLS v1.2 is used. Previous versions (all versions beginning with SSL) are possible but not recommended due to possible security problems. + +ciphers + a string specifying which encryption ciphers are allowable for this connection, or ``None`` to use the defaults. See the ssl pydoc for more information. + +Must be called before ``connect*()``. + +tls_set_context() +''''''''''''''''' + +.. code:: python + + tls_set_context(context=None) + +Configure network encryption and authentication context. Enables SSL/TLS support. + +context + an ssl.SSLContext object. By default, this is given by ``ssl.create_default_context()``, if available (added in Python 3.4). + +If you're unsure about using this method, then either use the default context, or use the ``tls_set`` method. See the ssl module documentation section about `security considerations `_ for more information. + +Must be called before ``connect*()``. + +tls_insecure_set() +'''''''''''''''''' + +.. code:: python + + tls_insecure_set(value) + +Configure verification of the server hostname in the server certificate. + +If ``value`` is set to ``True``, it is impossible to guarantee that the host you are connecting to is not impersonating your server. This can be useful in initial server testing, but makes it possible for a malicious third party to impersonate your server through DNS spoofing, for example. + +Do not use this function in a real system. Setting value to True means there is no point using encryption. + +Must be called before ``connect*()`` and after ``tls_set()`` or ``tls_set_context()``. + +enable_logger() +''''''''''''''' + +.. code:: python + + enable_logger(logger=None) + +Enable logging using the standard python logging package (See PEP 282). This may be used at the same time as the ``on_log`` callback method. + +If ``logger`` is specified, then that ``logging.Logger`` object will be used, otherwise one will be created automatically. + +Paho logging levels are converted to standard ones according to the following mapping: + +==================== =============== +Paho logging +==================== =============== +``MQTT_LOG_ERR`` ``logging.ERROR`` +``MQTT_LOG_WARNING`` ``logging.WARNING`` +``MQTT_LOG_NOTICE`` ``logging.INFO`` *(no direct equivalent)* +``MQTT_LOG_INFO`` ``logging.INFO`` +``MQTT_LOG_DEBUG`` ``logging.DEBUG`` +==================== =============== + +disable_logger() +'''''''''''''''' + +.. code:: python + + disable_logger() + +Disable logging using standard python logging package. This has no effect on the ``on_log`` callback. + +username_pw_set() +''''''''''''''''' + +.. code:: python + + username_pw_set(username, password=None) + +Set a username and optionally a password for broker authentication. Must be called before ``connect*()``. + +user_data_set() +''''''''''''''' + +.. code:: python + + user_data_set(userdata) + +Set the private user data that will be passed to callbacks when events are generated. Use this for your own purpose to support your application. + +will_set() +'''''''''' + +.. code:: python + + will_set(topic, payload=None, qos=0, retain=False) + +Set a Will to be sent to the broker. If the client disconnects without calling +``disconnect()``, the broker will publish the message on its behalf. + +topic + the topic that the will message should be published on. + +payload + the message to send as a will. If not given, or set to ``None`` a zero + length message will be used as the will. Passing an int or float will + result in the payload being converted to a string representing that number. + If you wish to send a true int/float, use ``struct.pack()`` to create the + payload you require. + +qos + the quality of service level to use for the will. + +retain + if set to ``True``, the will message will be set as the "last known + good"/retained message for the topic. + +Raises a ``ValueError`` if ``qos`` is not 0, 1 or 2, or if ``topic`` is +``None`` or has zero string length. + +reconnect_delay_set +''''''''''''''''''' + +.. code:: python + + reconnect_delay_set(min_delay=1, max_delay=120) + +The client will automatically retry connection. Between each attempt +it will wait a number of seconds between ``min_delay`` and ``max_delay``. + +When the connection is lost, initially the reconnection attempt is delayed of +``min_delay`` seconds. It's doubled between subsequent attempt up to ``max_delay``. + +The delay is reset to ``min_delay`` when the connection complete (e.g. the CONNACK is +received, not just the TCP connection is established). + + +Connect / reconnect / disconnect +```````````````````````````````` + +connect() +''''''''' + +.. code:: python + + connect(host, port=1883, keepalive=60, bind_address="") + +The ``connect()`` function connects the client to a broker. This is a blocking +function. It takes the following arguments: + +host + the hostname or IP address of the remote broker + +port + the network port of the server host to connect to. Defaults to 1883. Note + that the default port for MQTT over SSL/TLS is 8883 so if you are using + ``tls_set()`` or ``tls_set_context()``, the port may need providing manually + +keepalive + maximum period in seconds allowed between communications with the broker. + If no other messages are being exchanged, this controls the rate at which + the client will send ping messages to the broker + +bind_address + the IP address of a local network interface to bind this client to, + assuming multiple interfaces exist + +Callback +........ + +When the client receives a CONNACK message from the broker in response to the +connect it generates an ``on_connect()`` callback. + +Connect Example +............... + +.. code:: python + + mqttc.connect("mqtt.eclipseprojects.io") + +connect_async() +''''''''''''''' + +.. code:: python + + connect_async(host, port=1883, keepalive=60, bind_address="") + +Use in conjunction with ``loop_start()`` to connect in a non-blocking manner. +The connection will not complete until ``loop_start()`` is called. + +Callback (connect) +.................. + +When the client receives a CONNACK message from the broker in response to the +connect it generates an ``on_connect()`` callback. + +connect_srv() +''''''''''''' + +.. code:: python + + connect_srv(domain, keepalive=60, bind_address="") + +Connect to a broker using an SRV DNS lookup to obtain the broker address. Takes +the following arguments: + +domain + the DNS domain to search for SRV records. If ``None``, try to determine the + local domain name. + +See ``connect()`` for a description of the ``keepalive`` and ``bind_address`` +arguments. + +Callback (connect_srv) +...................... + +When the client receives a CONNACK message from the broker in response to the +connect it generates an ``on_connect()`` callback. + +SRV Connect Example +................... + +.. code:: python + + mqttc.connect_srv("eclipse.org") + +reconnect() +''''''''''' + +.. code:: python + + reconnect() + +Reconnect to a broker using the previously provided details. You must have +called ``connect*()`` before calling this function. + +Callback (reconnect) +.................... + +When the client receives a CONNACK message from the broker in response to the +connect it generates an ``on_connect()`` callback. + +disconnect() +'''''''''''' + +.. code:: python + + disconnect() + +Disconnect from the broker cleanly. Using ``disconnect()`` will not result in a +will message being sent by the broker. + +Disconnect will not wait for all queued message to be sent, to ensure all messages +are delivered, ``wait_for_publish()`` from ``MQTTMessageInfo`` should be used. +See ``publish()`` for details. + +Callback (disconnect) +..................... + +When the client has sent the disconnect message it generates an +``on_disconnect()`` callback. + +Network loop +```````````` + +These functions are the driving force behind the client. If they are not +called, incoming network data will not be processed and outgoing network data +may not be sent in a timely fashion. There are four options for managing the +network loop. Three are described here, the fourth in "External event loop +support" below. Do not mix the different loop functions. + +loop() +'''''' + +.. code:: python + + loop(timeout=1.0, max_packets=1) + +Call regularly to process network events. This call waits in ``select()`` until +the network socket is available for reading or writing, if appropriate, then +handles the incoming/outgoing data. This function blocks for up to ``timeout`` +seconds. ``timeout`` must not exceed the ``keepalive`` value for the client or +your client will be regularly disconnected by the broker. + +The ``max_packets`` argument is obsolete and should be left unset. + +Loop Example +............ + +.. code:: python + + run = True + while run: + mqttc.loop() + +loop_start() / loop_stop() +'''''''''''''''''''''''''' + +.. code:: python + + loop_start() + loop_stop(force=False) + +These functions implement a threaded interface to the network loop. Calling +``loop_start()`` once, before or after ``connect*()``, runs a thread in the +background to call ``loop()`` automatically. This frees up the main thread for +other work that may be blocking. This call also handles reconnecting to the +broker. Call ``loop_stop()`` to stop the background thread. The ``force`` +argument is currently ignored. + +Loop Start/Stop Example +....................... + +.. code:: python + + mqttc.connect("mqtt.eclipseprojects.io") + mqttc.loop_start() + + while True: + temperature = sensor.blocking_read() + mqttc.publish("paho/temperature", temperature) + +loop_forever() +'''''''''''''' + +.. code:: python + + loop_forever(timeout=1.0, max_packets=1, retry_first_connection=False) + +This is a blocking form of the network loop and will not return until the +client calls ``disconnect()``. It automatically handles reconnecting. + +Except for the first connection attempt when using connect_async, use +``retry_first_connection=True`` to make it retry the first connection. +Warning: This might lead to situations where the client keeps connecting to an +non existing host without failing. + +The ``timeout`` and ``max_packets`` arguments are obsolete and should be left +unset. + +Publishing +`````````` + +Send a message from the client to the broker. + +publish() +''''''''' + +.. code:: python + + publish(topic, payload=None, qos=0, retain=False) + +This causes a message to be sent to the broker and subsequently from the broker +to any clients subscribing to matching topics. It takes the following +arguments: + +topic + the topic that the message should be published on + +payload + the actual message to send. If not given, or set to ``None`` a zero length + message will be used. Passing an int or float will result in the payload + being converted to a string representing that number. If you wish to send a + true int/float, use ``struct.pack()`` to create the payload you require + +qos + the quality of service level to use + +retain + if set to ``True``, the message will be set as the "last known + good"/retained message for the topic. + +Returns a MQTTMessageInfo which expose the following attributes and methods: + +* ``rc``, the result of the publishing. It could be ``MQTT_ERR_SUCCESS`` to + indicate success, ``MQTT_ERR_NO_CONN`` if the client is not currently connected, + or ``MQTT_ERR_QUEUE_SIZE`` when ``max_queued_messages_set`` is used to indicate + that message is neither queued nor sent. +* ``mid`` is the message ID for the publish request. The mid value can be used to + track the publish request by checking against the mid argument in the + ``on_publish()`` callback if it is defined. ``wait_for_publish`` may be easier + depending on your use-case. +* ``wait_for_publish()`` will block until the message is published. It will + raise ValueError if the message is not queued (rc == + ``MQTT_ERR_QUEUE_SIZE``), or a RuntimeError if there was an error when + publishing, most likely due to the client not being connected. +* ``is_published`` returns True if the message has been published. It will + raise ValueError if the message is not queued (rc == + ``MQTT_ERR_QUEUE_SIZE``), or a RuntimeError if there was an error when + publishing, most likely due to the client not being connected. + +A ``ValueError`` will be raised if topic is ``None``, has zero length or is +invalid (contains a wildcard), if ``qos`` is not one of 0, 1 or 2, or if the +length of the payload is greater than 268435455 bytes. + +Callback (publish) +.................. + +When the message has been sent to the broker an ``on_publish()`` callback will +be generated. + + +Subscribe / Unsubscribe +``````````````````````` + +subscribe() +''''''''''' + +.. code:: python + + subscribe(topic, qos=0) + +Subscribe the client to one or more topics. + +This function may be called in three different ways: + +Simple string and integer +......................... + +e.g. ``subscribe("my/topic", 2)`` + +topic + a string specifying the subscription topic to subscribe to. + +qos + the desired quality of service level for the subscription. Defaults to 0. + +String and integer tuple +........................ + +e.g. ``subscribe(("my/topic", 1))`` + +topic + a tuple of ``(topic, qos)``. Both topic and qos must be present in the tuple. + +qos + not used. + +List of string and integer tuples +................................. + +e.g. ``subscribe([("my/topic", 0), ("another/topic", 2)])`` + +This allows multiple topic subscriptions in a single SUBSCRIPTION command, +which is more efficient than using multiple calls to ``subscribe()``. + +topic + a list of tuple of format ``(topic, qos)``. Both topic and qos must be + present in all of the tuples. + +qos + not used. + +The function returns a tuple ``(result, mid)``, where ``result`` is +``MQTT_ERR_SUCCESS`` to indicate success or ``(MQTT_ERR_NO_CONN, None)`` if the +client is not currently connected. ``mid`` is the message ID for the subscribe +request. The mid value can be used to track the subscribe request by checking +against the mid argument in the ``on_subscribe()`` callback if it is defined. + +Raises a ``ValueError`` if ``qos`` is not 0, 1 or 2, or if topic is ``None`` or +has zero string length, or if ``topic`` is not a string, tuple or list. + +Callback (subscribe) +.................... + +When the broker has acknowledged the subscription, an ``on_subscribe()`` +callback will be generated. + +unsubscribe() +''''''''''''' + +.. code:: python + + unsubscribe(topic) + +Unsubscribe the client from one or more topics. + +topic + a single string, or list of strings that are the subscription topics to + unsubscribe from. + +Returns a tuple ``(result, mid)``, where ``result`` is ``MQTT_ERR_SUCCESS`` to +indicate success, or ``(MQTT_ERR_NO_CONN, None)`` if the client is not +currently connected. ``mid`` is the message ID for the unsubscribe request. The +mid value can be used to track the unsubscribe request by checking against the +mid argument in the ``on_unsubscribe()`` callback if it is defined. + +Raises a ``ValueError`` if ``topic`` is ``None`` or has zero string length, or +is not a string or list. + +Callback (unsubscribe) +...................... + +When the broker has acknowledged the unsubscribe, an ``on_unsubscribe()`` +callback will be generated. + +Callbacks +````````` + +on_connect() +'''''''''''' + +.. code:: python + + on_connect(client, userdata, flags, rc) + +Called when the broker responds to our connection request. + +client + the client instance for this callback + +userdata + the private user data as set in ``Client()`` or ``user_data_set()`` + +flags + response flags sent by the broker +rc + the connection result + + +flags is a dict that contains response flags from the broker: + flags['session present'] - this flag is useful for clients that are + using clean session set to 0 only. If a client with clean + session=0, that reconnects to a broker that it has previously + connected to, this flag indicates whether the broker still has the + session information for the client. If 1, the session still exists. + +The value of rc indicates success or not: + + 0: Connection successful + 1: Connection refused - incorrect protocol version + 2: Connection refused - invalid client identifier + 3: Connection refused - server unavailable + 4: Connection refused - bad username or password + 5: Connection refused - not authorised + 6-255: Currently unused. + +On Connect Example +.................. + +.. code:: python + + def on_connect(client, userdata, flags, rc): + print("Connection returned result: "+connack_string(rc)) + + mqttc.on_connect = on_connect + ... + +on_disconnect() +''''''''''''''' + +.. code:: python + + on_disconnect(client, userdata, rc) + +Called when the client disconnects from the broker. + +client + the client instance for this callback + +userdata + the private user data as set in ``Client()`` or ``user_data_set()`` + +rc + the disconnection result + +The rc parameter indicates the disconnection state. If ``MQTT_ERR_SUCCESS`` +(0), the callback was called in response to a ``disconnect()`` call. If any +other value the disconnection was unexpected, such as might be caused by a +network error. + +On Disconnect Example +..................... + +.. code:: python + + def on_disconnect(client, userdata, rc): + if rc != 0: + print("Unexpected disconnection.") + + mqttc.on_disconnect = on_disconnect + ... + +on_message() +'''''''''''' + +.. code:: python + + on_message(client, userdata, message) + +Called when a message has been received on a topic that the client subscribes +to and the message does not match an existing topic filter callback. +Use ``message_callback_add()`` to define a callback that will be called for +specific topic filters. ``on_message`` will serve as fallback when none matched. + +client + the client instance for this callback + +userdata + the private user data as set in ``Client()`` or ``user_data_set()`` + +message + an instance of MQTTMessage. This is a class with members ``topic``, ``payload``, ``qos``, ``retain``. + +On Message Example +.................. + +.. code:: python + + def on_message(client, userdata, message): + print("Received message '" + str(message.payload) + "' on topic '" + + message.topic + "' with QoS " + str(message.qos)) + + mqttc.on_message = on_message + ... + +message_callback_add() +'''''''''''''''''''''' + +This function allows you to define callbacks that handle incoming messages for +specific subscription filters, including with wildcards. This lets you, for +example, subscribe to ``sensors/#`` and have one callback to handle +``sensors/temperature`` and another to handle ``sensors/humidity``. + +.. code:: python + + message_callback_add(sub, callback) + +sub + the subscription filter to match against for this callback. Only one + callback may be defined per literal sub string + +callback + the callback to be used. Takes the same form as the ``on_message`` + callback. + +If using ``message_callback_add()`` and ``on_message``, only messages that do +not match a subscription specific filter will be passed to the ``on_message`` +callback. + +If multiple sub match a topic, each callback will be called (e.g. sub ``sensors/#`` +and sub ``+/humidity`` both match a message with a topic ``sensors/humidity``, so both +callbacks will handle this message). + +message_callback_remove() +''''''''''''''''''''''''' + +Remove a topic/subscription specific callback previously registered using +``message_callback_add()``. + +.. code:: python + + message_callback_remove(sub) + +sub + the subscription filter to remove + +on_publish() +'''''''''''' + +.. code:: python + + on_publish(client, userdata, mid) + +Called when a message that was to be sent using the ``publish()`` call has +completed transmission to the broker. For messages with QoS levels 1 and 2, +this means that the appropriate handshakes have completed. For QoS 0, this +simply means that the message has left the client. The ``mid`` variable matches +the mid variable returned from the corresponding ``publish()`` call, to allow +outgoing messages to be tracked. + +This callback is important because even if the publish() call returns success, +it does not always mean that the message has been sent. + +on_subscribe() +'''''''''''''' + +.. code:: python + + on_subscribe(client, userdata, mid, granted_qos) + +Called when the broker responds to a subscribe request. The ``mid`` variable +matches the mid variable returned from the corresponding ``subscribe()`` call. +The ``granted_qos`` variable is a list of integers that give the QoS level the +broker has granted for each of the different subscription requests. + +on_unsubscribe() +'''''''''''''''' + +.. code:: python + + on_unsubscribe(client, userdata, mid) + +Called when the broker responds to an unsubscribe request. The ``mid`` variable +matches the mid variable returned from the corresponding ``unsubscribe()`` +call. + +on_log() +'''''''' + +.. code:: python + + on_log(client, userdata, level, buf) + +Called when the client has log information. Define to allow debugging. The +``level`` variable gives the severity of the message and will be one of +``MQTT_LOG_INFO``, ``MQTT_LOG_NOTICE``, ``MQTT_LOG_WARNING``, ``MQTT_LOG_ERR``, +and ``MQTT_LOG_DEBUG``. The message itself is in ``buf``. + +This may be used at the same time as the standard Python logging, which can be +enabled via the ``enable_logger`` method. + +on_socket_open() +'''''''''''''''' + +:: + + on_socket_open(client, userdata, sock) + +Called when the socket has been opened. +Use this to register the socket with an external event loop for reading. + +on_socket_close() +''''''''''''''''' + +:: + + on_socket_close(client, userdata, sock) + +Called when the socket is about to be closed. +Use this to unregister a socket from an external event loop for reading. + +on_socket_register_write() +'''''''''''''''''''''''''' + +:: + + on_socket_register_write(client, userdata, sock) + +Called when a write operation to the socket failed because it would have blocked, e.g. output buffer full. +Use this to register the socket with an external event loop for writing. + +on_socket_unregister_write() +'''''''''''''''''''''''''''' + +:: + + on_socket_unregister_write(client, userdata, sock) + +Called when a write operation to the socket succeeded after it had previously failed. +Use this to unregister the socket from an external event loop for writing. + +External event loop support +``````````````````````````` + +loop_read() +''''''''''' + +.. code:: python + + loop_read(max_packets=1) + +Call when the socket is ready for reading. ``max_packets`` is obsolete and +should be left unset. + +loop_write() +'''''''''''' + +.. code:: python + + loop_write(max_packets=1) + +Call when the socket is ready for writing. ``max_packets`` is obsolete and +should be left unset. + +loop_misc() +''''''''''' + +.. code:: python + + loop_misc() + +Call every few seconds to handle message retrying and pings. + +socket() +'''''''' + +.. code:: python + + socket() + +Returns the socket object in use in the client to allow interfacing with other +event loops. +This call is particularly useful for select_ based loops. See ``examples/loop_select.py``. + +.. _select: https://docs.python.org/3/library/select.html#select.select + +want_write() +'''''''''''' + +.. code:: python + + want_write() + +Returns true if there is data waiting to be written, to allow interfacing the +client with other event loops. +This call is particularly useful for select_ based loops. See ``examples/loop_select.py``. + +state callbacks +''''''''''''''' + +:: + + on_socket_open + on_socket_close + on_socket_register_write + on_socket_unregister_write + +Use these callbacks to get notified about state changes in the socket. +This is particularly useful for event loops where you register or unregister a socket +for reading+writing. See ``examples/loop_asyncio.py`` for an example. + +When the socket is opened, ``on_socket_open`` is called. +Register the socket with your event loop for reading. + +When the socket is about to be closed, ``on_socket_close`` is called. +Unregister the socket from your event loop for reading. + +When a write to the socket failed because it would have blocked, e.g. output buffer full, +``on_socket_register_write`` is called. +Register the socket with your event loop for writing. + +When the next write to the socket succeeded, ``on_socket_unregister_write`` is called. +Unregister the socket from your event loop for writing. + +The callbacks are always called in this order: + +- ``on_socket_open`` +- Zero or more times: + + - ``on_socket_register_write`` + - ``on_socket_unregister_write`` + +- ``on_socket_close`` + +Global helper functions +``````````````````````` + +The client module also offers some global helper functions. + +``topic_matches_sub(sub, topic)`` can be used to check whether a ``topic`` +matches a ``subscription``. + +For example: + + the topic ``foo/bar`` would match the subscription ``foo/#`` or ``+/bar`` + + the topic ``non/matching`` would not match the subscription ``non/+/+`` + + +``connack_string(connack_code)`` returns the error string associated with a +CONNACK result. + + +``error_string(mqtt_errno)`` returns the error string associated with a Paho +MQTT error number. + +Publish +******* + +This module provides some helper functions to allow straightforward publishing +of messages in a one-shot manner. In other words, they are useful for the +situation where you have a single/multiple messages you want to publish to a +broker, then disconnect with nothing else required. + +The two functions provided are ``single()`` and ``multiple()``. + +Both functions include support for MQTT v5.0, but do not currently let you +set any properties on connection or when sending messages. + +Single +`````` + +Publish a single message to a broker, then disconnect cleanly. + +.. code:: python + + single(topic, payload=None, qos=0, retain=False, hostname="localhost", + port=1883, client_id="", keepalive=60, will=None, auth=None, tls=None, + protocol=mqtt.MQTTv311, transport="tcp") + + +Publish Single Function arguments +''''''''''''''''''''''''''''''''' + +topic + the only required argument must be the topic string to which the payload + will be published. + +payload + the payload to be published. If "" or None, a zero length payload will be + published. + +qos + the qos to use when publishing, default to 0. + +retain + set the message to be retained (True) or not (False). + +hostname + a string containing the address of the broker to connect to. Defaults to + localhost. + +port + the port to connect to the broker on. Defaults to 1883. + +client_id + the MQTT client id to use. If "" or None, the Paho library will + generate a client id automatically. + +keepalive + the keepalive timeout value for the client. Defaults to 60 seconds. + +will + a dict containing will parameters for the client: + + will = {'topic': "", 'payload':", 'qos':, 'retain':}. + + Topic is required, all other parameters are optional and will default to + None, 0 and False respectively. + + Defaults to None, which indicates no will should be used. + +auth + a dict containing authentication parameters for the client: + + auth = {'username':"", 'password':""} + + Username is required, password is optional and will default to None if not provided. + + Defaults to None, which indicates no authentication is to be used. + +tls + a dict containing TLS configuration parameters for the client: + + dict = {'ca_certs':"", 'certfile':"", 'keyfile':"", 'tls_version':"", 'ciphers':"} + + ca_certs is required, all other parameters are optional and will default to None if not provided, which results in the client using the default behaviour - see the paho.mqtt.client documentation. + + Defaults to None, which indicates that TLS should not be used. + +protocol + choose the version of the MQTT protocol to use. Use either ``MQTTv31``, + ``MQTTv311``, or ``MQTTv5``. + +transport + set to "websockets" to send MQTT over WebSockets. Leave at the default of + "tcp" to use raw TCP. + +Publish Single Example +'''''''''''''''''''''' + +.. code:: python + + import paho.mqtt.publish as publish + + publish.single("paho/test/single", "payload", hostname="mqtt.eclipseprojects.io") + +Multiple +```````` + +Publish multiple messages to a broker, then disconnect cleanly. + +This function includes support for MQTT v5.0, but does not currently let you +set any properties on connection or when sending messages. + +.. code:: python + + multiple(msgs, hostname="localhost", port=1883, client_id="", keepalive=60, + will=None, auth=None, tls=None, protocol=mqtt.MQTTv311, transport="tcp") + +Publish Multiple Function arguments +''''''''''''''''''''''''''''''''''' + +msgs + a list of messages to publish. Each message is either a dict or a tuple. + + If a dict, only the topic must be present. Default values will be + used for any missing arguments. The dict must be of the form: + + msg = {'topic':"", 'payload':"", 'qos':, 'retain':} + + topic must be present and may not be empty. + If payload is "", None or not present then a zero length payload will be published. If qos is not present, the default of 0 is used. If retain is not present, the default of False is used. + + If a tuple, then it must be of the form: + + ("", "", qos, retain) + +See ``single()`` for the description of ``hostname``, ``port``, ``client_id``, ``keepalive``, ``will``, ``auth``, ``tls``, ``protocol``, ``transport``. + +Publish Multiple Example +'''''''''''''''''''''''' + +.. code:: python + + import paho.mqtt.publish as publish + + msgs = [{'topic':"paho/test/multiple", 'payload':"multiple 1"}, + ("paho/test/multiple", "multiple 2", 0, False)] + publish.multiple(msgs, hostname="mqtt.eclipseprojects.io") + + +Subscribe +********* + +This module provides some helper functions to allow straightforward subscribing +and processing of messages. + +The two functions provided are ``simple()`` and ``callback()``. + +Both functions include support for MQTT v5.0, but do not currently let you +set any properties on connection or when subscribing. + +Simple +`````` + +Subscribe to a set of topics and return the messages received. This is a +blocking function. + +.. code:: python + + simple(topics, qos=0, msg_count=1, retained=False, hostname="localhost", + port=1883, client_id="", keepalive=60, will=None, auth=None, tls=None, + protocol=mqtt.MQTTv311) + + +Simple Subscribe Function arguments +''''''''''''''''''''''''''''''''''' + +topics + the only required argument is the topic string to which the client will + subscribe. This can either be a string or a list of strings if multiple + topics should be subscribed to. + +qos + the qos to use when subscribing, defaults to 0. + +msg_count + the number of messages to retrieve from the broker. Defaults to 1. If 1, a + single MQTTMessage object will be returned. If >1, a list of MQTTMessages + will be returned. + +retained + set to True to consider retained messages, set to False to ignore messages + with the retained flag set. + +hostname + a string containing the address of the broker to connect to. Defaults to localhost. + +port + the port to connect to the broker on. Defaults to 1883. + +client_id + the MQTT client id to use. If "" or None, the Paho library will + generate a client id automatically. + +keepalive + the keepalive timeout value for the client. Defaults to 60 seconds. + +will + a dict containing will parameters for the client: + + will = {'topic': "", 'payload':", 'qos':, 'retain':}. + + Topic is required, all other parameters are optional and will default to + None, 0 and False respectively. + + Defaults to None, which indicates no will should be used. + +auth + a dict containing authentication parameters for the client: + + auth = {'username':"", 'password':""} + + Username is required, password is optional and will default to None if not + provided. + + Defaults to None, which indicates no authentication is to be used. + +tls + a dict containing TLS configuration parameters for the client: + + dict = {'ca_certs':"", 'certfile':"", 'keyfile':"", 'tls_version':"", 'ciphers':"} + + ca_certs is required, all other parameters are optional and will default to + None if not provided, which results in the client using the default + behaviour - see the paho.mqtt.client documentation. + + Defaults to None, which indicates that TLS should not be used. + +protocol + choose the version of the MQTT protocol to use. Use either ``MQTTv31``, + ``MQTTv311``, or ``MQTTv5``. + + +Simple Example +'''''''''''''' + +.. code:: python + + import paho.mqtt.subscribe as subscribe + + msg = subscribe.simple("paho/test/simple", hostname="mqtt.eclipseprojects.io") + print("%s %s" % (msg.topic, msg.payload)) + +Using Callback +`````````````` + +Subscribe to a set of topics and process the messages received using a user +provided callback. + +.. code:: python + + callback(callback, topics, qos=0, userdata=None, hostname="localhost", + port=1883, client_id="", keepalive=60, will=None, auth=None, tls=None, + protocol=mqtt.MQTTv311) + +Callback Subscribe Function arguments +''''''''''''''''''''''''''''''''''''' + +callback + an "on_message" callback that will be used for each message received, and + of the form + + .. code:: python + + def on_message(client, userdata, message) + +topics + the topic string to which the client will subscribe. This can either be a + string or a list of strings if multiple topics should be subscribed to. + +qos + the qos to use when subscribing, defaults to 0. + +userdata + a user provided object that will be passed to the on_message callback when + a message is received. + +See ``simple()`` for the description of ``hostname``, ``port``, ``client_id``, ``keepalive``, ``will``, ``auth``, ``tls``, ``protocol``. + +Callback Example +'''''''''''''''' + +.. code:: python + + import paho.mqtt.subscribe as subscribe + + def on_message_print(client, userdata, message): + print("%s %s" % (message.topic, message.payload)) + + subscribe.callback(on_message_print, "paho/test/callback", hostname="mqtt.eclipseprojects.io") + + +Reporting bugs +-------------- + +Please report bugs in the issues tracker at https://github.com/eclipse/paho.mqtt.python/issues. + +More information +---------------- + +Discussion of the Paho clients takes place on the `Eclipse paho-dev mailing list `_. + +General questions about the MQTT protocol itself (not this library) are discussed in the `MQTT Google Group `_. + +There is much more information available via the `MQTT community site `_. diff --git a/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/SOURCES.txt b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/SOURCES.txt new file mode 100644 index 0000000..50bcd7c --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/SOURCES.txt @@ -0,0 +1,49 @@ +CONTRIBUTING.md +LICENSE.txt +MANIFEST.in +README.rst +about.html +edl-v10 +notice.html +setup.cfg +setup.py +examples/aws_iot.py +examples/client_logger.py +examples/client_mqtt_clear_retain.py +examples/client_pub-wait.py +examples/client_pub_opts.py +examples/client_rpc_math.py +examples/client_session_present.py +examples/client_sub-class.py +examples/client_sub-multiple-callback.py +examples/client_sub-srv.py +examples/client_sub-ws.py +examples/client_sub.py +examples/client_sub_opts.py +examples/context.py +examples/loop_asyncio.py +examples/loop_select.py +examples/loop_trio.py +examples/publish_multiple.py +examples/publish_single.py +examples/publish_utf8-27.py +examples/publish_utf8-3.py +examples/server_rpc_math.py +examples/subscribe_callback.py +examples/subscribe_simple.py +src/paho/__init__.py +src/paho/mqtt/__init__.py +src/paho/mqtt/client.py +src/paho/mqtt/matcher.py +src/paho/mqtt/packettypes.py +src/paho/mqtt/properties.py +src/paho/mqtt/publish.py +src/paho/mqtt/reasoncodes.py +src/paho/mqtt/subscribe.py +src/paho/mqtt/subscribeoptions.py +src/paho_mqtt.egg-info/PKG-INFO +src/paho_mqtt.egg-info/SOURCES.txt +src/paho_mqtt.egg-info/dependency_links.txt +src/paho_mqtt.egg-info/not-zip-safe +src/paho_mqtt.egg-info/requires.txt +src/paho_mqtt.egg-info/top_level.txt \ No newline at end of file diff --git a/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/dependency_links.txt b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/installed-files.txt b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/installed-files.txt new file mode 100644 index 0000000..0c2353d --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/installed-files.txt @@ -0,0 +1,26 @@ +../paho/__init__.py +../paho/__pycache__/__init__.cpython-311.pyc +../paho/mqtt/__init__.py +../paho/mqtt/__pycache__/__init__.cpython-311.pyc +../paho/mqtt/__pycache__/client.cpython-311.pyc +../paho/mqtt/__pycache__/matcher.cpython-311.pyc +../paho/mqtt/__pycache__/packettypes.cpython-311.pyc +../paho/mqtt/__pycache__/properties.cpython-311.pyc +../paho/mqtt/__pycache__/publish.cpython-311.pyc +../paho/mqtt/__pycache__/reasoncodes.cpython-311.pyc +../paho/mqtt/__pycache__/subscribe.cpython-311.pyc +../paho/mqtt/__pycache__/subscribeoptions.cpython-311.pyc +../paho/mqtt/client.py +../paho/mqtt/matcher.py +../paho/mqtt/packettypes.py +../paho/mqtt/properties.py +../paho/mqtt/publish.py +../paho/mqtt/reasoncodes.py +../paho/mqtt/subscribe.py +../paho/mqtt/subscribeoptions.py +PKG-INFO +SOURCES.txt +dependency_links.txt +not-zip-safe +requires.txt +top_level.txt diff --git a/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/not-zip-safe b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/requires.txt b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/requires.txt new file mode 100644 index 0000000..bb6ad95 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/requires.txt @@ -0,0 +1,3 @@ + +[proxy] +PySocks diff --git a/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/top_level.txt b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/top_level.txt new file mode 100644 index 0000000..97b8766 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paho_mqtt-1.6.1.egg-info/top_level.txt @@ -0,0 +1 @@ +paho diff --git a/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/LICENSE b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/LICENSE new file mode 100644 index 0000000..d12bef0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/LICENSE @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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, Suite 500, Boston, MA 02110-1335 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/METADATA b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/METADATA new file mode 100644 index 0000000..c7be205 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/METADATA @@ -0,0 +1,110 @@ +Metadata-Version: 2.2 +Name: paramiko +Version: 3.5.1 +Summary: SSH2 protocol library +Home-page: https://paramiko.org +Author: Jeff Forcier +Author-email: jeff@bitprophet.org +License: LGPL +Project-URL: Docs, https://docs.paramiko.org +Project-URL: Source, https://github.com/paramiko/paramiko +Project-URL: Issues, https://github.com/paramiko/paramiko/issues +Project-URL: Changelog, https://www.paramiko.org/changelog.html +Project-URL: CI, https://app.circleci.com/pipelines/github/paramiko/paramiko +Platform: Posix; MacOS X; Windows +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) +Classifier: Operating System :: OS Independent +Classifier: Topic :: Internet +Classifier: Topic :: Security :: Cryptography +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Requires-Python: >=3.6 +License-File: LICENSE +Requires-Dist: bcrypt>=3.2 +Requires-Dist: cryptography>=3.3 +Requires-Dist: pynacl>=1.5 +Provides-Extra: gssapi +Requires-Dist: pyasn1>=0.1.7; extra == "gssapi" +Requires-Dist: gssapi>=1.4.1; platform_system != "Windows" and extra == "gssapi" +Requires-Dist: pywin32>=2.1.8; platform_system == "Windows" and extra == "gssapi" +Provides-Extra: invoke +Requires-Dist: invoke>=2.0; extra == "invoke" +Provides-Extra: ed25519 +Provides-Extra: all +Requires-Dist: pyasn1>=0.1.7; extra == "all" +Requires-Dist: gssapi>=1.4.1; platform_system != "Windows" and extra == "all" +Requires-Dist: pywin32>=2.1.8; platform_system == "Windows" and extra == "all" +Requires-Dist: invoke>=2.0; extra == "all" +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: home-page +Dynamic: license +Dynamic: platform +Dynamic: project-url +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: requires-python +Dynamic: summary + +|version| |python| |license| |ci| |coverage| + +.. |version| image:: https://img.shields.io/pypi/v/paramiko + :target: https://pypi.org/project/paramiko/ + :alt: PyPI - Package Version +.. |python| image:: https://img.shields.io/pypi/pyversions/paramiko + :target: https://pypi.org/project/paramiko/ + :alt: PyPI - Python Version +.. |license| image:: https://img.shields.io/pypi/l/paramiko + :target: https://github.com/paramiko/paramiko/blob/main/LICENSE + :alt: PyPI - License +.. |ci| image:: https://img.shields.io/circleci/build/github/paramiko/paramiko/main + :target: https://app.circleci.com/pipelines/github/paramiko/paramiko + :alt: CircleCI +.. |coverage| image:: https://img.shields.io/codecov/c/gh/paramiko/paramiko + :target: https://app.codecov.io/gh/paramiko/paramiko + :alt: Codecov + +Welcome to Paramiko! +==================== + +Paramiko is a pure-Python [#]_ (3.6+) implementation of the SSHv2 protocol +[#]_, providing both client and server functionality. It provides the +foundation for the high-level SSH library `Fabric `_, +which is what we recommend you use for common client use-cases such as running +remote shell commands or transferring files. + +Direct use of Paramiko itself is only intended for users who need +advanced/low-level primitives or want to run an in-Python sshd. + +For installation information, changelogs, FAQs and similar, please visit `our +main project website `_; for API details, see `the +versioned docs `_. Additionally, the project +maintainer keeps a `roadmap `_ on his +personal site. + +.. [#] + Paramiko relies on `cryptography `_ for crypto + functionality, which makes use of C and Rust extensions but has many + precompiled options available. See `our installation page + `_ for details. + +.. [#] + OpenSSH's RFC specification page is a fantastic resource and collection of + links that we won't bother replicating here: + https://www.openssh.com/specs.html + + OpenSSH itself also happens to be our primary reference implementation: + when in doubt, we consult how they do things, unless there are good reasons + not to. There are always some gaps, but we do our best to reconcile them + when possible. diff --git a/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/RECORD b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/RECORD new file mode 100644 index 0000000..804071c --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/RECORD @@ -0,0 +1,99 @@ +paramiko-3.5.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +paramiko-3.5.1.dist-info/LICENSE,sha256=X6Jb9fOV_SbnAcLh3kyn0WKBaYbceRwi-PQiaFetG7I,26436 +paramiko-3.5.1.dist-info/METADATA,sha256=tBegHk-5JVE3vjOnzR6d6kVP4UCLBKXJZdCcWX8_BGA,4618 +paramiko-3.5.1.dist-info/RECORD,, +paramiko-3.5.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +paramiko-3.5.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91 +paramiko-3.5.1.dist-info/top_level.txt,sha256=R9n-eCc_1kx1DnijF7Glmm-H67k9jUz5rm2YoPL8n54,9 +paramiko/__init__.py,sha256=3wgH5SDq89MGbiIIdCWg-w48eVu7lgP8bUPfSC4Jtuc,4446 +paramiko/__pycache__/__init__.cpython-311.pyc,, +paramiko/__pycache__/_version.cpython-311.pyc,, +paramiko/__pycache__/_winapi.cpython-311.pyc,, +paramiko/__pycache__/agent.cpython-311.pyc,, +paramiko/__pycache__/auth_handler.cpython-311.pyc,, +paramiko/__pycache__/auth_strategy.cpython-311.pyc,, +paramiko/__pycache__/ber.cpython-311.pyc,, +paramiko/__pycache__/buffered_pipe.cpython-311.pyc,, +paramiko/__pycache__/channel.cpython-311.pyc,, +paramiko/__pycache__/client.cpython-311.pyc,, +paramiko/__pycache__/common.cpython-311.pyc,, +paramiko/__pycache__/compress.cpython-311.pyc,, +paramiko/__pycache__/config.cpython-311.pyc,, +paramiko/__pycache__/dsskey.cpython-311.pyc,, +paramiko/__pycache__/ecdsakey.cpython-311.pyc,, +paramiko/__pycache__/ed25519key.cpython-311.pyc,, +paramiko/__pycache__/file.cpython-311.pyc,, +paramiko/__pycache__/hostkeys.cpython-311.pyc,, +paramiko/__pycache__/kex_curve25519.cpython-311.pyc,, +paramiko/__pycache__/kex_ecdh_nist.cpython-311.pyc,, +paramiko/__pycache__/kex_gex.cpython-311.pyc,, +paramiko/__pycache__/kex_group1.cpython-311.pyc,, +paramiko/__pycache__/kex_group14.cpython-311.pyc,, +paramiko/__pycache__/kex_group16.cpython-311.pyc,, +paramiko/__pycache__/kex_gss.cpython-311.pyc,, +paramiko/__pycache__/message.cpython-311.pyc,, +paramiko/__pycache__/packet.cpython-311.pyc,, +paramiko/__pycache__/pipe.cpython-311.pyc,, +paramiko/__pycache__/pkey.cpython-311.pyc,, +paramiko/__pycache__/primes.cpython-311.pyc,, +paramiko/__pycache__/proxy.cpython-311.pyc,, +paramiko/__pycache__/rsakey.cpython-311.pyc,, +paramiko/__pycache__/server.cpython-311.pyc,, +paramiko/__pycache__/sftp.cpython-311.pyc,, +paramiko/__pycache__/sftp_attr.cpython-311.pyc,, +paramiko/__pycache__/sftp_client.cpython-311.pyc,, +paramiko/__pycache__/sftp_file.cpython-311.pyc,, +paramiko/__pycache__/sftp_handle.cpython-311.pyc,, +paramiko/__pycache__/sftp_server.cpython-311.pyc,, +paramiko/__pycache__/sftp_si.cpython-311.pyc,, +paramiko/__pycache__/ssh_exception.cpython-311.pyc,, +paramiko/__pycache__/ssh_gss.cpython-311.pyc,, +paramiko/__pycache__/transport.cpython-311.pyc,, +paramiko/__pycache__/util.cpython-311.pyc,, +paramiko/__pycache__/win_openssh.cpython-311.pyc,, +paramiko/__pycache__/win_pageant.cpython-311.pyc,, +paramiko/_version.py,sha256=tLiXqXwCOGvfqkriwLWRj-53qgA3P5tN4yf7JcSo4_8,80 +paramiko/_winapi.py,sha256=e4PyDmHmyLcAkZo4WAX7ah_I6fq4ex7A8FhxOPYAoA8,11204 +paramiko/agent.py,sha256=4vP4knAAzZiSblzSM_srbTYK2hVnUUT561vTBdCe2i4,15877 +paramiko/auth_handler.py,sha256=kMY00x5sUkrcR9uRHIIakQw4E6649oW1tMtIQPrFMFo,43006 +paramiko/auth_strategy.py,sha256=Pjcp8q64gUwk4CneGOnOhW0WBeKBRFURieWqC9AN0Ec,11437 +paramiko/ber.py,sha256=uFb-YokU4Rg2fKjyX8VMAu05STVk37YRgghlNHmdoYo,4369 +paramiko/buffered_pipe.py,sha256=AlkTLHYWbj4W-ZD7ORQZFjEFv7kC7QSvEYypfiHpwxw,7225 +paramiko/channel.py,sha256=MXO-C5dipy8Q0Shh9ceR-CPPiBB-ssT_9oIgwzBhQ_o,49222 +paramiko/client.py,sha256=BjTberxDuu43FHdP273lGRfZI-kf183tQ3CIyB1z4Io,34492 +paramiko/common.py,sha256=sBJW8KJz_EE8TsT7wLWTPuUiL2nNsLa_cfrTCe9Fyio,7756 +paramiko/compress.py,sha256=RCHTino0cHz1dy1pLbOhFhdWfGl4u50VmBcbT7qBWNc,1282 +paramiko/config.py,sha256=QPzwsk4Vem-Ecg2NhjRu78O9SU5ZO6DmfxZTA6cHWco,27362 +paramiko/dsskey.py,sha256=jX9Q5gsKR1hUrvQKSHBZsa96At7NvEO_liT_8G64EP8,8248 +paramiko/ecdsakey.py,sha256=nK8oxORGgLP-zoC2REG46bAchVrlr35jfuxTn_Ac8sM,11653 +paramiko/ed25519key.py,sha256=FYurG0gqxmhNKh_22Hp3XEON5zuvzv-r5w8y9yJQgqY,7457 +paramiko/file.py,sha256=NgbhUjYgrLh-HQtsdYlPZ3CyvS0jhXqePk45GhHPMSo,19063 +paramiko/hostkeys.py,sha256=ErKfOnfzmp8MvonOqkgcySt_Ci9Mp6zDM2QF9aOT4Ms,13208 +paramiko/kex_curve25519.py,sha256=voEFDs_zkgEdWOqDakU-5DLYO3qotWcXYiqOCUP4GDo,4436 +paramiko/kex_ecdh_nist.py,sha256=RbHPwv8Gu5iR9LwMf-N0yUjXEQgRKKBLaAT3dacv44Q,5012 +paramiko/kex_gex.py,sha256=j5fPexu48CGObvpPKn0kZTjdn1onfz0iYhh8p8kIgM0,10320 +paramiko/kex_group1.py,sha256=HfzkLH1SKaIavnN-LGuF-lAMaAECB6Izj_TELhg4Omc,5740 +paramiko/kex_group14.py,sha256=AX7xrTCqMROrMQ_3Dp8WmLkNN8dTovhPjtWgaLLpRxs,1833 +paramiko/kex_group16.py,sha256=s7qB7tSDFkG5ztlg3mV958UVWnKgn1LIA-B2t-h1eX4,2288 +paramiko/kex_gss.py,sha256=BadM1nNN-ORDRuJmb93v0xBGQlce1n29lT4ihsnmY-4,24562 +paramiko/message.py,sha256=wHTWVU_Xgfq-djOOPVF5jAsE-XgADoH47G0iI5N69gY,9349 +paramiko/packet.py,sha256=CocYnZ2Vbz7VRo-6BGMhlRWro7FLIISpxTiYeoEsyaM,24314 +paramiko/pipe.py,sha256=cmWwOyMdys62IGLC9lDznwTu11xLg6wB9mV-60lr86A,3902 +paramiko/pkey.py,sha256=zk9RlRoSOg4_Jnb4oBZE3dG4d_EtcO1iOB7cHPeWhUk,36851 +paramiko/primes.py,sha256=6Uv0fFsTmIJxInMqeNhryw9jrzvgNksKbA7ecBI0g5E,5107 +paramiko/proxy.py,sha256=I5XxN1aDren3Fw1f3SOoQLP4O9O7jeyey9meG6Og0q4,4648 +paramiko/rsakey.py,sha256=7xoDJvfcaZVVYRGlv8xamhO3zYvE-wI_Nd814L8TxzQ,7546 +paramiko/server.py,sha256=oNkI7t2gSMYIwLov5vl_BbHU-AwFC5LxP78YIXw7mq4,30457 +paramiko/sftp.py,sha256=pyZPnR0fv94YopfPDpslloTiYelu5GuM70cXUGOaKHM,6471 +paramiko/sftp_attr.py,sha256=AX-cG_FiPinftQQq8Ndo1Mc_bZz-AhXFQQpac-oV0wg,8258 +paramiko/sftp_client.py,sha256=e_zi6V233tjx3DH9TH7rRDKRO-TCZ_zyOkBw4sSRIjo,35855 +paramiko/sftp_file.py,sha256=NgVfDhxxURhFrEqniIJQgKQ6wlgCTgOVu5GwQczW_hk,21820 +paramiko/sftp_handle.py,sha256=ho-eyiEvhYHt-_VytznNzNeGktfaIsQX5l4bespWZAk,7424 +paramiko/sftp_server.py,sha256=yH-BgsYj7BuZNGn_EHpnLRPmoNGoYB9g_XxOlK4IcYA,19492 +paramiko/sftp_si.py,sha256=Uf90bFme6Jy6yl7k4jJ28IJboq6KiyPWLjXgP9DR6gk,12544 +paramiko/ssh_exception.py,sha256=F82_vTnKr3UF7ai8dTEv6PnqwVoREyk2c9_Bo3smsrg,7494 +paramiko/ssh_gss.py,sha256=eq_Dcs8Ga1R3xlP2SneSgHOlboY_WgaPJN503OeYCaA,28887 +paramiko/transport.py,sha256=ceR5oZjsIF97F95lQEbYsUf-OJdEWtQPU4JWB1cDAmI,135632 +paramiko/util.py,sha256=v6fIp589sPWNFTaq58X6OhbJY7eOHuzjFz8M7p8PFNE,9550 +paramiko/win_openssh.py,sha256=DbWJT0hiE6UImAbMqehcGuVLDWIl-2rObe-AhaGuWpk,1918 +paramiko/win_pageant.py,sha256=i5TG472VzJKVnK08oxM4hK_qb9IzL_Fo96B8ouaxXHo,4177 diff --git a/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/REQUESTED b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/WHEEL b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/WHEEL new file mode 100644 index 0000000..505164b --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (75.8.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/top_level.txt new file mode 100644 index 0000000..8608c1b --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko-3.5.1.dist-info/top_level.txt @@ -0,0 +1 @@ +paramiko diff --git a/venv/lib/python3.11/site-packages/paramiko/__init__.py b/venv/lib/python3.11/site-packages/paramiko/__init__.py new file mode 100644 index 0000000..65148d2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/__init__.py @@ -0,0 +1,165 @@ +# Copyright (C) 2003-2011 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# flake8: noqa +import sys +from paramiko._version import __version__, __version_info__ +from paramiko.transport import ( + SecurityOptions, + ServiceRequestingTransport, + Transport, +) +from paramiko.client import ( + AutoAddPolicy, + MissingHostKeyPolicy, + RejectPolicy, + SSHClient, + WarningPolicy, +) +from paramiko.auth_handler import AuthHandler +from paramiko.auth_strategy import ( + AuthFailure, + AuthStrategy, + AuthResult, + AuthSource, + InMemoryPrivateKey, + NoneAuth, + OnDiskPrivateKey, + Password, + PrivateKey, + SourceResult, +) +from paramiko.ssh_gss import GSSAuth, GSS_AUTH_AVAILABLE, GSS_EXCEPTIONS +from paramiko.channel import ( + Channel, + ChannelFile, + ChannelStderrFile, + ChannelStdinFile, +) +from paramiko.ssh_exception import ( + AuthenticationException, + BadAuthenticationType, + BadHostKeyException, + ChannelException, + ConfigParseError, + CouldNotCanonicalize, + IncompatiblePeer, + MessageOrderError, + PasswordRequiredException, + ProxyCommandFailure, + SSHException, +) +from paramiko.server import ServerInterface, SubsystemHandler, InteractiveQuery +from paramiko.rsakey import RSAKey +from paramiko.dsskey import DSSKey +from paramiko.ecdsakey import ECDSAKey +from paramiko.ed25519key import Ed25519Key +from paramiko.sftp import SFTPError, BaseSFTP +from paramiko.sftp_client import SFTP, SFTPClient +from paramiko.sftp_server import SFTPServer +from paramiko.sftp_attr import SFTPAttributes +from paramiko.sftp_handle import SFTPHandle +from paramiko.sftp_si import SFTPServerInterface +from paramiko.sftp_file import SFTPFile +from paramiko.message import Message +from paramiko.packet import Packetizer +from paramiko.file import BufferedFile +from paramiko.agent import Agent, AgentKey +from paramiko.pkey import PKey, PublicBlob, UnknownKeyType +from paramiko.hostkeys import HostKeys +from paramiko.config import SSHConfig, SSHConfigDict +from paramiko.proxy import ProxyCommand + +from paramiko.common import ( + AUTH_SUCCESSFUL, + AUTH_PARTIALLY_SUCCESSFUL, + AUTH_FAILED, + OPEN_SUCCEEDED, + OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED, + OPEN_FAILED_CONNECT_FAILED, + OPEN_FAILED_UNKNOWN_CHANNEL_TYPE, + OPEN_FAILED_RESOURCE_SHORTAGE, +) + +from paramiko.sftp import ( + SFTP_OK, + SFTP_EOF, + SFTP_NO_SUCH_FILE, + SFTP_PERMISSION_DENIED, + SFTP_FAILURE, + SFTP_BAD_MESSAGE, + SFTP_NO_CONNECTION, + SFTP_CONNECTION_LOST, + SFTP_OP_UNSUPPORTED, +) + +from paramiko.common import io_sleep + + +# TODO: I guess a real plugin system might be nice for future expansion... +key_classes = [DSSKey, RSAKey, Ed25519Key, ECDSAKey] + + +__author__ = "Jeff Forcier " +__license__ = "GNU Lesser General Public License (LGPL)" + +# TODO 4.0: remove this, jeez +__all__ = [ + "Agent", + "AgentKey", + "AuthenticationException", + "AutoAddPolicy", + "BadAuthenticationType", + "BadHostKeyException", + "BufferedFile", + "Channel", + "ChannelException", + "ConfigParseError", + "CouldNotCanonicalize", + "DSSKey", + "ECDSAKey", + "Ed25519Key", + "HostKeys", + "Message", + "MissingHostKeyPolicy", + "PKey", + "PasswordRequiredException", + "ProxyCommand", + "ProxyCommandFailure", + "RSAKey", + "RejectPolicy", + "SFTP", + "SFTPAttributes", + "SFTPClient", + "SFTPError", + "SFTPFile", + "SFTPHandle", + "SFTPServer", + "SFTPServerInterface", + "SSHClient", + "SSHConfig", + "SSHConfigDict", + "SSHException", + "SecurityOptions", + "ServerInterface", + "SubsystemHandler", + "Transport", + "WarningPolicy", + "io_sleep", + "util", +] diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3bb7f45ef03864b9a44f0b4d51114e8837507e6d GIT binary patch literal 4742 zcmc&$Np~B$5pHT1DN(y@$r~+iq8HKfGTuF=$d*KlB55}11(}%+MM6|tsBRkFluf_9 zyt(Hxx8$5llK+tW2Ojls%_%qK&23IWp(%>g$cH2^6AS)W8w!Q00?>aN9Sv&o-|znV z&+2y*n)Y{O4*&JFh#&WQH0}3VMXLmuM)0?X1)zuYKriVHAm7XSpr7=^02zQmGN@#I zYzT(QFa${uLL>wuWCTXZsM7VbFpQBgMGvrXm>?4{NhV>6Ou;mnh8Z#gvt$-dkyCJ* zoQ63v2lHfJ*$=WaaF(2fbL1SHC+C%Hh+TjPiNHm25f;b-Tq2j0e3)H^E944XC0F4Z zxdw}55uzjt*U5FbL2kfJauaTmTd+iyAVy+pPLSP(WwH!+$Q`&#?kZV`-Glq&zM@Ci zSMY#5Q1mE!2#?4kMTgmActV~idW=1VXXF_?C(ji>&c22h)*(ewik@LFVS{WadX}YOlWZ#b6w5%CWEFjy<=_>0rRX`92ZI<; zAO*$Gvm(4Eui*`O18>P&B|F330U<=uXW6gd8}bc&OTJb7Irbfx#8mWo_G>7S5^Rwz zD3dZ&NChaNuuZn1N~*9!c9h)(xo3-5@SePfU9t;|FaQEz6B``jK#kPk1NoqABhn`) zJfP7B^gew;A65H^Te(QQ$^xlZwaTSG2FP9|U}(|H|G*~9M0-TYH1{ZXEyp%ZF@D5Y z_O@f1(OxlT&~lwyUL#xcq?Ie?4a)bdGR@Nub?SPST`lmE?baObiQzUG?H8l*y640z zm7K$@azjjSTCOXt*B#f}ppBMvBv0Sdve)8<4P!mQENXjV^i7G|(%jcX10p2d?W~vV z3Zpz4^x4&t#p;}j5!4wTFL|`u5JBYf)U7kmrwymh%T!FJ>`e*|Z{)bOCrxD(VkqO- z6z#=$)=paPZl^9+a@~&(uZUoWbj0`O`XHtduIZC2Ek<*caxt+ix(hH-&oNy1fG_9zwAyVn7VGa)xtrrSdNIWNy*-$Vz>Co63wS!yeHeui{A1X zujtFkUpcM5CC}6fbGAgdXz$w2M_bCVy%Q0O>Y3=jEOS-)sS#@~XqCE2Sz2shOSze7hwH@j$IlTJ(^Ws{j7)i_1CN0*e zE!&?({5FWB-?F#-1&2a3kX995rm5fPZ7=_EFfG$xQwub5JR|) zu!8UyVHn|Sglh;o!Xm;g1pL(DcM-lqxQDQe@Ce}n!hM8?2qA<7LJ}d0(2sB(;ReDW z!U)0}38Js=SuFZd^vXLxOw>xe1lF#zbogxXUbMuIDlyqs%9p@@k$m3+Xo7CVSlgtm zo*6$kYJX}QDm+|U%(N{_^3FBorHu~{A4T14x6W-nJUoo+j3JC8$S*&QPa;eqOe4%7 z%p#nUAjaFCTzAK;x-LJBx;cdTZiBM_Zupfuiw5Tq&ZE^)KnP66ZasHPyR@PDpkr3Wby14_)KM{7uK3p2Vq&VjbLwBr zI0O4mjJ7rIwmbu>mF}Qox=UfUDyTXSo9?*26+8A`M{A%@vm`HY)vd?pw91T4+gTf& z<65eNkGtBIFSF|O4tww)MRj;O(o$2GJ%57Ek2a|s;F%QR_WtCHYI{e=xWl@JX;Me= zg`C3UIPd6C?8t8`Y2d1}+p%(4-TO!9u45^A$$V<4Bi&^W;MjZ>msmqsM@S*OMA$$` zBWxmM5V8n4gjWc81OuUfP(*l*pbm9NMkxy@zptn(f~JXQ%;EAARDO@jmkqBo$qY&b zW2X5R?MFFN`^kvyI6!0XD=`^0em1%>2lmV@nb&$Pwny!~7_+uwwT5(N-(6Z>j=7dc zZ(-hLM%~z9eq*L-*_LOTOSQ&NLr=k})ERxwe=FAr$p7x&XZ*Ji)&fgS?N;YF=n0|cUmi|tfmEQWt$%48^z>t3{~3&o z;N1Tw%xi(1++OxeV_#cnc8`-JSDRYb*w?N%yT^WaIoqY(*Or?njeYG#vwQs9!$~%` zn_Ab{*RD0Y$G&#C***5VgO__bNpgHg{s#B8$IUN~ll9W|M+j@HTExv CoNUkl literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/_version.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/_version.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..865d9cabbf9582a0c1785aa2f95307db160e6f12 GIT binary patch literal 352 zcmZ3^%ge<81l@Z+rUwA&#~=<2ut6E0J%Ehq3@Hpz3@MBY7-7=LG!sKAQz~;R!!jlY zhSfj}0n31DSHsmuv7|5sGiWkvGQVU7%D-d<5g^%LjCy{WthWT>O)R*@TwGFgiyNULekH?akR`u@^)vEwQ}we_^b3mevr>~wiuLnz z%i@y~le0?;^vhE7%Jg$Glk^KJOEU8FjP(o+^@}r0QgsV}@`>rG#rg$_MTxnY+4=e~ z%k>H>e{tC4=BJeAq}mnn0qp>}u~-*Kd|+l|WV|6PbAdtN2A^PmMpwp!;t9nwj4vn{ ZTogCFB5rt*&*%!DQ3E#!7V!Xe004NpT?zmI literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/_winapi.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/_winapi.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c59d74cce942a1575a18a6b8dfa563eed594133c GIT binary patch literal 16157 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 E0|;+QYybcN literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/agent.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/agent.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8e7f505463f8a60b49886cda25392816966694a GIT binary patch literal 24795 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 Y-*Lp@09`5%m(&L==c`BLGm7>90RHQQ7XSbN literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/auth_handler.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/auth_handler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d02d1045e7a618fc313de5e621a719974b2e93e7 GIT binary patch literal 51111 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 M-u$}6do}?6f8i@6=>Px# literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/auth_strategy.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/auth_strategy.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6a465f7032b3b8557a0d5a942ee5eaa9ea14a55 GIT binary patch literal 13938 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/ber.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/ber.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04d7dbb964a106b274a2e68cccf823312563c0f4 GIT binary patch literal 6706 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 L{{1$+x`h7+k5w7- literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/buffered_pipe.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/buffered_pipe.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29b73611dfd4ea3f4b32cbfbed2957a24ee73ff7 GIT binary patch literal 9676 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 iHG#8xiuL}l>FMulRq<>e?To~%Krl2*I2ax literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/channel.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/channel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4750889c0050a63c0a86c3666624385ba61e5681 GIT binary patch literal 66618 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/client.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/client.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad810024cb0a3c36fd59388d6b1a840ac1513311 GIT binary patch literal 35800 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 W?rhK7p&sZzXwBVuJNcoH#{ULw;BvbF literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/compress.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/compress.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15bf0587cdc69ef077a8d579e7515580c4c772d1 GIT binary patch literal 1733 zcmb_cy>HV%6u)!qG^8ydly8tQv`tkBV(}qZ5DO(`sJetMSx#>3wn?4XoZU!7k;uS+ z0Ew}T6+%T(XEy$b21No{VnPgTsoJR%@A+akDVY#w`R8}{?!9;Kz2EuM_;`}Qc=Kg% zRZ#jJX|2UAyFvAL?NPq|)o9h-aEt?|CHp4}R%tm5XY*oci4O40F?jdy0c;YlPgjoQZP4w&D@KE` zC{u&vNsBJd#(cRBLHyBTFDrYw?9+OS`m$?UD=xZH5A)iZT`{$?p*h?xn?=vn>`IL- z>&5jAN2{6Dng&iZ=ef6LSMOwR-O}8WXWn!`udkY}=IC6nl-6x6jFNSp`w7NM)sn|p z{rq5_*-&vAg1hGcn&emdY$tuKou2HZCtt~LCK)fF}8#ns{4#_u}=7 z_g*_S)k#flc^_+^8Xp>;=Q?*Ew`X#lnOr-S+fC&7NibM!DcFgsUNIT-lZ;htW5Ysu zjIn1Mx+OGx9QN|F04);O1t;TJfB=xo?tOq}^mHXjnd*`V5>%O|T{0YnPjvT>cjXjv zXwD4F{Qqx@XlG0`ZrnJEv|J8a%<)eo?u)1mR;+&U_^~2#PvLe!?jK0*$##0Wlb#OA z9Ta4M+(_)c8$UqRh`_KX8pp{UQc@C>OdjRHC%~wmazUqu9$xTm2KQe8=<)4aO8uHr zx6ZUvnNBLRo5%#mU*wn{M{bDzBAfY@5GFxzZv*smhAJ84NDtyvnZfCC5bn?u{3b^j zGwdQ`L2CphgBXKx4-*drwIA~9V22fR8vxxHrL>!os0>^MNDw;K9L1*_k5gpqaNG;l V5BjyI6$%Ia8}@MRV2C0};}45fX3GEo literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/config.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/config.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5046a0c87897e4c9e65c2edb619d6ff4b0cc82a0 GIT binary patch literal 26233 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
    KC^s;jbj$K4%ygnAtgNhs}V!|>?P+q#83qSvC= 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 Nv6l06oqTO-{|D>q(7^xz literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/ecdsakey.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/ecdsakey.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f9dfbcb118995e0c846ab2548986e40f467dbcd GIT binary patch literal 16637 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 BDD40M literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/ed25519key.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/ed25519key.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4d2da63a97454269508a0ae97ad5b594a735d69 GIT binary patch literal 9261 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_curve25519.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_curve25519.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33d2eecd2f00eb5c3c804d10976808e63438c015 GIT binary patch literal 8376 zcmd5>U2GfImA*rYq&aD-lW%fZ_D_yY?96TlYZmflL=(olkG;_o8hv- zWYCEFGNEiovV$QmB85d(^nd0e>`Zovf!q7!xI#XIte;y2h*2VvJm4a) z6S4g^5jkg#$%7&@Ph!Duu*6)9(GUDIC$AI=d8$a_rOaZUrj?~^%%ulY`JAi>IfYl! zSxFDd5={%4^tzy=^EpTlzkB-Z*@;))r0JW2B3+f%^p2WlWg(MJfdVS`y&=i6uqZuZ zbar7)k@(aS1vNK6KQpzOk_uSYH+|5PZ=xVl39kZc4eEiA;JSQCL%!^0^KWu9DHK+)7XH~k zfaX4t2pU?_CApW|tSm{7$lNALujCV5x0@C}$%<}B^NVdD1EL3HyXXbUi9V1)k%guA z>%pti>ScQXDXURz0prH3_e119DKbUEquvN2tO0M&wn$*EnK_teze0taj3%VJZ@{{{ z^fp<_yho2fsoLz*E{N+a&!=-~h3D4~Il2(H^oOy;0T8!H^+^9_+g7L=ISdbW6aFYB zIBWzb#pvyu5V=qMq|rK-?VdV41pE#>V1Ow0loE21&^Cr#2cMoN?~_&cb@DzFbI-jq z9dlDJ)UC6NQcj{^=oH%n6LzOEvWzW6&7pB=nHO#f>5QI&?r%O4KDkR6|B+p&`N+w% zlP^g0y*$nGR%PqQoeSBL;UtuoXF!0#b{_m?_jYH0rL(_uuG~4Ub&hX(ciOwP_7kO{ zhvVh;A8PGC+$C;*Xs4^M8vfB!w<{9*mVnqLu3%`_OTvdXgRMr6_GcJ*2%Pi&3z;~$ zDLS$dVBzhhtM4N8M5Dgcu+UaHLKL*GT5v8YLf1S|I;>REv=41CMW)2oQ|mDW_kmhy zt`o`_aBQVpPw1&Vni4K&OK>`PsiEKXtO}Y*Ei8xZm^}tZdbl;+Y4R<7Z_i5%$apyt*CKJmkZOC!)s; z;}!0BnLD9zC$_nGg^TZmd$sV879Rcb4Q+f{8~-slc@UjE7<%e%^9Q~qAa)HAApYQ1 zXq!D*VNaIcDzn2HJFK$9RhC2TV1*rgGIXxYzM`?OsMgQi9BiY3QQ9o&@9^T>?QR(EL=P58sj)7o!3@Qw9emz_9`$-5|eW~8WT^-*Q5AVvTAytol#4IiN+&fMj6F0$vCUbg znWsP<_IBR_S)QV2Z^(je+GaP)Hb6PFc5fV78-^TO+u}cKgR=|#o56qsyPc8^P*yrV zopW4j7)w2uGtY(>+P1-LZ(wqkC^Z0dy;fzY9$!WpZiMB7R?Lxp$kNu+o#46QgSkek z-x7*m=L*8C?3c4?k9tl{-yU@$aJGbI`@uCS;UT6aK(Ah4_MPpP8VE?eLg(ynu#L7- zLekn2ifu*KIiLRn+d0-!EhvhP)|Y#&JkHiO{Lk?sBz{OlT7q)1u5!)`^qzTPYuGPm z>l*Ku)8Ep1gMXKz^oMoLnuPh0YwjC###p}|Sd^3+m7<7xdgpsI zpXD7y3Vlv@r*jINX3{x9PNmbjZ%JCsq~BXJ>6#k|naTD-RLbVzegznx40kGeFq2OS z8T+-PmJIM_K${*i)9dd>e@w=R=OdpWn`{n^mc~&eP#~_;Qz#}-oJR2y2;Gm|Fk8Uh z`r(MS#0zkjq!pa^k8 zLiz(t>EeZyV%#_J`4wd$zmgMU0fQ+TsH=yp^PRzAWqJ||F;{ihQdSSw_%OC*3{CH{ zPI*TArjD7>-OxiB_jx!M)`D@wr{_Soe!_|0P2>P?H>Mz)+yfAbcNj-MJ@(15kNY0< zZH9It{aWPA<9{kgu4s`fn=DYsZLYt<;c1Z@*SPUbW{2zeH&zQrOP%HLfEFGoyp8#O^IE0nwQ|oDt>=o$c2|2(Ja~7z_f)0#RJr%G)_Z!p_ti@8t2^8gjqBIA zp)Z5l$ZOijH1LH!me2OCRSp1q7*qxYtjo#bz?*0bsPL3-sC!MUQiP-S9S2wMM$X zY?J+F&~Kq_UZvqg-PB`W(O0r*lidx70Fc^bZMl)4)wPWTt**5Rnxh7rkhRb@-`-T9 znd$;)?3eTZAw_ep;&b}mWEn=z7o~O$D^%K>kO6(&hk*HBgibj}u{WJ^+LM#&7(j1Z zMrm)-evczNcx7k_>6asMAje?R)W@jr~02VT_%Ufmv;t_)0<2WGT^ znKC=8v9l^WTLZKH3fr#^y!@5B%uZ_Tq{>d#686KhxmXCl@Z^N7#PfQ9$E(Mc48}R0 z|HX=ssipXkAHt_LxP)I4PM>|*G&XcDy*-r?WH~FrCpeKtL1S9{%NUzPfgFsYy-+-V z88B*+Gdy%s6nHw7KLT;f{;P%$|1xxIcDK#t>4sYlOR&V-x$E-cD~P9Vc)k5IQxW!h z4xzRt!XeN3U1E!<&jYl|7F{PiV#%q_d=J}$-R>QZ=Y(7VEFVqj&TBPxIhs`@N4}1!Qk1(UyExbRYcp*#Q zMqwAD++OixBef_+ln+GxMUKBji4j zNRmjLNgvC5a$R{o$+NsS=g$X{0hagWy7NL(VEL|G zFds^WSf0;?^F7HPmiOm+^L@!aj<|>%kpfcpLl+@m!Jm5=z7bVFVEGg5LNE9-@_zK*i}Qe=+A`d6+6 zrb-KPUZ$yBbSjt2l+;W*df^sbl%p3jH*RF)V>5CtmroUjcnlwL>` z=HeOZ;o z^a71>de;ZCqNL_!$O?0FGgC`x8M;s`zRshjn@pK|2yb6moG)A( zeRJe7p+2Y*bLp<}<2sjCa3!PB?>~tz6!UUCE5%E+n1zum@nU|F_48IKz9<(KGuvpO}a%8C5=3f^oo5m3S#dQ~AuzV*IAOB+6-NK`dkxb-c9vec)^ka_M5e zbdK(VkM+Qxf}>g^)sckp`^Cgxz5UI5kI#I4#$vqy36e%)CR68Ld;*;NL?%fN^xq|M zNw@4tdO<&Z*)CJqsdGtQa(zaUe#s3qAbEgxOJ1OY z$`1fpBaM9n>z<9!v)(><_!^Nt@Zg(|b$*?vyFtvMYp5@5i2nvdfgzF#FglZS#yOD7 zT0_rT!={Jq{E9UJ_V!f1_2$%Jut+dbYPYQ%vMt-P%9Xha_O~Ocp%$yXO{io0VoMHs z>Nnpi%qE*}=2OMVYNo7U<$`9;QEv4h8#c?Gman53g?V}a#f8$X>$yyt)lewTtIkgq z(nSd*bk8U6oI0TkSDDCkk>*qI-5*0~zC^+B%F@+hrl9IUQ2_%h<_%j6rOQxnc=!r7{DwjuPbPd^nRw`VtI*SQAozZ^4>uR9p}jsSV?_WA?g5g=QP z2*e-U2yOC5>im()wHkj^Cqr-7_;)n^ovQgWcD;Q!S{~-VV5GR~ zv+y)hYhTl7nNvL`pOBkupVM7nBkXNi0%ey|$L<&qrzz0=ZajA#3U z9)>T_K_Gerb_G>%|12?whz6R*v82DPgvzDdGDTaX`))9ej=2rp^p@}g^f(kLIHS>M z)G+t~qwRvcq^|6?t7(frft6N)fSy`f>GmIgH2LJ@RDE=+Iywb*e={;#kBmNguNE2C zBI8wIywSVs-Wyu)=oaDp$G_S28t@o1Fdx;?gOLfqo?Ro9q;^v;=`kvw1o)K-&$oj>N8D`Ev zJMNv@j2x*)j?^MUT4V@eMGH?@YYE@O)j(Z-@!zmQ2$?GI(wUs=uCm2F?mjy6cewwkS`U>+@-)#8%2INaG<1))$!YSR#(eRV4bJH&xe_LP0j zkuyx{Gi6_Cmqkr!`?Ku$dKT>{OU|#YcB!^GY3n~m2WT2Qk~-aDIp+m>&%Lr%?j-sD zt!q2=tE*$Ic6)fFH7BiHJ7#KI-NBY*E9YDVBZhnIN_>l^BsQc6=4I7{|I97!HcxHX zp^X9bFU!k%-wj&Ki!ufRvLu!e=2P@y%nKUPNr<&&L@3}S^{$kHVTZyTsm`0HJh}%l zo$kgK5GWc^iW}k(Jw)Yv5uzUOzzQ7N=)qhuoyu9S;bt*_Iu>#3A*0-Ur^DDB^UX2L zVempnkc=Y1;~IJli0;RrCtt!)#lMhJ7Q|F;zNq`844kH@5YH!7eoaF zq?DS{g9}9kgOg>E0mC6|D&mZ(Sa3tpdO_5af-@|JEQ+_(>&07e( z%F^AJ#W|h3th*NSItNn&pH_NN=4uDcq1;I8kEkA-BK5Nke%o6ixG|J>gZOm*K4-U)u5uJQXd zet(tUk1Zi5Q{$r=AFcAyX9fq`_+jx{H->vZoqN#x#mDzPuJH#n{y>#K0PWpP+(|q* z@#m-i$SweV;Qr?0#JlP54w&Tw?d7CEwT^z*qIzfa@$Rr!4wv;MCF)Bsj@G{{D= zeaITC^RXH~s_~;$^JhdAHbh7;MqsFN3=qYuqsmuApY9)wKHX0L`6f{NAds?5o(KaI;N@ zC$~8ZgZ{O+c9hxT+EHeUYoW{zJn5@gShMx@&eH<$VLM5Ztc6G`wmE9GrlLh}rmQt{ zExhO`x3FW@!i!GraL)Ei`qhbueH9CNn*G6N`wB9DZOvU}TMSzE!ugF2MYY<4d3pt$ z=p4oNIMJyq&RJ;dW3=`CR<7&Mq;4|dI?`~ed#Qc86=mH{0Iqy2RQ5WrSO1WL6HxU ze1PNvk^~UF8=(kX3?T-fbHIspwH!MAF^Yg!pKG3-ev0)zM)Dg#6f`3ae|{1eE76zu zb9OXUz`B3RF^3)s-_700-7ahtz#ae6-o3|G`B&x3O&@Ohbn`j#3cmbT;JKYp0Koye zwrjV;8{ze^(>tI1`MJM1_sziHkNnNZUyuFmSncq6?eO`{!_)P{)3w7h+TocRKdbSx zRerWvZ=lW(RNj2#uJL0UKUU?(n*5zSVj>pCtDr(EFN>lc5b>1$Ru1!mDE{uPRIXX# z!6!whVW<~_-Tt|$3s>QO>!S%n?=ilkc!)^fLV|%4!+#W&hN3NIUf2MJ7$8$5XmORF z09mvCJ?lQWcCpd3du_HM>|K9<p_Tf`y*U0ygrv`C-V zdlZG6BsA(B+aeZ8a|>p-zCCjox62U2v@-!_k_Sp#QYS` z*C<{H(%(UnLIU`tW7Vrbp!Do#=U^jNbX_g1`<4`VXQ>#HN8s|rD7U1y9=WyxSKZA*@H6pB|Qv* z3A>UWhpVA{u|U!I={**=c{5~$e!DF;Mp_Ui8dvtlnf!q?T`sA`d73IMERQdwR^ZBM zym^DKuya~Hww(wZ>gF>Le#y#sN?Fe5Ww_!>8z;YSyj;F{=Y{@8NoO+5yXaoH6P}mZ z-2%Htpht16A0c784;PzFPut%7oS}<~VN4<>owF1WAB!qg67p z)2~5}RGq)=IPofR{2Ju#s`K}1oC8(j_&pmw_Q?C_`ZoiQgI@=0WUxwltC7J5`ws;F z=!JjR|7GBxg8v+Z|36S0NoYXH(JJYy_8;ByEpZ&!hVAKd#{bSjv@7lXv-@*pdk4iDDO#k}{lPz@_Wr4~AMbm{ zKA!OhgkI@NEA5H%`ph}+`J8i}^PKk_|IX!dFyMasPtT^_?_-$%#D}7@7Cb-X!E=WZ zm;fWNf+@lVSok(aOi^>d9JK^2EQVVm)~GFDBYtb7F3JVCs6AkhIs%TUGvFlQwg?|} z1zf~m7jZ{D0T0WV7_na91p9px!#sq4&3yu;2O0v60dJrw&@4Ev*U&q{+=m1Yi^&+0 zt|hQ3usP5gXfrWK8Nqp-5qM+nfp!w(f*7~he%}l^z`y1K9fIjJzaZP(3z9sm&1Z6_|9J?`Uz3GEJ}ku-(lbRun#Eg#w;-gP3Hotb)U#gdP0DP7rsPDQ1EBv|*8zbvg^|eRz6E zLvERt8&5NT!}wXL4iZ6~O@q5sb~1rO#OM3zgQ4koR2-TShM*H?#7Q|Z6pvmGo)1mV zUYZ-aEXFPmMZ)KY=B~=q@!0Oc;o+e~SQZE7ARg+S7%INRA@UN%D}!@ae{zgO!U=gY z9-TWVd7+qH@SngIEiq|JpY~Zf^_z3a(62wf{xJ>u0W_FN6h&7Y#yIFB*2EhY^v_ZAuz!R^`cM0JO7sBGev>1s*L$LueEC<9ZlhdKtlsJH|`zd3AcfiLvC%jz z0beX}0t1aPO^o?D)hsCyVgg>bX zvKTXTA2ykE-xzcZbRRPV0h*hk9Vhkb!&9^ii<1(>2R&Ddqt6gAM{Pkpbt47&6Dqvwts3mzRk7yMxK)Q6*|&!}zH!-Ma=dql#w zrE(!b2qLJf?US{2)jCuQ$7Iz#Cy5tC36`KBEKUjO70hH)jif3U4abNc_(E4SpDUOU zV?r>htsQDpS*b@qc<;ma{bs2PGxh{!F(C)(gjd;U0;ibI=hNo7Jt2oAISBAQUtgH$ zG-MPM6aNJQX1dd}d{A-rmiMpMZ-3nP_A|4|<^GWYktf2&xV*`+ zKXQz#>Bji-c#_RI+wzRv-t&ZaeR=%m@yDB9&G5Swes`MRor9q9o8v2j(&EqX{R-co z=KFJ7UP&HVo=8s61cMoVNa2Ul{18oWJDTCQDg3rHzm0|&GAZV)SLFC*_Zqh?%WX@Y z%5c33*PG^gb6RLmmg{-EeSd~Kpl}D$#Sa0hNea%;9f$`6r~U%wAHuv00Yx`U#;Mf2 zz@#W<731)`e3YNY^c3tFMweb+Ce5O1dL7#6($htQCazUJMF&IqbYXd6`udWFu6&9g zrPyli7uZF!++5OGFsF2wtP5vmXgz`FKtDgEm|&dyU$C$Y&i8BM+4svuAJ8qJd~)0e z>$ngB#z-c;Prf=Q`hK}zSoFK3UMNW23~(SNM4S%7bZ`oYDe^^_LDDcrw^T$Ef}ncK zrr`L*_!+giLKzp-is|~n==<+}R3&FgoQqtQ`morJiku3y!g(!WU#YeWaVZ*-RZA=s z75x@%@>}PyfzobNFh>(p2^?lH^9xhop|v$8UXkY;3Uj{{^a)rF{RK~kc@$O6W`*QC6N%Ok9 zZFTpz`@h+r67Gc`HD}uQDee0*?$;If>uK(FZ4&DzB=!ZF#MiV*tXpaXb{?QzFwMj8 z0(z~RhBI`)Ex_K*I0P3>vTnjGm;`ex6rnle@Py&6n;PX4deI_S7Oe|r!8#8$OL)M? z&cg&-G%r}e2g`pc_HR9Q1A&>LRAs?ZR;Eq%6l(*M(5A25g4Ng(hy|kk8&j$N^N@7W zX6OkDIjC(+zgV|WC$O^w)FkjPu(PCSiH)(#=ir$M()N=@+BWeNU(HkOT?xh0|3R?? z!tapU;Y&g+Q+YwW5DCGaDiV)PNmv8b91&xxDV|X4E&<~e;!z2+R{3yDr->xN&yh(X zbzrphVhrYsYP&d1R&Iy3QHx)K_1St6H)m=cEVi(yCnQXpz@l*Cpwre(C!hn_hl;@~ z^NoesqYH~*vULzk%oA6`^4XQpjlk;R48JAGuGcpy^{=E}fd#0(SE=t!TGty|S9?O9UTwY=xE)A3a`jC~YtGxcdgRudu)5ke=lI5zi#Og)j^+3U$n`{W zG;d{^+Gu>{MEICXcSSbf)Sau=gAfMl&t1DlM-*`o;IBzW?C+ z55D_2({c#nwJP;K7|zrWDD?x$!@2r~mBU|ISFEdtQ|vdRtE0L4=DZVf&ht#87wLWy z{F1xt~3KyWO+weiYWI|x;QdL*xvbI_m ztV8ig_F0Jg33!Iz-XTMY2ckutXK94@q!I%08LdspeDZ0!}7E*76&_( za4B*rK}gMf=lkKw*>G&iH|OgE;xqCl(jQIYcEj&)QtPHf8Mh+R5R@(rqS%Q7Z2)Qm zV3>?sB+L?c$Kmd9#4W9{Hse^3~R#$b=-4c1MgG~_eSg>XZtPa6s4V0z5@I2pH1mhZ1?iwg1 zeg)V7#HP`E$N!c8){fgdl6ASwt>4rA=~F;ASESNGg~GwbY2JNt4SzPl%r zCv#Q8@*Kl^S3b=;yVB0CTuXQIXwKPacz&|E6QI+T+qxrZQMmS;_V~o(UB0&F8OnNw zGM-_@Gn}-*ek(b$-ncd0Igx36PicHF&A(UJrLYliEf4BS zd$4C#tKIP<10qiZ&$Mk_YxQSa{SSH{z4`mzOzUx__4o}pg7}K%wr!pF7ItZz{Y%G9 z$763_hVv_&Kh61b5ahh+Tsd-kEW@=!mD5n`s$nnOSG|$p_AA`}bn#QUcHrwIYlq_{ z){ZiarI-)1kK%Fx!FheybJ9@+FCaapqhV#~UJlbu3#LC4rt4NZBeGN=yQv1U8`@l2 zOZ9zdTr>V3_hI}pe=_bPhd|pXaby*+Oh~8UX}(#9?bi_338J6zH%n(AS_APCrX!q7 zAELljO*)H$;*4`hQA4aJ$rYSpyCs!M{#aVHQn2ibq=PTgSoEl_Xd(j6uuKsu|~|#g3z?L zf6Y6b^$tJUro1|u@s26pF@RA7PY_799Zc%s$oMp%qUNBd;!Iy8Hjd>G(Oj&Vti@dDkWrAgcr9f*-mM5I= z)e+R#ODrRAqFsjEkoFn)DL*#!6s$R=16Al{x)+df;uf5-ltpCGx{ZEO3(i4&CBLzs z2qUh}X_*;XW zV5{1oU?|s!xBEbAeoHO9CAP_b29-p+#&#PT@3eo_erwBZ#0)sDGd%vGq4{xsJ)&#Y!I82&-z88cY_ zImYfn`#N&ezZ^|>A6V;tJKO#C@Aqc9k1O5BGu#P;1?A9ZIW^gPZpGS|OLfM%ZVp@uFPN*SuMjQaN!BxNDpe$&I=D<(q zpuP@9E(d6XmK@^Ba-vASv77+mb*G*iLCWgZe`EW=gj%vrmY>^N7Az@>Tg6u3x4tGb z)Yf1KrPyf*r8WjbD8vht#S=I3UHuL>ttnD%wGAlxhj)QY#E*`%|$l?qrelsAdpF!=U~7)V+HadpRnOg4k-NU{eHGP#fU4}J z)bp=YOJnRI?S6^hJR!XU%JW;_(XN`!g6XbH>?$WF{x0b=P}A4~VI4T^B;*p(c@%_% zpea=Hp}+y7x{;_9t~JbxSK*dHLOZoUx}loE)~328F&c*>6SxtVfU9MyD-xd!Md+ia z5Dm2=7k*T?7GHcO+dgRrmRPbBl1(P=5moziC@~!jMW*7aO$ft{Fd1$RC7@C#g2z-> zB0LofCO|<5$syG>9fzw3P|YAYmaJ|i)Q&?PXeESGS1@FfZK&E93{A@6%Xsz!Z0&2c!erpphQo z?r&`6)Xn3`b?Z)F+}DUFBH{Gm#AvtFCsc+dp5YPoAm zS?<{~e6Pay!hH#M<8o}xy(8=1k#P?w?twM;YgzYe8TUTLy)S8oji$T##z)H^B~3Zb z@ulr1kTtlHq455~cVFSVzZC9y=Ct9?7DS#1H&frVd@awg_U$>|jn^_(7oQ$DxaH#zsVzy%WxeE*OBHrFq=O$?9>gTa%7-^gQ=PG`7Qg=kZ0&|mm!o=0Yj*M`%YU` z+B$=oqLLm``U&*VT7An7Wl-X2>>pT2Yp0>Kv?2{tBE8Qom6FJc9IQ2oEPcx_k)}5J ztzAxS@>@F%9X%VaTiNZ2GTKGyb8#f%Hy-!ape)u@RcdJ*m&UqnghCq0T3H=y5z4Y# zD`lywl0{=Z%V~{fgYgksbD@&fbf|D+A4rO}n12QxrSX>%#W{~*gxC-x$uvGHZBs7kGrX>CVVkBexFTKA7anNrl_3(aido0^M zmgzpGbRWxb;|e#P=Ee(Dp)1RErCxsk>-4a~4X3%`LU^qedBV?*`5WzIv-S&rq>#oAp4Rq2gV()w(s$P_efWGo+%=Z{3+^s5r}R!RJb$wF{dx z3IEg;Im-_iWBmDtXn~)8;O~pfDzEYR)5i|OZ*bMdpfv&W{u<;d{R+hr3i75b z=p&d>*4tlT1d6Rtrvzeoskd{^Vd(ApmZfq0)0%>+{w-=MpBhO5hGB>YEx?AbaKy9rJbE5yp)XBY|_j*2KUhW;19F4`ji literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_group1.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_group1.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1af1805e615a5f96468b00be4b47a1d6c7b9578d GIT binary patch literal 7988 zcmbtZeQX=Ym7nF8mei6IMN0mVY^^C<4)x90jt#}NV@HxDJ5ub(mnOUvixqbzQ6jnQ z?#huAsTG2>r|1OO?g_B2Fi@uOIXd_b@Ev-n4=4`B{ds5slBHo{4@M0X1**R)!wFEN zINZJ2C6~LTm~-19`8fOL&G(!4d-L{lx7&pv{q4`5Psf`P`VD?4C3`XRViz)Z5Qid& zBRET(h!F5^jaw4dh?T%RTilkgN9=0e9(N?_B6SHeLMEIMXTlY6seDJgK0!q&HD4EZ zCp-}kfh>skawO-xZ$an*{Iv7|IV zDOb4v)sysOOjcW(VdFP=shggcV##TmrRS2uhe1jU6i>xe& zy{;WRpYaf(*rXXYjQ{85SUhA?$OOBc)6U zVyAh?QZTEbg(#nrV?uK0Ff_hH1BvP@2M<^Wtnho$4df1*M$711z7;|?$Sf1)^}cP{ zXq-U*h(d%|2bDq=#nRia5K#&5FHL{-SA8==g72H<`ck4W%SUCYPe|NgCfVrRe5&sT zpS;l*k4^Ta7UdZsd7?KQ?vr9N-;;uJ7`N1yVnsF)n-ltA2bgJ5m`{a!Q;T1@&cvtED%+W9Ufc(gktkSP50RGR6F zi@>^rcm&#yA{LH_SUF3?##tkF-Vv$eY@eVA$=QKAIR{V|R|mA7BY{$!6R4YWfnL=s z&MW-FC3W2KA!ze|zpH)P&iq&FM}ZT8(W&#z&xh#6oyZp_e*EtLoH~>IZ{gt8pYmUx zXM6tW{*`?3t>3x-xY&5&n}2=l?CsR{Yl&0;+4l769~yt%!PVjZE4^eoy4>Nr@ON))&a{3&>{~z3(a}!z3~t}}8?My97wzC3S~|#S znmeOuZjZLaJy_?WSfG?}UR8~Akhz1FiDkr;%D^bVQ)%h6C%vv(hHI*cL$D~8aS<1T zE<0tBO-d<2loet@A$WzD0u8cBe0)l50g<8>i9X0HB*Vm#F_~eO8uc~pE%CxwItXMH z6%GW~Y#W|}uMz$n=D#(^nnU!1*xq{I2;+jup)^QTC$kkIKyFr_^sGK%aahK>RZJjb zGvx6JQxotVrTl$Zo(K98!BXn=jXk8XvQ{M-Ykx7BPbS!2SnR)eEGlB)4&;5Meo%!y zULlr=G*vDw=j4OseC6n%j;CB&&cU4ZKC9{&Ry^%3*D2>J?UQ+zYOEn$u3y=ss<6a( z$fwjZMeEEn3#xJ|^%5`M;6)}OaJ*to2_GuNC9xISQi!V}Hb#nv;TKY1^cZZ zV-uH{D?{%MjxeL+qu0elASF7nD9Li1X3HC*6;g^5mnBlMq^!6ZiBH0VX4jPlgXlX$ zSKoR+WD(oc5hP4!$0^CIC^KM0m;B|!qccxK6)6h@P7g^vA@}FV{aNy0o;;W#4;JdZ z8|U)%$99p;>Hlrh{;j~>=5*j*^LF5$nzK#)`KJE0!HwYp)vz)CgbL-T&_DNOsewE- zkf8<&RO8z4Z+(GV*EiqYx_-r>+V#_zOHo z%K{A^4;SZYO<`$yF~!p#4R9+VQq_5}9r_So0iyUosYQv$I>pVXmRan<{6-UBWy2`@JdNwfAYt@R|oATI^B)O~GGtFR zj^G(!^?30GkUPkUjGj|jxwr~t0T0Wt`ODyKAAtH=;%sJr6-vP)`JSaLfjwPpfjPw4 zjeJ?h7f@eSX~n=EQbuLeq=+Q3@h!Q&Gy-Hms!F9YVwGws9pgI~5_eXCs30!}a1JgT zC`2k2K~n1G0rEK^A>xh|-{k2ja{^X>MH2D4DpV{v6=%WAjSIwOi9q-7whXxCHcY<}9je{(kNzb$MEYnPrjx25a0iF>Z?!EAFl-yD8; z>CuHp7av{x$(3yL`L#>W8uo2jwtQQb&HBe}{kewzOhbPm(6V)L>)O`E%`1=FPv!zA zGl7%O8k%;!(D;`PsIfWk3#LzJeO;h<*zT3R5Z!Bl(cojOYR~t9Vizk7jOt|eLRKsw zr+XnrX|o*cl-?JZJU!15b802YZ{$K=)dgI{5le7<=kOjN(JN!HDyB+3{uuiK22C!> zRrw2M17;Wv^s5^);~2~y(uz&S4q-8w=ec5Ewxx^|nmx({RG>c-Z@ z)qR)yurd$S)xmv%zhST8nN*y5RkEQxzH$!w(dTD2+h1Ep-_w__W2=%htWnzFSsKP> z0|>+pbX9_R{4NFy8wk%uCRGxRw&!)fJD(Cj_v2`mGU~iva730Of2{j@`gU7iK$&BOW1#iryM*lQV*ZoytYUD#fN1;)-IKNk|Up4dZwb z$;DUUd8yT4iH&}P>L0KmA#q^ER?#zm;Lh0}oV|T+^V}K--Z z_|~=c%WIdn2Ja4IUviuMERt*O%e3}AZ9JT5JD+WQBj5N&hI*sm@!pKD$3IPOBmu)I z?=9P=W6O5ek+$7)WU1qM>i8P*r2~1IK7D`V{WVL0blr5UJ5(n&PrXw74^{kkK6l!k zt}hUfU6oMCS%1^L?!GmXCEN03TZU}IEm7+fc6hU7Yo2V)kgZ?GyY{Jf!@K4!I^*F7iV;GL$8|@?=-0^wr!J-B`fV;|)`RCl6-qWr4?d;|GJKLy!qj zbS_BfJyrmUZtwwWDoo_Zgb{9xy+B?E8e`iPKw*J0JUcb*?I+)dvIj*8g!aB5nq|QM zHWgt=u?@3T6TnR{Dt ze2unYhigwTll#lMXI>XrW#XkZgs7<@wRgK#>yD~%7|&+;K2sie)g4xa@$$+Wf=lH} z<{hqt@i*f!K8a)U0ONc$jJJpvp(QOU(}8pNC>wwp$0QYxiu79O2e40k3(H^#7Y8vJ z#$*VS5lk*&GKz@`#W*Y^UcqDxlgmI9H-Kl7kpPo9R%R7<2~`>Of*iskK4VNs4fKfJ zxc=KfLUm|rRy?c;oFhiWYw#~&BdbDk36#UYSZb*O$~er5ua(m8HBA2VVYmkJ z7Cem`$tRw!oTp2>PCxOS%6U#@J*V@Y(`(k6z+3|456RIyqL7Xd`r@}aXr3R*o=pD|I$MWQ{40-HX^*mqCd0sD2 z?lpPiJ9%%{bF0M*4h0aHHHqATig?&jy(t_I!+r%o{DC}qAVVJ5J3>}1^))fGTJFJk z$b-Y}NjAYVjN)Q&h;u%U^Ay8;d!CJJC7NS<3^YZtVUCEs2u-_boa@8nHB5q-U`J5I ziYH?9QvDD$)+6r6kC@=VlJq?wtNLfxft*)ts~2Fls~4WtA733TGz3;hcWpMiA0m<^ zLb>f{c9BjFJM6u?NGAcWy?YnwB)AVh>g3fU__3O3BgEqh?NjO)h7+O;BM!i`Qiok= zcyXo9SRuiqRo_x+kqU3=u@_!YC4{7iT@?}AE%hCl7WrtdTnFu*1hX(?i?A?a9x^?u}*9 zkyUTTcch@c$9pvNXz1s`pHKe#*w4n`HD0#kavmsZ&!C1(WBao}>#dQk>$k@@$J6h@ lyS@*yfp7--3V}mu;`SKib{!Hyz~=5vpR4>YYLu$m|9`&7P*eZ_ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_group14.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/kex_group14.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11bd91db66ad21d7e189fc7441775fecfdaf8128 GIT binary patch literal 1392 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/message.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/message.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1b0fd0804811e991c1377569f7b31f23dccf143 GIT binary patch literal 13486 zcmc&*U2GdycAnvnG!jRmWXiTI%hu?}l4$EEw!C)YW^F4ml6bRgXJaSnYP+RIoUufk z9Lh68D`sV{7flP<6>2w#VI_#WYJetovjx%ueJP4!pNc+`0s#vI35k3!a+?V)gT@#`bxWL65^8JlxGqY(mqiUvXrm~upy(Gz+bm77qN2H#N zY8djg+B4GljGCQ`^X2+iuA8cH_B?JwIWv`x2g?n4RnI1-P+k@?^85B(R#Vv>D)PCc z{aNG^#{FTa*^iR;3kmhq41Sro=$ols3?v%1+Q-$}Z5|%5Knh zr5$vSvIn$7=>XlU>;>&qIzjg-`#|?A`$4;uE>KC4K)aP7fb1#P|HuMMzR7c3ql9bR zhS5e*N*R(Y8K$nv8A6!=GbD3HHYHU{W)(ab*^DYBvze)s<}icxghnZC+8B~jnyF5! zI_{>j*))D+O+n$Ml$J8p;aOcxrVL`DQ*T6)F3#Y)$+T=3tgES9Dy3TMYs@i}lX{xG7W>!*EIW5hlOf=N4n==?7 zCWCLKvvb2~^_rT-AakaaG6$?LtMAWd4K%%kZ_lb(2%VI2M2{LLbB3ACNb38hs?j7c zJJh_S%4SZtfnr0Nm329jx`F{@Rf7g(Shhsi7*m}SY*w~RB(q?%W}a|+pc>|k>g5k{AZMUg5+PM`WXx_V4bFn$06PVR z*1*2G8CCOjr>KxKFockoo#t^1KlGkEOi`QIJ5ZX z0{;8Yj_!}+pT?cXb=2pQE-&#wgJ+U(5I2wnZW+I|m!HcQxW_!RfwIAr_c5l^K&%n@ID??|s6N#6oatp{UZZ#UaJAY^X_RYnc1!14wibCJ`!YE+lo4^g0 z0^Tco^W0^3F3Vo|MqTUjkJ~TRc~nsXL}9mr`L|rLcw2?0X||CfxzJTu6vMkRFa^&} z5u1mYA}i`tZh9J(E0U9MbyzxLBQW?aAICZoqW*LdA1({is(DRL=Tvjkc*_iryg>igB9CkIci96VV(c)E1(bn(D=>A-j~I{xcdi_zB$!t1rb zx{N=Hj)?J>@oQbnE~rik{raH1ZLWJVVUJ0p^;}on+!LSwRe{MyTi= zM5+MM+fbN~I7J)cEOLjnOtja)<1V&sX?z9O_Q zwHAfFC1G#D`P%}kzee-zVC5H*8@x}fwxOXn0=^c+r<$vJb>g{s;s@{J2Wc>4fGuQ% zDHFkrWk>M)hELSc@en{l;DL{9T}M(pZUjwQ%k67E;9ra9`DEbzz!mmZ zubU6rcaj$1Ic?v3z@#zQ*F3*fPkDrud3-64+7~R#5RefJTA>J;QcIASanRsogIgMy z#MUCqO1NI+5OeFvB740=#1s${%@qYa53vdgWWkD1h9uQYBIfu3TzU2(U7oYQAnPjp z2{KPGC-zvd7`nY#9ne6maZyZZH^uS+;Ya&95Hefdkz2Aw(wC|XjdaB}coox?;r=pxkU=98Y&2+ zu$gOWU3~M2*tsHhF8#PDc9q1g1%7q+{sr-AqZj2ijJB(Tf)t-Y!jb{L$1EN&$# zG~w;Zh-pWhE?*H4s#kLoa8cY>68Av?qAmB&-q|?j384|Qx4*^B{{abxir(+FmX{ei z=$4d%zEgAgJvhIWhCPKxw_MYP3Y02~o`)g1!JCmv<;$)OSAtj}FuF<_P6_RCD}s07 z{6sbHST3iQac(t7QzTg$J2E^4|2c>3$uz92GzkmsS#cSUpAit>22P%3j&;1=;y8^^ zCs@iNl1XW-=!tYzn=Z3emy%KX^>Ur%5|rz58f66RmAV{a8bpvgCbESjL{{WkGj&Zx z9B<~^y<*~h^QUNL%z&_E+pjDOq18zA{);P-y@kl$r?K6oSl{x+FA|?6iU*FB4je1S zj+bJ`3*vG3efL5Snm=q_x>{`MF12(Qh38CPK{!;a zel&H$Wc`mp9{5r`l^|Oo_Is2KRqd;q{Z;G@`q&%FkGg!bRdW;el9i%MKZfr-BhD~> zJr3%WL(s|7+1N7G6ZnL=8!_4ichSTc0J+6|gW!3Wh0YfzKRfwVcd_?qsTW9nuN3{> zS8^%(VnKNE{~M{x)ksOljxzDa8aIh7>6Sl-*CWYs4vzZibCWBj>E(C~r4VI+caF|SKFf)sv z__h$$uyDe_=&%Mz@M_b@{BDXV;z1_0#|g|AiEM}{`??=dR`d`p>_y}oAlin-bGhw{ zuFtxP-A78@M~cz0Qgo~!jMYl1izJ1Rn=c~3k{0-y>$zA~0yAfE?Xg_fo*E48-1}TA zotEUJnPYkMDM|#}{)@{NC!7rjS}p#?U9qmMcF9oO-6nA(ah%=wmbmWOOCs(vGOx7;54wQVVV_& zvE7KOFpQObfi?!E1HATJ`DOZ(^vBw#S}{6YiVhcq;Vrm!295pl|D8GYi902SQ}1Xg z+GlZ~squ!~1{c|$Nlu5KXd-!@on;ZP0pujvL>dcA8}tXzS{pZ&n97v}+1m3U8$LOi zGcOIlIO$o6v3N3jLn*2njG1$3B0}>!msIi(gl{Lq_nT&}rS)FhgRT#|img4R)}CUt zw-oIy2)$dN`+L%f(=Kr1=@e3&B!E^bfJw!qG?<+t38dsFa~D{##{%nbYybo^8-6LX zT#+mSM|u=H>qDEu%iyD>u8qJ*SDOupVH}2fH{qx12KZ*9OMEjO6Y>_u{VJ0_) zOz`tk?A3V_%9^n(Sj7o=Pe=OL5+2gKN(@uURbUsABrgLEg?4&_NwyzhH=a6C=|xs5 zsZN+ZmSPUi(U{)^{+F24h3qmK7P74uB zHNB4H?+&Z0uJBn{K^_1D77o(5-w9^ai5D{cZA`lsDZzoIB2-REks7>1gl%|j2*d(j zLuhzidcNS8wA$O3KV(DttZN(X$@|}=y)A;34Ar;-4P^W76iPG2^TWD<$RQ+_NaF1H z+im29(Md^Nz(DkRA{2nv;u>KnR!82R!ZMl}r$N~2D>kih!G`#%*g|QjeJkR=hciWS zpd=0y*x%Ql7pbB+SP};d;@~D?N;r|Iu1|t&N2NCoz7a=N1;Eu@Bh()U^6$99%usg^ zG&~P*a%r^_u3K6yuoO)_wljbXZi=SLA&O_A|A^cL0ZBGvL zpQ3)eQAcK*E7wn@ril&KPAOv^L04`hZdj|UoxxDlN(RFUmw$$eI>q-s#K7O-_%wEu{G;{{YTN2NLL}!wXu4k^zQjP=O3Oabq+t0i=8i&I$tP?hfCt&0{ipo z-lb2kJnH+3FYZ55+JB@dj+Ml*f;jd(X_>@ee&2eCRN^1{_0SuG`&Qvv(`Rd<8)#Om z;wzYdPRDR+8N-%ZwD-o^w$2?p`ajfUl1R-GLZZ!#)J5D7ILr90y-bhVRFvs?!fr1I z|5OEtcYa={#N)DIv8X+v<#vO4QdYt_sFhK1Oa{>$JF}D3aXt&DxvV|aYpSH>GE)=) zR@_DV+z_FiKY^oHc35A9Hlpz)fUrVx1$XcZN#)CY-lq}_`Kp+lkY`0WZO9q@Xayx` zhLdwQdMElYRBDeu>MphqmD-1j!f;8T_-+&7b@}r-I`Id26+>6e2ii;DIQ3?_h6-8T zs@Q zDxz}4OODE=6h!T*B#WHPtlOLH_`^2y5S7`%Qze>WJK6}aSc>H*sxgEuOX_C`0f+3I zW2BgVCTpMMqcey&v@#N}QOPva(T@H+L-%rDr(_>kOsZK9UCyR7m)~hGzst;{_J?W2 zbSmj2mLFg&$8k7IDVKu36h0A_TR)C`8Yv2WC84h%^lhS(q!r9&4l(z`cgn0vr@XsO zIixK%)5~f;am(24GCJjB zbO`>4k{6xr5_%dS2H!-xTinw~^d5iv_~P;V%EGCIQ>(Gv)}ff?@nWpM6zeaD{ZE^A zFYyn@icMXmrmi(E+|bWz4X(tn1yYP1D#Z>J#6wS;TJLq=esA%;hoObULIPDDeE-Am zFQYsSi&rAGXfh6vPeAlab^Qs_S-?&!6Fbwwul|Eu*mZsy_L^bBpbC zrWRYzdoe{Xw%vhQI>XLN(+OSs z_!X_|o=?~dHzs<*%4Ss0*hK^C+HW(U!x9Ac=D=E53TM-zf1I}t~A@GwTA zGlD8uu-mwu?Q0z0(8i;2Wlq_gce^@)U%P2$|<6uzam5TOlleJ>HVv{7nACo8275E&-&0+BHyFB3UU z}q@y9+y~ep@SD3!)lIF(n&>H8G_E7jG`mRmH zI=XX7OI`RVJ=&zLE<8eyHfgJ;iMnJ*h+en^U15AKX{islQDvL#aPL^zjz)UnlJ=^% z5qj&Aj;gl;y>&@@13kKAmwU&`b_oQrOWGrZb1ku?nL@~TlYR?7EF>%kQd#SGyWkvF zwxY+V^Eg78)~t0rNT*1XrDn=a?tA*5U#u)Xb*}${2!$j}(7qL3wv^?h{^uxzoN>nA zfk4Z6eyu;iht@bE0>?MsYNG#Exm^YS-`Cupg8y%od#SMb-zvAa;Qw2zON4l!vN8P) MEC1~#Z`oY_7Xl``F8}}l literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/packet.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/packet.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..271f385e5104923aa8c73771fb65b6fbcf536735 GIT binary patch literal 27566 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/pipe.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/pipe.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff07621ccdc4d578107c3ce4e810a11db9987d6e GIT binary patch literal 6780 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 XoE6+-9XcTV;(+6*-SkVF0pb4(+L=R@ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/primes.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/primes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80d49e1823c804938c7da6bf2c548dbcc1aff9bc GIT binary patch literal 4905 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/proxy.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/proxy.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ead97bca05f7795d7c41175b87f4b18b273e5c85 GIT binary patch literal 5404 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 GzW)RNLkX_{ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/rsakey.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/rsakey.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5197eff425903fb7812953335bc3ac9df4561ab0 GIT binary patch literal 10408 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c1975cf5b3252d86d773db2056d21740f17117f GIT binary patch literal 7965 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 hgFgj^d@wPR`?=quq?C;Be*oO|r;h*t literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_client.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_client.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f857039e6d8c65405b20fece1584fb6da0f6a77 GIT binary patch literal 46255 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

    &$Ai(b6NXyY5Q}Joh=z> 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 Jl<#a2{ujs^X5#<= literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_handle.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/sftp_handle.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e66b1f08e9f1e1145753773b8defc46ade92eff GIT binary patch literal 8578 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 Z*g)ONpx4760}VI8mJKx<+Az)g{{i}P7*qfN literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/win_openssh.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/win_openssh.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af4be9c780ece73eba0dcfdac3fb5bd46b299b93 GIT binary patch literal 2515 zcmb_d-EY%Y6hGIo(|k0|g3?SYtte|@OEnTYCXm{~R#rp-EnyUaT6MBQY-rll4%eok zQHsKbw3by`hB}o^OzO)zAvS3b+ru>Wz<CPOd)Tr4 zyI<$tbM8Iocl});-~*J;?moV7r3K(m)@TS{uWSxrWfdflNERlDS#lGc#7(#)*EN{n zIXDUue+?vIoddXopCuE5M8+WMe#DxILdWD}Y%-V0$&+eMRy1vD5BpLVWJOQcXPAW> z(S_e;72#8|3cA^C!8B81eUub7=zm+5haF@Rr4~9x(qJ1*C2|)E2&voW2f8QU3z*Z zKBdme@o6cZqw2Jr*0s1gJ13q?rDrbX;&ZYx7tdzS#dGuel&b8D_4miMj4toV;W&m( zi|0}_HJh1HB-x2xVb1Tq$MVXvtIsZ? z6K+XhG&3SeLW~L^G=5$Ta~MG|Basxw03$;7IC*Wzd^Q;vgWKZHlAU z)-K>R;=BfmATq0_u*~cMoo%=-y+9)iq)4W5o+T1DW7?qPV;IM4XMtQHipMJRBoCKe z_VaQMR4UorXR-KdWSux;=xXXz`f>Q0KMM$Vox zJW28JvBdDHaYGQA^x=6>@2cKGgz%HE@uuF-1O zXqjK})!HBwDGOUq0ubI_13u8v1a1houN=5}?#99L!TaIYYAy)xEMuKLTPU>_)W`Bk z8w5hj$IIGMayhw}thJ+MtsTAiWd9)i>Koqfx+k;_M_l(J0@l;b7cGmknLqonf>*Ph zFBk>8UW93TPLVjXVGJnChN#O5fsm(orO-~+#nGKuAU9Kb%5k1}$cj|h{*tp~gZ(&B zV=*qlgJ5X+@=gAhZ*8O!j8=ou4Nuf!nC%nl{oniGshpCUw?RG3CG&ErX9cRH=U%!C zHu#Qn7x}WjQdsM+1b0<~yEZ(#tX4K0k&6og8!ryA_p@bs9@C-AODalOdoK>YuSypcq#fz6x zS!;y$;3D)527L^e>DyqgU=ob7NSnYEwUY=X`>An$p|b`ybP%Dh1~#~fu$wjOfX!ak zd=@NY%nn|xEvgn{e-|@l=?-R`T^i=U!SaRuy#Dp?sb|RA*dh8h4zNSiM1-1)5K?;+ pNU+q#p8Mc0na>}s(UQ03c9WqR*s!ggpjXesW7hZg3kFOF{sEIF8O;Cy literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/paramiko/__pycache__/win_pageant.cpython-311.pyc b/venv/lib/python3.11/site-packages/paramiko/__pycache__/win_pageant.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3372670e6aba428bc3c7512aeda6f1944117378a GIT binary patch literal 5416 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 self.length: # A little safety. + raise ValueError(f"Refusing to write {n} bytes") + dest = self.view + self.pos + length = ctypes.c_size_t(n) + ctypes.windll.kernel32.RtlMoveMemory(dest, msg, length) + self.pos += n + + def read(self, n): + """ + Read n bytes from mapped view. + """ + out = ctypes.create_string_buffer(n) + source = self.view + self.pos + length = ctypes.c_size_t(n) + ctypes.windll.kernel32.RtlMoveMemory(out, source, length) + self.pos += n + return out.raw + + def __exit__(self, exc_type, exc_val, tb): + ctypes.windll.kernel32.UnmapViewOfFile(self.view) + ctypes.windll.kernel32.CloseHandle(self.filemap) + + +############################# +# jaraco.windows.api.security + +# from WinNT.h +READ_CONTROL = 0x00020000 +STANDARD_RIGHTS_REQUIRED = 0x000F0000 +STANDARD_RIGHTS_READ = READ_CONTROL +STANDARD_RIGHTS_WRITE = READ_CONTROL +STANDARD_RIGHTS_EXECUTE = READ_CONTROL +STANDARD_RIGHTS_ALL = 0x001F0000 + +# from NTSecAPI.h +POLICY_VIEW_LOCAL_INFORMATION = 0x00000001 +POLICY_VIEW_AUDIT_INFORMATION = 0x00000002 +POLICY_GET_PRIVATE_INFORMATION = 0x00000004 +POLICY_TRUST_ADMIN = 0x00000008 +POLICY_CREATE_ACCOUNT = 0x00000010 +POLICY_CREATE_SECRET = 0x00000020 +POLICY_CREATE_PRIVILEGE = 0x00000040 +POLICY_SET_DEFAULT_QUOTA_LIMITS = 0x00000080 +POLICY_SET_AUDIT_REQUIREMENTS = 0x00000100 +POLICY_AUDIT_LOG_ADMIN = 0x00000200 +POLICY_SERVER_ADMIN = 0x00000400 +POLICY_LOOKUP_NAMES = 0x00000800 +POLICY_NOTIFICATION = 0x00001000 + +POLICY_ALL_ACCESS = ( + STANDARD_RIGHTS_REQUIRED + | POLICY_VIEW_LOCAL_INFORMATION + | POLICY_VIEW_AUDIT_INFORMATION + | POLICY_GET_PRIVATE_INFORMATION + | POLICY_TRUST_ADMIN + | POLICY_CREATE_ACCOUNT + | POLICY_CREATE_SECRET + | POLICY_CREATE_PRIVILEGE + | POLICY_SET_DEFAULT_QUOTA_LIMITS + | POLICY_SET_AUDIT_REQUIREMENTS + | POLICY_AUDIT_LOG_ADMIN + | POLICY_SERVER_ADMIN + | POLICY_LOOKUP_NAMES +) + + +POLICY_READ = ( + STANDARD_RIGHTS_READ + | POLICY_VIEW_AUDIT_INFORMATION + | POLICY_GET_PRIVATE_INFORMATION +) + +POLICY_WRITE = ( + STANDARD_RIGHTS_WRITE + | POLICY_TRUST_ADMIN + | POLICY_CREATE_ACCOUNT + | POLICY_CREATE_SECRET + | POLICY_CREATE_PRIVILEGE + | POLICY_SET_DEFAULT_QUOTA_LIMITS + | POLICY_SET_AUDIT_REQUIREMENTS + | POLICY_AUDIT_LOG_ADMIN + | POLICY_SERVER_ADMIN +) + +POLICY_EXECUTE = ( + STANDARD_RIGHTS_EXECUTE + | POLICY_VIEW_LOCAL_INFORMATION + | POLICY_LOOKUP_NAMES +) + + +class TokenAccess: + TOKEN_QUERY = 0x8 + + +class TokenInformationClass: + TokenUser = 1 + + +class TOKEN_USER(ctypes.Structure): + num = 1 + _fields_ = [ + ("SID", ctypes.c_void_p), + ("ATTRIBUTES", ctypes.wintypes.DWORD), + ] + + +class SECURITY_DESCRIPTOR(ctypes.Structure): + """ + typedef struct _SECURITY_DESCRIPTOR + { + UCHAR Revision; + UCHAR Sbz1; + SECURITY_DESCRIPTOR_CONTROL Control; + PSID Owner; + PSID Group; + PACL Sacl; + PACL Dacl; + } SECURITY_DESCRIPTOR; + """ + + SECURITY_DESCRIPTOR_CONTROL = ctypes.wintypes.USHORT + REVISION = 1 + + _fields_ = [ + ("Revision", ctypes.c_ubyte), + ("Sbz1", ctypes.c_ubyte), + ("Control", SECURITY_DESCRIPTOR_CONTROL), + ("Owner", ctypes.c_void_p), + ("Group", ctypes.c_void_p), + ("Sacl", ctypes.c_void_p), + ("Dacl", ctypes.c_void_p), + ] + + +class SECURITY_ATTRIBUTES(ctypes.Structure): + """ + typedef struct _SECURITY_ATTRIBUTES { + DWORD nLength; + LPVOID lpSecurityDescriptor; + BOOL bInheritHandle; + } SECURITY_ATTRIBUTES; + """ + + _fields_ = [ + ("nLength", ctypes.wintypes.DWORD), + ("lpSecurityDescriptor", ctypes.c_void_p), + ("bInheritHandle", ctypes.wintypes.BOOL), + ] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.nLength = ctypes.sizeof(SECURITY_ATTRIBUTES) + + @property + def descriptor(self): + return self._descriptor + + @descriptor.setter + def descriptor(self, value): + self._descriptor = value + self.lpSecurityDescriptor = ctypes.addressof(value) + + +ctypes.windll.advapi32.SetSecurityDescriptorOwner.argtypes = ( + ctypes.POINTER(SECURITY_DESCRIPTOR), + ctypes.c_void_p, + ctypes.wintypes.BOOL, +) + +######################### +# jaraco.windows.security + + +def GetTokenInformation(token, information_class): + """ + Given a token, get the token information for it. + """ + data_size = ctypes.wintypes.DWORD() + ctypes.windll.advapi32.GetTokenInformation( + token, information_class.num, 0, 0, ctypes.byref(data_size) + ) + data = ctypes.create_string_buffer(data_size.value) + handle_nonzero_success( + ctypes.windll.advapi32.GetTokenInformation( + token, + information_class.num, + ctypes.byref(data), + ctypes.sizeof(data), + ctypes.byref(data_size), + ) + ) + return ctypes.cast(data, ctypes.POINTER(TOKEN_USER)).contents + + +def OpenProcessToken(proc_handle, access): + result = ctypes.wintypes.HANDLE() + proc_handle = ctypes.wintypes.HANDLE(proc_handle) + handle_nonzero_success( + ctypes.windll.advapi32.OpenProcessToken( + proc_handle, access, ctypes.byref(result) + ) + ) + return result + + +def get_current_user(): + """ + Return a TOKEN_USER for the owner of this process. + """ + process = OpenProcessToken( + ctypes.windll.kernel32.GetCurrentProcess(), TokenAccess.TOKEN_QUERY + ) + return GetTokenInformation(process, TOKEN_USER) + + +def get_security_attributes_for_user(user=None): + """ + Return a SECURITY_ATTRIBUTES structure with the SID set to the + specified user (uses current user if none is specified). + """ + if user is None: + user = get_current_user() + + assert isinstance(user, TOKEN_USER), "user must be TOKEN_USER instance" + + SD = SECURITY_DESCRIPTOR() + SA = SECURITY_ATTRIBUTES() + # by attaching the actual security descriptor, it will be garbage- + # collected with the security attributes + SA.descriptor = SD + SA.bInheritHandle = 1 + + ctypes.windll.advapi32.InitializeSecurityDescriptor( + ctypes.byref(SD), SECURITY_DESCRIPTOR.REVISION + ) + ctypes.windll.advapi32.SetSecurityDescriptorOwner( + ctypes.byref(SD), user.SID, 0 + ) + return SA diff --git a/venv/lib/python3.11/site-packages/paramiko/agent.py b/venv/lib/python3.11/site-packages/paramiko/agent.py new file mode 100644 index 0000000..b29a0d1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/agent.py @@ -0,0 +1,497 @@ +# Copyright (C) 2003-2007 John Rochester +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +SSH Agent interface +""" + +import os +import socket +import struct +import sys +import threading +import time +import tempfile +import stat +from logging import DEBUG +from select import select +from paramiko.common import io_sleep, byte_chr + +from paramiko.ssh_exception import SSHException, AuthenticationException +from paramiko.message import Message +from paramiko.pkey import PKey, UnknownKeyType +from paramiko.util import asbytes, get_logger + +cSSH2_AGENTC_REQUEST_IDENTITIES = byte_chr(11) +SSH2_AGENT_IDENTITIES_ANSWER = 12 +cSSH2_AGENTC_SIGN_REQUEST = byte_chr(13) +SSH2_AGENT_SIGN_RESPONSE = 14 + +SSH_AGENT_RSA_SHA2_256 = 2 +SSH_AGENT_RSA_SHA2_512 = 4 +# NOTE: RFC mildly confusing; while these flags are OR'd together, OpenSSH at +# least really treats them like "AND"s, in the sense that if it finds the +# SHA256 flag set it won't continue looking at the SHA512 one; it +# short-circuits right away. +# Thus, we never want to eg submit 6 to say "either's good". +ALGORITHM_FLAG_MAP = { + "rsa-sha2-256": SSH_AGENT_RSA_SHA2_256, + "rsa-sha2-512": SSH_AGENT_RSA_SHA2_512, +} +for key, value in list(ALGORITHM_FLAG_MAP.items()): + ALGORITHM_FLAG_MAP[f"{key}-cert-v01@openssh.com"] = value + + +# TODO 4.0: rename all these - including making some of their methods public? +class AgentSSH: + def __init__(self): + self._conn = None + self._keys = () + + def get_keys(self): + """ + Return the list of keys available through the SSH agent, if any. If + no SSH agent was running (or it couldn't be contacted), an empty list + will be returned. + + This method performs no IO, just returns the list of keys retrieved + when the connection was made. + + :return: + a tuple of `.AgentKey` objects representing keys available on the + SSH agent + """ + return self._keys + + def _connect(self, conn): + self._conn = conn + ptype, result = self._send_message(cSSH2_AGENTC_REQUEST_IDENTITIES) + if ptype != SSH2_AGENT_IDENTITIES_ANSWER: + raise SSHException("could not get keys from ssh-agent") + keys = [] + for i in range(result.get_int()): + keys.append( + AgentKey( + agent=self, + blob=result.get_binary(), + comment=result.get_text(), + ) + ) + self._keys = tuple(keys) + + def _close(self): + if self._conn is not None: + self._conn.close() + self._conn = None + self._keys = () + + def _send_message(self, msg): + msg = asbytes(msg) + self._conn.send(struct.pack(">I", len(msg)) + msg) + data = self._read_all(4) + msg = Message(self._read_all(struct.unpack(">I", data)[0])) + return ord(msg.get_byte()), msg + + def _read_all(self, wanted): + result = self._conn.recv(wanted) + while len(result) < wanted: + if len(result) == 0: + raise SSHException("lost ssh-agent") + extra = self._conn.recv(wanted - len(result)) + if len(extra) == 0: + raise SSHException("lost ssh-agent") + result += extra + return result + + +class AgentProxyThread(threading.Thread): + """ + Class in charge of communication between two channels. + """ + + def __init__(self, agent): + threading.Thread.__init__(self, target=self.run) + self._agent = agent + self._exit = False + + def run(self): + try: + (r, addr) = self.get_connection() + # Found that r should be either + # a socket from the socket library or None + self.__inr = r + # The address should be an IP address as a string? or None + self.__addr = addr + self._agent.connect() + if not isinstance(self._agent, int) and ( + self._agent._conn is None + or not hasattr(self._agent._conn, "fileno") + ): + raise AuthenticationException("Unable to connect to SSH agent") + self._communicate() + except: + # XXX Not sure what to do here ... raise or pass ? + raise + + def _communicate(self): + import fcntl + + oldflags = fcntl.fcntl(self.__inr, fcntl.F_GETFL) + fcntl.fcntl(self.__inr, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) + while not self._exit: + events = select([self._agent._conn, self.__inr], [], [], 0.5) + for fd in events[0]: + if self._agent._conn == fd: + data = self._agent._conn.recv(512) + if len(data) != 0: + self.__inr.send(data) + else: + self._close() + break + elif self.__inr == fd: + data = self.__inr.recv(512) + if len(data) != 0: + self._agent._conn.send(data) + else: + self._close() + break + time.sleep(io_sleep) + + def _close(self): + self._exit = True + self.__inr.close() + self._agent._conn.close() + + +class AgentLocalProxy(AgentProxyThread): + """ + Class to be used when wanting to ask a local SSH Agent being + asked from a remote fake agent (so use a unix socket for ex.) + """ + + def __init__(self, agent): + AgentProxyThread.__init__(self, agent) + + def get_connection(self): + """ + Return a pair of socket object and string address. + + May block! + """ + conn = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + try: + conn.bind(self._agent._get_filename()) + conn.listen(1) + (r, addr) = conn.accept() + return r, addr + except: + raise + + +class AgentRemoteProxy(AgentProxyThread): + """ + Class to be used when wanting to ask a remote SSH Agent + """ + + def __init__(self, agent, chan): + AgentProxyThread.__init__(self, agent) + self.__chan = chan + + def get_connection(self): + return self.__chan, None + + +def get_agent_connection(): + """ + Returns some SSH agent object, or None if none were found/supported. + + .. versionadded:: 2.10 + """ + if ("SSH_AUTH_SOCK" in os.environ) and (sys.platform != "win32"): + conn = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + try: + conn.connect(os.environ["SSH_AUTH_SOCK"]) + return conn + except: + # probably a dangling env var: the ssh agent is gone + return + elif sys.platform == "win32": + from . import win_pageant, win_openssh + + conn = None + if win_pageant.can_talk_to_agent(): + conn = win_pageant.PageantConnection() + elif win_openssh.can_talk_to_agent(): + conn = win_openssh.OpenSSHAgentConnection() + return conn + else: + # no agent support + return + + +class AgentClientProxy: + """ + Class proxying request as a client: + + #. client ask for a request_forward_agent() + #. server creates a proxy and a fake SSH Agent + #. server ask for establishing a connection when needed, + calling the forward_agent_handler at client side. + #. the forward_agent_handler launch a thread for connecting + the remote fake agent and the local agent + #. Communication occurs ... + """ + + def __init__(self, chanRemote): + self._conn = None + self.__chanR = chanRemote + self.thread = AgentRemoteProxy(self, chanRemote) + self.thread.start() + + def __del__(self): + self.close() + + def connect(self): + """ + Method automatically called by ``AgentProxyThread.run``. + """ + conn = get_agent_connection() + if not conn: + return + self._conn = conn + + def close(self): + """ + Close the current connection and terminate the agent + Should be called manually + """ + if hasattr(self, "thread"): + self.thread._exit = True + self.thread.join(1000) + if self._conn is not None: + self._conn.close() + + +class AgentServerProxy(AgentSSH): + """ + Allows an SSH server to access a forwarded agent. + + This also creates a unix domain socket on the system to allow external + programs to also access the agent. For this reason, you probably only want + to create one of these. + + :meth:`connect` must be called before it is usable. This will also load the + list of keys the agent contains. You must also call :meth:`close` in + order to clean up the unix socket and the thread that maintains it. + (:class:`contextlib.closing` might be helpful to you.) + + :param .Transport t: Transport used for SSH Agent communication forwarding + + :raises: `.SSHException` -- mostly if we lost the agent + """ + + def __init__(self, t): + AgentSSH.__init__(self) + self.__t = t + self._dir = tempfile.mkdtemp("sshproxy") + os.chmod(self._dir, stat.S_IRWXU) + self._file = self._dir + "/sshproxy.ssh" + self.thread = AgentLocalProxy(self) + self.thread.start() + + def __del__(self): + self.close() + + def connect(self): + conn_sock = self.__t.open_forward_agent_channel() + if conn_sock is None: + raise SSHException("lost ssh-agent") + conn_sock.set_name("auth-agent") + self._connect(conn_sock) + + def close(self): + """ + Terminate the agent, clean the files, close connections + Should be called manually + """ + os.remove(self._file) + os.rmdir(self._dir) + self.thread._exit = True + self.thread.join(1000) + self._close() + + def get_env(self): + """ + Helper for the environment under unix + + :return: + a dict containing the ``SSH_AUTH_SOCK`` environment variables + """ + return {"SSH_AUTH_SOCK": self._get_filename()} + + def _get_filename(self): + return self._file + + +class AgentRequestHandler: + """ + Primary/default implementation of SSH agent forwarding functionality. + + Simply instantiate this class, handing it a live command-executing session + object, and it will handle forwarding any local SSH agent processes it + finds. + + For example:: + + # Connect + client = SSHClient() + client.connect(host, port, username) + # Obtain session + session = client.get_transport().open_session() + # Forward local agent + AgentRequestHandler(session) + # Commands executed after this point will see the forwarded agent on + # the remote end. + session.exec_command("git clone https://my.git.repository/") + """ + + def __init__(self, chanClient): + self._conn = None + self.__chanC = chanClient + chanClient.request_forward_agent(self._forward_agent_handler) + self.__clientProxys = [] + + def _forward_agent_handler(self, chanRemote): + self.__clientProxys.append(AgentClientProxy(chanRemote)) + + def __del__(self): + self.close() + + def close(self): + for p in self.__clientProxys: + p.close() + + +class Agent(AgentSSH): + """ + Client interface for using private keys from an SSH agent running on the + local machine. If an SSH agent is running, this class can be used to + connect to it and retrieve `.PKey` objects which can be used when + attempting to authenticate to remote SSH servers. + + Upon initialization, a session with the local machine's SSH agent is + opened, if one is running. If no agent is running, initialization will + succeed, but `get_keys` will return an empty tuple. + + :raises: `.SSHException` -- + if an SSH agent is found, but speaks an incompatible protocol + + .. versionchanged:: 2.10 + Added support for native openssh agent on windows (extending previous + putty pageant support) + """ + + def __init__(self): + AgentSSH.__init__(self) + + conn = get_agent_connection() + if not conn: + return + self._connect(conn) + + def close(self): + """ + Close the SSH agent connection. + """ + self._close() + + +class AgentKey(PKey): + """ + Private key held in a local SSH agent. This type of key can be used for + authenticating to a remote server (signing). Most other key operations + work as expected. + + .. versionchanged:: 3.2 + Added the ``comment`` kwarg and attribute. + + .. versionchanged:: 3.2 + Added the ``.inner_key`` attribute holding a reference to the 'real' + key instance this key is a proxy for, if one was obtainable, else None. + """ + + def __init__(self, agent, blob, comment=""): + self.agent = agent + self.blob = blob + self.comment = comment + msg = Message(blob) + self.name = msg.get_text() + self._logger = get_logger(__file__) + self.inner_key = None + try: + self.inner_key = PKey.from_type_string( + key_type=self.name, key_bytes=blob + ) + except UnknownKeyType: + # Log, but don't explode, since inner_key is a best-effort thing. + err = "Unable to derive inner_key for agent key of type {!r}" + self.log(DEBUG, err.format(self.name)) + + def log(self, *args, **kwargs): + return self._logger.log(*args, **kwargs) + + def asbytes(self): + # Prefer inner_key.asbytes, since that will differ for eg RSA-CERT + return self.inner_key.asbytes() if self.inner_key else self.blob + + def get_name(self): + return self.name + + def get_bits(self): + # Have to work around PKey's default get_bits being crap + if self.inner_key is not None: + return self.inner_key.get_bits() + return super().get_bits() + + def __getattr__(self, name): + """ + Proxy any un-implemented methods/properties to the inner_key. + """ + if self.inner_key is None: # nothing to proxy to + raise AttributeError(name) + return getattr(self.inner_key, name) + + @property + def _fields(self): + fallback = [self.get_name(), self.blob] + return self.inner_key._fields if self.inner_key else fallback + + def sign_ssh_data(self, data, algorithm=None): + msg = Message() + msg.add_byte(cSSH2_AGENTC_SIGN_REQUEST) + # NOTE: this used to be just self.blob, which is not entirely right for + # RSA-CERT 'keys' - those end up always degrading to ssh-rsa type + # signatures, for reasons probably internal to OpenSSH's agent code, + # even if everything else wants SHA2 (including our flag map). + msg.add_string(self.asbytes()) + msg.add_string(data) + msg.add_int(ALGORITHM_FLAG_MAP.get(algorithm, 0)) + ptype, result = self.agent._send_message(msg) + if ptype != SSH2_AGENT_SIGN_RESPONSE: + raise SSHException("key cannot be used for signing") + return result.get_binary() diff --git a/venv/lib/python3.11/site-packages/paramiko/auth_handler.py b/venv/lib/python3.11/site-packages/paramiko/auth_handler.py new file mode 100644 index 0000000..bc7f298 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/auth_handler.py @@ -0,0 +1,1092 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +`.AuthHandler` +""" + +import weakref +import threading +import time +import re + +from paramiko.common import ( + cMSG_SERVICE_REQUEST, + cMSG_DISCONNECT, + DISCONNECT_SERVICE_NOT_AVAILABLE, + DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE, + cMSG_USERAUTH_REQUEST, + cMSG_SERVICE_ACCEPT, + DEBUG, + AUTH_SUCCESSFUL, + INFO, + cMSG_USERAUTH_SUCCESS, + cMSG_USERAUTH_FAILURE, + AUTH_PARTIALLY_SUCCESSFUL, + cMSG_USERAUTH_INFO_REQUEST, + WARNING, + AUTH_FAILED, + cMSG_USERAUTH_PK_OK, + cMSG_USERAUTH_INFO_RESPONSE, + MSG_SERVICE_REQUEST, + MSG_SERVICE_ACCEPT, + MSG_USERAUTH_REQUEST, + MSG_USERAUTH_SUCCESS, + MSG_USERAUTH_FAILURE, + MSG_USERAUTH_BANNER, + MSG_USERAUTH_INFO_REQUEST, + MSG_USERAUTH_INFO_RESPONSE, + cMSG_USERAUTH_GSSAPI_RESPONSE, + cMSG_USERAUTH_GSSAPI_TOKEN, + cMSG_USERAUTH_GSSAPI_MIC, + MSG_USERAUTH_GSSAPI_RESPONSE, + MSG_USERAUTH_GSSAPI_TOKEN, + MSG_USERAUTH_GSSAPI_ERROR, + MSG_USERAUTH_GSSAPI_ERRTOK, + MSG_USERAUTH_GSSAPI_MIC, + MSG_NAMES, + cMSG_USERAUTH_BANNER, +) +from paramiko.message import Message +from paramiko.util import b, u +from paramiko.ssh_exception import ( + SSHException, + AuthenticationException, + BadAuthenticationType, + PartialAuthentication, +) +from paramiko.server import InteractiveQuery +from paramiko.ssh_gss import GSSAuth, GSS_EXCEPTIONS + + +class AuthHandler: + """ + Internal class to handle the mechanics of authentication. + """ + + def __init__(self, transport): + self.transport = weakref.proxy(transport) + self.username = None + self.authenticated = False + self.auth_event = None + self.auth_method = "" + self.banner = None + self.password = None + self.private_key = None + self.interactive_handler = None + self.submethods = None + # for server mode: + self.auth_username = None + self.auth_fail_count = 0 + # for GSSAPI + self.gss_host = None + self.gss_deleg_creds = True + + def _log(self, *args): + return self.transport._log(*args) + + def is_authenticated(self): + return self.authenticated + + def get_username(self): + if self.transport.server_mode: + return self.auth_username + else: + return self.username + + def auth_none(self, username, event): + self.transport.lock.acquire() + try: + self.auth_event = event + self.auth_method = "none" + self.username = username + self._request_auth() + finally: + self.transport.lock.release() + + def auth_publickey(self, username, key, event): + self.transport.lock.acquire() + try: + self.auth_event = event + self.auth_method = "publickey" + self.username = username + self.private_key = key + self._request_auth() + finally: + self.transport.lock.release() + + def auth_password(self, username, password, event): + self.transport.lock.acquire() + try: + self.auth_event = event + self.auth_method = "password" + self.username = username + self.password = password + self._request_auth() + finally: + self.transport.lock.release() + + def auth_interactive(self, username, handler, event, submethods=""): + """ + response_list = handler(title, instructions, prompt_list) + """ + self.transport.lock.acquire() + try: + self.auth_event = event + self.auth_method = "keyboard-interactive" + self.username = username + self.interactive_handler = handler + self.submethods = submethods + self._request_auth() + finally: + self.transport.lock.release() + + def auth_gssapi_with_mic(self, username, gss_host, gss_deleg_creds, event): + self.transport.lock.acquire() + try: + self.auth_event = event + self.auth_method = "gssapi-with-mic" + self.username = username + self.gss_host = gss_host + self.gss_deleg_creds = gss_deleg_creds + self._request_auth() + finally: + self.transport.lock.release() + + def auth_gssapi_keyex(self, username, event): + self.transport.lock.acquire() + try: + self.auth_event = event + self.auth_method = "gssapi-keyex" + self.username = username + self._request_auth() + finally: + self.transport.lock.release() + + def abort(self): + if self.auth_event is not None: + self.auth_event.set() + + # ...internals... + + def _request_auth(self): + m = Message() + m.add_byte(cMSG_SERVICE_REQUEST) + m.add_string("ssh-userauth") + self.transport._send_message(m) + + def _disconnect_service_not_available(self): + m = Message() + m.add_byte(cMSG_DISCONNECT) + m.add_int(DISCONNECT_SERVICE_NOT_AVAILABLE) + m.add_string("Service not available") + m.add_string("en") + self.transport._send_message(m) + self.transport.close() + + def _disconnect_no_more_auth(self): + m = Message() + m.add_byte(cMSG_DISCONNECT) + m.add_int(DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE) + m.add_string("No more auth methods available") + m.add_string("en") + self.transport._send_message(m) + self.transport.close() + + def _get_key_type_and_bits(self, key): + """ + Given any key, return its type/algorithm & bits-to-sign. + + Intended for input to or verification of, key signatures. + """ + # Use certificate contents, if available, plain pubkey otherwise + if key.public_blob: + return key.public_blob.key_type, key.public_blob.key_blob + else: + return key.get_name(), key + + def _get_session_blob(self, key, service, username, algorithm): + m = Message() + m.add_string(self.transport.session_id) + m.add_byte(cMSG_USERAUTH_REQUEST) + m.add_string(username) + m.add_string(service) + m.add_string("publickey") + m.add_boolean(True) + _, bits = self._get_key_type_and_bits(key) + m.add_string(algorithm) + m.add_string(bits) + return m.asbytes() + + def wait_for_response(self, event): + max_ts = None + if self.transport.auth_timeout is not None: + max_ts = time.time() + self.transport.auth_timeout + while True: + event.wait(0.1) + if not self.transport.is_active(): + e = self.transport.get_exception() + if (e is None) or issubclass(e.__class__, EOFError): + e = AuthenticationException( + "Authentication failed: transport shut down or saw EOF" + ) + raise e + if event.is_set(): + break + if max_ts is not None and max_ts <= time.time(): + raise AuthenticationException("Authentication timeout.") + + if not self.is_authenticated(): + e = self.transport.get_exception() + if e is None: + e = AuthenticationException("Authentication failed.") + # this is horrible. Python Exception isn't yet descended from + # object, so type(e) won't work. :( + # TODO 4.0: lol. just lmao. + if issubclass(e.__class__, PartialAuthentication): + return e.allowed_types + raise e + return [] + + def _parse_service_request(self, m): + service = m.get_text() + if self.transport.server_mode and (service == "ssh-userauth"): + # accepted + m = Message() + m.add_byte(cMSG_SERVICE_ACCEPT) + m.add_string(service) + self.transport._send_message(m) + banner, language = self.transport.server_object.get_banner() + if banner: + m = Message() + m.add_byte(cMSG_USERAUTH_BANNER) + m.add_string(banner) + m.add_string(language) + self.transport._send_message(m) + return + # dunno this one + self._disconnect_service_not_available() + + def _generate_key_from_request(self, algorithm, keyblob): + # For use in server mode. + options = self.transport.preferred_pubkeys + if algorithm.replace("-cert-v01@openssh.com", "") not in options: + err = ( + "Auth rejected: pubkey algorithm '{}' unsupported or disabled" + ) + self._log(INFO, err.format(algorithm)) + return None + return self.transport._key_info[algorithm](Message(keyblob)) + + def _choose_fallback_pubkey_algorithm(self, key_type, my_algos): + # Fallback: first one in our (possibly tweaked by caller) list + pubkey_algo = my_algos[0] + msg = "Server did not send a server-sig-algs list; defaulting to our first preferred algo ({!r})" # noqa + self._log(DEBUG, msg.format(pubkey_algo)) + self._log( + DEBUG, + "NOTE: you may use the 'disabled_algorithms' SSHClient/Transport init kwarg to disable that or other algorithms if your server does not support them!", # noqa + ) + return pubkey_algo + + def _finalize_pubkey_algorithm(self, key_type): + # Short-circuit for non-RSA keys + if "rsa" not in key_type: + return key_type + self._log( + DEBUG, + "Finalizing pubkey algorithm for key of type {!r}".format( + key_type + ), + ) + # NOTE re #2017: When the key is an RSA cert and the remote server is + # OpenSSH 7.7 or earlier, always use ssh-rsa-cert-v01@openssh.com. + # Those versions of the server won't support rsa-sha2 family sig algos + # for certs specifically, and in tandem with various server bugs + # regarding server-sig-algs, it's impossible to fit this into the rest + # of the logic here. + if key_type.endswith("-cert-v01@openssh.com") and re.search( + r"-OpenSSH_(?:[1-6]|7\.[0-7])", self.transport.remote_version + ): + pubkey_algo = "ssh-rsa-cert-v01@openssh.com" + self.transport._agreed_pubkey_algorithm = pubkey_algo + self._log(DEBUG, "OpenSSH<7.8 + RSA cert = forcing ssh-rsa!") + self._log( + DEBUG, "Agreed upon {!r} pubkey algorithm".format(pubkey_algo) + ) + return pubkey_algo + # Normal attempts to handshake follow from here. + # Only consider RSA algos from our list, lest we agree on another! + my_algos = [x for x in self.transport.preferred_pubkeys if "rsa" in x] + self._log(DEBUG, "Our pubkey algorithm list: {}".format(my_algos)) + # Short-circuit negatively if user disabled all RSA algos (heh) + if not my_algos: + raise SSHException( + "An RSA key was specified, but no RSA pubkey algorithms are configured!" # noqa + ) + # Check for server-sig-algs if supported & sent + server_algo_str = u( + self.transport.server_extensions.get("server-sig-algs", b("")) + ) + pubkey_algo = None + # Prefer to match against server-sig-algs + if server_algo_str: + server_algos = server_algo_str.split(",") + self._log( + DEBUG, "Server-side algorithm list: {}".format(server_algos) + ) + # Only use algos from our list that the server likes, in our own + # preference order. (NOTE: purposefully using same style as in + # Transport...expect to refactor later) + agreement = list(filter(server_algos.__contains__, my_algos)) + if agreement: + pubkey_algo = agreement[0] + self._log( + DEBUG, + "Agreed upon {!r} pubkey algorithm".format(pubkey_algo), + ) + else: + self._log(DEBUG, "No common pubkey algorithms exist! Dying.") + # TODO: MAY want to use IncompatiblePeer again here but that's + # technically for initial key exchange, not pubkey auth. + err = "Unable to agree on a pubkey algorithm for signing a {!r} key!" # noqa + raise AuthenticationException(err.format(key_type)) + # Fallback to something based purely on the key & our configuration + else: + pubkey_algo = self._choose_fallback_pubkey_algorithm( + key_type, my_algos + ) + if key_type.endswith("-cert-v01@openssh.com"): + pubkey_algo += "-cert-v01@openssh.com" + self.transport._agreed_pubkey_algorithm = pubkey_algo + return pubkey_algo + + def _parse_service_accept(self, m): + service = m.get_text() + if service == "ssh-userauth": + self._log(DEBUG, "userauth is OK") + m = Message() + m.add_byte(cMSG_USERAUTH_REQUEST) + m.add_string(self.username) + m.add_string("ssh-connection") + m.add_string(self.auth_method) + if self.auth_method == "password": + m.add_boolean(False) + password = b(self.password) + m.add_string(password) + elif self.auth_method == "publickey": + m.add_boolean(True) + key_type, bits = self._get_key_type_and_bits(self.private_key) + algorithm = self._finalize_pubkey_algorithm(key_type) + m.add_string(algorithm) + m.add_string(bits) + blob = self._get_session_blob( + self.private_key, + "ssh-connection", + self.username, + algorithm, + ) + sig = self.private_key.sign_ssh_data(blob, algorithm) + m.add_string(sig) + elif self.auth_method == "keyboard-interactive": + m.add_string("") + m.add_string(self.submethods) + elif self.auth_method == "gssapi-with-mic": + sshgss = GSSAuth(self.auth_method, self.gss_deleg_creds) + m.add_bytes(sshgss.ssh_gss_oids()) + # send the supported GSSAPI OIDs to the server + self.transport._send_message(m) + ptype, m = self.transport.packetizer.read_message() + if ptype == MSG_USERAUTH_BANNER: + self._parse_userauth_banner(m) + ptype, m = self.transport.packetizer.read_message() + if ptype == MSG_USERAUTH_GSSAPI_RESPONSE: + # Read the mechanism selected by the server. We send just + # the Kerberos V5 OID, so the server can only respond with + # this OID. + mech = m.get_string() + m = Message() + m.add_byte(cMSG_USERAUTH_GSSAPI_TOKEN) + try: + m.add_string( + sshgss.ssh_init_sec_context( + self.gss_host, mech, self.username + ) + ) + except GSS_EXCEPTIONS as e: + return self._handle_local_gss_failure(e) + self.transport._send_message(m) + while True: + ptype, m = self.transport.packetizer.read_message() + if ptype == MSG_USERAUTH_GSSAPI_TOKEN: + srv_token = m.get_string() + try: + next_token = sshgss.ssh_init_sec_context( + self.gss_host, + mech, + self.username, + srv_token, + ) + except GSS_EXCEPTIONS as e: + return self._handle_local_gss_failure(e) + # After this step the GSSAPI should not return any + # token. If it does, we keep sending the token to + # the server until no more token is returned. + if next_token is None: + break + else: + m = Message() + m.add_byte(cMSG_USERAUTH_GSSAPI_TOKEN) + m.add_string(next_token) + self.transport.send_message(m) + else: + raise SSHException( + "Received Package: {}".format(MSG_NAMES[ptype]) + ) + m = Message() + m.add_byte(cMSG_USERAUTH_GSSAPI_MIC) + # send the MIC to the server + m.add_string(sshgss.ssh_get_mic(self.transport.session_id)) + elif ptype == MSG_USERAUTH_GSSAPI_ERRTOK: + # RFC 4462 says we are not required to implement GSS-API + # error messages. + # See RFC 4462 Section 3.8 in + # http://www.ietf.org/rfc/rfc4462.txt + raise SSHException("Server returned an error token") + elif ptype == MSG_USERAUTH_GSSAPI_ERROR: + maj_status = m.get_int() + min_status = m.get_int() + err_msg = m.get_string() + m.get_string() # Lang tag - discarded + raise SSHException( + """GSS-API Error: +Major Status: {} +Minor Status: {} +Error Message: {} +""".format( + maj_status, min_status, err_msg + ) + ) + elif ptype == MSG_USERAUTH_FAILURE: + self._parse_userauth_failure(m) + return + else: + raise SSHException( + "Received Package: {}".format(MSG_NAMES[ptype]) + ) + elif ( + self.auth_method == "gssapi-keyex" + and self.transport.gss_kex_used + ): + kexgss = self.transport.kexgss_ctxt + kexgss.set_username(self.username) + mic_token = kexgss.ssh_get_mic(self.transport.session_id) + m.add_string(mic_token) + elif self.auth_method == "none": + pass + else: + raise SSHException( + 'Unknown auth method "{}"'.format(self.auth_method) + ) + self.transport._send_message(m) + else: + self._log( + DEBUG, 'Service request "{}" accepted (?)'.format(service) + ) + + def _send_auth_result(self, username, method, result): + # okay, send result + m = Message() + if result == AUTH_SUCCESSFUL: + self._log(INFO, "Auth granted ({}).".format(method)) + m.add_byte(cMSG_USERAUTH_SUCCESS) + self.authenticated = True + else: + self._log(INFO, "Auth rejected ({}).".format(method)) + m.add_byte(cMSG_USERAUTH_FAILURE) + m.add_string( + self.transport.server_object.get_allowed_auths(username) + ) + if result == AUTH_PARTIALLY_SUCCESSFUL: + m.add_boolean(True) + else: + m.add_boolean(False) + self.auth_fail_count += 1 + self.transport._send_message(m) + if self.auth_fail_count >= 10: + self._disconnect_no_more_auth() + if result == AUTH_SUCCESSFUL: + self.transport._auth_trigger() + + def _interactive_query(self, q): + # make interactive query instead of response + m = Message() + m.add_byte(cMSG_USERAUTH_INFO_REQUEST) + m.add_string(q.name) + m.add_string(q.instructions) + m.add_string(bytes()) + m.add_int(len(q.prompts)) + for p in q.prompts: + m.add_string(p[0]) + m.add_boolean(p[1]) + self.transport._send_message(m) + + def _parse_userauth_request(self, m): + if not self.transport.server_mode: + # er, uh... what? + m = Message() + m.add_byte(cMSG_USERAUTH_FAILURE) + m.add_string("none") + m.add_boolean(False) + self.transport._send_message(m) + return + if self.authenticated: + # ignore + return + username = m.get_text() + service = m.get_text() + method = m.get_text() + self._log( + DEBUG, + "Auth request (type={}) service={}, username={}".format( + method, service, username + ), + ) + if service != "ssh-connection": + self._disconnect_service_not_available() + return + if (self.auth_username is not None) and ( + self.auth_username != username + ): + self._log( + WARNING, + "Auth rejected because the client attempted to change username in mid-flight", # noqa + ) + self._disconnect_no_more_auth() + return + self.auth_username = username + # check if GSS-API authentication is enabled + gss_auth = self.transport.server_object.enable_auth_gssapi() + + if method == "none": + result = self.transport.server_object.check_auth_none(username) + elif method == "password": + changereq = m.get_boolean() + password = m.get_binary() + try: + password = password.decode("UTF-8") + except UnicodeError: + # some clients/servers expect non-utf-8 passwords! + # in this case, just return the raw byte string. + pass + if changereq: + # always treated as failure, since we don't support changing + # passwords, but collect the list of valid auth types from + # the callback anyway + self._log(DEBUG, "Auth request to change passwords (rejected)") + newpassword = m.get_binary() + try: + newpassword = newpassword.decode("UTF-8", "replace") + except UnicodeError: + pass + result = AUTH_FAILED + else: + result = self.transport.server_object.check_auth_password( + username, password + ) + elif method == "publickey": + sig_attached = m.get_boolean() + # NOTE: server never wants to guess a client's algo, they're + # telling us directly. No need for _finalize_pubkey_algorithm + # anywhere in this flow. + algorithm = m.get_text() + keyblob = m.get_binary() + try: + key = self._generate_key_from_request(algorithm, keyblob) + except SSHException as e: + self._log(INFO, "Auth rejected: public key: {}".format(str(e))) + key = None + except Exception as e: + msg = "Auth rejected: unsupported or mangled public key ({}: {})" # noqa + self._log(INFO, msg.format(e.__class__.__name__, e)) + key = None + if key is None: + self._disconnect_no_more_auth() + return + # first check if this key is okay... if not, we can skip the verify + result = self.transport.server_object.check_auth_publickey( + username, key + ) + if result != AUTH_FAILED: + # key is okay, verify it + if not sig_attached: + # client wants to know if this key is acceptable, before it + # signs anything... send special "ok" message + m = Message() + m.add_byte(cMSG_USERAUTH_PK_OK) + m.add_string(algorithm) + m.add_string(keyblob) + self.transport._send_message(m) + return + sig = Message(m.get_binary()) + blob = self._get_session_blob( + key, service, username, algorithm + ) + if not key.verify_ssh_sig(blob, sig): + self._log(INFO, "Auth rejected: invalid signature") + result = AUTH_FAILED + elif method == "keyboard-interactive": + submethods = m.get_string() + result = self.transport.server_object.check_auth_interactive( + username, submethods + ) + if isinstance(result, InteractiveQuery): + # make interactive query instead of response + self._interactive_query(result) + return + elif method == "gssapi-with-mic" and gss_auth: + sshgss = GSSAuth(method) + # Read the number of OID mechanisms supported by the client. + # OpenSSH sends just one OID. It's the Kerveros V5 OID and that's + # the only OID we support. + mechs = m.get_int() + # We can't accept more than one OID, so if the SSH client sends + # more than one, disconnect. + if mechs > 1: + self._log( + INFO, + "Disconnect: Received more than one GSS-API OID mechanism", + ) + self._disconnect_no_more_auth() + desired_mech = m.get_string() + mech_ok = sshgss.ssh_check_mech(desired_mech) + # if we don't support the mechanism, disconnect. + if not mech_ok: + self._log( + INFO, + "Disconnect: Received an invalid GSS-API OID mechanism", + ) + self._disconnect_no_more_auth() + # send the Kerberos V5 GSSAPI OID to the client + supported_mech = sshgss.ssh_gss_oids("server") + # RFC 4462 says we are not required to implement GSS-API error + # messages. See section 3.8 in http://www.ietf.org/rfc/rfc4462.txt + m = Message() + m.add_byte(cMSG_USERAUTH_GSSAPI_RESPONSE) + m.add_bytes(supported_mech) + self.transport.auth_handler = GssapiWithMicAuthHandler( + self, sshgss + ) + self.transport._expected_packet = ( + MSG_USERAUTH_GSSAPI_TOKEN, + MSG_USERAUTH_REQUEST, + MSG_SERVICE_REQUEST, + ) + self.transport._send_message(m) + return + elif method == "gssapi-keyex" and gss_auth: + mic_token = m.get_string() + sshgss = self.transport.kexgss_ctxt + if sshgss is None: + # If there is no valid context, we reject the authentication + result = AUTH_FAILED + self._send_auth_result(username, method, result) + try: + sshgss.ssh_check_mic( + mic_token, self.transport.session_id, self.auth_username + ) + except Exception: + result = AUTH_FAILED + self._send_auth_result(username, method, result) + raise + result = AUTH_SUCCESSFUL + self.transport.server_object.check_auth_gssapi_keyex( + username, result + ) + else: + result = self.transport.server_object.check_auth_none(username) + # okay, send result + self._send_auth_result(username, method, result) + + def _parse_userauth_success(self, m): + self._log( + INFO, "Authentication ({}) successful!".format(self.auth_method) + ) + self.authenticated = True + self.transport._auth_trigger() + if self.auth_event is not None: + self.auth_event.set() + + def _parse_userauth_failure(self, m): + authlist = m.get_list() + # TODO 4.0: we aren't giving callers access to authlist _unless_ it's + # partial authentication, so eg authtype=none can't work unless we + # tweak this. + partial = m.get_boolean() + if partial: + self._log(INFO, "Authentication continues...") + self._log(DEBUG, "Methods: " + str(authlist)) + self.transport.saved_exception = PartialAuthentication(authlist) + elif self.auth_method not in authlist: + for msg in ( + "Authentication type ({}) not permitted.".format( + self.auth_method + ), + "Allowed methods: {}".format(authlist), + ): + self._log(DEBUG, msg) + self.transport.saved_exception = BadAuthenticationType( + "Bad authentication type", authlist + ) + else: + self._log( + INFO, "Authentication ({}) failed.".format(self.auth_method) + ) + self.authenticated = False + self.username = None + if self.auth_event is not None: + self.auth_event.set() + + def _parse_userauth_banner(self, m): + banner = m.get_string() + self.banner = banner + self._log(INFO, "Auth banner: {}".format(banner)) + # who cares. + + def _parse_userauth_info_request(self, m): + if self.auth_method != "keyboard-interactive": + raise SSHException("Illegal info request from server") + title = m.get_text() + instructions = m.get_text() + m.get_binary() # lang + prompts = m.get_int() + prompt_list = [] + for i in range(prompts): + prompt_list.append((m.get_text(), m.get_boolean())) + response_list = self.interactive_handler( + title, instructions, prompt_list + ) + + m = Message() + m.add_byte(cMSG_USERAUTH_INFO_RESPONSE) + m.add_int(len(response_list)) + for r in response_list: + m.add_string(r) + self.transport._send_message(m) + + def _parse_userauth_info_response(self, m): + if not self.transport.server_mode: + raise SSHException("Illegal info response from server") + n = m.get_int() + responses = [] + for i in range(n): + responses.append(m.get_text()) + result = self.transport.server_object.check_auth_interactive_response( + responses + ) + if isinstance(result, InteractiveQuery): + # make interactive query instead of response + self._interactive_query(result) + return + self._send_auth_result( + self.auth_username, "keyboard-interactive", result + ) + + def _handle_local_gss_failure(self, e): + self.transport.saved_exception = e + self._log(DEBUG, "GSSAPI failure: {}".format(e)) + self._log(INFO, "Authentication ({}) failed.".format(self.auth_method)) + self.authenticated = False + self.username = None + if self.auth_event is not None: + self.auth_event.set() + return + + # TODO 4.0: MAY make sense to make these tables into actual + # classes/instances that can be fed a mode bool or whatever. Or, + # alternately (both?) make the message types small classes or enums that + # embed this info within themselves (which could also then tidy up the + # current 'integer -> human readable short string' stuff in common.py). + # TODO: if we do that, also expose 'em publicly. + + # Messages which should be handled _by_ servers (sent by clients) + @property + def _server_handler_table(self): + return { + # TODO 4.0: MSG_SERVICE_REQUEST ought to eventually move into + # Transport's server mode like the client side did, just for + # consistency. + MSG_SERVICE_REQUEST: self._parse_service_request, + MSG_USERAUTH_REQUEST: self._parse_userauth_request, + MSG_USERAUTH_INFO_RESPONSE: self._parse_userauth_info_response, + } + + # Messages which should be handled _by_ clients (sent by servers) + @property + def _client_handler_table(self): + return { + MSG_SERVICE_ACCEPT: self._parse_service_accept, + MSG_USERAUTH_SUCCESS: self._parse_userauth_success, + MSG_USERAUTH_FAILURE: self._parse_userauth_failure, + MSG_USERAUTH_BANNER: self._parse_userauth_banner, + MSG_USERAUTH_INFO_REQUEST: self._parse_userauth_info_request, + } + + # NOTE: prior to the fix for #1283, this was a static dict instead of a + # property. Should be backwards compatible in most/all cases. + @property + def _handler_table(self): + if self.transport.server_mode: + return self._server_handler_table + else: + return self._client_handler_table + + +class GssapiWithMicAuthHandler: + """A specialized Auth handler for gssapi-with-mic + + During the GSSAPI token exchange we need a modified dispatch table, + because the packet type numbers are not unique. + """ + + method = "gssapi-with-mic" + + def __init__(self, delegate, sshgss): + self._delegate = delegate + self.sshgss = sshgss + + def abort(self): + self._restore_delegate_auth_handler() + return self._delegate.abort() + + @property + def transport(self): + return self._delegate.transport + + @property + def _send_auth_result(self): + return self._delegate._send_auth_result + + @property + def auth_username(self): + return self._delegate.auth_username + + @property + def gss_host(self): + return self._delegate.gss_host + + def _restore_delegate_auth_handler(self): + self.transport.auth_handler = self._delegate + + def _parse_userauth_gssapi_token(self, m): + client_token = m.get_string() + # use the client token as input to establish a secure + # context. + sshgss = self.sshgss + try: + token = sshgss.ssh_accept_sec_context( + self.gss_host, client_token, self.auth_username + ) + except Exception as e: + self.transport.saved_exception = e + result = AUTH_FAILED + self._restore_delegate_auth_handler() + self._send_auth_result(self.auth_username, self.method, result) + raise + if token is not None: + m = Message() + m.add_byte(cMSG_USERAUTH_GSSAPI_TOKEN) + m.add_string(token) + self.transport._expected_packet = ( + MSG_USERAUTH_GSSAPI_TOKEN, + MSG_USERAUTH_GSSAPI_MIC, + MSG_USERAUTH_REQUEST, + ) + self.transport._send_message(m) + + def _parse_userauth_gssapi_mic(self, m): + mic_token = m.get_string() + sshgss = self.sshgss + username = self.auth_username + self._restore_delegate_auth_handler() + try: + sshgss.ssh_check_mic( + mic_token, self.transport.session_id, username + ) + except Exception as e: + self.transport.saved_exception = e + result = AUTH_FAILED + self._send_auth_result(username, self.method, result) + raise + # TODO: Implement client credential saving. + # The OpenSSH server is able to create a TGT with the delegated + # client credentials, but this is not supported by GSS-API. + result = AUTH_SUCCESSFUL + self.transport.server_object.check_auth_gssapi_with_mic( + username, result + ) + # okay, send result + self._send_auth_result(username, self.method, result) + + def _parse_service_request(self, m): + self._restore_delegate_auth_handler() + return self._delegate._parse_service_request(m) + + def _parse_userauth_request(self, m): + self._restore_delegate_auth_handler() + return self._delegate._parse_userauth_request(m) + + __handler_table = { + MSG_SERVICE_REQUEST: _parse_service_request, + MSG_USERAUTH_REQUEST: _parse_userauth_request, + MSG_USERAUTH_GSSAPI_TOKEN: _parse_userauth_gssapi_token, + MSG_USERAUTH_GSSAPI_MIC: _parse_userauth_gssapi_mic, + } + + @property + def _handler_table(self): + # TODO: determine if we can cut this up like we did for the primary + # AuthHandler class. + return self.__handler_table + + +class AuthOnlyHandler(AuthHandler): + """ + AuthHandler, and just auth, no service requests! + + .. versionadded:: 3.2 + """ + + # NOTE: this purposefully duplicates some of the parent class in order to + # modernize, refactor, etc. The intent is that eventually we will collapse + # this one onto the parent in a backwards incompatible release. + + @property + def _client_handler_table(self): + my_table = super()._client_handler_table.copy() + del my_table[MSG_SERVICE_ACCEPT] + return my_table + + def send_auth_request(self, username, method, finish_message=None): + """ + Submit a userauth request message & wait for response. + + Performs the transport message send call, sets self.auth_event, and + will lock-n-block as necessary to both send, and wait for response to, + the USERAUTH_REQUEST. + + Most callers will want to supply a callback to ``finish_message``, + which accepts a Message ``m`` and may call mutator methods on it to add + more fields. + """ + # Store a few things for reference in handlers, including auth failure + # handler (which needs to know if we were using a bad method, etc) + self.auth_method = method + self.username = username + # Generic userauth request fields + m = Message() + m.add_byte(cMSG_USERAUTH_REQUEST) + m.add_string(username) + m.add_string("ssh-connection") + m.add_string(method) + # Caller usually has more to say, such as injecting password, key etc + finish_message(m) + # TODO 4.0: seems odd to have the client handle the lock and not + # Transport; that _may_ have been an artifact of allowing user + # threading event injection? Regardless, we don't want to move _this_ + # locking into Transport._send_message now, because lots of other + # untouched code also uses that method and we might end up + # double-locking (?) but 4.0 would be a good time to revisit. + with self.transport.lock: + self.transport._send_message(m) + # We have cut out the higher level event args, but self.auth_event is + # still required for self.wait_for_response to function correctly (it's + # the mechanism used by the auth success/failure handlers, the abort + # handler, and a few other spots like in gssapi. + # TODO: interestingly, wait_for_response itself doesn't actually + # enforce that its event argument and self.auth_event are the same... + self.auth_event = threading.Event() + return self.wait_for_response(self.auth_event) + + def auth_none(self, username): + return self.send_auth_request(username, "none") + + def auth_publickey(self, username, key): + key_type, bits = self._get_key_type_and_bits(key) + algorithm = self._finalize_pubkey_algorithm(key_type) + blob = self._get_session_blob( + key, + "ssh-connection", + username, + algorithm, + ) + + def finish(m): + # This field doesn't appear to be named, but is False when querying + # for permission (ie knowing whether to even prompt a user for + # passphrase, etc) or True when just going for it. Paramiko has + # never bothered with the former type of message, apparently. + m.add_boolean(True) + m.add_string(algorithm) + m.add_string(bits) + m.add_string(key.sign_ssh_data(blob, algorithm)) + + return self.send_auth_request(username, "publickey", finish) + + def auth_password(self, username, password): + def finish(m): + # Unnamed field that equates to "I am changing my password", which + # Paramiko clientside never supported and serverside only sort of + # supported. + m.add_boolean(False) + m.add_string(b(password)) + + return self.send_auth_request(username, "password", finish) + + def auth_interactive(self, username, handler, submethods=""): + """ + response_list = handler(title, instructions, prompt_list) + """ + # Unlike most siblings, this auth method _does_ require other + # superclass handlers (eg userauth info request) to understand + # what's going on, so we still set some self attributes. + self.auth_method = "keyboard_interactive" + self.interactive_handler = handler + + def finish(m): + # Empty string for deprecated language tag field, per RFC 4256: + # https://www.rfc-editor.org/rfc/rfc4256#section-3.1 + m.add_string("") + m.add_string(submethods) + + return self.send_auth_request(username, "keyboard-interactive", finish) + + # NOTE: not strictly 'auth only' related, but allows users to opt-in. + def _choose_fallback_pubkey_algorithm(self, key_type, my_algos): + msg = "Server did not send a server-sig-algs list; defaulting to something in our preferred algorithms list" # noqa + self._log(DEBUG, msg) + noncert_key_type = key_type.replace("-cert-v01@openssh.com", "") + if key_type in my_algos or noncert_key_type in my_algos: + actual = key_type if key_type in my_algos else noncert_key_type + msg = f"Current key type, {actual!r}, is in our preferred list; using that" # noqa + algo = actual + else: + algo = my_algos[0] + msg = f"{key_type!r} not in our list - trying first list item instead, {algo!r}" # noqa + self._log(DEBUG, msg) + return algo diff --git a/venv/lib/python3.11/site-packages/paramiko/auth_strategy.py b/venv/lib/python3.11/site-packages/paramiko/auth_strategy.py new file mode 100644 index 0000000..03c1d87 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/auth_strategy.py @@ -0,0 +1,306 @@ +""" +Modern, adaptable authentication machinery. + +Replaces certain parts of `.SSHClient`. For a concrete implementation, see the +``OpenSSHAuthStrategy`` class in `Fabric `_. +""" + +from collections import namedtuple + +from .agent import AgentKey +from .util import get_logger +from .ssh_exception import AuthenticationException + + +class AuthSource: + """ + Some SSH authentication source, such as a password, private key, or agent. + + See subclasses in this module for concrete implementations. + + All implementations must accept at least a ``username`` (``str``) kwarg. + """ + + def __init__(self, username): + self.username = username + + def _repr(self, **kwargs): + # TODO: are there any good libs for this? maybe some helper from + # structlog? + pairs = [f"{k}={v!r}" for k, v in kwargs.items()] + joined = ", ".join(pairs) + return f"{self.__class__.__name__}({joined})" + + def __repr__(self): + return self._repr() + + def authenticate(self, transport): + """ + Perform authentication. + """ + raise NotImplementedError + + +class NoneAuth(AuthSource): + """ + Auth type "none", ie https://www.rfc-editor.org/rfc/rfc4252#section-5.2 . + """ + + def authenticate(self, transport): + return transport.auth_none(self.username) + + +class Password(AuthSource): + """ + Password authentication. + + :param callable password_getter: + A lazy callable that should return a `str` password value at + authentication time, such as a `functools.partial` wrapping + `getpass.getpass`, an API call to a secrets store, or similar. + + If you already know the password at instantiation time, you should + simply use something like ``lambda: "my literal"`` (for a literal, but + also, shame on you!) or ``lambda: variable_name`` (for something stored + in a variable). + """ + + def __init__(self, username, password_getter): + super().__init__(username=username) + self.password_getter = password_getter + + def __repr__(self): + # Password auth is marginally more 'username-caring' than pkeys, so may + # as well log that info here. + return super()._repr(user=self.username) + + def authenticate(self, transport): + # Lazily get the password, in case it's prompting a user + # TODO: be nice to log source _of_ the password? + password = self.password_getter() + return transport.auth_password(self.username, password) + + +# TODO 4.0: twiddle this, or PKey, or both, so they're more obviously distinct. +# TODO 4.0: the obvious is to make this more wordy (PrivateKeyAuth), the +# minimalist approach might be to rename PKey to just Key (esp given all the +# subclasses are WhateverKey and not WhateverPKey) +class PrivateKey(AuthSource): + """ + Essentially a mixin for private keys. + + Knows how to auth, but leaves key material discovery/loading/decryption to + subclasses. + + Subclasses **must** ensure that they've set ``self.pkey`` to a decrypted + `.PKey` instance before calling ``super().authenticate``; typically + either in their ``__init__``, or in an overridden ``authenticate`` prior to + its `super` call. + """ + + def authenticate(self, transport): + return transport.auth_publickey(self.username, self.pkey) + + +class InMemoryPrivateKey(PrivateKey): + """ + An in-memory, decrypted `.PKey` object. + """ + + def __init__(self, username, pkey): + super().__init__(username=username) + # No decryption (presumably) necessary! + self.pkey = pkey + + def __repr__(self): + # NOTE: most of interesting repr-bits for private keys is in PKey. + # TODO: tacking on agent-ness like this is a bit awkward, but, eh? + rep = super()._repr(pkey=self.pkey) + if isinstance(self.pkey, AgentKey): + rep += " [agent]" + return rep + + +class OnDiskPrivateKey(PrivateKey): + """ + Some on-disk private key that needs opening and possibly decrypting. + + :param str source: + String tracking where this key's path was specified; should be one of + ``"ssh-config"``, ``"python-config"``, or ``"implicit-home"``. + :param Path path: + The filesystem path this key was loaded from. + :param PKey pkey: + The `PKey` object this auth source uses/represents. + """ + + def __init__(self, username, source, path, pkey): + super().__init__(username=username) + self.source = source + allowed = ("ssh-config", "python-config", "implicit-home") + if source not in allowed: + raise ValueError(f"source argument must be one of: {allowed!r}") + self.path = path + # Superclass wants .pkey, other two are mostly for display/debugging. + self.pkey = pkey + + def __repr__(self): + return self._repr( + key=self.pkey, source=self.source, path=str(self.path) + ) + + +# TODO re sources: is there anything in an OpenSSH config file that doesn't fit +# into what Paramiko already had kwargs for? + + +SourceResult = namedtuple("SourceResult", ["source", "result"]) + +# TODO: tempting to make this an OrderedDict, except the keys essentially want +# to be rich objects (AuthSources) which do not make for useful user indexing? +# TODO: members being vanilla tuples is pretty old-school/expedient; they +# "really" want to be something that's type friendlier (unless the tuple's 2nd +# member being a Union of two types is "fine"?), which I assume means yet more +# classes, eg an abstract SourceResult with concrete AuthSuccess and +# AuthFailure children? +# TODO: arguably we want __init__ typechecking of the members (or to leverage +# mypy by classifying this literally as list-of-AuthSource?) +class AuthResult(list): + """ + Represents a partial or complete SSH authentication attempt. + + This class conceptually extends `AuthStrategy` by pairing the former's + authentication **sources** with the **results** of trying to authenticate + with them. + + `AuthResult` is a (subclass of) `list` of `namedtuple`, which are of the + form ``namedtuple('SourceResult', 'source', 'result')`` (where the + ``source`` member is an `AuthSource` and the ``result`` member is either a + return value from the relevant `.Transport` method, or an exception + object). + + .. note:: + Transport auth method results are always themselves a ``list`` of "next + allowable authentication methods". + + In the simple case of "you just authenticated successfully", it's an + empty list; if your auth was rejected but you're allowed to try again, + it will be a list of string method names like ``pubkey`` or + ``password``. + + The ``__str__`` of this class represents the empty-list scenario as the + word ``success``, which should make reading the result of an + authentication session more obvious to humans. + + Instances also have a `strategy` attribute referencing the `AuthStrategy` + which was attempted. + """ + + def __init__(self, strategy, *args, **kwargs): + self.strategy = strategy + super().__init__(*args, **kwargs) + + def __str__(self): + # NOTE: meaningfully distinct from __repr__, which still wants to use + # superclass' implementation. + # TODO: go hog wild, use rich.Table? how is that on degraded term's? + # TODO: test this lol + return "\n".join( + f"{x.source} -> {x.result or 'success'}" for x in self + ) + + +# TODO 4.0: descend from SSHException or even just Exception +class AuthFailure(AuthenticationException): + """ + Basic exception wrapping an `AuthResult` indicating overall auth failure. + + Note that `AuthFailure` descends from `AuthenticationException` but is + generally "higher level"; the latter is now only raised by individual + `AuthSource` attempts and should typically only be seen by users when + encapsulated in this class. It subclasses `AuthenticationException` + primarily for backwards compatibility reasons. + """ + + def __init__(self, result): + self.result = result + + def __str__(self): + return "\n" + str(self.result) + + +class AuthStrategy: + """ + This class represents one or more attempts to auth with an SSH server. + + By default, subclasses must at least accept an ``ssh_config`` + (`.SSHConfig`) keyword argument, but may opt to accept more as needed for + their particular strategy. + """ + + def __init__( + self, + ssh_config, + ): + self.ssh_config = ssh_config + self.log = get_logger(__name__) + + def get_sources(self): + """ + Generator yielding `AuthSource` instances, in the order to try. + + This is the primary override point for subclasses: you figure out what + sources you need, and ``yield`` them. + + Subclasses _of_ subclasses may find themselves wanting to do things + like filtering or discarding around a call to `super`. + """ + raise NotImplementedError + + def authenticate(self, transport): + """ + Handles attempting `AuthSource` instances yielded from `get_sources`. + + You *normally* won't need to override this, but it's an option for + advanced users. + """ + succeeded = False + overall_result = AuthResult(strategy=self) + # TODO: arguably we could fit in a "send none auth, record allowed auth + # types sent back" thing here as OpenSSH-client does, but that likely + # wants to live in fabric.OpenSSHAuthStrategy as not all target servers + # will implement it! + # TODO: needs better "server told us too many attempts" checking! + for source in self.get_sources(): + self.log.debug(f"Trying {source}") + try: # NOTE: this really wants to _only_ wrap the authenticate()! + result = source.authenticate(transport) + succeeded = True + # TODO: 'except PartialAuthentication' is needed for 2FA and + # similar, as per old SSHClient.connect - it is the only way + # AuthHandler supplies access to the 'name-list' field from + # MSG_USERAUTH_FAILURE, at present. + except Exception as e: + result = e + # TODO: look at what this could possibly raise, we don't really + # want Exception here, right? just SSHException subclasses? or + # do we truly want to capture anything at all with assumption + # it's easy enough for users to look afterwards? + # NOTE: showing type, not message, for tersity & also most of + # the time it's basically just "Authentication failed." + source_class = e.__class__.__name__ + self.log.info( + f"Authentication via {source} failed with {source_class}" + ) + overall_result.append(SourceResult(source, result)) + if succeeded: + break + # Gotta die here if nothing worked, otherwise Transport's main loop + # just kinda hangs out until something times out! + if not succeeded: + raise AuthFailure(result=overall_result) + # Success: give back what was done, in case they care. + return overall_result + + # TODO: is there anything OpenSSH client does which _can't_ cleanly map to + # iterating a generator? diff --git a/venv/lib/python3.11/site-packages/paramiko/ber.py b/venv/lib/python3.11/site-packages/paramiko/ber.py new file mode 100644 index 0000000..b8287f5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/ber.py @@ -0,0 +1,139 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +from paramiko.common import max_byte, zero_byte, byte_ord, byte_chr + +import paramiko.util as util +from paramiko.util import b +from paramiko.sftp import int64 + + +class BERException(Exception): + pass + + +class BER: + """ + Robey's tiny little attempt at a BER decoder. + """ + + def __init__(self, content=bytes()): + self.content = b(content) + self.idx = 0 + + def asbytes(self): + return self.content + + def __str__(self): + return self.asbytes() + + def __repr__(self): + return "BER('" + repr(self.content) + "')" + + def decode(self): + return self.decode_next() + + def decode_next(self): + if self.idx >= len(self.content): + return None + ident = byte_ord(self.content[self.idx]) + self.idx += 1 + if (ident & 31) == 31: + # identifier > 30 + ident = 0 + while self.idx < len(self.content): + t = byte_ord(self.content[self.idx]) + self.idx += 1 + ident = (ident << 7) | (t & 0x7F) + if not (t & 0x80): + break + if self.idx >= len(self.content): + return None + # now fetch length + size = byte_ord(self.content[self.idx]) + self.idx += 1 + if size & 0x80: + # more complimicated... + # FIXME: theoretically should handle indefinite-length (0x80) + t = size & 0x7F + if self.idx + t > len(self.content): + return None + size = util.inflate_long( + self.content[self.idx : self.idx + t], True + ) + self.idx += t + if self.idx + size > len(self.content): + # can't fit + return None + data = self.content[self.idx : self.idx + size] + self.idx += size + # now switch on id + if ident == 0x30: + # sequence + return self.decode_sequence(data) + elif ident == 2: + # int + return util.inflate_long(data) + else: + # 1: boolean (00 false, otherwise true) + msg = "Unknown ber encoding type {:d} (robey is lazy)" + raise BERException(msg.format(ident)) + + @staticmethod + def decode_sequence(data): + out = [] + ber = BER(data) + while True: + x = ber.decode_next() + if x is None: + break + out.append(x) + return out + + def encode_tlv(self, ident, val): + # no need to support ident > 31 here + self.content += byte_chr(ident) + if len(val) > 0x7F: + lenstr = util.deflate_long(len(val)) + self.content += byte_chr(0x80 + len(lenstr)) + lenstr + else: + self.content += byte_chr(len(val)) + self.content += val + + def encode(self, x): + if type(x) is bool: + if x: + self.encode_tlv(1, max_byte) + else: + self.encode_tlv(1, zero_byte) + elif (type(x) is int) or (type(x) is int64): + self.encode_tlv(2, util.deflate_long(x)) + elif type(x) is str: + self.encode_tlv(4, x) + elif (type(x) is list) or (type(x) is tuple): + self.encode_tlv(0x30, self.encode_sequence(x)) + else: + raise BERException( + "Unknown type for encoding: {!r}".format(type(x)) + ) + + @staticmethod + def encode_sequence(data): + ber = BER() + for item in data: + ber.encode(item) + return ber.asbytes() diff --git a/venv/lib/python3.11/site-packages/paramiko/buffered_pipe.py b/venv/lib/python3.11/site-packages/paramiko/buffered_pipe.py new file mode 100644 index 0000000..c19279c --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/buffered_pipe.py @@ -0,0 +1,212 @@ +# Copyright (C) 2006-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Attempt to generalize the "feeder" part of a `.Channel`: an object which can be +read from and closed, but is reading from a buffer fed by another thread. The +read operations are blocking and can have a timeout set. +""" + +import array +import threading +import time +from paramiko.util import b + + +class PipeTimeout(IOError): + """ + Indicates that a timeout was reached on a read from a `.BufferedPipe`. + """ + + pass + + +class BufferedPipe: + """ + A buffer that obeys normal read (with timeout) & close semantics for a + file or socket, but is fed data from another thread. This is used by + `.Channel`. + """ + + def __init__(self): + self._lock = threading.Lock() + self._cv = threading.Condition(self._lock) + self._event = None + self._buffer = array.array("B") + self._closed = False + + def _buffer_frombytes(self, data): + self._buffer.frombytes(data) + + def _buffer_tobytes(self, limit=None): + return self._buffer[:limit].tobytes() + + def set_event(self, event): + """ + Set an event on this buffer. When data is ready to be read (or the + buffer has been closed), the event will be set. When no data is + ready, the event will be cleared. + + :param threading.Event event: the event to set/clear + """ + self._lock.acquire() + try: + self._event = event + # Make sure the event starts in `set` state if we appear to already + # be closed; otherwise, if we start in `clear` state & are closed, + # nothing will ever call `.feed` and the event (& OS pipe, if we're + # wrapping one - see `Channel.fileno`) will permanently stay in + # `clear`, causing deadlock if e.g. `select`ed upon. + if self._closed or len(self._buffer) > 0: + event.set() + else: + event.clear() + finally: + self._lock.release() + + def feed(self, data): + """ + Feed new data into this pipe. This method is assumed to be called + from a separate thread, so synchronization is done. + + :param data: the data to add, as a ``str`` or ``bytes`` + """ + self._lock.acquire() + try: + if self._event is not None: + self._event.set() + self._buffer_frombytes(b(data)) + self._cv.notify_all() + finally: + self._lock.release() + + def read_ready(self): + """ + Returns true if data is buffered and ready to be read from this + feeder. A ``False`` result does not mean that the feeder has closed; + it means you may need to wait before more data arrives. + + :return: + ``True`` if a `read` call would immediately return at least one + byte; ``False`` otherwise. + """ + self._lock.acquire() + try: + if len(self._buffer) == 0: + return False + return True + finally: + self._lock.release() + + def read(self, nbytes, timeout=None): + """ + Read data from the pipe. The return value is a string representing + the data received. The maximum amount of data to be received at once + is specified by ``nbytes``. If a string of length zero is returned, + the pipe has been closed. + + The optional ``timeout`` argument can be a nonnegative float expressing + seconds, or ``None`` for no timeout. If a float is given, a + `.PipeTimeout` will be raised if the timeout period value has elapsed + before any data arrives. + + :param int nbytes: maximum number of bytes to read + :param float timeout: + maximum seconds to wait (or ``None``, the default, to wait forever) + :return: the read data, as a ``str`` or ``bytes`` + + :raises: + `.PipeTimeout` -- if a timeout was specified and no data was ready + before that timeout + """ + out = bytes() + self._lock.acquire() + try: + if len(self._buffer) == 0: + if self._closed: + return out + # should we block? + if timeout == 0.0: + raise PipeTimeout() + # loop here in case we get woken up but a different thread has + # grabbed everything in the buffer. + while (len(self._buffer) == 0) and not self._closed: + then = time.time() + self._cv.wait(timeout) + if timeout is not None: + timeout -= time.time() - then + if timeout <= 0.0: + raise PipeTimeout() + + # something's in the buffer and we have the lock! + if len(self._buffer) <= nbytes: + out = self._buffer_tobytes() + del self._buffer[:] + if (self._event is not None) and not self._closed: + self._event.clear() + else: + out = self._buffer_tobytes(nbytes) + del self._buffer[:nbytes] + finally: + self._lock.release() + + return out + + def empty(self): + """ + Clear out the buffer and return all data that was in it. + + :return: + any data that was in the buffer prior to clearing it out, as a + `str` + """ + self._lock.acquire() + try: + out = self._buffer_tobytes() + del self._buffer[:] + if (self._event is not None) and not self._closed: + self._event.clear() + return out + finally: + self._lock.release() + + def close(self): + """ + Close this pipe object. Future calls to `read` after the buffer + has been emptied will return immediately with an empty string. + """ + self._lock.acquire() + try: + self._closed = True + self._cv.notify_all() + if self._event is not None: + self._event.set() + finally: + self._lock.release() + + def __len__(self): + """ + Return the number of bytes buffered. + + :return: number (`int`) of bytes buffered + """ + self._lock.acquire() + try: + return len(self._buffer) + finally: + self._lock.release() diff --git a/venv/lib/python3.11/site-packages/paramiko/channel.py b/venv/lib/python3.11/site-packages/paramiko/channel.py new file mode 100644 index 0000000..25326ca --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/channel.py @@ -0,0 +1,1390 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Abstraction for an SSH2 channel. +""" + +import binascii +import os +import socket +import time +import threading + +from functools import wraps + +from paramiko import util +from paramiko.common import ( + cMSG_CHANNEL_REQUEST, + cMSG_CHANNEL_WINDOW_ADJUST, + cMSG_CHANNEL_DATA, + cMSG_CHANNEL_EXTENDED_DATA, + DEBUG, + ERROR, + cMSG_CHANNEL_SUCCESS, + cMSG_CHANNEL_FAILURE, + cMSG_CHANNEL_EOF, + cMSG_CHANNEL_CLOSE, +) +from paramiko.message import Message +from paramiko.ssh_exception import SSHException +from paramiko.file import BufferedFile +from paramiko.buffered_pipe import BufferedPipe, PipeTimeout +from paramiko import pipe +from paramiko.util import ClosingContextManager + + +def open_only(func): + """ + Decorator for `.Channel` methods which performs an openness check. + + :raises: + `.SSHException` -- If the wrapped method is called on an unopened + `.Channel`. + """ + + @wraps(func) + def _check(self, *args, **kwds): + if ( + self.closed + or self.eof_received + or self.eof_sent + or not self.active + ): + raise SSHException("Channel is not open") + return func(self, *args, **kwds) + + return _check + + +class Channel(ClosingContextManager): + """ + A secure tunnel across an SSH `.Transport`. A Channel is meant to behave + like a socket, and has an API that should be indistinguishable from the + Python socket API. + + Because SSH2 has a windowing kind of flow control, if you stop reading data + from a Channel and its buffer fills up, the server will be unable to send + you any more data until you read some of it. (This won't affect other + channels on the same transport -- all channels on a single transport are + flow-controlled independently.) Similarly, if the server isn't reading + data you send, calls to `send` may block, unless you set a timeout. This + is exactly like a normal network socket, so it shouldn't be too surprising. + + Instances of this class may be used as context managers. + """ + + def __init__(self, chanid): + """ + Create a new channel. The channel is not associated with any + particular session or `.Transport` until the Transport attaches it. + Normally you would only call this method from the constructor of a + subclass of `.Channel`. + + :param int chanid: + the ID of this channel, as passed by an existing `.Transport`. + """ + #: Channel ID + self.chanid = chanid + #: Remote channel ID + self.remote_chanid = 0 + #: `.Transport` managing this channel + self.transport = None + #: Whether the connection is presently active + self.active = False + self.eof_received = 0 + self.eof_sent = 0 + self.in_buffer = BufferedPipe() + self.in_stderr_buffer = BufferedPipe() + self.timeout = None + #: Whether the connection has been closed + self.closed = False + self.ultra_debug = False + self.lock = threading.Lock() + self.out_buffer_cv = threading.Condition(self.lock) + self.in_window_size = 0 + self.out_window_size = 0 + self.in_max_packet_size = 0 + self.out_max_packet_size = 0 + self.in_window_threshold = 0 + self.in_window_sofar = 0 + self.status_event = threading.Event() + self._name = str(chanid) + self.logger = util.get_logger("paramiko.transport") + self._pipe = None + self.event = threading.Event() + self.event_ready = False + self.combine_stderr = False + self.exit_status = -1 + self.origin_addr = None + + def __del__(self): + try: + self.close() + except: + pass + + def __repr__(self): + """ + Return a string representation of this object, for debugging. + """ + out = " 0: + out += " in-buffer={}".format(len(self.in_buffer)) + out += " -> " + repr(self.transport) + out += ">" + return out + + @open_only + def get_pty( + self, + term="vt100", + width=80, + height=24, + width_pixels=0, + height_pixels=0, + ): + """ + Request a pseudo-terminal from the server. This is usually used right + after creating a client channel, to ask the server to provide some + basic terminal semantics for a shell invoked with `invoke_shell`. + It isn't necessary (or desirable) to call this method if you're going + to execute a single command with `exec_command`. + + :param str term: the terminal type to emulate + (for example, ``'vt100'``) + :param int width: width (in characters) of the terminal screen + :param int height: height (in characters) of the terminal screen + :param int width_pixels: width (in pixels) of the terminal screen + :param int height_pixels: height (in pixels) of the terminal screen + + :raises: + `.SSHException` -- if the request was rejected or the channel was + closed + """ + m = Message() + m.add_byte(cMSG_CHANNEL_REQUEST) + m.add_int(self.remote_chanid) + m.add_string("pty-req") + m.add_boolean(True) + m.add_string(term) + m.add_int(width) + m.add_int(height) + m.add_int(width_pixels) + m.add_int(height_pixels) + m.add_string(bytes()) + self._event_pending() + self.transport._send_user_message(m) + self._wait_for_event() + + @open_only + def invoke_shell(self): + """ + Request an interactive shell session on this channel. If the server + allows it, the channel will then be directly connected to the stdin, + stdout, and stderr of the shell. + + Normally you would call `get_pty` before this, in which case the + shell will operate through the pty, and the channel will be connected + to the stdin and stdout of the pty. + + When the shell exits, the channel will be closed and can't be reused. + You must open a new channel if you wish to open another shell. + + :raises: + `.SSHException` -- if the request was rejected or the channel was + closed + """ + m = Message() + m.add_byte(cMSG_CHANNEL_REQUEST) + m.add_int(self.remote_chanid) + m.add_string("shell") + m.add_boolean(True) + self._event_pending() + self.transport._send_user_message(m) + self._wait_for_event() + + @open_only + def exec_command(self, command): + """ + Execute a command on the server. If the server allows it, the channel + will then be directly connected to the stdin, stdout, and stderr of + the command being executed. + + When the command finishes executing, the channel will be closed and + can't be reused. You must open a new channel if you wish to execute + another command. + + :param str command: a shell command to execute. + + :raises: + `.SSHException` -- if the request was rejected or the channel was + closed + """ + m = Message() + m.add_byte(cMSG_CHANNEL_REQUEST) + m.add_int(self.remote_chanid) + m.add_string("exec") + m.add_boolean(True) + m.add_string(command) + self._event_pending() + self.transport._send_user_message(m) + self._wait_for_event() + + @open_only + def invoke_subsystem(self, subsystem): + """ + Request a subsystem on the server (for example, ``sftp``). If the + server allows it, the channel will then be directly connected to the + requested subsystem. + + When the subsystem finishes, the channel will be closed and can't be + reused. + + :param str subsystem: name of the subsystem being requested. + + :raises: + `.SSHException` -- if the request was rejected or the channel was + closed + """ + m = Message() + m.add_byte(cMSG_CHANNEL_REQUEST) + m.add_int(self.remote_chanid) + m.add_string("subsystem") + m.add_boolean(True) + m.add_string(subsystem) + self._event_pending() + self.transport._send_user_message(m) + self._wait_for_event() + + @open_only + def resize_pty(self, width=80, height=24, width_pixels=0, height_pixels=0): + """ + Resize the pseudo-terminal. This can be used to change the width and + height of the terminal emulation created in a previous `get_pty` call. + + :param int width: new width (in characters) of the terminal screen + :param int height: new height (in characters) of the terminal screen + :param int width_pixels: new width (in pixels) of the terminal screen + :param int height_pixels: new height (in pixels) of the terminal screen + + :raises: + `.SSHException` -- if the request was rejected or the channel was + closed + """ + m = Message() + m.add_byte(cMSG_CHANNEL_REQUEST) + m.add_int(self.remote_chanid) + m.add_string("window-change") + m.add_boolean(False) + m.add_int(width) + m.add_int(height) + m.add_int(width_pixels) + m.add_int(height_pixels) + self.transport._send_user_message(m) + + @open_only + def update_environment(self, environment): + """ + Updates this channel's remote shell environment. + + .. note:: + This operation is additive - i.e. the current environment is not + reset before the given environment variables are set. + + .. warning:: + Servers may silently reject some environment variables; see the + warning in `set_environment_variable` for details. + + :param dict environment: + a dictionary containing the name and respective values to set + :raises: + `.SSHException` -- if any of the environment variables was rejected + by the server or the channel was closed + """ + for name, value in environment.items(): + try: + self.set_environment_variable(name, value) + except SSHException as e: + err = 'Failed to set environment variable "{}".' + raise SSHException(err.format(name), e) + + @open_only + def set_environment_variable(self, name, value): + """ + Set the value of an environment variable. + + .. warning:: + The server may reject this request depending on its ``AcceptEnv`` + setting; such rejections will fail silently (which is common client + practice for this particular request type). Make sure you + understand your server's configuration before using! + + :param str name: name of the environment variable + :param str value: value of the environment variable + + :raises: + `.SSHException` -- if the request was rejected or the channel was + closed + """ + m = Message() + m.add_byte(cMSG_CHANNEL_REQUEST) + m.add_int(self.remote_chanid) + m.add_string("env") + m.add_boolean(False) + m.add_string(name) + m.add_string(value) + self.transport._send_user_message(m) + + def exit_status_ready(self): + """ + Return true if the remote process has exited and returned an exit + status. You may use this to poll the process status if you don't + want to block in `recv_exit_status`. Note that the server may not + return an exit status in some cases (like bad servers). + + :return: + ``True`` if `recv_exit_status` will return immediately, else + ``False``. + + .. versionadded:: 1.7.3 + """ + return self.closed or self.status_event.is_set() + + def recv_exit_status(self): + """ + Return the exit status from the process on the server. This is + mostly useful for retrieving the results of an `exec_command`. + If the command hasn't finished yet, this method will wait until + it does, or until the channel is closed. If no exit status is + provided by the server, -1 is returned. + + .. warning:: + In some situations, receiving remote output larger than the current + `.Transport` or session's ``window_size`` (e.g. that set by the + ``default_window_size`` kwarg for `.Transport.__init__`) will cause + `.recv_exit_status` to hang indefinitely if it is called prior to a + sufficiently large `.Channel.recv` (or if there are no threads + calling `.Channel.recv` in the background). + + In these cases, ensuring that `.recv_exit_status` is called *after* + `.Channel.recv` (or, again, using threads) can avoid the hang. + + :return: the exit code (as an `int`) of the process on the server. + + .. versionadded:: 1.2 + """ + self.status_event.wait() + assert self.status_event.is_set() + return self.exit_status + + def send_exit_status(self, status): + """ + Send the exit status of an executed command to the client. (This + really only makes sense in server mode.) Many clients expect to + get some sort of status code back from an executed command after + it completes. + + :param int status: the exit code of the process + + .. versionadded:: 1.2 + """ + # in many cases, the channel will not still be open here. + # that's fine. + m = Message() + m.add_byte(cMSG_CHANNEL_REQUEST) + m.add_int(self.remote_chanid) + m.add_string("exit-status") + m.add_boolean(False) + m.add_int(status) + self.transport._send_user_message(m) + + @open_only + def request_x11( + self, + screen_number=0, + auth_protocol=None, + auth_cookie=None, + single_connection=False, + handler=None, + ): + """ + Request an x11 session on this channel. If the server allows it, + further x11 requests can be made from the server to the client, + when an x11 application is run in a shell session. + + From :rfc:`4254`:: + + It is RECOMMENDED that the 'x11 authentication cookie' that is + sent be a fake, random cookie, and that the cookie be checked and + replaced by the real cookie when a connection request is received. + + If you omit the auth_cookie, a new secure random 128-bit value will be + generated, used, and returned. You will need to use this value to + verify incoming x11 requests and replace them with the actual local + x11 cookie (which requires some knowledge of the x11 protocol). + + If a handler is passed in, the handler is called from another thread + whenever a new x11 connection arrives. The default handler queues up + incoming x11 connections, which may be retrieved using + `.Transport.accept`. The handler's calling signature is:: + + handler(channel: Channel, (address: str, port: int)) + + :param int screen_number: the x11 screen number (0, 10, etc.) + :param str auth_protocol: + the name of the X11 authentication method used; if none is given, + ``"MIT-MAGIC-COOKIE-1"`` is used + :param str auth_cookie: + hexadecimal string containing the x11 auth cookie; if none is + given, a secure random 128-bit value is generated + :param bool single_connection: + if True, only a single x11 connection will be forwarded (by + default, any number of x11 connections can arrive over this + session) + :param handler: + an optional callable handler to use for incoming X11 connections + :return: the auth_cookie used + """ + if auth_protocol is None: + auth_protocol = "MIT-MAGIC-COOKIE-1" + if auth_cookie is None: + auth_cookie = binascii.hexlify(os.urandom(16)) + + m = Message() + m.add_byte(cMSG_CHANNEL_REQUEST) + m.add_int(self.remote_chanid) + m.add_string("x11-req") + m.add_boolean(True) + m.add_boolean(single_connection) + m.add_string(auth_protocol) + m.add_string(auth_cookie) + m.add_int(screen_number) + self._event_pending() + self.transport._send_user_message(m) + self._wait_for_event() + self.transport._set_x11_handler(handler) + return auth_cookie + + @open_only + def request_forward_agent(self, handler): + """ + Request for a forward SSH Agent on this channel. + This is only valid for an ssh-agent from OpenSSH !!! + + :param handler: + a required callable handler to use for incoming SSH Agent + connections + + :return: True if we are ok, else False + (at that time we always return ok) + + :raises: SSHException in case of channel problem. + """ + m = Message() + m.add_byte(cMSG_CHANNEL_REQUEST) + m.add_int(self.remote_chanid) + m.add_string("auth-agent-req@openssh.com") + m.add_boolean(False) + self.transport._send_user_message(m) + self.transport._set_forward_agent_handler(handler) + return True + + def get_transport(self): + """ + Return the `.Transport` associated with this channel. + """ + return self.transport + + def set_name(self, name): + """ + Set a name for this channel. Currently it's only used to set the name + of the channel in logfile entries. The name can be fetched with the + `get_name` method. + + :param str name: new channel name + """ + self._name = name + + def get_name(self): + """ + Get the name of this channel that was previously set by `set_name`. + """ + return self._name + + def get_id(self): + """ + Return the `int` ID # for this channel. + + The channel ID is unique across a `.Transport` and usually a small + number. It's also the number passed to + `.ServerInterface.check_channel_request` when determining whether to + accept a channel request in server mode. + """ + return self.chanid + + def set_combine_stderr(self, combine): + """ + Set whether stderr should be combined into stdout on this channel. + The default is ``False``, but in some cases it may be convenient to + have both streams combined. + + If this is ``False``, and `exec_command` is called (or ``invoke_shell`` + with no pty), output to stderr will not show up through the `recv` + and `recv_ready` calls. You will have to use `recv_stderr` and + `recv_stderr_ready` to get stderr output. + + If this is ``True``, data will never show up via `recv_stderr` or + `recv_stderr_ready`. + + :param bool combine: + ``True`` if stderr output should be combined into stdout on this + channel. + :return: the previous setting (a `bool`). + + .. versionadded:: 1.1 + """ + data = bytes() + self.lock.acquire() + try: + old = self.combine_stderr + self.combine_stderr = combine + if combine and not old: + # copy old stderr buffer into primary buffer + data = self.in_stderr_buffer.empty() + finally: + self.lock.release() + if len(data) > 0: + self._feed(data) + return old + + # ...socket API... + + def settimeout(self, timeout): + """ + Set a timeout on blocking read/write operations. The ``timeout`` + argument can be a nonnegative float expressing seconds, or ``None``. + If a float is given, subsequent channel read/write operations will + raise a timeout exception if the timeout period value has elapsed + before the operation has completed. Setting a timeout of ``None`` + disables timeouts on socket operations. + + ``chan.settimeout(0.0)`` is equivalent to ``chan.setblocking(0)``; + ``chan.settimeout(None)`` is equivalent to ``chan.setblocking(1)``. + + :param float timeout: + seconds to wait for a pending read/write operation before raising + ``socket.timeout``, or ``None`` for no timeout. + """ + self.timeout = timeout + + def gettimeout(self): + """ + Returns the timeout in seconds (as a float) associated with socket + operations, or ``None`` if no timeout is set. This reflects the last + call to `setblocking` or `settimeout`. + """ + return self.timeout + + def setblocking(self, blocking): + """ + Set blocking or non-blocking mode of the channel: if ``blocking`` is 0, + the channel is set to non-blocking mode; otherwise it's set to blocking + mode. Initially all channels are in blocking mode. + + In non-blocking mode, if a `recv` call doesn't find any data, or if a + `send` call can't immediately dispose of the data, an error exception + is raised. In blocking mode, the calls block until they can proceed. An + EOF condition is considered "immediate data" for `recv`, so if the + channel is closed in the read direction, it will never block. + + ``chan.setblocking(0)`` is equivalent to ``chan.settimeout(0)``; + ``chan.setblocking(1)`` is equivalent to ``chan.settimeout(None)``. + + :param int blocking: + 0 to set non-blocking mode; non-0 to set blocking mode. + """ + if blocking: + self.settimeout(None) + else: + self.settimeout(0.0) + + def getpeername(self): + """ + Return the address of the remote side of this Channel, if possible. + + This simply wraps `.Transport.getpeername`, used to provide enough of a + socket-like interface to allow asyncore to work. (asyncore likes to + call ``'getpeername'``.) + """ + return self.transport.getpeername() + + def close(self): + """ + Close the channel. All future read/write operations on the channel + will fail. The remote end will receive no more data (after queued data + is flushed). Channels are automatically closed when their `.Transport` + is closed or when they are garbage collected. + """ + self.lock.acquire() + try: + # only close the pipe when the user explicitly closes the channel. + # otherwise they will get unpleasant surprises. (and do it before + # checking self.closed, since the remote host may have already + # closed the connection.) + if self._pipe is not None: + self._pipe.close() + self._pipe = None + + if not self.active or self.closed: + return + msgs = self._close_internal() + finally: + self.lock.release() + for m in msgs: + if m is not None: + self.transport._send_user_message(m) + + def recv_ready(self): + """ + Returns true if data is buffered and ready to be read from this + channel. A ``False`` result does not mean that the channel has closed; + it means you may need to wait before more data arrives. + + :return: + ``True`` if a `recv` call on this channel would immediately return + at least one byte; ``False`` otherwise. + """ + return self.in_buffer.read_ready() + + def recv(self, nbytes): + """ + Receive data from the channel. The return value is a string + representing the data received. The maximum amount of data to be + received at once is specified by ``nbytes``. If a string of + length zero is returned, the channel stream has closed. + + :param int nbytes: maximum number of bytes to read. + :return: received data, as a `bytes`. + + :raises socket.timeout: + if no data is ready before the timeout set by `settimeout`. + """ + try: + out = self.in_buffer.read(nbytes, self.timeout) + except PipeTimeout: + raise socket.timeout() + + ack = self._check_add_window(len(out)) + # no need to hold the channel lock when sending this + if ack > 0: + m = Message() + m.add_byte(cMSG_CHANNEL_WINDOW_ADJUST) + m.add_int(self.remote_chanid) + m.add_int(ack) + self.transport._send_user_message(m) + + return out + + def recv_stderr_ready(self): + """ + Returns true if data is buffered and ready to be read from this + channel's stderr stream. Only channels using `exec_command` or + `invoke_shell` without a pty will ever have data on the stderr + stream. + + :return: + ``True`` if a `recv_stderr` call on this channel would immediately + return at least one byte; ``False`` otherwise. + + .. versionadded:: 1.1 + """ + return self.in_stderr_buffer.read_ready() + + def recv_stderr(self, nbytes): + """ + Receive data from the channel's stderr stream. Only channels using + `exec_command` or `invoke_shell` without a pty will ever have data + on the stderr stream. The return value is a string representing the + data received. The maximum amount of data to be received at once is + specified by ``nbytes``. If a string of length zero is returned, the + channel stream has closed. + + :param int nbytes: maximum number of bytes to read. + :return: received data as a `bytes` + + :raises socket.timeout: if no data is ready before the timeout set by + `settimeout`. + + .. versionadded:: 1.1 + """ + try: + out = self.in_stderr_buffer.read(nbytes, self.timeout) + except PipeTimeout: + raise socket.timeout() + + ack = self._check_add_window(len(out)) + # no need to hold the channel lock when sending this + if ack > 0: + m = Message() + m.add_byte(cMSG_CHANNEL_WINDOW_ADJUST) + m.add_int(self.remote_chanid) + m.add_int(ack) + self.transport._send_user_message(m) + + return out + + def send_ready(self): + """ + Returns true if data can be written to this channel without blocking. + This means the channel is either closed (so any write attempt would + return immediately) or there is at least one byte of space in the + outbound buffer. If there is at least one byte of space in the + outbound buffer, a `send` call will succeed immediately and return + the number of bytes actually written. + + :return: + ``True`` if a `send` call on this channel would immediately succeed + or fail + """ + self.lock.acquire() + try: + if self.closed or self.eof_sent: + return True + return self.out_window_size > 0 + finally: + self.lock.release() + + def send(self, s): + """ + Send data to the channel. Returns the number of bytes sent, or 0 if + the channel stream is closed. Applications are responsible for + checking that all data has been sent: if only some of the data was + transmitted, the application needs to attempt delivery of the remaining + data. + + :param bytes s: data to send + :return: number of bytes actually sent, as an `int` + + :raises socket.timeout: if no data could be sent before the timeout set + by `settimeout`. + """ + + m = Message() + m.add_byte(cMSG_CHANNEL_DATA) + m.add_int(self.remote_chanid) + return self._send(s, m) + + def send_stderr(self, s): + """ + Send data to the channel on the "stderr" stream. This is normally + only used by servers to send output from shell commands -- clients + won't use this. Returns the number of bytes sent, or 0 if the channel + stream is closed. Applications are responsible for checking that all + data has been sent: if only some of the data was transmitted, the + application needs to attempt delivery of the remaining data. + + :param bytes s: data to send. + :return: number of bytes actually sent, as an `int`. + + :raises socket.timeout: + if no data could be sent before the timeout set by `settimeout`. + + .. versionadded:: 1.1 + """ + + m = Message() + m.add_byte(cMSG_CHANNEL_EXTENDED_DATA) + m.add_int(self.remote_chanid) + m.add_int(1) + return self._send(s, m) + + def sendall(self, s): + """ + Send data to the channel, without allowing partial results. Unlike + `send`, this method continues to send data from the given string until + either all data has been sent or an error occurs. Nothing is returned. + + :param bytes s: data to send. + + :raises socket.timeout: + if sending stalled for longer than the timeout set by `settimeout`. + :raises socket.error: + if an error occurred before the entire string was sent. + + .. note:: + If the channel is closed while only part of the data has been + sent, there is no way to determine how much data (if any) was sent. + This is irritating, but identically follows Python's API. + """ + while s: + sent = self.send(s) + s = s[sent:] + return None + + def sendall_stderr(self, s): + """ + Send data to the channel's "stderr" stream, without allowing partial + results. Unlike `send_stderr`, this method continues to send data + from the given bytestring until all data has been sent or an error + occurs. Nothing is returned. + + :param bytes s: data to send to the client as "stderr" output. + + :raises socket.timeout: + if sending stalled for longer than the timeout set by `settimeout`. + :raises socket.error: + if an error occurred before the entire string was sent. + + .. versionadded:: 1.1 + """ + while s: + sent = self.send_stderr(s) + s = s[sent:] + return None + + def makefile(self, *params): + """ + Return a file-like object associated with this channel. The optional + ``mode`` and ``bufsize`` arguments are interpreted the same way as by + the built-in ``file()`` function in Python. + + :return: `.ChannelFile` object which can be used for Python file I/O. + """ + return ChannelFile(*([self] + list(params))) + + def makefile_stderr(self, *params): + """ + Return a file-like object associated with this channel's stderr + stream. Only channels using `exec_command` or `invoke_shell` + without a pty will ever have data on the stderr stream. + + The optional ``mode`` and ``bufsize`` arguments are interpreted the + same way as by the built-in ``file()`` function in Python. For a + client, it only makes sense to open this file for reading. For a + server, it only makes sense to open this file for writing. + + :returns: + `.ChannelStderrFile` object which can be used for Python file I/O. + + .. versionadded:: 1.1 + """ + return ChannelStderrFile(*([self] + list(params))) + + def makefile_stdin(self, *params): + """ + Return a file-like object associated with this channel's stdin + stream. + + The optional ``mode`` and ``bufsize`` arguments are interpreted the + same way as by the built-in ``file()`` function in Python. For a + client, it only makes sense to open this file for writing. For a + server, it only makes sense to open this file for reading. + + :returns: + `.ChannelStdinFile` object which can be used for Python file I/O. + + .. versionadded:: 2.6 + """ + return ChannelStdinFile(*([self] + list(params))) + + def fileno(self): + """ + Returns an OS-level file descriptor which can be used for polling, but + but not for reading or writing. This is primarily to allow Python's + ``select`` module to work. + + The first time ``fileno`` is called on a channel, a pipe is created to + simulate real OS-level file descriptor (FD) behavior. Because of this, + two OS-level FDs are created, which will use up FDs faster than normal. + (You won't notice this effect unless you have hundreds of channels + open at the same time.) + + :return: an OS-level file descriptor (`int`) + + .. warning:: + This method causes channel reads to be slightly less efficient. + """ + self.lock.acquire() + try: + if self._pipe is not None: + return self._pipe.fileno() + # create the pipe and feed in any existing data + self._pipe = pipe.make_pipe() + p1, p2 = pipe.make_or_pipe(self._pipe) + self.in_buffer.set_event(p1) + self.in_stderr_buffer.set_event(p2) + return self._pipe.fileno() + finally: + self.lock.release() + + def shutdown(self, how): + """ + Shut down one or both halves of the connection. If ``how`` is 0, + further receives are disallowed. If ``how`` is 1, further sends + are disallowed. If ``how`` is 2, further sends and receives are + disallowed. This closes the stream in one or both directions. + + :param int how: + 0 (stop receiving), 1 (stop sending), or 2 (stop receiving and + sending). + """ + if (how == 0) or (how == 2): + # feign "read" shutdown + self.eof_received = 1 + if (how == 1) or (how == 2): + self.lock.acquire() + try: + m = self._send_eof() + finally: + self.lock.release() + if m is not None and self.transport is not None: + self.transport._send_user_message(m) + + def shutdown_read(self): + """ + Shutdown the receiving side of this socket, closing the stream in + the incoming direction. After this call, future reads on this + channel will fail instantly. This is a convenience method, equivalent + to ``shutdown(0)``, for people who don't make it a habit to + memorize unix constants from the 1970s. + + .. versionadded:: 1.2 + """ + self.shutdown(0) + + def shutdown_write(self): + """ + Shutdown the sending side of this socket, closing the stream in + the outgoing direction. After this call, future writes on this + channel will fail instantly. This is a convenience method, equivalent + to ``shutdown(1)``, for people who don't make it a habit to + memorize unix constants from the 1970s. + + .. versionadded:: 1.2 + """ + self.shutdown(1) + + @property + def _closed(self): + # Concession to Python 3's socket API, which has a private ._closed + # attribute instead of a semipublic .closed attribute. + return self.closed + + # ...calls from Transport + + def _set_transport(self, transport): + self.transport = transport + self.logger = util.get_logger(self.transport.get_log_channel()) + + def _set_window(self, window_size, max_packet_size): + self.in_window_size = window_size + self.in_max_packet_size = max_packet_size + # threshold of bytes we receive before we bother to send + # a window update + self.in_window_threshold = window_size // 10 + self.in_window_sofar = 0 + self._log(DEBUG, "Max packet in: {} bytes".format(max_packet_size)) + + def _set_remote_channel(self, chanid, window_size, max_packet_size): + self.remote_chanid = chanid + self.out_window_size = window_size + self.out_max_packet_size = self.transport._sanitize_packet_size( + max_packet_size + ) + self.active = 1 + self._log( + DEBUG, "Max packet out: {} bytes".format(self.out_max_packet_size) + ) + + def _request_success(self, m): + self._log(DEBUG, "Sesch channel {} request ok".format(self.chanid)) + self.event_ready = True + self.event.set() + return + + def _request_failed(self, m): + self.lock.acquire() + try: + msgs = self._close_internal() + finally: + self.lock.release() + for m in msgs: + if m is not None: + self.transport._send_user_message(m) + + def _feed(self, m): + if isinstance(m, bytes): + # passed from _feed_extended + s = m + else: + s = m.get_binary() + self.in_buffer.feed(s) + + def _feed_extended(self, m): + code = m.get_int() + s = m.get_binary() + if code != 1: + self._log( + ERROR, "unknown extended_data type {}; discarding".format(code) + ) + return + if self.combine_stderr: + self._feed(s) + else: + self.in_stderr_buffer.feed(s) + + def _window_adjust(self, m): + nbytes = m.get_int() + self.lock.acquire() + try: + if self.ultra_debug: + self._log(DEBUG, "window up {}".format(nbytes)) + self.out_window_size += nbytes + self.out_buffer_cv.notify_all() + finally: + self.lock.release() + + def _handle_request(self, m): + key = m.get_text() + want_reply = m.get_boolean() + server = self.transport.server_object + ok = False + if key == "exit-status": + self.exit_status = m.get_int() + self.status_event.set() + ok = True + elif key == "xon-xoff": + # ignore + ok = True + elif key == "pty-req": + term = m.get_string() + width = m.get_int() + height = m.get_int() + pixelwidth = m.get_int() + pixelheight = m.get_int() + modes = m.get_string() + if server is None: + ok = False + else: + ok = server.check_channel_pty_request( + self, term, width, height, pixelwidth, pixelheight, modes + ) + elif key == "shell": + if server is None: + ok = False + else: + ok = server.check_channel_shell_request(self) + elif key == "env": + name = m.get_string() + value = m.get_string() + if server is None: + ok = False + else: + ok = server.check_channel_env_request(self, name, value) + elif key == "exec": + cmd = m.get_string() + if server is None: + ok = False + else: + ok = server.check_channel_exec_request(self, cmd) + elif key == "subsystem": + name = m.get_text() + if server is None: + ok = False + else: + ok = server.check_channel_subsystem_request(self, name) + elif key == "window-change": + width = m.get_int() + height = m.get_int() + pixelwidth = m.get_int() + pixelheight = m.get_int() + if server is None: + ok = False + else: + ok = server.check_channel_window_change_request( + self, width, height, pixelwidth, pixelheight + ) + elif key == "x11-req": + single_connection = m.get_boolean() + auth_proto = m.get_text() + auth_cookie = m.get_binary() + screen_number = m.get_int() + if server is None: + ok = False + else: + ok = server.check_channel_x11_request( + self, + single_connection, + auth_proto, + auth_cookie, + screen_number, + ) + elif key == "auth-agent-req@openssh.com": + if server is None: + ok = False + else: + ok = server.check_channel_forward_agent_request(self) + else: + self._log(DEBUG, 'Unhandled channel request "{}"'.format(key)) + ok = False + if want_reply: + m = Message() + if ok: + m.add_byte(cMSG_CHANNEL_SUCCESS) + else: + m.add_byte(cMSG_CHANNEL_FAILURE) + m.add_int(self.remote_chanid) + self.transport._send_user_message(m) + + def _handle_eof(self, m): + self.lock.acquire() + try: + if not self.eof_received: + self.eof_received = True + self.in_buffer.close() + self.in_stderr_buffer.close() + if self._pipe is not None: + self._pipe.set_forever() + finally: + self.lock.release() + self._log(DEBUG, "EOF received ({})".format(self._name)) + + def _handle_close(self, m): + self.lock.acquire() + try: + msgs = self._close_internal() + self.transport._unlink_channel(self.chanid) + finally: + self.lock.release() + for m in msgs: + if m is not None: + self.transport._send_user_message(m) + + # ...internals... + + def _send(self, s, m): + size = len(s) + self.lock.acquire() + try: + if self.closed: + # this doesn't seem useful, but it is the documented behavior + # of Socket + raise socket.error("Socket is closed") + size = self._wait_for_send_window(size) + if size == 0: + # eof or similar + return 0 + m.add_string(s[:size]) + finally: + self.lock.release() + # Note: We release self.lock before calling _send_user_message. + # Otherwise, we can deadlock during re-keying. + self.transport._send_user_message(m) + return size + + def _log(self, level, msg, *args): + self.logger.log(level, "[chan " + self._name + "] " + msg, *args) + + def _event_pending(self): + self.event.clear() + self.event_ready = False + + def _wait_for_event(self): + self.event.wait() + assert self.event.is_set() + if self.event_ready: + return + e = self.transport.get_exception() + if e is None: + e = SSHException("Channel closed.") + raise e + + def _set_closed(self): + # you are holding the lock. + self.closed = True + self.in_buffer.close() + self.in_stderr_buffer.close() + self.out_buffer_cv.notify_all() + # Notify any waiters that we are closed + self.event.set() + self.status_event.set() + if self._pipe is not None: + self._pipe.set_forever() + + def _send_eof(self): + # you are holding the lock. + if self.eof_sent: + return None + m = Message() + m.add_byte(cMSG_CHANNEL_EOF) + m.add_int(self.remote_chanid) + self.eof_sent = True + self._log(DEBUG, "EOF sent ({})".format(self._name)) + return m + + def _close_internal(self): + # you are holding the lock. + if not self.active or self.closed: + return None, None + m1 = self._send_eof() + m2 = Message() + m2.add_byte(cMSG_CHANNEL_CLOSE) + m2.add_int(self.remote_chanid) + self._set_closed() + # can't unlink from the Transport yet -- the remote side may still + # try to send meta-data (exit-status, etc) + return m1, m2 + + def _unlink(self): + # server connection could die before we become active: + # still signal the close! + if self.closed: + return + self.lock.acquire() + try: + self._set_closed() + self.transport._unlink_channel(self.chanid) + finally: + self.lock.release() + + def _check_add_window(self, n): + self.lock.acquire() + try: + if self.closed or self.eof_received or not self.active: + return 0 + if self.ultra_debug: + self._log(DEBUG, "addwindow {}".format(n)) + self.in_window_sofar += n + if self.in_window_sofar <= self.in_window_threshold: + return 0 + if self.ultra_debug: + self._log( + DEBUG, "addwindow send {}".format(self.in_window_sofar) + ) + out = self.in_window_sofar + self.in_window_sofar = 0 + return out + finally: + self.lock.release() + + def _wait_for_send_window(self, size): + """ + (You are already holding the lock.) + Wait for the send window to open up, and allocate up to ``size`` bytes + for transmission. If no space opens up before the timeout, a timeout + exception is raised. Returns the number of bytes available to send + (may be less than requested). + """ + # you are already holding the lock + if self.closed or self.eof_sent: + return 0 + if self.out_window_size == 0: + # should we block? + if self.timeout == 0.0: + raise socket.timeout() + # loop here in case we get woken up but a different thread has + # filled the buffer + timeout = self.timeout + while self.out_window_size == 0: + if self.closed or self.eof_sent: + return 0 + then = time.time() + self.out_buffer_cv.wait(timeout) + if timeout is not None: + timeout -= time.time() - then + if timeout <= 0.0: + raise socket.timeout() + # we have some window to squeeze into + if self.closed or self.eof_sent: + return 0 + if self.out_window_size < size: + size = self.out_window_size + if self.out_max_packet_size - 64 < size: + size = self.out_max_packet_size - 64 + self.out_window_size -= size + if self.ultra_debug: + self._log(DEBUG, "window down to {}".format(self.out_window_size)) + return size + + +class ChannelFile(BufferedFile): + """ + A file-like wrapper around `.Channel`. A ChannelFile is created by calling + `Channel.makefile`. + + .. warning:: + To correctly emulate the file object created from a socket's `makefile + ` method, a `.Channel` and its + `.ChannelFile` should be able to be closed or garbage-collected + independently. Currently, closing the `ChannelFile` does nothing but + flush the buffer. + """ + + def __init__(self, channel, mode="r", bufsize=-1): + self.channel = channel + BufferedFile.__init__(self) + self._set_mode(mode, bufsize) + + def __repr__(self): + """ + Returns a string representation of this object, for debugging. + """ + return "" + + def _read(self, size): + return self.channel.recv(size) + + def _write(self, data): + self.channel.sendall(data) + return len(data) + + +class ChannelStderrFile(ChannelFile): + """ + A file-like wrapper around `.Channel` stderr. + + See `Channel.makefile_stderr` for details. + """ + + def _read(self, size): + return self.channel.recv_stderr(size) + + def _write(self, data): + self.channel.sendall_stderr(data) + return len(data) + + +class ChannelStdinFile(ChannelFile): + """ + A file-like wrapper around `.Channel` stdin. + + See `Channel.makefile_stdin` for details. + """ + + def close(self): + super().close() + self.channel.shutdown_write() diff --git a/venv/lib/python3.11/site-packages/paramiko/client.py b/venv/lib/python3.11/site-packages/paramiko/client.py new file mode 100644 index 0000000..d8be910 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/client.py @@ -0,0 +1,893 @@ +# Copyright (C) 2006-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +SSH client & key policies +""" + +from binascii import hexlify +import getpass +import inspect +import os +import socket +import warnings +from errno import ECONNREFUSED, EHOSTUNREACH + +from paramiko.agent import Agent +from paramiko.common import DEBUG +from paramiko.config import SSH_PORT +from paramiko.dsskey import DSSKey +from paramiko.ecdsakey import ECDSAKey +from paramiko.ed25519key import Ed25519Key +from paramiko.hostkeys import HostKeys +from paramiko.rsakey import RSAKey +from paramiko.ssh_exception import ( + SSHException, + BadHostKeyException, + NoValidConnectionsError, +) +from paramiko.transport import Transport +from paramiko.util import ClosingContextManager + + +class SSHClient(ClosingContextManager): + """ + A high-level representation of a session with an SSH server. This class + wraps `.Transport`, `.Channel`, and `.SFTPClient` to take care of most + aspects of authenticating and opening channels. A typical use case is:: + + client = SSHClient() + client.load_system_host_keys() + client.connect('ssh.example.com') + stdin, stdout, stderr = client.exec_command('ls -l') + + You may pass in explicit overrides for authentication and server host key + checking. The default mechanism is to try to use local key files or an + SSH agent (if one is running). + + Instances of this class may be used as context managers. + + .. versionadded:: 1.6 + """ + + def __init__(self): + """ + Create a new SSHClient. + """ + self._system_host_keys = HostKeys() + self._host_keys = HostKeys() + self._host_keys_filename = None + self._log_channel = None + self._policy = RejectPolicy() + self._transport = None + self._agent = None + + def load_system_host_keys(self, filename=None): + """ + Load host keys from a system (read-only) file. Host keys read with + this method will not be saved back by `save_host_keys`. + + This method can be called multiple times. Each new set of host keys + will be merged with the existing set (new replacing old if there are + conflicts). + + If ``filename`` is left as ``None``, an attempt will be made to read + keys from the user's local "known hosts" file, as used by OpenSSH, + and no exception will be raised if the file can't be read. This is + probably only useful on posix. + + :param str filename: the filename to read, or ``None`` + + :raises: ``IOError`` -- + if a filename was provided and the file could not be read + """ + if filename is None: + # try the user's .ssh key file, and mask exceptions + filename = os.path.expanduser("~/.ssh/known_hosts") + try: + self._system_host_keys.load(filename) + except IOError: + pass + return + self._system_host_keys.load(filename) + + def load_host_keys(self, filename): + """ + Load host keys from a local host-key file. Host keys read with this + method will be checked after keys loaded via `load_system_host_keys`, + but will be saved back by `save_host_keys` (so they can be modified). + The missing host key policy `.AutoAddPolicy` adds keys to this set and + saves them, when connecting to a previously-unknown server. + + This method can be called multiple times. Each new set of host keys + will be merged with the existing set (new replacing old if there are + conflicts). When automatically saving, the last hostname is used. + + :param str filename: the filename to read + + :raises: ``IOError`` -- if the filename could not be read + """ + self._host_keys_filename = filename + self._host_keys.load(filename) + + def save_host_keys(self, filename): + """ + Save the host keys back to a file. Only the host keys loaded with + `load_host_keys` (plus any added directly) will be saved -- not any + host keys loaded with `load_system_host_keys`. + + :param str filename: the filename to save to + + :raises: ``IOError`` -- if the file could not be written + """ + + # update local host keys from file (in case other SSH clients + # have written to the known_hosts file meanwhile. + if self._host_keys_filename is not None: + self.load_host_keys(self._host_keys_filename) + + with open(filename, "w") as f: + for hostname, keys in self._host_keys.items(): + for keytype, key in keys.items(): + f.write( + "{} {} {}\n".format( + hostname, keytype, key.get_base64() + ) + ) + + def get_host_keys(self): + """ + Get the local `.HostKeys` object. This can be used to examine the + local host keys or change them. + + :return: the local host keys as a `.HostKeys` object. + """ + return self._host_keys + + def set_log_channel(self, name): + """ + Set the channel for logging. The default is ``"paramiko.transport"`` + but it can be set to anything you want. + + :param str name: new channel name for logging + """ + self._log_channel = name + + def set_missing_host_key_policy(self, policy): + """ + Set policy to use when connecting to servers without a known host key. + + Specifically: + + * A **policy** is a "policy class" (or instance thereof), namely some + subclass of `.MissingHostKeyPolicy` such as `.RejectPolicy` (the + default), `.AutoAddPolicy`, `.WarningPolicy`, or a user-created + subclass. + * A host key is **known** when it appears in the client object's cached + host keys structures (those manipulated by `load_system_host_keys` + and/or `load_host_keys`). + + :param .MissingHostKeyPolicy policy: + the policy to use when receiving a host key from a + previously-unknown server + """ + if inspect.isclass(policy): + policy = policy() + self._policy = policy + + def _families_and_addresses(self, hostname, port): + """ + Yield pairs of address families and addresses to try for connecting. + + :param str hostname: the server to connect to + :param int port: the server port to connect to + :returns: Yields an iterable of ``(family, address)`` tuples + """ + guess = True + addrinfos = socket.getaddrinfo( + hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM + ) + for (family, socktype, proto, canonname, sockaddr) in addrinfos: + if socktype == socket.SOCK_STREAM: + yield family, sockaddr + guess = False + + # some OS like AIX don't indicate SOCK_STREAM support, so just + # guess. :( We only do this if we did not get a single result marked + # as socktype == SOCK_STREAM. + if guess: + for family, _, _, _, sockaddr in addrinfos: + yield family, sockaddr + + def connect( + self, + hostname, + port=SSH_PORT, + username=None, + password=None, + pkey=None, + key_filename=None, + timeout=None, + allow_agent=True, + look_for_keys=True, + compress=False, + sock=None, + gss_auth=False, + gss_kex=False, + gss_deleg_creds=True, + gss_host=None, + banner_timeout=None, + auth_timeout=None, + channel_timeout=None, + gss_trust_dns=True, + passphrase=None, + disabled_algorithms=None, + transport_factory=None, + auth_strategy=None, + ): + """ + Connect to an SSH server and authenticate to it. The server's host key + is checked against the system host keys (see `load_system_host_keys`) + and any local host keys (`load_host_keys`). If the server's hostname + is not found in either set of host keys, the missing host key policy + is used (see `set_missing_host_key_policy`). The default policy is + to reject the key and raise an `.SSHException`. + + Authentication is attempted in the following order of priority: + + - The ``pkey`` or ``key_filename`` passed in (if any) + + - ``key_filename`` may contain OpenSSH public certificate paths + as well as regular private-key paths; when files ending in + ``-cert.pub`` are found, they are assumed to match a private + key, and both components will be loaded. (The private key + itself does *not* need to be listed in ``key_filename`` for + this to occur - *just* the certificate.) + + - Any key we can find through an SSH agent + - Any "id_rsa", "id_dsa" or "id_ecdsa" key discoverable in + ``~/.ssh/`` + + - When OpenSSH-style public certificates exist that match an + existing such private key (so e.g. one has ``id_rsa`` and + ``id_rsa-cert.pub``) the certificate will be loaded alongside + the private key and used for authentication. + + - Plain username/password auth, if a password was given + + If a private key requires a password to unlock it, and a password is + passed in, that password will be used to attempt to unlock the key. + + :param str hostname: the server to connect to + :param int port: the server port to connect to + :param str username: + the username to authenticate as (defaults to the current local + username) + :param str password: + Used for password authentication; is also used for private key + decryption if ``passphrase`` is not given. + :param str passphrase: + Used for decrypting private keys. + :param .PKey pkey: an optional private key to use for authentication + :param str key_filename: + the filename, or list of filenames, of optional private key(s) + and/or certs to try for authentication + :param float timeout: + an optional timeout (in seconds) for the TCP connect + :param bool allow_agent: + set to False to disable connecting to the SSH agent + :param bool look_for_keys: + set to False to disable searching for discoverable private key + files in ``~/.ssh/`` + :param bool compress: set to True to turn on compression + :param socket sock: + an open socket or socket-like object (such as a `.Channel`) to use + for communication to the target host + :param bool gss_auth: + ``True`` if you want to use GSS-API authentication + :param bool gss_kex: + Perform GSS-API Key Exchange and user authentication + :param bool gss_deleg_creds: Delegate GSS-API client credentials or not + :param str gss_host: + The targets name in the kerberos database. default: hostname + :param bool gss_trust_dns: + Indicates whether or not the DNS is trusted to securely + canonicalize the name of the host being connected to (default + ``True``). + :param float banner_timeout: an optional timeout (in seconds) to wait + for the SSH banner to be presented. + :param float auth_timeout: an optional timeout (in seconds) to wait for + an authentication response. + :param float channel_timeout: an optional timeout (in seconds) to wait + for a channel open response. + :param dict disabled_algorithms: + an optional dict passed directly to `.Transport` and its keyword + argument of the same name. + :param transport_factory: + an optional callable which is handed a subset of the constructor + arguments (primarily those related to the socket, GSS + functionality, and algorithm selection) and generates a + `.Transport` instance to be used by this client. Defaults to + `.Transport.__init__`. + :param auth_strategy: + an optional instance of `.AuthStrategy`, triggering use of this + newer authentication mechanism instead of SSHClient's legacy auth + method. + + .. warning:: + This parameter is **incompatible** with all other + authentication-related parameters (such as, but not limited to, + ``password``, ``key_filename`` and ``allow_agent``) and will + trigger an exception if given alongside them. + + :returns: + `.AuthResult` if ``auth_strategy`` is non-``None``; otherwise, + returns ``None``. + + :raises BadHostKeyException: + if the server's host key could not be verified. + :raises AuthenticationException: + if authentication failed. + :raises UnableToAuthenticate: + if authentication failed (when ``auth_strategy`` is non-``None``; + and note that this is a subclass of ``AuthenticationException``). + :raises socket.error: + if a socket error (other than connection-refused or + host-unreachable) occurred while connecting. + :raises NoValidConnectionsError: + if all valid connection targets for the requested hostname (eg IPv4 + and IPv6) yielded connection-refused or host-unreachable socket + errors. + :raises SSHException: + if there was any other error connecting or establishing an SSH + session. + + .. versionchanged:: 1.15 + Added the ``banner_timeout``, ``gss_auth``, ``gss_kex``, + ``gss_deleg_creds`` and ``gss_host`` arguments. + .. versionchanged:: 2.3 + Added the ``gss_trust_dns`` argument. + .. versionchanged:: 2.4 + Added the ``passphrase`` argument. + .. versionchanged:: 2.6 + Added the ``disabled_algorithms`` argument. + .. versionchanged:: 2.12 + Added the ``transport_factory`` argument. + .. versionchanged:: 3.2 + Added the ``auth_strategy`` argument. + """ + if not sock: + errors = {} + # Try multiple possible address families (e.g. IPv4 vs IPv6) + to_try = list(self._families_and_addresses(hostname, port)) + for af, addr in to_try: + try: + sock = socket.socket(af, socket.SOCK_STREAM) + if timeout is not None: + try: + sock.settimeout(timeout) + except: + pass + sock.connect(addr) + # Break out of the loop on success + break + except socket.error as e: + # As mentioned in socket docs it is better + # to close sockets explicitly + if sock: + sock.close() + # Raise anything that isn't a straight up connection error + # (such as a resolution error) + if e.errno not in (ECONNREFUSED, EHOSTUNREACH): + raise + # Capture anything else so we know how the run looks once + # iteration is complete. Retain info about which attempt + # this was. + errors[addr] = e + + # Make sure we explode usefully if no address family attempts + # succeeded. We've no way of knowing which error is the "right" + # one, so we construct a hybrid exception containing all the real + # ones, of a subclass that client code should still be watching for + # (socket.error) + if len(errors) == len(to_try): + raise NoValidConnectionsError(errors) + + if transport_factory is None: + transport_factory = Transport + t = self._transport = transport_factory( + sock, + gss_kex=gss_kex, + gss_deleg_creds=gss_deleg_creds, + disabled_algorithms=disabled_algorithms, + ) + t.use_compression(compress=compress) + t.set_gss_host( + # t.hostname may be None, but GSS-API requires a target name. + # Therefore use hostname as fallback. + gss_host=gss_host or hostname, + trust_dns=gss_trust_dns, + gssapi_requested=gss_auth or gss_kex, + ) + if self._log_channel is not None: + t.set_log_channel(self._log_channel) + if banner_timeout is not None: + t.banner_timeout = banner_timeout + if auth_timeout is not None: + t.auth_timeout = auth_timeout + if channel_timeout is not None: + t.channel_timeout = channel_timeout + + if port == SSH_PORT: + server_hostkey_name = hostname + else: + server_hostkey_name = "[{}]:{}".format(hostname, port) + our_server_keys = None + + our_server_keys = self._system_host_keys.get(server_hostkey_name) + if our_server_keys is None: + our_server_keys = self._host_keys.get(server_hostkey_name) + if our_server_keys is not None: + keytype = our_server_keys.keys()[0] + sec_opts = t.get_security_options() + other_types = [x for x in sec_opts.key_types if x != keytype] + sec_opts.key_types = [keytype] + other_types + + t.start_client(timeout=timeout) + + # If GSS-API Key Exchange is performed we are not required to check the + # host key, because the host is authenticated via GSS-API / SSPI as + # well as our client. + if not self._transport.gss_kex_used: + server_key = t.get_remote_server_key() + if our_server_keys is None: + # will raise exception if the key is rejected + self._policy.missing_host_key( + self, server_hostkey_name, server_key + ) + else: + our_key = our_server_keys.get(server_key.get_name()) + if our_key != server_key: + if our_key is None: + our_key = list(our_server_keys.values())[0] + raise BadHostKeyException(hostname, server_key, our_key) + + if username is None: + username = getpass.getuser() + + # New auth flow! + if auth_strategy is not None: + return auth_strategy.authenticate(transport=t) + + # Old auth flow! + if key_filename is None: + key_filenames = [] + elif isinstance(key_filename, str): + key_filenames = [key_filename] + else: + key_filenames = key_filename + + self._auth( + username, + password, + pkey, + key_filenames, + allow_agent, + look_for_keys, + gss_auth, + gss_kex, + gss_deleg_creds, + t.gss_host, + passphrase, + ) + + def close(self): + """ + Close this SSHClient and its underlying `.Transport`. + + This should be called anytime you are done using the client object. + + .. warning:: + Paramiko registers garbage collection hooks that will try to + automatically close connections for you, but this is not presently + reliable. Failure to explicitly close your client after use may + lead to end-of-process hangs! + """ + if self._transport is None: + return + self._transport.close() + self._transport = None + + if self._agent is not None: + self._agent.close() + self._agent = None + + def exec_command( + self, + command, + bufsize=-1, + timeout=None, + get_pty=False, + environment=None, + ): + """ + Execute a command on the SSH server. A new `.Channel` is opened and + the requested command is executed. The command's input and output + streams are returned as Python ``file``-like objects representing + stdin, stdout, and stderr. + + :param str command: the command to execute + :param int bufsize: + interpreted the same way as by the built-in ``file()`` function in + Python + :param int timeout: + set command's channel timeout. See `.Channel.settimeout` + :param bool get_pty: + Request a pseudo-terminal from the server (default ``False``). + See `.Channel.get_pty` + :param dict environment: + a dict of shell environment variables, to be merged into the + default environment that the remote command executes within. + + .. warning:: + Servers may silently reject some environment variables; see the + warning in `.Channel.set_environment_variable` for details. + + :return: + the stdin, stdout, and stderr of the executing command, as a + 3-tuple + + :raises: `.SSHException` -- if the server fails to execute the command + + .. versionchanged:: 1.10 + Added the ``get_pty`` kwarg. + """ + chan = self._transport.open_session(timeout=timeout) + if get_pty: + chan.get_pty() + chan.settimeout(timeout) + if environment: + chan.update_environment(environment) + chan.exec_command(command) + stdin = chan.makefile_stdin("wb", bufsize) + stdout = chan.makefile("r", bufsize) + stderr = chan.makefile_stderr("r", bufsize) + return stdin, stdout, stderr + + def invoke_shell( + self, + term="vt100", + width=80, + height=24, + width_pixels=0, + height_pixels=0, + environment=None, + ): + """ + Start an interactive shell session on the SSH server. A new `.Channel` + is opened and connected to a pseudo-terminal using the requested + terminal type and size. + + :param str term: + the terminal type to emulate (for example, ``"vt100"``) + :param int width: the width (in characters) of the terminal window + :param int height: the height (in characters) of the terminal window + :param int width_pixels: the width (in pixels) of the terminal window + :param int height_pixels: the height (in pixels) of the terminal window + :param dict environment: the command's environment + :return: a new `.Channel` connected to the remote shell + + :raises: `.SSHException` -- if the server fails to invoke a shell + """ + chan = self._transport.open_session() + chan.get_pty(term, width, height, width_pixels, height_pixels) + chan.invoke_shell() + return chan + + def open_sftp(self): + """ + Open an SFTP session on the SSH server. + + :return: a new `.SFTPClient` session object + """ + return self._transport.open_sftp_client() + + def get_transport(self): + """ + Return the underlying `.Transport` object for this SSH connection. + This can be used to perform lower-level tasks, like opening specific + kinds of channels. + + :return: the `.Transport` for this connection + """ + return self._transport + + def _key_from_filepath(self, filename, klass, password): + """ + Attempt to derive a `.PKey` from given string path ``filename``: + + - If ``filename`` appears to be a cert, the matching private key is + loaded. + - Otherwise, the filename is assumed to be a private key, and the + matching public cert will be loaded if it exists. + """ + cert_suffix = "-cert.pub" + # Assume privkey, not cert, by default + if filename.endswith(cert_suffix): + key_path = filename[: -len(cert_suffix)] + cert_path = filename + else: + key_path = filename + cert_path = filename + cert_suffix + # Blindly try the key path; if no private key, nothing will work. + key = klass.from_private_key_file(key_path, password) + # TODO: change this to 'Loading' instead of 'Trying' sometime; probably + # when #387 is released, since this is a critical log message users are + # likely testing/filtering for (bah.) + msg = "Trying discovered key {} in {}".format( + hexlify(key.get_fingerprint()), key_path + ) + self._log(DEBUG, msg) + # Attempt to load cert if it exists. + if os.path.isfile(cert_path): + key.load_certificate(cert_path) + self._log(DEBUG, "Adding public certificate {}".format(cert_path)) + return key + + def _auth( + self, + username, + password, + pkey, + key_filenames, + allow_agent, + look_for_keys, + gss_auth, + gss_kex, + gss_deleg_creds, + gss_host, + passphrase, + ): + """ + Try, in order: + + - The key(s) passed in, if one was passed in. + - Any key we can find through an SSH agent (if allowed). + - Any "id_rsa", "id_dsa" or "id_ecdsa" key discoverable in ~/.ssh/ + (if allowed). + - Plain username/password auth, if a password was given. + + (The password might be needed to unlock a private key [if 'passphrase' + isn't also given], or for two-factor authentication [for which it is + required].) + """ + saved_exception = None + two_factor = False + allowed_types = set() + two_factor_types = {"keyboard-interactive", "password"} + if passphrase is None and password is not None: + passphrase = password + + # If GSS-API support and GSS-PI Key Exchange was performed, we attempt + # authentication with gssapi-keyex. + if gss_kex and self._transport.gss_kex_used: + try: + self._transport.auth_gssapi_keyex(username) + return + except Exception as e: + saved_exception = e + + # Try GSS-API authentication (gssapi-with-mic) only if GSS-API Key + # Exchange is not performed, because if we use GSS-API for the key + # exchange, there is already a fully established GSS-API context, so + # why should we do that again? + if gss_auth: + try: + return self._transport.auth_gssapi_with_mic( + username, gss_host, gss_deleg_creds + ) + except Exception as e: + saved_exception = e + + if pkey is not None: + try: + self._log( + DEBUG, + "Trying SSH key {}".format( + hexlify(pkey.get_fingerprint()) + ), + ) + allowed_types = set( + self._transport.auth_publickey(username, pkey) + ) + two_factor = allowed_types & two_factor_types + if not two_factor: + return + except SSHException as e: + saved_exception = e + + if not two_factor: + for key_filename in key_filenames: + # TODO 4.0: leverage PKey.from_path() if we don't end up just + # killing SSHClient entirely + for pkey_class in (RSAKey, DSSKey, ECDSAKey, Ed25519Key): + try: + key = self._key_from_filepath( + key_filename, pkey_class, passphrase + ) + allowed_types = set( + self._transport.auth_publickey(username, key) + ) + two_factor = allowed_types & two_factor_types + if not two_factor: + return + break + except SSHException as e: + saved_exception = e + + if not two_factor and allow_agent: + if self._agent is None: + self._agent = Agent() + + for key in self._agent.get_keys(): + try: + id_ = hexlify(key.get_fingerprint()) + self._log(DEBUG, "Trying SSH agent key {}".format(id_)) + # for 2-factor auth a successfully auth'd key password + # will return an allowed 2fac auth method + allowed_types = set( + self._transport.auth_publickey(username, key) + ) + two_factor = allowed_types & two_factor_types + if not two_factor: + return + break + except SSHException as e: + saved_exception = e + + if not two_factor: + keyfiles = [] + + for keytype, name in [ + (RSAKey, "rsa"), + (DSSKey, "dsa"), + (ECDSAKey, "ecdsa"), + (Ed25519Key, "ed25519"), + ]: + # ~/ssh/ is for windows + for directory in [".ssh", "ssh"]: + full_path = os.path.expanduser( + "~/{}/id_{}".format(directory, name) + ) + if os.path.isfile(full_path): + # TODO: only do this append if below did not run + keyfiles.append((keytype, full_path)) + if os.path.isfile(full_path + "-cert.pub"): + keyfiles.append((keytype, full_path + "-cert.pub")) + + if not look_for_keys: + keyfiles = [] + + for pkey_class, filename in keyfiles: + try: + key = self._key_from_filepath( + filename, pkey_class, passphrase + ) + # for 2-factor auth a successfully auth'd key will result + # in ['password'] + allowed_types = set( + self._transport.auth_publickey(username, key) + ) + two_factor = allowed_types & two_factor_types + if not two_factor: + return + break + except (SSHException, IOError) as e: + saved_exception = e + + if password is not None: + try: + self._transport.auth_password(username, password) + return + except SSHException as e: + saved_exception = e + elif two_factor: + try: + self._transport.auth_interactive_dumb(username) + return + except SSHException as e: + saved_exception = e + + # if we got an auth-failed exception earlier, re-raise it + if saved_exception is not None: + raise saved_exception + raise SSHException("No authentication methods available") + + def _log(self, level, msg): + self._transport._log(level, msg) + + +class MissingHostKeyPolicy: + """ + Interface for defining the policy that `.SSHClient` should use when the + SSH server's hostname is not in either the system host keys or the + application's keys. Pre-made classes implement policies for automatically + adding the key to the application's `.HostKeys` object (`.AutoAddPolicy`), + and for automatically rejecting the key (`.RejectPolicy`). + + This function may be used to ask the user to verify the key, for example. + """ + + def missing_host_key(self, client, hostname, key): + """ + Called when an `.SSHClient` receives a server key for a server that + isn't in either the system or local `.HostKeys` object. To accept + the key, simply return. To reject, raised an exception (which will + be passed to the calling application). + """ + pass + + +class AutoAddPolicy(MissingHostKeyPolicy): + """ + Policy for automatically adding the hostname and new host key to the + local `.HostKeys` object, and saving it. This is used by `.SSHClient`. + """ + + def missing_host_key(self, client, hostname, key): + client._host_keys.add(hostname, key.get_name(), key) + if client._host_keys_filename is not None: + client.save_host_keys(client._host_keys_filename) + client._log( + DEBUG, + "Adding {} host key for {}: {}".format( + key.get_name(), hostname, hexlify(key.get_fingerprint()) + ), + ) + + +class RejectPolicy(MissingHostKeyPolicy): + """ + Policy for automatically rejecting the unknown hostname & key. This is + used by `.SSHClient`. + """ + + def missing_host_key(self, client, hostname, key): + client._log( + DEBUG, + "Rejecting {} host key for {}: {}".format( + key.get_name(), hostname, hexlify(key.get_fingerprint()) + ), + ) + raise SSHException( + "Server {!r} not found in known_hosts".format(hostname) + ) + + +class WarningPolicy(MissingHostKeyPolicy): + """ + Policy for logging a Python-style warning for an unknown host key, but + accepting it. This is used by `.SSHClient`. + """ + + def missing_host_key(self, client, hostname, key): + warnings.warn( + "Unknown {} host key for {}: {}".format( + key.get_name(), hostname, hexlify(key.get_fingerprint()) + ) + ) diff --git a/venv/lib/python3.11/site-packages/paramiko/common.py b/venv/lib/python3.11/site-packages/paramiko/common.py new file mode 100644 index 0000000..b57149b --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/common.py @@ -0,0 +1,245 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Common constants and global variables. +""" +import logging +import struct + +# +# Formerly of py3compat.py. May be fully delete'able with a deeper look? +# + + +def byte_chr(c): + assert isinstance(c, int) + return struct.pack("B", c) + + +def byte_mask(c, mask): + assert isinstance(c, int) + return struct.pack("B", c & mask) + + +def byte_ord(c): + # In case we're handed a string instead of an int. + if not isinstance(c, int): + c = ord(c) + return c + + +( + MSG_DISCONNECT, + MSG_IGNORE, + MSG_UNIMPLEMENTED, + MSG_DEBUG, + MSG_SERVICE_REQUEST, + MSG_SERVICE_ACCEPT, + MSG_EXT_INFO, +) = range(1, 8) +(MSG_KEXINIT, MSG_NEWKEYS) = range(20, 22) +( + MSG_USERAUTH_REQUEST, + MSG_USERAUTH_FAILURE, + MSG_USERAUTH_SUCCESS, + MSG_USERAUTH_BANNER, +) = range(50, 54) +MSG_USERAUTH_PK_OK = 60 +(MSG_USERAUTH_INFO_REQUEST, MSG_USERAUTH_INFO_RESPONSE) = range(60, 62) +(MSG_USERAUTH_GSSAPI_RESPONSE, MSG_USERAUTH_GSSAPI_TOKEN) = range(60, 62) +( + MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE, + MSG_USERAUTH_GSSAPI_ERROR, + MSG_USERAUTH_GSSAPI_ERRTOK, + MSG_USERAUTH_GSSAPI_MIC, +) = range(63, 67) +HIGHEST_USERAUTH_MESSAGE_ID = 79 +(MSG_GLOBAL_REQUEST, MSG_REQUEST_SUCCESS, MSG_REQUEST_FAILURE) = range(80, 83) +( + MSG_CHANNEL_OPEN, + MSG_CHANNEL_OPEN_SUCCESS, + MSG_CHANNEL_OPEN_FAILURE, + MSG_CHANNEL_WINDOW_ADJUST, + MSG_CHANNEL_DATA, + MSG_CHANNEL_EXTENDED_DATA, + MSG_CHANNEL_EOF, + MSG_CHANNEL_CLOSE, + MSG_CHANNEL_REQUEST, + MSG_CHANNEL_SUCCESS, + MSG_CHANNEL_FAILURE, +) = range(90, 101) + +cMSG_DISCONNECT = byte_chr(MSG_DISCONNECT) +cMSG_IGNORE = byte_chr(MSG_IGNORE) +cMSG_UNIMPLEMENTED = byte_chr(MSG_UNIMPLEMENTED) +cMSG_DEBUG = byte_chr(MSG_DEBUG) +cMSG_SERVICE_REQUEST = byte_chr(MSG_SERVICE_REQUEST) +cMSG_SERVICE_ACCEPT = byte_chr(MSG_SERVICE_ACCEPT) +cMSG_EXT_INFO = byte_chr(MSG_EXT_INFO) +cMSG_KEXINIT = byte_chr(MSG_KEXINIT) +cMSG_NEWKEYS = byte_chr(MSG_NEWKEYS) +cMSG_USERAUTH_REQUEST = byte_chr(MSG_USERAUTH_REQUEST) +cMSG_USERAUTH_FAILURE = byte_chr(MSG_USERAUTH_FAILURE) +cMSG_USERAUTH_SUCCESS = byte_chr(MSG_USERAUTH_SUCCESS) +cMSG_USERAUTH_BANNER = byte_chr(MSG_USERAUTH_BANNER) +cMSG_USERAUTH_PK_OK = byte_chr(MSG_USERAUTH_PK_OK) +cMSG_USERAUTH_INFO_REQUEST = byte_chr(MSG_USERAUTH_INFO_REQUEST) +cMSG_USERAUTH_INFO_RESPONSE = byte_chr(MSG_USERAUTH_INFO_RESPONSE) +cMSG_USERAUTH_GSSAPI_RESPONSE = byte_chr(MSG_USERAUTH_GSSAPI_RESPONSE) +cMSG_USERAUTH_GSSAPI_TOKEN = byte_chr(MSG_USERAUTH_GSSAPI_TOKEN) +cMSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE = byte_chr( + MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE +) +cMSG_USERAUTH_GSSAPI_ERROR = byte_chr(MSG_USERAUTH_GSSAPI_ERROR) +cMSG_USERAUTH_GSSAPI_ERRTOK = byte_chr(MSG_USERAUTH_GSSAPI_ERRTOK) +cMSG_USERAUTH_GSSAPI_MIC = byte_chr(MSG_USERAUTH_GSSAPI_MIC) +cMSG_GLOBAL_REQUEST = byte_chr(MSG_GLOBAL_REQUEST) +cMSG_REQUEST_SUCCESS = byte_chr(MSG_REQUEST_SUCCESS) +cMSG_REQUEST_FAILURE = byte_chr(MSG_REQUEST_FAILURE) +cMSG_CHANNEL_OPEN = byte_chr(MSG_CHANNEL_OPEN) +cMSG_CHANNEL_OPEN_SUCCESS = byte_chr(MSG_CHANNEL_OPEN_SUCCESS) +cMSG_CHANNEL_OPEN_FAILURE = byte_chr(MSG_CHANNEL_OPEN_FAILURE) +cMSG_CHANNEL_WINDOW_ADJUST = byte_chr(MSG_CHANNEL_WINDOW_ADJUST) +cMSG_CHANNEL_DATA = byte_chr(MSG_CHANNEL_DATA) +cMSG_CHANNEL_EXTENDED_DATA = byte_chr(MSG_CHANNEL_EXTENDED_DATA) +cMSG_CHANNEL_EOF = byte_chr(MSG_CHANNEL_EOF) +cMSG_CHANNEL_CLOSE = byte_chr(MSG_CHANNEL_CLOSE) +cMSG_CHANNEL_REQUEST = byte_chr(MSG_CHANNEL_REQUEST) +cMSG_CHANNEL_SUCCESS = byte_chr(MSG_CHANNEL_SUCCESS) +cMSG_CHANNEL_FAILURE = byte_chr(MSG_CHANNEL_FAILURE) + +# for debugging: +MSG_NAMES = { + MSG_DISCONNECT: "disconnect", + MSG_IGNORE: "ignore", + MSG_UNIMPLEMENTED: "unimplemented", + MSG_DEBUG: "debug", + MSG_SERVICE_REQUEST: "service-request", + MSG_SERVICE_ACCEPT: "service-accept", + MSG_KEXINIT: "kexinit", + MSG_EXT_INFO: "ext-info", + MSG_NEWKEYS: "newkeys", + 30: "kex30", + 31: "kex31", + 32: "kex32", + 33: "kex33", + 34: "kex34", + 40: "kex40", + 41: "kex41", + MSG_USERAUTH_REQUEST: "userauth-request", + MSG_USERAUTH_FAILURE: "userauth-failure", + MSG_USERAUTH_SUCCESS: "userauth-success", + MSG_USERAUTH_BANNER: "userauth--banner", + MSG_USERAUTH_PK_OK: "userauth-60(pk-ok/info-request)", + MSG_USERAUTH_INFO_RESPONSE: "userauth-info-response", + MSG_GLOBAL_REQUEST: "global-request", + MSG_REQUEST_SUCCESS: "request-success", + MSG_REQUEST_FAILURE: "request-failure", + MSG_CHANNEL_OPEN: "channel-open", + MSG_CHANNEL_OPEN_SUCCESS: "channel-open-success", + MSG_CHANNEL_OPEN_FAILURE: "channel-open-failure", + MSG_CHANNEL_WINDOW_ADJUST: "channel-window-adjust", + MSG_CHANNEL_DATA: "channel-data", + MSG_CHANNEL_EXTENDED_DATA: "channel-extended-data", + MSG_CHANNEL_EOF: "channel-eof", + MSG_CHANNEL_CLOSE: "channel-close", + MSG_CHANNEL_REQUEST: "channel-request", + MSG_CHANNEL_SUCCESS: "channel-success", + MSG_CHANNEL_FAILURE: "channel-failure", + MSG_USERAUTH_GSSAPI_RESPONSE: "userauth-gssapi-response", + MSG_USERAUTH_GSSAPI_TOKEN: "userauth-gssapi-token", + MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE: "userauth-gssapi-exchange-complete", + MSG_USERAUTH_GSSAPI_ERROR: "userauth-gssapi-error", + MSG_USERAUTH_GSSAPI_ERRTOK: "userauth-gssapi-error-token", + MSG_USERAUTH_GSSAPI_MIC: "userauth-gssapi-mic", +} + + +# authentication request return codes: +AUTH_SUCCESSFUL, AUTH_PARTIALLY_SUCCESSFUL, AUTH_FAILED = range(3) + + +# channel request failed reasons: +( + OPEN_SUCCEEDED, + OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED, + OPEN_FAILED_CONNECT_FAILED, + OPEN_FAILED_UNKNOWN_CHANNEL_TYPE, + OPEN_FAILED_RESOURCE_SHORTAGE, +) = range(0, 5) + + +CONNECTION_FAILED_CODE = { + 1: "Administratively prohibited", + 2: "Connect failed", + 3: "Unknown channel type", + 4: "Resource shortage", +} + + +( + DISCONNECT_SERVICE_NOT_AVAILABLE, + DISCONNECT_AUTH_CANCELLED_BY_USER, + DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE, +) = (7, 13, 14) + +zero_byte = byte_chr(0) +one_byte = byte_chr(1) +four_byte = byte_chr(4) +max_byte = byte_chr(0xFF) +cr_byte = byte_chr(13) +linefeed_byte = byte_chr(10) +crlf = cr_byte + linefeed_byte +cr_byte_value = 13 +linefeed_byte_value = 10 + + +xffffffff = 0xFFFFFFFF +x80000000 = 0x80000000 +o666 = 438 +o660 = 432 +o644 = 420 +o600 = 384 +o777 = 511 +o700 = 448 +o70 = 56 + +DEBUG = logging.DEBUG +INFO = logging.INFO +WARNING = logging.WARNING +ERROR = logging.ERROR +CRITICAL = logging.CRITICAL + +# Common IO/select/etc sleep period, in seconds +io_sleep = 0.01 + +DEFAULT_WINDOW_SIZE = 64 * 2**15 +DEFAULT_MAX_PACKET_SIZE = 2**15 + +# lower bound on the max packet size we'll accept from the remote host +# Minimum packet size is 32768 bytes according to +# http://www.ietf.org/rfc/rfc4254.txt +MIN_WINDOW_SIZE = 2**15 + +# However, according to http://www.ietf.org/rfc/rfc4253.txt it is perfectly +# legal to accept a size much smaller, as OpenSSH client does as size 16384. +MIN_PACKET_SIZE = 2**12 + +# Max windows size according to http://www.ietf.org/rfc/rfc4254.txt +MAX_WINDOW_SIZE = 2**32 - 1 diff --git a/venv/lib/python3.11/site-packages/paramiko/compress.py b/venv/lib/python3.11/site-packages/paramiko/compress.py new file mode 100644 index 0000000..18ff484 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/compress.py @@ -0,0 +1,40 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Compression implementations for a Transport. +""" + +import zlib + + +class ZlibCompressor: + def __init__(self): + # Use the default level of zlib compression + self.z = zlib.compressobj() + + def __call__(self, data): + return self.z.compress(data) + self.z.flush(zlib.Z_FULL_FLUSH) + + +class ZlibDecompressor: + def __init__(self): + self.z = zlib.decompressobj() + + def __call__(self, data): + return self.z.decompress(data) diff --git a/venv/lib/python3.11/site-packages/paramiko/config.py b/venv/lib/python3.11/site-packages/paramiko/config.py new file mode 100644 index 0000000..8ab55c6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/config.py @@ -0,0 +1,696 @@ +# Copyright (C) 2006-2007 Robey Pointer +# Copyright (C) 2012 Olle Lundberg +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Configuration file (aka ``ssh_config``) support. +""" + +import fnmatch +import getpass +import os +import re +import shlex +import socket +from hashlib import sha1 +from io import StringIO +from functools import partial + +invoke, invoke_import_error = None, None +try: + import invoke +except ImportError as e: + invoke_import_error = e + +from .ssh_exception import CouldNotCanonicalize, ConfigParseError + + +SSH_PORT = 22 + + +class SSHConfig: + """ + Representation of config information as stored in the format used by + OpenSSH. Queries can be made via `lookup`. The format is described in + OpenSSH's ``ssh_config`` man page. This class is provided primarily as a + convenience to posix users (since the OpenSSH format is a de-facto + standard on posix) but should work fine on Windows too. + + .. versionadded:: 1.6 + """ + + SETTINGS_REGEX = re.compile(r"(\w+)(?:\s*=\s*|\s+)(.+)") + + # TODO: do a full scan of ssh.c & friends to make sure we're fully + # compatible across the board, e.g. OpenSSH 8.1 added %n to ProxyCommand. + TOKENS_BY_CONFIG_KEY = { + "controlpath": ["%C", "%h", "%l", "%L", "%n", "%p", "%r", "%u"], + "hostname": ["%h"], + "identityfile": ["%C", "~", "%d", "%h", "%l", "%u", "%r"], + "proxycommand": ["~", "%h", "%p", "%r"], + "proxyjump": ["%h", "%p", "%r"], + # Doesn't seem worth making this 'special' for now, it will fit well + # enough (no actual match-exec config key to be confused with). + "match-exec": ["%C", "%d", "%h", "%L", "%l", "%n", "%p", "%r", "%u"], + } + + def __init__(self): + """ + Create a new OpenSSH config object. + + Note: the newer alternate constructors `from_path`, `from_file` and + `from_text` are simpler to use, as they parse on instantiation. For + example, instead of:: + + config = SSHConfig() + config.parse(open("some-path.config") + + you could:: + + config = SSHConfig.from_file(open("some-path.config")) + # Or more directly: + config = SSHConfig.from_path("some-path.config") + # Or if you have arbitrary ssh_config text from some other source: + config = SSHConfig.from_text("Host foo\\n\\tUser bar") + """ + self._config = [] + + @classmethod + def from_text(cls, text): + """ + Create a new, parsed `SSHConfig` from ``text`` string. + + .. versionadded:: 2.7 + """ + return cls.from_file(StringIO(text)) + + @classmethod + def from_path(cls, path): + """ + Create a new, parsed `SSHConfig` from the file found at ``path``. + + .. versionadded:: 2.7 + """ + with open(path) as flo: + return cls.from_file(flo) + + @classmethod + def from_file(cls, flo): + """ + Create a new, parsed `SSHConfig` from file-like object ``flo``. + + .. versionadded:: 2.7 + """ + obj = cls() + obj.parse(flo) + return obj + + def parse(self, file_obj): + """ + Read an OpenSSH config from the given file object. + + :param file_obj: a file-like object to read the config file from + """ + # Start out w/ implicit/anonymous global host-like block to hold + # anything not contained by an explicit one. + context = {"host": ["*"], "config": {}} + for line in file_obj: + # Strip any leading or trailing whitespace from the line. + # Refer to https://github.com/paramiko/paramiko/issues/499 + line = line.strip() + # Skip blanks, comments + if not line or line.startswith("#"): + continue + + # Parse line into key, value + match = re.match(self.SETTINGS_REGEX, line) + if not match: + raise ConfigParseError("Unparsable line {}".format(line)) + key = match.group(1).lower() + value = match.group(2) + + # Host keyword triggers switch to new block/context + if key in ("host", "match"): + self._config.append(context) + context = {"config": {}} + if key == "host": + # TODO 4.0: make these real objects or at least name this + # "hosts" to acknowledge it's an iterable. (Doing so prior + # to 3.0, despite it being a private API, feels bad - + # surely such an old codebase has folks actually relying on + # these keys.) + context["host"] = self._get_hosts(value) + else: + context["matches"] = self._get_matches(value) + # Special-case for noop ProxyCommands + elif key == "proxycommand" and value.lower() == "none": + # Store 'none' as None - not as a string implying that the + # proxycommand is the literal shell command "none"! + context["config"][key] = None + # All other keywords get stored, directly or via append + else: + if value.startswith('"') and value.endswith('"'): + value = value[1:-1] + + # identityfile, localforward, remoteforward keys are special + # cases, since they are allowed to be specified multiple times + # and they should be tried in order of specification. + if key in ["identityfile", "localforward", "remoteforward"]: + if key in context["config"]: + context["config"][key].append(value) + else: + context["config"][key] = [value] + elif key not in context["config"]: + context["config"][key] = value + # Store last 'open' block and we're done + self._config.append(context) + + def lookup(self, hostname): + """ + Return a dict (`SSHConfigDict`) of config options for a given hostname. + + The host-matching rules of OpenSSH's ``ssh_config`` man page are used: + For each parameter, the first obtained value will be used. The + configuration files contain sections separated by ``Host`` and/or + ``Match`` specifications, and that section is only applied for hosts + which match the given patterns or keywords + + Since the first obtained value for each parameter is used, more host- + specific declarations should be given near the beginning of the file, + and general defaults at the end. + + The keys in the returned dict are all normalized to lowercase (look for + ``"port"``, not ``"Port"``. The values are processed according to the + rules for substitution variable expansion in ``ssh_config``. + + Finally, please see the docs for `SSHConfigDict` for deeper info on + features such as optional type conversion methods, e.g.:: + + conf = my_config.lookup('myhost') + assert conf['passwordauthentication'] == 'yes' + assert conf.as_bool('passwordauthentication') is True + + .. note:: + If there is no explicitly configured ``HostName`` value, it will be + set to the being-looked-up hostname, which is as close as we can + get to OpenSSH's behavior around that particular option. + + :param str hostname: the hostname to lookup + + .. versionchanged:: 2.5 + Returns `SSHConfigDict` objects instead of dict literals. + .. versionchanged:: 2.7 + Added canonicalization support. + .. versionchanged:: 2.7 + Added ``Match`` support. + .. versionchanged:: 3.3 + Added ``Match final`` support. + """ + # First pass + options = self._lookup(hostname=hostname) + # Inject HostName if it was not set (this used to be done incidentally + # during tokenization, for some reason). + if "hostname" not in options: + options["hostname"] = hostname + # Handle canonicalization + canon = options.get("canonicalizehostname", None) in ("yes", "always") + maxdots = int(options.get("canonicalizemaxdots", 1)) + if canon and hostname.count(".") <= maxdots: + # NOTE: OpenSSH manpage does not explicitly state this, but its + # implementation for CanonicalDomains is 'split on any whitespace'. + domains = options["canonicaldomains"].split() + hostname = self.canonicalize(hostname, options, domains) + # Overwrite HostName again here (this is also what OpenSSH does) + options["hostname"] = hostname + options = self._lookup( + hostname, options, canonical=True, final=True + ) + else: + options = self._lookup( + hostname, options, canonical=False, final=True + ) + return options + + def _lookup(self, hostname, options=None, canonical=False, final=False): + # Init + if options is None: + options = SSHConfigDict() + # Iterate all stanzas, applying any that match, in turn (so that things + # like Match can reference currently understood state) + for context in self._config: + if not ( + self._pattern_matches(context.get("host", []), hostname) + or self._does_match( + context.get("matches", []), + hostname, + canonical, + final, + options, + ) + ): + continue + for key, value in context["config"].items(): + if key not in options: + # Create a copy of the original value, + # else it will reference the original list + # in self._config and update that value too + # when the extend() is being called. + options[key] = value[:] if value is not None else value + elif key == "identityfile": + options[key].extend( + x for x in value if x not in options[key] + ) + if final: + # Expand variables in resulting values + # (besides 'Match exec' which was already handled above) + options = self._expand_variables(options, hostname) + return options + + def canonicalize(self, hostname, options, domains): + """ + Return canonicalized version of ``hostname``. + + :param str hostname: Target hostname. + :param options: An `SSHConfigDict` from a previous lookup pass. + :param domains: List of domains (e.g. ``["paramiko.org"]``). + + :returns: A canonicalized hostname if one was found, else ``None``. + + .. versionadded:: 2.7 + """ + found = False + for domain in domains: + candidate = "{}.{}".format(hostname, domain) + family_specific = _addressfamily_host_lookup(candidate, options) + if family_specific is not None: + # TODO: would we want to dig deeper into other results? e.g. to + # find something that satisfies PermittedCNAMEs when that is + # implemented? + found = family_specific[0] + else: + # TODO: what does ssh use here and is there a reason to use + # that instead of gethostbyname? + try: + found = socket.gethostbyname(candidate) + except socket.gaierror: + pass + if found: + # TODO: follow CNAME (implied by found != candidate?) if + # CanonicalizePermittedCNAMEs allows it + return candidate + # If we got here, it means canonicalization failed. + # When CanonicalizeFallbackLocal is undefined or 'yes', we just spit + # back the original hostname. + if options.get("canonicalizefallbacklocal", "yes") == "yes": + return hostname + # And here, we failed AND fallback was set to a non-yes value, so we + # need to get mad. + raise CouldNotCanonicalize(hostname) + + def get_hostnames(self): + """ + Return the set of literal hostnames defined in the SSH config (both + explicit hostnames and wildcard entries). + """ + hosts = set() + for entry in self._config: + hosts.update(entry["host"]) + return hosts + + def _pattern_matches(self, patterns, target): + # Convenience auto-splitter if not already a list + if hasattr(patterns, "split"): + patterns = patterns.split(",") + match = False + for pattern in patterns: + # Short-circuit if target matches a negated pattern + if pattern.startswith("!") and fnmatch.fnmatch( + target, pattern[1:] + ): + return False + # Flag a match, but continue (in case of later negation) if regular + # match occurs + elif fnmatch.fnmatch(target, pattern): + match = True + return match + + def _does_match( + self, match_list, target_hostname, canonical, final, options + ): + matched = [] + candidates = match_list[:] + local_username = getpass.getuser() + while candidates: + candidate = candidates.pop(0) + passed = None + # Obtain latest host/user value every loop, so later Match may + # reference values assigned within a prior Match. + configured_host = options.get("hostname", None) + configured_user = options.get("user", None) + type_, param = candidate["type"], candidate["param"] + # Canonical is a hard pass/fail based on whether this is a + # canonicalized re-lookup. + if type_ == "canonical": + if self._should_fail(canonical, candidate): + return False + if type_ == "final": + passed = final + # The parse step ensures we only see this by itself or after + # canonical, so it's also an easy hard pass. (No negation here as + # that would be uh, pretty weird?) + elif type_ == "all": + return True + # From here, we are testing various non-hard criteria, + # short-circuiting only on fail + elif type_ == "host": + hostval = configured_host or target_hostname + passed = self._pattern_matches(param, hostval) + elif type_ == "originalhost": + passed = self._pattern_matches(param, target_hostname) + elif type_ == "user": + user = configured_user or local_username + passed = self._pattern_matches(param, user) + elif type_ == "localuser": + passed = self._pattern_matches(param, local_username) + elif type_ == "exec": + exec_cmd = self._tokenize( + options, target_hostname, "match-exec", param + ) + # This is the laziest spot in which we can get mad about an + # inability to import Invoke. + if invoke is None: + raise invoke_import_error + # Like OpenSSH, we 'redirect' stdout but let stderr bubble up + passed = invoke.run(exec_cmd, hide="stdout", warn=True).ok + # Tackle any 'passed, but was negated' results from above + if passed is not None and self._should_fail(passed, candidate): + return False + # Made it all the way here? Everything matched! + matched.append(candidate) + # Did anything match? (To be treated as bool, usually.) + return matched + + def _should_fail(self, would_pass, candidate): + return would_pass if candidate["negate"] else not would_pass + + def _tokenize(self, config, target_hostname, key, value): + """ + Tokenize a string based on current config/hostname data. + + :param config: Current config data. + :param target_hostname: Original target connection hostname. + :param key: Config key being tokenized (used to filter token list). + :param value: Config value being tokenized. + + :returns: The tokenized version of the input ``value`` string. + """ + allowed_tokens = self._allowed_tokens(key) + # Short-circuit if no tokenization possible + if not allowed_tokens: + return value + # Obtain potentially configured hostname, for use with %h. + # Special-case where we are tokenizing the hostname itself, to avoid + # replacing %h with a %h-bearing value, etc. + configured_hostname = target_hostname + if key != "hostname": + configured_hostname = config.get("hostname", configured_hostname) + # Ditto the rest of the source values + if "port" in config: + port = config["port"] + else: + port = SSH_PORT + user = getpass.getuser() + if "user" in config: + remoteuser = config["user"] + else: + remoteuser = user + local_hostname = socket.gethostname().split(".")[0] + local_fqdn = LazyFqdn(config, local_hostname) + homedir = os.path.expanduser("~") + tohash = local_hostname + target_hostname + repr(port) + remoteuser + # The actual tokens! + replacements = { + # TODO: %%??? + "%C": sha1(tohash.encode()).hexdigest(), + "%d": homedir, + "%h": configured_hostname, + # TODO: %i? + "%L": local_hostname, + "%l": local_fqdn, + # also this is pseudo buggy when not in Match exec mode so document + # that. also WHY is that the case?? don't we do all of this late? + "%n": target_hostname, + "%p": port, + "%r": remoteuser, + # TODO: %T? don't believe this is possible however + "%u": user, + "~": homedir, + } + # Do the thing with the stuff + tokenized = value + for find, replace in replacements.items(): + if find not in allowed_tokens: + continue + tokenized = tokenized.replace(find, str(replace)) + # TODO: log? eg that value -> tokenized + return tokenized + + def _allowed_tokens(self, key): + """ + Given config ``key``, return list of token strings to tokenize. + + .. note:: + This feels like it wants to eventually go away, but is used to + preserve as-strict-as-possible compatibility with OpenSSH, which + for whatever reason only applies some tokens to some config keys. + """ + return self.TOKENS_BY_CONFIG_KEY.get(key, []) + + def _expand_variables(self, config, target_hostname): + """ + Return a dict of config options with expanded substitutions + for a given original & current target hostname. + + Please refer to :doc:`/api/config` for details. + + :param dict config: the currently parsed config + :param str hostname: the hostname whose config is being looked up + """ + for k in config: + if config[k] is None: + continue + tokenizer = partial(self._tokenize, config, target_hostname, k) + if isinstance(config[k], list): + for i, value in enumerate(config[k]): + config[k][i] = tokenizer(value) + else: + config[k] = tokenizer(config[k]) + return config + + def _get_hosts(self, host): + """ + Return a list of host_names from host value. + """ + try: + return shlex.split(host) + except ValueError: + raise ConfigParseError("Unparsable host {}".format(host)) + + def _get_matches(self, match): + """ + Parse a specific Match config line into a list-of-dicts for its values. + + Performs some parse-time validation as well. + """ + matches = [] + tokens = shlex.split(match) + while tokens: + match = {"type": None, "param": None, "negate": False} + type_ = tokens.pop(0) + # Handle per-keyword negation + if type_.startswith("!"): + match["negate"] = True + type_ = type_[1:] + match["type"] = type_ + # all/canonical have no params (everything else does) + if type_ in ("all", "canonical", "final"): + matches.append(match) + continue + if not tokens: + raise ConfigParseError( + "Missing parameter to Match '{}' keyword".format(type_) + ) + match["param"] = tokens.pop(0) + matches.append(match) + # Perform some (easier to do now than in the middle) validation that is + # better handled here than at lookup time. + keywords = [x["type"] for x in matches] + if "all" in keywords: + allowable = ("all", "canonical") + ok, bad = ( + list(filter(lambda x: x in allowable, keywords)), + list(filter(lambda x: x not in allowable, keywords)), + ) + err = None + if any(bad): + err = "Match does not allow 'all' mixed with anything but 'canonical'" # noqa + elif "canonical" in ok and ok.index("canonical") > ok.index("all"): + err = "Match does not allow 'all' before 'canonical'" + if err is not None: + raise ConfigParseError(err) + return matches + + +def _addressfamily_host_lookup(hostname, options): + """ + Try looking up ``hostname`` in an IPv4 or IPv6 specific manner. + + This is an odd duck due to needing use in two divergent use cases. It looks + up ``AddressFamily`` in ``options`` and if it is ``inet`` or ``inet6``, + this function uses `socket.getaddrinfo` to perform a family-specific + lookup, returning the result if successful. + + In any other situation -- lookup failure, or ``AddressFamily`` being + unspecified or ``any`` -- ``None`` is returned instead and the caller is + expected to do something situation-appropriate like calling + `socket.gethostbyname`. + + :param str hostname: Hostname to look up. + :param options: `SSHConfigDict` instance w/ parsed options. + :returns: ``getaddrinfo``-style tuples, or ``None``, depending. + """ + address_family = options.get("addressfamily", "any").lower() + if address_family == "any": + return + try: + family = socket.AF_INET6 + if address_family == "inet": + family = socket.AF_INET + return socket.getaddrinfo( + hostname, + None, + family, + socket.SOCK_DGRAM, + socket.IPPROTO_IP, + socket.AI_CANONNAME, + ) + except socket.gaierror: + pass + + +class LazyFqdn: + """ + Returns the host's fqdn on request as string. + """ + + def __init__(self, config, host=None): + self.fqdn = None + self.config = config + self.host = host + + def __str__(self): + if self.fqdn is None: + # + # If the SSH config contains AddressFamily, use that when + # determining the local host's FQDN. Using socket.getfqdn() from + # the standard library is the most general solution, but can + # result in noticeable delays on some platforms when IPv6 is + # misconfigured or not available, as it calls getaddrinfo with no + # address family specified, so both IPv4 and IPv6 are checked. + # + + # Handle specific option + fqdn = None + results = _addressfamily_host_lookup(self.host, self.config) + if results is not None: + for res in results: + af, socktype, proto, canonname, sa = res + if canonname and "." in canonname: + fqdn = canonname + break + # Handle 'any' / unspecified / lookup failure + if fqdn is None: + fqdn = socket.getfqdn() + # Cache + self.fqdn = fqdn + return self.fqdn + + +class SSHConfigDict(dict): + """ + A dictionary wrapper/subclass for per-host configuration structures. + + This class introduces some usage niceties for consumers of `SSHConfig`, + specifically around the issue of variable type conversions: normal value + access yields strings, but there are now methods such as `as_bool` and + `as_int` that yield casted values instead. + + For example, given the following ``ssh_config`` file snippet:: + + Host foo.example.com + PasswordAuthentication no + Compression yes + ServerAliveInterval 60 + + the following code highlights how you can access the raw strings as well as + usefully Python type-casted versions (recalling that keys are all + normalized to lowercase first):: + + my_config = SSHConfig() + my_config.parse(open('~/.ssh/config')) + conf = my_config.lookup('foo.example.com') + + assert conf['passwordauthentication'] == 'no' + assert conf.as_bool('passwordauthentication') is False + assert conf['compression'] == 'yes' + assert conf.as_bool('compression') is True + assert conf['serveraliveinterval'] == '60' + assert conf.as_int('serveraliveinterval') == 60 + + .. versionadded:: 2.5 + """ + + def as_bool(self, key): + """ + Express given key's value as a boolean type. + + Typically, this is used for ``ssh_config``'s pseudo-boolean values + which are either ``"yes"`` or ``"no"``. In such cases, ``"yes"`` yields + ``True`` and any other value becomes ``False``. + + .. note:: + If (for whatever reason) the stored value is already boolean in + nature, it's simply returned. + + .. versionadded:: 2.5 + """ + val = self[key] + if isinstance(val, bool): + return val + return val.lower() == "yes" + + def as_int(self, key): + """ + Express given key's value as an integer, if possible. + + This method will raise ``ValueError`` or similar if the value is not + int-appropriate, same as the builtin `int` type. + + .. versionadded:: 2.5 + """ + return int(self[key]) diff --git a/venv/lib/python3.11/site-packages/paramiko/dsskey.py b/venv/lib/python3.11/site-packages/paramiko/dsskey.py new file mode 100644 index 0000000..5215d28 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/dsskey.py @@ -0,0 +1,258 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +DSS keys. +""" + +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import dsa +from cryptography.hazmat.primitives.asymmetric.utils import ( + decode_dss_signature, + encode_dss_signature, +) + +from paramiko import util +from paramiko.common import zero_byte +from paramiko.ssh_exception import SSHException +from paramiko.message import Message +from paramiko.ber import BER, BERException +from paramiko.pkey import PKey + + +class DSSKey(PKey): + """ + Representation of a DSS key which can be used to sign an verify SSH2 + data. + """ + + name = "ssh-dss" + + def __init__( + self, + msg=None, + data=None, + filename=None, + password=None, + vals=None, + file_obj=None, + ): + self.p = None + self.q = None + self.g = None + self.y = None + self.x = None + self.public_blob = None + if file_obj is not None: + self._from_private_key(file_obj, password) + return + if filename is not None: + self._from_private_key_file(filename, password) + return + if (msg is None) and (data is not None): + msg = Message(data) + if vals is not None: + self.p, self.q, self.g, self.y = vals + else: + self._check_type_and_load_cert( + msg=msg, + key_type=self.name, + cert_type=f"{self.name}-cert-v01@openssh.com", + ) + self.p = msg.get_mpint() + self.q = msg.get_mpint() + self.g = msg.get_mpint() + self.y = msg.get_mpint() + self.size = util.bit_length(self.p) + + def asbytes(self): + m = Message() + m.add_string(self.name) + m.add_mpint(self.p) + m.add_mpint(self.q) + m.add_mpint(self.g) + m.add_mpint(self.y) + return m.asbytes() + + def __str__(self): + return self.asbytes() + + @property + def _fields(self): + return (self.get_name(), self.p, self.q, self.g, self.y) + + # TODO 4.0: remove + def get_name(self): + return self.name + + def get_bits(self): + return self.size + + def can_sign(self): + return self.x is not None + + def sign_ssh_data(self, data, algorithm=None): + key = dsa.DSAPrivateNumbers( + x=self.x, + public_numbers=dsa.DSAPublicNumbers( + y=self.y, + parameter_numbers=dsa.DSAParameterNumbers( + p=self.p, q=self.q, g=self.g + ), + ), + ).private_key(backend=default_backend()) + sig = key.sign(data, hashes.SHA1()) + r, s = decode_dss_signature(sig) + + m = Message() + m.add_string(self.name) + # apparently, in rare cases, r or s may be shorter than 20 bytes! + rstr = util.deflate_long(r, 0) + sstr = util.deflate_long(s, 0) + if len(rstr) < 20: + rstr = zero_byte * (20 - len(rstr)) + rstr + if len(sstr) < 20: + sstr = zero_byte * (20 - len(sstr)) + sstr + m.add_string(rstr + sstr) + return m + + def verify_ssh_sig(self, data, msg): + if len(msg.asbytes()) == 40: + # spies.com bug: signature has no header + sig = msg.asbytes() + else: + kind = msg.get_text() + if kind != self.name: + return 0 + sig = msg.get_binary() + + # pull out (r, s) which are NOT encoded as mpints + sigR = util.inflate_long(sig[:20], 1) + sigS = util.inflate_long(sig[20:], 1) + + signature = encode_dss_signature(sigR, sigS) + + key = dsa.DSAPublicNumbers( + y=self.y, + parameter_numbers=dsa.DSAParameterNumbers( + p=self.p, q=self.q, g=self.g + ), + ).public_key(backend=default_backend()) + try: + key.verify(signature, data, hashes.SHA1()) + except InvalidSignature: + return False + else: + return True + + def write_private_key_file(self, filename, password=None): + key = dsa.DSAPrivateNumbers( + x=self.x, + public_numbers=dsa.DSAPublicNumbers( + y=self.y, + parameter_numbers=dsa.DSAParameterNumbers( + p=self.p, q=self.q, g=self.g + ), + ), + ).private_key(backend=default_backend()) + + self._write_private_key_file( + filename, + key, + serialization.PrivateFormat.TraditionalOpenSSL, + password=password, + ) + + def write_private_key(self, file_obj, password=None): + key = dsa.DSAPrivateNumbers( + x=self.x, + public_numbers=dsa.DSAPublicNumbers( + y=self.y, + parameter_numbers=dsa.DSAParameterNumbers( + p=self.p, q=self.q, g=self.g + ), + ), + ).private_key(backend=default_backend()) + + self._write_private_key( + file_obj, + key, + serialization.PrivateFormat.TraditionalOpenSSL, + password=password, + ) + + @staticmethod + def generate(bits=1024, progress_func=None): + """ + Generate a new private DSS key. This factory function can be used to + generate a new host key or authentication key. + + :param int bits: number of bits the generated key should be. + :param progress_func: Unused + :return: new `.DSSKey` private key + """ + numbers = dsa.generate_private_key( + bits, backend=default_backend() + ).private_numbers() + key = DSSKey( + vals=( + numbers.public_numbers.parameter_numbers.p, + numbers.public_numbers.parameter_numbers.q, + numbers.public_numbers.parameter_numbers.g, + numbers.public_numbers.y, + ) + ) + key.x = numbers.x + return key + + # ...internals... + + def _from_private_key_file(self, filename, password): + data = self._read_private_key_file("DSA", filename, password) + self._decode_key(data) + + def _from_private_key(self, file_obj, password): + data = self._read_private_key("DSA", file_obj, password) + self._decode_key(data) + + def _decode_key(self, data): + pkformat, data = data + # private key file contains: + # DSAPrivateKey = { version = 0, p, q, g, y, x } + if pkformat == self._PRIVATE_KEY_FORMAT_ORIGINAL: + try: + keylist = BER(data).decode() + except BERException as e: + raise SSHException("Unable to parse key file: {}".format(e)) + elif pkformat == self._PRIVATE_KEY_FORMAT_OPENSSH: + keylist = self._uint32_cstruct_unpack(data, "iiiii") + keylist = [0] + list(keylist) + else: + self._got_bad_key_format_id(pkformat) + if type(keylist) is not list or len(keylist) < 6 or keylist[0] != 0: + raise SSHException( + "not a valid DSA private key file (bad ber encoding)" + ) + self.p = keylist[1] + self.q = keylist[2] + self.g = keylist[3] + self.y = keylist[4] + self.x = keylist[5] + self.size = util.bit_length(self.p) diff --git a/venv/lib/python3.11/site-packages/paramiko/ecdsakey.py b/venv/lib/python3.11/site-packages/paramiko/ecdsakey.py new file mode 100644 index 0000000..6fd95fa --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/ecdsakey.py @@ -0,0 +1,339 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +ECDSA keys +""" + +from cryptography.exceptions import InvalidSignature, UnsupportedAlgorithm +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import ec +from cryptography.hazmat.primitives.asymmetric.utils import ( + decode_dss_signature, + encode_dss_signature, +) + +from paramiko.common import four_byte +from paramiko.message import Message +from paramiko.pkey import PKey +from paramiko.ssh_exception import SSHException +from paramiko.util import deflate_long + + +class _ECDSACurve: + """ + Represents a specific ECDSA Curve (nistp256, nistp384, etc). + + Handles the generation of the key format identifier and the selection of + the proper hash function. Also grabs the proper curve from the 'ecdsa' + package. + """ + + def __init__(self, curve_class, nist_name): + self.nist_name = nist_name + self.key_length = curve_class.key_size + + # Defined in RFC 5656 6.2 + self.key_format_identifier = "ecdsa-sha2-" + self.nist_name + + # Defined in RFC 5656 6.2.1 + if self.key_length <= 256: + self.hash_object = hashes.SHA256 + elif self.key_length <= 384: + self.hash_object = hashes.SHA384 + else: + self.hash_object = hashes.SHA512 + + self.curve_class = curve_class + + +class _ECDSACurveSet: + """ + A collection to hold the ECDSA curves. Allows querying by oid and by key + format identifier. The two ways in which ECDSAKey needs to be able to look + up curves. + """ + + def __init__(self, ecdsa_curves): + self.ecdsa_curves = ecdsa_curves + + def get_key_format_identifier_list(self): + return [curve.key_format_identifier for curve in self.ecdsa_curves] + + def get_by_curve_class(self, curve_class): + for curve in self.ecdsa_curves: + if curve.curve_class == curve_class: + return curve + + def get_by_key_format_identifier(self, key_format_identifier): + for curve in self.ecdsa_curves: + if curve.key_format_identifier == key_format_identifier: + return curve + + def get_by_key_length(self, key_length): + for curve in self.ecdsa_curves: + if curve.key_length == key_length: + return curve + + +class ECDSAKey(PKey): + """ + Representation of an ECDSA key which can be used to sign and verify SSH2 + data. + """ + + _ECDSA_CURVES = _ECDSACurveSet( + [ + _ECDSACurve(ec.SECP256R1, "nistp256"), + _ECDSACurve(ec.SECP384R1, "nistp384"), + _ECDSACurve(ec.SECP521R1, "nistp521"), + ] + ) + + def __init__( + self, + msg=None, + data=None, + filename=None, + password=None, + vals=None, + file_obj=None, + # TODO 4.0: remove; it does nothing since porting to cryptography.io + validate_point=True, + ): + self.verifying_key = None + self.signing_key = None + self.public_blob = None + if file_obj is not None: + self._from_private_key(file_obj, password) + return + if filename is not None: + self._from_private_key_file(filename, password) + return + if (msg is None) and (data is not None): + msg = Message(data) + if vals is not None: + self.signing_key, self.verifying_key = vals + c_class = self.signing_key.curve.__class__ + self.ecdsa_curve = self._ECDSA_CURVES.get_by_curve_class(c_class) + else: + # Must set ecdsa_curve first; subroutines called herein may need to + # spit out our get_name(), which relies on this. + key_type = msg.get_text() + # But this also means we need to hand it a real key/curve + # identifier, so strip out any cert business. (NOTE: could push + # that into _ECDSACurveSet.get_by_key_format_identifier(), but it + # feels more correct to do it here?) + suffix = "-cert-v01@openssh.com" + if key_type.endswith(suffix): + key_type = key_type[: -len(suffix)] + self.ecdsa_curve = self._ECDSA_CURVES.get_by_key_format_identifier( + key_type + ) + key_types = self._ECDSA_CURVES.get_key_format_identifier_list() + cert_types = [ + "{}-cert-v01@openssh.com".format(x) for x in key_types + ] + self._check_type_and_load_cert( + msg=msg, key_type=key_types, cert_type=cert_types + ) + curvename = msg.get_text() + if curvename != self.ecdsa_curve.nist_name: + raise SSHException( + "Can't handle curve of type {}".format(curvename) + ) + + pointinfo = msg.get_binary() + try: + key = ec.EllipticCurvePublicKey.from_encoded_point( + self.ecdsa_curve.curve_class(), pointinfo + ) + self.verifying_key = key + except ValueError: + raise SSHException("Invalid public key") + + @classmethod + def identifiers(cls): + return cls._ECDSA_CURVES.get_key_format_identifier_list() + + # TODO 4.0: deprecate/remove + @classmethod + def supported_key_format_identifiers(cls): + return cls.identifiers() + + def asbytes(self): + key = self.verifying_key + m = Message() + m.add_string(self.ecdsa_curve.key_format_identifier) + m.add_string(self.ecdsa_curve.nist_name) + + numbers = key.public_numbers() + + key_size_bytes = (key.curve.key_size + 7) // 8 + + x_bytes = deflate_long(numbers.x, add_sign_padding=False) + x_bytes = b"\x00" * (key_size_bytes - len(x_bytes)) + x_bytes + + y_bytes = deflate_long(numbers.y, add_sign_padding=False) + y_bytes = b"\x00" * (key_size_bytes - len(y_bytes)) + y_bytes + + point_str = four_byte + x_bytes + y_bytes + m.add_string(point_str) + return m.asbytes() + + def __str__(self): + return self.asbytes() + + @property + def _fields(self): + return ( + self.get_name(), + self.verifying_key.public_numbers().x, + self.verifying_key.public_numbers().y, + ) + + def get_name(self): + return self.ecdsa_curve.key_format_identifier + + def get_bits(self): + return self.ecdsa_curve.key_length + + def can_sign(self): + return self.signing_key is not None + + def sign_ssh_data(self, data, algorithm=None): + ecdsa = ec.ECDSA(self.ecdsa_curve.hash_object()) + sig = self.signing_key.sign(data, ecdsa) + r, s = decode_dss_signature(sig) + + m = Message() + m.add_string(self.ecdsa_curve.key_format_identifier) + m.add_string(self._sigencode(r, s)) + return m + + def verify_ssh_sig(self, data, msg): + if msg.get_text() != self.ecdsa_curve.key_format_identifier: + return False + sig = msg.get_binary() + sigR, sigS = self._sigdecode(sig) + signature = encode_dss_signature(sigR, sigS) + + try: + self.verifying_key.verify( + signature, data, ec.ECDSA(self.ecdsa_curve.hash_object()) + ) + except InvalidSignature: + return False + else: + return True + + def write_private_key_file(self, filename, password=None): + self._write_private_key_file( + filename, + self.signing_key, + serialization.PrivateFormat.TraditionalOpenSSL, + password=password, + ) + + def write_private_key(self, file_obj, password=None): + self._write_private_key( + file_obj, + self.signing_key, + serialization.PrivateFormat.TraditionalOpenSSL, + password=password, + ) + + @classmethod + def generate(cls, curve=ec.SECP256R1(), progress_func=None, bits=None): + """ + Generate a new private ECDSA key. This factory function can be used to + generate a new host key or authentication key. + + :param progress_func: Not used for this type of key. + :returns: A new private key (`.ECDSAKey`) object + """ + if bits is not None: + curve = cls._ECDSA_CURVES.get_by_key_length(bits) + if curve is None: + raise ValueError("Unsupported key length: {:d}".format(bits)) + curve = curve.curve_class() + + private_key = ec.generate_private_key(curve, backend=default_backend()) + return ECDSAKey(vals=(private_key, private_key.public_key())) + + # ...internals... + + def _from_private_key_file(self, filename, password): + data = self._read_private_key_file("EC", filename, password) + self._decode_key(data) + + def _from_private_key(self, file_obj, password): + data = self._read_private_key("EC", file_obj, password) + self._decode_key(data) + + def _decode_key(self, data): + pkformat, data = data + if pkformat == self._PRIVATE_KEY_FORMAT_ORIGINAL: + try: + key = serialization.load_der_private_key( + data, password=None, backend=default_backend() + ) + except ( + ValueError, + AssertionError, + TypeError, + UnsupportedAlgorithm, + ) as e: + raise SSHException(str(e)) + elif pkformat == self._PRIVATE_KEY_FORMAT_OPENSSH: + try: + msg = Message(data) + curve_name = msg.get_text() + verkey = msg.get_binary() # noqa: F841 + sigkey = msg.get_mpint() + name = "ecdsa-sha2-" + curve_name + curve = self._ECDSA_CURVES.get_by_key_format_identifier(name) + if not curve: + raise SSHException("Invalid key curve identifier") + key = ec.derive_private_key( + sigkey, curve.curve_class(), default_backend() + ) + except Exception as e: + # PKey._read_private_key_openssh() should check or return + # keytype - parsing could fail for any reason due to wrong type + raise SSHException(str(e)) + else: + self._got_bad_key_format_id(pkformat) + + self.signing_key = key + self.verifying_key = key.public_key() + curve_class = key.curve.__class__ + self.ecdsa_curve = self._ECDSA_CURVES.get_by_curve_class(curve_class) + + def _sigencode(self, r, s): + msg = Message() + msg.add_mpint(r) + msg.add_mpint(s) + return msg.asbytes() + + def _sigdecode(self, sig): + msg = Message(sig) + r = msg.get_mpint() + s = msg.get_mpint() + return r, s diff --git a/venv/lib/python3.11/site-packages/paramiko/ed25519key.py b/venv/lib/python3.11/site-packages/paramiko/ed25519key.py new file mode 100644 index 0000000..e5e81ac --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/ed25519key.py @@ -0,0 +1,212 @@ +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import bcrypt + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.ciphers import Cipher + +import nacl.signing + +from paramiko.message import Message +from paramiko.pkey import PKey, OPENSSH_AUTH_MAGIC, _unpad_openssh +from paramiko.util import b +from paramiko.ssh_exception import SSHException, PasswordRequiredException + + +class Ed25519Key(PKey): + """ + Representation of an `Ed25519 `_ key. + + .. note:: + Ed25519 key support was added to OpenSSH in version 6.5. + + .. versionadded:: 2.2 + .. versionchanged:: 2.3 + Added a ``file_obj`` parameter to match other key classes. + """ + + name = "ssh-ed25519" + + def __init__( + self, msg=None, data=None, filename=None, password=None, file_obj=None + ): + self.public_blob = None + verifying_key = signing_key = None + if msg is None and data is not None: + msg = Message(data) + if msg is not None: + self._check_type_and_load_cert( + msg=msg, + key_type=self.name, + cert_type="ssh-ed25519-cert-v01@openssh.com", + ) + verifying_key = nacl.signing.VerifyKey(msg.get_binary()) + elif filename is not None: + with open(filename, "r") as f: + pkformat, data = self._read_private_key("OPENSSH", f) + elif file_obj is not None: + pkformat, data = self._read_private_key("OPENSSH", file_obj) + + if filename or file_obj: + signing_key = self._parse_signing_key_data(data, password) + + if signing_key is None and verifying_key is None: + raise ValueError("need a key") + + self._signing_key = signing_key + self._verifying_key = verifying_key + + def _parse_signing_key_data(self, data, password): + from paramiko.transport import Transport + + # We may eventually want this to be usable for other key types, as + # OpenSSH moves to it, but for now this is just for Ed25519 keys. + # This format is described here: + # https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key + # The description isn't totally complete, and I had to refer to the + # source for a full implementation. + message = Message(data) + if message.get_bytes(len(OPENSSH_AUTH_MAGIC)) != OPENSSH_AUTH_MAGIC: + raise SSHException("Invalid key") + + ciphername = message.get_text() + kdfname = message.get_text() + kdfoptions = message.get_binary() + num_keys = message.get_int() + + if kdfname == "none": + # kdfname of "none" must have an empty kdfoptions, the ciphername + # must be "none" + if kdfoptions or ciphername != "none": + raise SSHException("Invalid key") + elif kdfname == "bcrypt": + if not password: + raise PasswordRequiredException( + "Private key file is encrypted" + ) + kdf = Message(kdfoptions) + bcrypt_salt = kdf.get_binary() + bcrypt_rounds = kdf.get_int() + else: + raise SSHException("Invalid key") + + if ciphername != "none" and ciphername not in Transport._cipher_info: + raise SSHException("Invalid key") + + public_keys = [] + for _ in range(num_keys): + pubkey = Message(message.get_binary()) + if pubkey.get_text() != self.name: + raise SSHException("Invalid key") + public_keys.append(pubkey.get_binary()) + + private_ciphertext = message.get_binary() + if ciphername == "none": + private_data = private_ciphertext + else: + cipher = Transport._cipher_info[ciphername] + key = bcrypt.kdf( + password=b(password), + salt=bcrypt_salt, + desired_key_bytes=cipher["key-size"] + cipher["block-size"], + rounds=bcrypt_rounds, + # We can't control how many rounds are on disk, so no sense + # warning about it. + ignore_few_rounds=True, + ) + decryptor = Cipher( + cipher["class"](key[: cipher["key-size"]]), + cipher["mode"](key[cipher["key-size"] :]), + backend=default_backend(), + ).decryptor() + private_data = ( + decryptor.update(private_ciphertext) + decryptor.finalize() + ) + + message = Message(_unpad_openssh(private_data)) + if message.get_int() != message.get_int(): + raise SSHException("Invalid key") + + signing_keys = [] + for i in range(num_keys): + if message.get_text() != self.name: + raise SSHException("Invalid key") + # A copy of the public key, again, ignore. + public = message.get_binary() + key_data = message.get_binary() + # The second half of the key data is yet another copy of the public + # key... + signing_key = nacl.signing.SigningKey(key_data[:32]) + # Verify that all the public keys are the same... + assert ( + signing_key.verify_key.encode() + == public + == public_keys[i] + == key_data[32:] + ) + signing_keys.append(signing_key) + # Comment, ignore. + message.get_binary() + + if len(signing_keys) != 1: + raise SSHException("Invalid key") + return signing_keys[0] + + def asbytes(self): + if self.can_sign(): + v = self._signing_key.verify_key + else: + v = self._verifying_key + m = Message() + m.add_string(self.name) + m.add_string(v.encode()) + return m.asbytes() + + @property + def _fields(self): + if self.can_sign(): + v = self._signing_key.verify_key + else: + v = self._verifying_key + return (self.get_name(), v) + + # TODO 4.0: remove + def get_name(self): + return self.name + + def get_bits(self): + return 256 + + def can_sign(self): + return self._signing_key is not None + + def sign_ssh_data(self, data, algorithm=None): + m = Message() + m.add_string(self.name) + m.add_string(self._signing_key.sign(data).signature) + return m + + def verify_ssh_sig(self, data, msg): + if msg.get_text() != self.name: + return False + + try: + self._verifying_key.verify(data, msg.get_binary()) + except nacl.exceptions.BadSignatureError: + return False + else: + return True diff --git a/venv/lib/python3.11/site-packages/paramiko/file.py b/venv/lib/python3.11/site-packages/paramiko/file.py new file mode 100644 index 0000000..a36abb9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/file.py @@ -0,0 +1,528 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +from io import BytesIO + +from paramiko.common import ( + linefeed_byte_value, + crlf, + cr_byte, + linefeed_byte, + cr_byte_value, +) + +from paramiko.util import ClosingContextManager, u + + +class BufferedFile(ClosingContextManager): + """ + Reusable base class to implement Python-style file buffering around a + simpler stream. + """ + + _DEFAULT_BUFSIZE = 8192 + + SEEK_SET = 0 + SEEK_CUR = 1 + SEEK_END = 2 + + FLAG_READ = 0x1 + FLAG_WRITE = 0x2 + FLAG_APPEND = 0x4 + FLAG_BINARY = 0x10 + FLAG_BUFFERED = 0x20 + FLAG_LINE_BUFFERED = 0x40 + FLAG_UNIVERSAL_NEWLINE = 0x80 + + def __init__(self): + self.newlines = None + self._flags = 0 + self._bufsize = self._DEFAULT_BUFSIZE + self._wbuffer = BytesIO() + self._rbuffer = bytes() + self._at_trailing_cr = False + self._closed = False + # pos - position within the file, according to the user + # realpos - position according the OS + # (these may be different because we buffer for line reading) + self._pos = self._realpos = 0 + # size only matters for seekable files + self._size = 0 + + def __del__(self): + self.close() + + def __iter__(self): + """ + Returns an iterator that can be used to iterate over the lines in this + file. This iterator happens to return the file itself, since a file is + its own iterator. + + :raises: ``ValueError`` -- if the file is closed. + """ + if self._closed: + raise ValueError("I/O operation on closed file") + return self + + def close(self): + """ + Close the file. Future read and write operations will fail. + """ + self.flush() + self._closed = True + + def flush(self): + """ + Write out any data in the write buffer. This may do nothing if write + buffering is not turned on. + """ + self._write_all(self._wbuffer.getvalue()) + self._wbuffer = BytesIO() + return + + def __next__(self): + """ + Returns the next line from the input, or raises ``StopIteration`` + when EOF is hit. Unlike python file objects, it's okay to mix + calls to `.next` and `.readline`. + + :raises: ``StopIteration`` -- when the end of the file is reached. + + :returns: + a line (`str`, or `bytes` if the file was opened in binary mode) + read from the file. + """ + line = self.readline() + if not line: + raise StopIteration + return line + + def readable(self): + """ + Check if the file can be read from. + + :returns: + `True` if the file can be read from. If `False`, `read` will raise + an exception. + """ + return (self._flags & self.FLAG_READ) == self.FLAG_READ + + def writable(self): + """ + Check if the file can be written to. + + :returns: + `True` if the file can be written to. If `False`, `write` will + raise an exception. + """ + return (self._flags & self.FLAG_WRITE) == self.FLAG_WRITE + + def seekable(self): + """ + Check if the file supports random access. + + :returns: + `True` if the file supports random access. If `False`, `seek` will + raise an exception. + """ + return False + + def readinto(self, buff): + """ + Read up to ``len(buff)`` bytes into ``bytearray`` *buff* and return the + number of bytes read. + + :returns: + The number of bytes read. + """ + data = self.read(len(buff)) + buff[: len(data)] = data + return len(data) + + def read(self, size=None): + """ + Read at most ``size`` bytes from the file (less if we hit the end of + the file first). If the ``size`` argument is negative or omitted, + read all the remaining data in the file. + + .. note:: + ``'b'`` mode flag is ignored (``self.FLAG_BINARY`` in + ``self._flags``), because SSH treats all files as binary, since we + have no idea what encoding the file is in, or even if the file is + text data. + + :param int size: maximum number of bytes to read + :returns: + data read from the file (as bytes), or an empty string if EOF was + encountered immediately + """ + if self._closed: + raise IOError("File is closed") + if not (self._flags & self.FLAG_READ): + raise IOError("File is not open for reading") + if (size is None) or (size < 0): + # go for broke + result = bytearray(self._rbuffer) + self._rbuffer = bytes() + self._pos += len(result) + while True: + try: + new_data = self._read(self._DEFAULT_BUFSIZE) + except EOFError: + new_data = None + if (new_data is None) or (len(new_data) == 0): + break + result.extend(new_data) + self._realpos += len(new_data) + self._pos += len(new_data) + return bytes(result) + if size <= len(self._rbuffer): + result = self._rbuffer[:size] + self._rbuffer = self._rbuffer[size:] + self._pos += len(result) + return result + while len(self._rbuffer) < size: + read_size = size - len(self._rbuffer) + if self._flags & self.FLAG_BUFFERED: + read_size = max(self._bufsize, read_size) + try: + new_data = self._read(read_size) + except EOFError: + new_data = None + if (new_data is None) or (len(new_data) == 0): + break + self._rbuffer += new_data + self._realpos += len(new_data) + result = self._rbuffer[:size] + self._rbuffer = self._rbuffer[size:] + self._pos += len(result) + return result + + def readline(self, size=None): + """ + Read one entire line from the file. A trailing newline character is + kept in the string (but may be absent when a file ends with an + incomplete line). If the size argument is present and non-negative, it + is a maximum byte count (including the trailing newline) and an + incomplete line may be returned. An empty string is returned only when + EOF is encountered immediately. + + .. note:: + Unlike stdio's ``fgets``, the returned string contains null + characters (``'\\0'``) if they occurred in the input. + + :param int size: maximum length of returned string. + :returns: + next line of the file, or an empty string if the end of the + file has been reached. + + If the file was opened in binary (``'b'``) mode: bytes are returned + Else: the encoding of the file is assumed to be UTF-8 and character + strings (`str`) are returned + """ + # it's almost silly how complex this function is. + if self._closed: + raise IOError("File is closed") + if not (self._flags & self.FLAG_READ): + raise IOError("File not open for reading") + line = self._rbuffer + truncated = False + while True: + if ( + self._at_trailing_cr + and self._flags & self.FLAG_UNIVERSAL_NEWLINE + and len(line) > 0 + ): + # edge case: the newline may be '\r\n' and we may have read + # only the first '\r' last time. + if line[0] == linefeed_byte_value: + line = line[1:] + self._record_newline(crlf) + else: + self._record_newline(cr_byte) + self._at_trailing_cr = False + # check size before looking for a linefeed, in case we already have + # enough. + if (size is not None) and (size >= 0): + if len(line) >= size: + # truncate line + self._rbuffer = line[size:] + line = line[:size] + truncated = True + break + n = size - len(line) + else: + n = self._bufsize + if linefeed_byte in line or ( + self._flags & self.FLAG_UNIVERSAL_NEWLINE and cr_byte in line + ): + break + try: + new_data = self._read(n) + except EOFError: + new_data = None + if (new_data is None) or (len(new_data) == 0): + self._rbuffer = bytes() + self._pos += len(line) + return line if self._flags & self.FLAG_BINARY else u(line) + line += new_data + self._realpos += len(new_data) + # find the newline + pos = line.find(linefeed_byte) + if self._flags & self.FLAG_UNIVERSAL_NEWLINE: + rpos = line.find(cr_byte) + if (rpos >= 0) and (rpos < pos or pos < 0): + pos = rpos + if pos == -1: + # we couldn't find a newline in the truncated string, return it + self._pos += len(line) + return line if self._flags & self.FLAG_BINARY else u(line) + xpos = pos + 1 + if ( + line[pos] == cr_byte_value + and xpos < len(line) + and line[xpos] == linefeed_byte_value + ): + xpos += 1 + # if the string was truncated, _rbuffer needs to have the string after + # the newline character plus the truncated part of the line we stored + # earlier in _rbuffer + if truncated: + self._rbuffer = line[xpos:] + self._rbuffer + else: + self._rbuffer = line[xpos:] + + lf = line[pos:xpos] + line = line[:pos] + linefeed_byte + if (len(self._rbuffer) == 0) and (lf == cr_byte): + # we could read the line up to a '\r' and there could still be a + # '\n' following that we read next time. note that and eat it. + self._at_trailing_cr = True + else: + self._record_newline(lf) + self._pos += len(line) + return line if self._flags & self.FLAG_BINARY else u(line) + + def readlines(self, sizehint=None): + """ + Read all remaining lines using `readline` and return them as a list. + If the optional ``sizehint`` argument is present, instead of reading up + to EOF, whole lines totalling approximately sizehint bytes (possibly + after rounding up to an internal buffer size) are read. + + :param int sizehint: desired maximum number of bytes to read. + :returns: list of lines read from the file. + """ + lines = [] + byte_count = 0 + while True: + line = self.readline() + if len(line) == 0: + break + lines.append(line) + byte_count += len(line) + if (sizehint is not None) and (byte_count >= sizehint): + break + return lines + + def seek(self, offset, whence=0): + """ + Set the file's current position, like stdio's ``fseek``. Not all file + objects support seeking. + + .. note:: + If a file is opened in append mode (``'a'`` or ``'a+'``), any seek + operations will be undone at the next write (as the file position + will move back to the end of the file). + + :param int offset: + position to move to within the file, relative to ``whence``. + :param int whence: + type of movement: 0 = absolute; 1 = relative to the current + position; 2 = relative to the end of the file. + + :raises: ``IOError`` -- if the file doesn't support random access. + """ + raise IOError("File does not support seeking.") + + def tell(self): + """ + Return the file's current position. This may not be accurate or + useful if the underlying file doesn't support random access, or was + opened in append mode. + + :returns: file position (`number ` of bytes). + """ + return self._pos + + def write(self, data): + """ + Write data to the file. If write buffering is on (``bufsize`` was + specified and non-zero), some or all of the data may not actually be + written yet. (Use `flush` or `close` to force buffered data to be + written out.) + + :param data: ``str``/``bytes`` data to write + """ + if isinstance(data, str): + # Accept text and encode as utf-8 for compatibility only. + data = data.encode("utf-8") + if self._closed: + raise IOError("File is closed") + if not (self._flags & self.FLAG_WRITE): + raise IOError("File not open for writing") + if not (self._flags & self.FLAG_BUFFERED): + self._write_all(data) + return + self._wbuffer.write(data) + if self._flags & self.FLAG_LINE_BUFFERED: + # only scan the new data for linefeed, to avoid wasting time. + last_newline_pos = data.rfind(linefeed_byte) + if last_newline_pos >= 0: + wbuf = self._wbuffer.getvalue() + last_newline_pos += len(wbuf) - len(data) + self._write_all(wbuf[: last_newline_pos + 1]) + self._wbuffer = BytesIO() + self._wbuffer.write(wbuf[last_newline_pos + 1 :]) + return + # even if we're line buffering, if the buffer has grown past the + # buffer size, force a flush. + if self._wbuffer.tell() >= self._bufsize: + self.flush() + return + + def writelines(self, sequence): + """ + Write a sequence of strings to the file. The sequence can be any + iterable object producing strings, typically a list of strings. (The + name is intended to match `readlines`; `writelines` does not add line + separators.) + + :param sequence: an iterable sequence of strings. + """ + for line in sequence: + self.write(line) + return + + def xreadlines(self): + """ + Identical to ``iter(f)``. This is a deprecated file interface that + predates Python iterator support. + """ + return self + + @property + def closed(self): + return self._closed + + # ...overrides... + + def _read(self, size): + """ + (subclass override) + Read data from the stream. Return ``None`` or raise ``EOFError`` to + indicate EOF. + """ + raise EOFError() + + def _write(self, data): + """ + (subclass override) + Write data into the stream. + """ + raise IOError("write not implemented") + + def _get_size(self): + """ + (subclass override) + Return the size of the file. This is called from within `_set_mode` + if the file is opened in append mode, so the file position can be + tracked and `seek` and `tell` will work correctly. If the file is + a stream that can't be randomly accessed, you don't need to override + this method, + """ + return 0 + + # ...internals... + + def _set_mode(self, mode="r", bufsize=-1): + """ + Subclasses call this method to initialize the BufferedFile. + """ + # set bufsize in any event, because it's used for readline(). + self._bufsize = self._DEFAULT_BUFSIZE + if bufsize < 0: + # do no buffering by default, because otherwise writes will get + # buffered in a way that will probably confuse people. + bufsize = 0 + if bufsize == 1: + # apparently, line buffering only affects writes. reads are only + # buffered if you call readline (directly or indirectly: iterating + # over a file will indirectly call readline). + self._flags |= self.FLAG_BUFFERED | self.FLAG_LINE_BUFFERED + elif bufsize > 1: + self._bufsize = bufsize + self._flags |= self.FLAG_BUFFERED + self._flags &= ~self.FLAG_LINE_BUFFERED + elif bufsize == 0: + # unbuffered + self._flags &= ~(self.FLAG_BUFFERED | self.FLAG_LINE_BUFFERED) + + if ("r" in mode) or ("+" in mode): + self._flags |= self.FLAG_READ + if ("w" in mode) or ("+" in mode): + self._flags |= self.FLAG_WRITE + if "a" in mode: + self._flags |= self.FLAG_WRITE | self.FLAG_APPEND + self._size = self._get_size() + self._pos = self._realpos = self._size + if "b" in mode: + self._flags |= self.FLAG_BINARY + if "U" in mode: + self._flags |= self.FLAG_UNIVERSAL_NEWLINE + # built-in file objects have this attribute to store which kinds of + # line terminations they've seen: + # + self.newlines = None + + def _write_all(self, raw_data): + # the underlying stream may be something that does partial writes (like + # a socket). + data = memoryview(raw_data) + while len(data) > 0: + count = self._write(data) + data = data[count:] + if self._flags & self.FLAG_APPEND: + self._size += count + self._pos = self._realpos = self._size + else: + self._pos += count + self._realpos += count + return None + + def _record_newline(self, newline): + # silliness about tracking what kinds of newlines we've seen. + # i don't understand why it can be None, a string, or a tuple, instead + # of just always being a tuple, but we'll emulate that behavior anyway. + if not (self._flags & self.FLAG_UNIVERSAL_NEWLINE): + return + if self.newlines is None: + self.newlines = newline + elif self.newlines != newline and isinstance(self.newlines, bytes): + self.newlines = (self.newlines, newline) + elif newline not in self.newlines: + self.newlines += (newline,) diff --git a/venv/lib/python3.11/site-packages/paramiko/hostkeys.py b/venv/lib/python3.11/site-packages/paramiko/hostkeys.py new file mode 100644 index 0000000..4d47e95 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/hostkeys.py @@ -0,0 +1,384 @@ +# Copyright (C) 2006-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +from base64 import encodebytes, decodebytes +import binascii +import os +import re + +from collections.abc import MutableMapping +from hashlib import sha1 +from hmac import HMAC + + +from paramiko.pkey import PKey, UnknownKeyType +from paramiko.util import get_logger, constant_time_bytes_eq, b, u +from paramiko.ssh_exception import SSHException + + +class HostKeys(MutableMapping): + """ + Representation of an OpenSSH-style "known hosts" file. Host keys can be + read from one or more files, and then individual hosts can be looked up to + verify server keys during SSH negotiation. + + A `.HostKeys` object can be treated like a dict; any dict lookup is + equivalent to calling `lookup`. + + .. versionadded:: 1.5.3 + """ + + def __init__(self, filename=None): + """ + Create a new HostKeys object, optionally loading keys from an OpenSSH + style host-key file. + + :param str filename: filename to load host keys from, or ``None`` + """ + # emulate a dict of { hostname: { keytype: PKey } } + self._entries = [] + if filename is not None: + self.load(filename) + + def add(self, hostname, keytype, key): + """ + Add a host key entry to the table. Any existing entry for a + ``(hostname, keytype)`` pair will be replaced. + + :param str hostname: the hostname (or IP) to add + :param str keytype: key type (``"ssh-rsa"`` or ``"ssh-dss"``) + :param .PKey key: the key to add + """ + for e in self._entries: + if (hostname in e.hostnames) and (e.key.get_name() == keytype): + e.key = key + return + self._entries.append(HostKeyEntry([hostname], key)) + + def load(self, filename): + """ + Read a file of known SSH host keys, in the format used by OpenSSH. + This type of file unfortunately doesn't exist on Windows, but on + posix, it will usually be stored in + ``os.path.expanduser("~/.ssh/known_hosts")``. + + If this method is called multiple times, the host keys are merged, + not cleared. So multiple calls to `load` will just call `add`, + replacing any existing entries and adding new ones. + + :param str filename: name of the file to read host keys from + + :raises: ``IOError`` -- if there was an error reading the file + """ + with open(filename, "r") as f: + for lineno, line in enumerate(f, 1): + line = line.strip() + if (len(line) == 0) or (line[0] == "#"): + continue + try: + entry = HostKeyEntry.from_line(line, lineno) + except SSHException: + continue + if entry is not None: + _hostnames = entry.hostnames + for h in _hostnames: + if self.check(h, entry.key): + entry.hostnames.remove(h) + if len(entry.hostnames): + self._entries.append(entry) + + def save(self, filename): + """ + Save host keys into a file, in the format used by OpenSSH. The order + of keys in the file will be preserved when possible (if these keys were + loaded from a file originally). The single exception is that combined + lines will be split into individual key lines, which is arguably a bug. + + :param str filename: name of the file to write + + :raises: ``IOError`` -- if there was an error writing the file + + .. versionadded:: 1.6.1 + """ + with open(filename, "w") as f: + for e in self._entries: + line = e.to_line() + if line: + f.write(line) + + def lookup(self, hostname): + """ + Find a hostkey entry for a given hostname or IP. If no entry is found, + ``None`` is returned. Otherwise a dictionary of keytype to key is + returned. The keytype will be either ``"ssh-rsa"`` or ``"ssh-dss"``. + + :param str hostname: the hostname (or IP) to lookup + :return: dict of `str` -> `.PKey` keys associated with this host + (or ``None``) + """ + + class SubDict(MutableMapping): + def __init__(self, hostname, entries, hostkeys): + self._hostname = hostname + self._entries = entries + self._hostkeys = hostkeys + + def __iter__(self): + for k in self.keys(): + yield k + + def __len__(self): + return len(self.keys()) + + def __delitem__(self, key): + for e in list(self._entries): + if e.key.get_name() == key: + self._entries.remove(e) + break + else: + raise KeyError(key) + + def __getitem__(self, key): + for e in self._entries: + if e.key.get_name() == key: + return e.key + raise KeyError(key) + + def __setitem__(self, key, val): + for e in self._entries: + if e.key is None: + continue + if e.key.get_name() == key: + # replace + e.key = val + break + else: + # add a new one + e = HostKeyEntry([hostname], val) + self._entries.append(e) + self._hostkeys._entries.append(e) + + def keys(self): + return [ + e.key.get_name() + for e in self._entries + if e.key is not None + ] + + entries = [] + for e in self._entries: + if self._hostname_matches(hostname, e): + entries.append(e) + if len(entries) == 0: + return None + return SubDict(hostname, entries, self) + + def _hostname_matches(self, hostname, entry): + """ + Tests whether ``hostname`` string matches given SubDict ``entry``. + + :returns bool: + """ + for h in entry.hostnames: + if ( + h == hostname + or h.startswith("|1|") + and not hostname.startswith("|1|") + and constant_time_bytes_eq(self.hash_host(hostname, h), h) + ): + return True + return False + + def check(self, hostname, key): + """ + Return True if the given key is associated with the given hostname + in this dictionary. + + :param str hostname: hostname (or IP) of the SSH server + :param .PKey key: the key to check + :return: + ``True`` if the key is associated with the hostname; else ``False`` + """ + k = self.lookup(hostname) + if k is None: + return False + host_key = k.get(key.get_name(), None) + if host_key is None: + return False + return host_key.asbytes() == key.asbytes() + + def clear(self): + """ + Remove all host keys from the dictionary. + """ + self._entries = [] + + def __iter__(self): + for k in self.keys(): + yield k + + def __len__(self): + return len(self.keys()) + + def __getitem__(self, key): + ret = self.lookup(key) + if ret is None: + raise KeyError(key) + return ret + + def __delitem__(self, key): + index = None + for i, entry in enumerate(self._entries): + if self._hostname_matches(key, entry): + index = i + break + if index is None: + raise KeyError(key) + self._entries.pop(index) + + def __setitem__(self, hostname, entry): + # don't use this please. + if len(entry) == 0: + self._entries.append(HostKeyEntry([hostname], None)) + return + for key_type in entry.keys(): + found = False + for e in self._entries: + if (hostname in e.hostnames) and e.key.get_name() == key_type: + # replace + e.key = entry[key_type] + found = True + if not found: + self._entries.append(HostKeyEntry([hostname], entry[key_type])) + + def keys(self): + ret = [] + for e in self._entries: + for h in e.hostnames: + if h not in ret: + ret.append(h) + return ret + + def values(self): + ret = [] + for k in self.keys(): + ret.append(self.lookup(k)) + return ret + + @staticmethod + def hash_host(hostname, salt=None): + """ + Return a "hashed" form of the hostname, as used by OpenSSH when storing + hashed hostnames in the known_hosts file. + + :param str hostname: the hostname to hash + :param str salt: optional salt to use when hashing + (must be 20 bytes long) + :return: the hashed hostname as a `str` + """ + if salt is None: + salt = os.urandom(sha1().digest_size) + else: + if salt.startswith("|1|"): + salt = salt.split("|")[2] + salt = decodebytes(b(salt)) + assert len(salt) == sha1().digest_size + hmac = HMAC(salt, b(hostname), sha1).digest() + hostkey = "|1|{}|{}".format(u(encodebytes(salt)), u(encodebytes(hmac))) + return hostkey.replace("\n", "") + + +class InvalidHostKey(Exception): + def __init__(self, line, exc): + self.line = line + self.exc = exc + self.args = (line, exc) + + +class HostKeyEntry: + """ + Representation of a line in an OpenSSH-style "known hosts" file. + """ + + def __init__(self, hostnames=None, key=None): + self.valid = (hostnames is not None) and (key is not None) + self.hostnames = hostnames + self.key = key + + @classmethod + def from_line(cls, line, lineno=None): + """ + Parses the given line of text to find the names for the host, + the type of key, and the key data. The line is expected to be in the + format used by the OpenSSH known_hosts file. Fields are separated by a + single space or tab. + + Lines are expected to not have leading or trailing whitespace. + We don't bother to check for comments or empty lines. All of + that should be taken care of before sending the line to us. + + :param str line: a line from an OpenSSH known_hosts file + """ + log = get_logger("paramiko.hostkeys") + fields = re.split(" |\t", line) + if len(fields) < 3: + # Bad number of fields + msg = "Not enough fields found in known_hosts in line {} ({!r})" + log.info(msg.format(lineno, line)) + return None + fields = fields[:3] + + names, key_type, key = fields + names = names.split(",") + + # Decide what kind of key we're looking at and create an object + # to hold it accordingly. + try: + # TODO: this grew organically and doesn't seem /wrong/ per se (file + # read -> unicode str -> bytes for base64 decode -> decoded bytes); + # but in Python 3 forever land, can we simply use + # `base64.b64decode(str-from-file)` here? + key_bytes = decodebytes(b(key)) + except binascii.Error as e: + raise InvalidHostKey(line, e) + + try: + return cls(names, PKey.from_type_string(key_type, key_bytes)) + except UnknownKeyType: + # TODO 4.0: consider changing HostKeys API so this just raises + # naturally and the exception is muted higher up in the stack? + log.info("Unable to handle key of type {}".format(key_type)) + return None + + def to_line(self): + """ + Returns a string in OpenSSH known_hosts file format, or None if + the object is not in a valid state. A trailing newline is + included. + """ + if self.valid: + return "{} {} {}\n".format( + ",".join(self.hostnames), + self.key.get_name(), + self.key.get_base64(), + ) + return None + + def __repr__(self): + return "".format(self.hostnames, self.key) diff --git a/venv/lib/python3.11/site-packages/paramiko/kex_curve25519.py b/venv/lib/python3.11/site-packages/paramiko/kex_curve25519.py new file mode 100644 index 0000000..20c23e4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/kex_curve25519.py @@ -0,0 +1,131 @@ +import binascii +import hashlib + +from cryptography.exceptions import UnsupportedAlgorithm +from cryptography.hazmat.primitives import constant_time, serialization +from cryptography.hazmat.primitives.asymmetric.x25519 import ( + X25519PrivateKey, + X25519PublicKey, +) + +from paramiko.message import Message +from paramiko.common import byte_chr +from paramiko.ssh_exception import SSHException + + +_MSG_KEXECDH_INIT, _MSG_KEXECDH_REPLY = range(30, 32) +c_MSG_KEXECDH_INIT, c_MSG_KEXECDH_REPLY = [byte_chr(c) for c in range(30, 32)] + + +class KexCurve25519: + hash_algo = hashlib.sha256 + + def __init__(self, transport): + self.transport = transport + self.key = None + + @classmethod + def is_available(cls): + try: + X25519PrivateKey.generate() + except UnsupportedAlgorithm: + return False + else: + return True + + def _perform_exchange(self, peer_key): + secret = self.key.exchange(peer_key) + if constant_time.bytes_eq(secret, b"\x00" * 32): + raise SSHException( + "peer's curve25519 public value has wrong order" + ) + return secret + + def start_kex(self): + self.key = X25519PrivateKey.generate() + if self.transport.server_mode: + self.transport._expect_packet(_MSG_KEXECDH_INIT) + return + + m = Message() + m.add_byte(c_MSG_KEXECDH_INIT) + m.add_string( + self.key.public_key().public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) + ) + self.transport._send_message(m) + self.transport._expect_packet(_MSG_KEXECDH_REPLY) + + def parse_next(self, ptype, m): + if self.transport.server_mode and (ptype == _MSG_KEXECDH_INIT): + return self._parse_kexecdh_init(m) + elif not self.transport.server_mode and (ptype == _MSG_KEXECDH_REPLY): + return self._parse_kexecdh_reply(m) + raise SSHException( + "KexCurve25519 asked to handle packet type {:d}".format(ptype) + ) + + def _parse_kexecdh_init(self, m): + peer_key_bytes = m.get_string() + peer_key = X25519PublicKey.from_public_bytes(peer_key_bytes) + K = self._perform_exchange(peer_key) + K = int(binascii.hexlify(K), 16) + # compute exchange hash + hm = Message() + hm.add( + self.transport.remote_version, + self.transport.local_version, + self.transport.remote_kex_init, + self.transport.local_kex_init, + ) + server_key_bytes = self.transport.get_server_key().asbytes() + exchange_key_bytes = self.key.public_key().public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) + hm.add_string(server_key_bytes) + hm.add_string(peer_key_bytes) + hm.add_string(exchange_key_bytes) + hm.add_mpint(K) + H = self.hash_algo(hm.asbytes()).digest() + self.transport._set_K_H(K, H) + sig = self.transport.get_server_key().sign_ssh_data( + H, self.transport.host_key_type + ) + # construct reply + m = Message() + m.add_byte(c_MSG_KEXECDH_REPLY) + m.add_string(server_key_bytes) + m.add_string(exchange_key_bytes) + m.add_string(sig) + self.transport._send_message(m) + self.transport._activate_outbound() + + def _parse_kexecdh_reply(self, m): + peer_host_key_bytes = m.get_string() + peer_key_bytes = m.get_string() + sig = m.get_binary() + + peer_key = X25519PublicKey.from_public_bytes(peer_key_bytes) + + K = self._perform_exchange(peer_key) + K = int(binascii.hexlify(K), 16) + # compute exchange hash and verify signature + hm = Message() + hm.add( + self.transport.local_version, + self.transport.remote_version, + self.transport.local_kex_init, + self.transport.remote_kex_init, + ) + hm.add_string(peer_host_key_bytes) + hm.add_string( + self.key.public_key().public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw + ) + ) + hm.add_string(peer_key_bytes) + hm.add_mpint(K) + self.transport._set_K_H(K, self.hash_algo(hm.asbytes()).digest()) + self.transport._verify_key(peer_host_key_bytes, sig) + self.transport._activate_outbound() diff --git a/venv/lib/python3.11/site-packages/paramiko/kex_ecdh_nist.py b/venv/lib/python3.11/site-packages/paramiko/kex_ecdh_nist.py new file mode 100644 index 0000000..41fab46 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/kex_ecdh_nist.py @@ -0,0 +1,151 @@ +""" +Ephemeral Elliptic Curve Diffie-Hellman (ECDH) key exchange +RFC 5656, Section 4 +""" + +from hashlib import sha256, sha384, sha512 +from paramiko.common import byte_chr +from paramiko.message import Message +from paramiko.ssh_exception import SSHException +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.asymmetric import ec +from cryptography.hazmat.primitives import serialization +from binascii import hexlify + +_MSG_KEXECDH_INIT, _MSG_KEXECDH_REPLY = range(30, 32) +c_MSG_KEXECDH_INIT, c_MSG_KEXECDH_REPLY = [byte_chr(c) for c in range(30, 32)] + + +class KexNistp256: + + name = "ecdh-sha2-nistp256" + hash_algo = sha256 + curve = ec.SECP256R1() + + def __init__(self, transport): + self.transport = transport + # private key, client public and server public keys + self.P = 0 + self.Q_C = None + self.Q_S = None + + def start_kex(self): + self._generate_key_pair() + if self.transport.server_mode: + self.transport._expect_packet(_MSG_KEXECDH_INIT) + return + m = Message() + m.add_byte(c_MSG_KEXECDH_INIT) + # SEC1: V2.0 2.3.3 Elliptic-Curve-Point-to-Octet-String Conversion + m.add_string( + self.Q_C.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.UncompressedPoint, + ) + ) + self.transport._send_message(m) + self.transport._expect_packet(_MSG_KEXECDH_REPLY) + + def parse_next(self, ptype, m): + if self.transport.server_mode and (ptype == _MSG_KEXECDH_INIT): + return self._parse_kexecdh_init(m) + elif not self.transport.server_mode and (ptype == _MSG_KEXECDH_REPLY): + return self._parse_kexecdh_reply(m) + raise SSHException( + "KexECDH asked to handle packet type {:d}".format(ptype) + ) + + def _generate_key_pair(self): + self.P = ec.generate_private_key(self.curve, default_backend()) + if self.transport.server_mode: + self.Q_S = self.P.public_key() + return + self.Q_C = self.P.public_key() + + def _parse_kexecdh_init(self, m): + Q_C_bytes = m.get_string() + self.Q_C = ec.EllipticCurvePublicKey.from_encoded_point( + self.curve, Q_C_bytes + ) + K_S = self.transport.get_server_key().asbytes() + K = self.P.exchange(ec.ECDH(), self.Q_C) + K = int(hexlify(K), 16) + # compute exchange hash + hm = Message() + hm.add( + self.transport.remote_version, + self.transport.local_version, + self.transport.remote_kex_init, + self.transport.local_kex_init, + ) + hm.add_string(K_S) + hm.add_string(Q_C_bytes) + # SEC1: V2.0 2.3.3 Elliptic-Curve-Point-to-Octet-String Conversion + hm.add_string( + self.Q_S.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.UncompressedPoint, + ) + ) + hm.add_mpint(int(K)) + H = self.hash_algo(hm.asbytes()).digest() + self.transport._set_K_H(K, H) + sig = self.transport.get_server_key().sign_ssh_data( + H, self.transport.host_key_type + ) + # construct reply + m = Message() + m.add_byte(c_MSG_KEXECDH_REPLY) + m.add_string(K_S) + m.add_string( + self.Q_S.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.UncompressedPoint, + ) + ) + m.add_string(sig) + self.transport._send_message(m) + self.transport._activate_outbound() + + def _parse_kexecdh_reply(self, m): + K_S = m.get_string() + Q_S_bytes = m.get_string() + self.Q_S = ec.EllipticCurvePublicKey.from_encoded_point( + self.curve, Q_S_bytes + ) + sig = m.get_binary() + K = self.P.exchange(ec.ECDH(), self.Q_S) + K = int(hexlify(K), 16) + # compute exchange hash and verify signature + hm = Message() + hm.add( + self.transport.local_version, + self.transport.remote_version, + self.transport.local_kex_init, + self.transport.remote_kex_init, + ) + hm.add_string(K_S) + # SEC1: V2.0 2.3.3 Elliptic-Curve-Point-to-Octet-String Conversion + hm.add_string( + self.Q_C.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.UncompressedPoint, + ) + ) + hm.add_string(Q_S_bytes) + hm.add_mpint(K) + self.transport._set_K_H(K, self.hash_algo(hm.asbytes()).digest()) + self.transport._verify_key(K_S, sig) + self.transport._activate_outbound() + + +class KexNistp384(KexNistp256): + name = "ecdh-sha2-nistp384" + hash_algo = sha384 + curve = ec.SECP384R1() + + +class KexNistp521(KexNistp256): + name = "ecdh-sha2-nistp521" + hash_algo = sha512 + curve = ec.SECP521R1() diff --git a/venv/lib/python3.11/site-packages/paramiko/kex_gex.py b/venv/lib/python3.11/site-packages/paramiko/kex_gex.py new file mode 100644 index 0000000..baa0803 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/kex_gex.py @@ -0,0 +1,288 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Variant on `KexGroup1 ` where the prime "p" and +generator "g" are provided by the server. A bit more work is required on the +client side, and a **lot** more on the server side. +""" + +import os +from hashlib import sha1, sha256 + +from paramiko import util +from paramiko.common import DEBUG, byte_chr, byte_ord, byte_mask +from paramiko.message import Message +from paramiko.ssh_exception import SSHException + + +( + _MSG_KEXDH_GEX_REQUEST_OLD, + _MSG_KEXDH_GEX_GROUP, + _MSG_KEXDH_GEX_INIT, + _MSG_KEXDH_GEX_REPLY, + _MSG_KEXDH_GEX_REQUEST, +) = range(30, 35) + +( + c_MSG_KEXDH_GEX_REQUEST_OLD, + c_MSG_KEXDH_GEX_GROUP, + c_MSG_KEXDH_GEX_INIT, + c_MSG_KEXDH_GEX_REPLY, + c_MSG_KEXDH_GEX_REQUEST, +) = [byte_chr(c) for c in range(30, 35)] + + +class KexGex: + + name = "diffie-hellman-group-exchange-sha1" + min_bits = 1024 + max_bits = 8192 + preferred_bits = 2048 + hash_algo = sha1 + + def __init__(self, transport): + self.transport = transport + self.p = None + self.q = None + self.g = None + self.x = None + self.e = None + self.f = None + self.old_style = False + + def start_kex(self, _test_old_style=False): + if self.transport.server_mode: + self.transport._expect_packet( + _MSG_KEXDH_GEX_REQUEST, _MSG_KEXDH_GEX_REQUEST_OLD + ) + return + # request a bit range: we accept (min_bits) to (max_bits), but prefer + # (preferred_bits). according to the spec, we shouldn't pull the + # minimum up above 1024. + m = Message() + if _test_old_style: + # only used for unit tests: we shouldn't ever send this + m.add_byte(c_MSG_KEXDH_GEX_REQUEST_OLD) + m.add_int(self.preferred_bits) + self.old_style = True + else: + m.add_byte(c_MSG_KEXDH_GEX_REQUEST) + m.add_int(self.min_bits) + m.add_int(self.preferred_bits) + m.add_int(self.max_bits) + self.transport._send_message(m) + self.transport._expect_packet(_MSG_KEXDH_GEX_GROUP) + + def parse_next(self, ptype, m): + if ptype == _MSG_KEXDH_GEX_REQUEST: + return self._parse_kexdh_gex_request(m) + elif ptype == _MSG_KEXDH_GEX_GROUP: + return self._parse_kexdh_gex_group(m) + elif ptype == _MSG_KEXDH_GEX_INIT: + return self._parse_kexdh_gex_init(m) + elif ptype == _MSG_KEXDH_GEX_REPLY: + return self._parse_kexdh_gex_reply(m) + elif ptype == _MSG_KEXDH_GEX_REQUEST_OLD: + return self._parse_kexdh_gex_request_old(m) + msg = "KexGex {} asked to handle packet type {:d}" + raise SSHException(msg.format(self.name, ptype)) + + # ...internals... + + def _generate_x(self): + # generate an "x" (1 < x < (p-1)/2). + q = (self.p - 1) // 2 + qnorm = util.deflate_long(q, 0) + qhbyte = byte_ord(qnorm[0]) + byte_count = len(qnorm) + qmask = 0xFF + while not (qhbyte & 0x80): + qhbyte <<= 1 + qmask >>= 1 + while True: + x_bytes = os.urandom(byte_count) + x_bytes = byte_mask(x_bytes[0], qmask) + x_bytes[1:] + x = util.inflate_long(x_bytes, 1) + if (x > 1) and (x < q): + break + self.x = x + + def _parse_kexdh_gex_request(self, m): + minbits = m.get_int() + preferredbits = m.get_int() + maxbits = m.get_int() + # smoosh the user's preferred size into our own limits + if preferredbits > self.max_bits: + preferredbits = self.max_bits + if preferredbits < self.min_bits: + preferredbits = self.min_bits + # fix min/max if they're inconsistent. technically, we could just pout + # and hang up, but there's no harm in giving them the benefit of the + # doubt and just picking a bitsize for them. + if minbits > preferredbits: + minbits = preferredbits + if maxbits < preferredbits: + maxbits = preferredbits + # now save a copy + self.min_bits = minbits + self.preferred_bits = preferredbits + self.max_bits = maxbits + # generate prime + pack = self.transport._get_modulus_pack() + if pack is None: + raise SSHException("Can't do server-side gex with no modulus pack") + self.transport._log( + DEBUG, + "Picking p ({} <= {} <= {} bits)".format( + minbits, preferredbits, maxbits + ), + ) + self.g, self.p = pack.get_modulus(minbits, preferredbits, maxbits) + m = Message() + m.add_byte(c_MSG_KEXDH_GEX_GROUP) + m.add_mpint(self.p) + m.add_mpint(self.g) + self.transport._send_message(m) + self.transport._expect_packet(_MSG_KEXDH_GEX_INIT) + + def _parse_kexdh_gex_request_old(self, m): + # same as above, but without min_bits or max_bits (used by older + # clients like putty) + self.preferred_bits = m.get_int() + # smoosh the user's preferred size into our own limits + if self.preferred_bits > self.max_bits: + self.preferred_bits = self.max_bits + if self.preferred_bits < self.min_bits: + self.preferred_bits = self.min_bits + # generate prime + pack = self.transport._get_modulus_pack() + if pack is None: + raise SSHException("Can't do server-side gex with no modulus pack") + self.transport._log( + DEBUG, "Picking p (~ {} bits)".format(self.preferred_bits) + ) + self.g, self.p = pack.get_modulus( + self.min_bits, self.preferred_bits, self.max_bits + ) + m = Message() + m.add_byte(c_MSG_KEXDH_GEX_GROUP) + m.add_mpint(self.p) + m.add_mpint(self.g) + self.transport._send_message(m) + self.transport._expect_packet(_MSG_KEXDH_GEX_INIT) + self.old_style = True + + def _parse_kexdh_gex_group(self, m): + self.p = m.get_mpint() + self.g = m.get_mpint() + # reject if p's bit length < 1024 or > 8192 + bitlen = util.bit_length(self.p) + if (bitlen < 1024) or (bitlen > 8192): + raise SSHException( + "Server-generated gex p (don't ask) is out of range " + "({} bits)".format(bitlen) + ) + self.transport._log(DEBUG, "Got server p ({} bits)".format(bitlen)) + self._generate_x() + # now compute e = g^x mod p + self.e = pow(self.g, self.x, self.p) + m = Message() + m.add_byte(c_MSG_KEXDH_GEX_INIT) + m.add_mpint(self.e) + self.transport._send_message(m) + self.transport._expect_packet(_MSG_KEXDH_GEX_REPLY) + + def _parse_kexdh_gex_init(self, m): + self.e = m.get_mpint() + if (self.e < 1) or (self.e > self.p - 1): + raise SSHException('Client kex "e" is out of range') + self._generate_x() + self.f = pow(self.g, self.x, self.p) + K = pow(self.e, self.x, self.p) + key = self.transport.get_server_key().asbytes() + # okay, build up the hash H of + # (V_C || V_S || I_C || I_S || K_S || min || n || max || p || g || e || f || K) # noqa + hm = Message() + hm.add( + self.transport.remote_version, + self.transport.local_version, + self.transport.remote_kex_init, + self.transport.local_kex_init, + key, + ) + if not self.old_style: + hm.add_int(self.min_bits) + hm.add_int(self.preferred_bits) + if not self.old_style: + hm.add_int(self.max_bits) + hm.add_mpint(self.p) + hm.add_mpint(self.g) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) + H = self.hash_algo(hm.asbytes()).digest() + self.transport._set_K_H(K, H) + # sign it + sig = self.transport.get_server_key().sign_ssh_data( + H, self.transport.host_key_type + ) + # send reply + m = Message() + m.add_byte(c_MSG_KEXDH_GEX_REPLY) + m.add_string(key) + m.add_mpint(self.f) + m.add_string(sig) + self.transport._send_message(m) + self.transport._activate_outbound() + + def _parse_kexdh_gex_reply(self, m): + host_key = m.get_string() + self.f = m.get_mpint() + sig = m.get_string() + if (self.f < 1) or (self.f > self.p - 1): + raise SSHException('Server kex "f" is out of range') + K = pow(self.f, self.x, self.p) + # okay, build up the hash H of + # (V_C || V_S || I_C || I_S || K_S || min || n || max || p || g || e || f || K) # noqa + hm = Message() + hm.add( + self.transport.local_version, + self.transport.remote_version, + self.transport.local_kex_init, + self.transport.remote_kex_init, + host_key, + ) + if not self.old_style: + hm.add_int(self.min_bits) + hm.add_int(self.preferred_bits) + if not self.old_style: + hm.add_int(self.max_bits) + hm.add_mpint(self.p) + hm.add_mpint(self.g) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) + self.transport._set_K_H(K, self.hash_algo(hm.asbytes()).digest()) + self.transport._verify_key(host_key, sig) + self.transport._activate_outbound() + + +class KexGexSHA256(KexGex): + name = "diffie-hellman-group-exchange-sha256" + hash_algo = sha256 diff --git a/venv/lib/python3.11/site-packages/paramiko/kex_group1.py b/venv/lib/python3.11/site-packages/paramiko/kex_group1.py new file mode 100644 index 0000000..f074256 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/kex_group1.py @@ -0,0 +1,155 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Standard SSH key exchange ("kex" if you wanna sound cool). Diffie-Hellman of +1024 bit key halves, using a known "p" prime and "g" generator. +""" + +import os +from hashlib import sha1 + +from paramiko import util +from paramiko.common import max_byte, zero_byte, byte_chr, byte_mask +from paramiko.message import Message +from paramiko.ssh_exception import SSHException + + +_MSG_KEXDH_INIT, _MSG_KEXDH_REPLY = range(30, 32) +c_MSG_KEXDH_INIT, c_MSG_KEXDH_REPLY = [byte_chr(c) for c in range(30, 32)] + +b7fffffffffffffff = byte_chr(0x7F) + max_byte * 7 +b0000000000000000 = zero_byte * 8 + + +class KexGroup1: + + # draft-ietf-secsh-transport-09.txt, page 17 + P = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF # noqa + G = 2 + + name = "diffie-hellman-group1-sha1" + hash_algo = sha1 + + def __init__(self, transport): + self.transport = transport + self.x = 0 + self.e = 0 + self.f = 0 + + def start_kex(self): + self._generate_x() + if self.transport.server_mode: + # compute f = g^x mod p, but don't send it yet + self.f = pow(self.G, self.x, self.P) + self.transport._expect_packet(_MSG_KEXDH_INIT) + return + # compute e = g^x mod p (where g=2), and send it + self.e = pow(self.G, self.x, self.P) + m = Message() + m.add_byte(c_MSG_KEXDH_INIT) + m.add_mpint(self.e) + self.transport._send_message(m) + self.transport._expect_packet(_MSG_KEXDH_REPLY) + + def parse_next(self, ptype, m): + if self.transport.server_mode and (ptype == _MSG_KEXDH_INIT): + return self._parse_kexdh_init(m) + elif not self.transport.server_mode and (ptype == _MSG_KEXDH_REPLY): + return self._parse_kexdh_reply(m) + msg = "KexGroup1 asked to handle packet type {:d}" + raise SSHException(msg.format(ptype)) + + # ...internals... + + def _generate_x(self): + # generate an "x" (1 < x < q), where q is (p-1)/2. + # p is a 128-byte (1024-bit) number, where the first 64 bits are 1. + # therefore q can be approximated as a 2^1023. we drop the subset of + # potential x where the first 63 bits are 1, because some of those + # will be larger than q (but this is a tiny tiny subset of + # potential x). + while 1: + x_bytes = os.urandom(128) + x_bytes = byte_mask(x_bytes[0], 0x7F) + x_bytes[1:] + if ( + x_bytes[:8] != b7fffffffffffffff + and x_bytes[:8] != b0000000000000000 + ): + break + self.x = util.inflate_long(x_bytes) + + def _parse_kexdh_reply(self, m): + # client mode + host_key = m.get_string() + self.f = m.get_mpint() + if (self.f < 1) or (self.f > self.P - 1): + raise SSHException('Server kex "f" is out of range') + sig = m.get_binary() + K = pow(self.f, self.x, self.P) + # okay, build up the hash H of + # (V_C || V_S || I_C || I_S || K_S || e || f || K) + hm = Message() + hm.add( + self.transport.local_version, + self.transport.remote_version, + self.transport.local_kex_init, + self.transport.remote_kex_init, + ) + hm.add_string(host_key) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) + self.transport._set_K_H(K, self.hash_algo(hm.asbytes()).digest()) + self.transport._verify_key(host_key, sig) + self.transport._activate_outbound() + + def _parse_kexdh_init(self, m): + # server mode + self.e = m.get_mpint() + if (self.e < 1) or (self.e > self.P - 1): + raise SSHException('Client kex "e" is out of range') + K = pow(self.e, self.x, self.P) + key = self.transport.get_server_key().asbytes() + # okay, build up the hash H of + # (V_C || V_S || I_C || I_S || K_S || e || f || K) + hm = Message() + hm.add( + self.transport.remote_version, + self.transport.local_version, + self.transport.remote_kex_init, + self.transport.local_kex_init, + ) + hm.add_string(key) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) + H = self.hash_algo(hm.asbytes()).digest() + self.transport._set_K_H(K, H) + # sign it + sig = self.transport.get_server_key().sign_ssh_data( + H, self.transport.host_key_type + ) + # send reply + m = Message() + m.add_byte(c_MSG_KEXDH_REPLY) + m.add_string(key) + m.add_mpint(self.f) + m.add_string(sig) + self.transport._send_message(m) + self.transport._activate_outbound() diff --git a/venv/lib/python3.11/site-packages/paramiko/kex_group14.py b/venv/lib/python3.11/site-packages/paramiko/kex_group14.py new file mode 100644 index 0000000..8dee551 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/kex_group14.py @@ -0,0 +1,40 @@ +# Copyright (C) 2013 Torsten Landschoff +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Standard SSH key exchange ("kex" if you wanna sound cool). Diffie-Hellman of +2048 bit key halves, using a known "p" prime and "g" generator. +""" + +from paramiko.kex_group1 import KexGroup1 +from hashlib import sha1, sha256 + + +class KexGroup14(KexGroup1): + + # http://tools.ietf.org/html/rfc3526#section-3 + P = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF # noqa + G = 2 + + name = "diffie-hellman-group14-sha1" + hash_algo = sha1 + + +class KexGroup14SHA256(KexGroup14): + name = "diffie-hellman-group14-sha256" + hash_algo = sha256 diff --git a/venv/lib/python3.11/site-packages/paramiko/kex_group16.py b/venv/lib/python3.11/site-packages/paramiko/kex_group16.py new file mode 100644 index 0000000..c675f87 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/kex_group16.py @@ -0,0 +1,35 @@ +# Copyright (C) 2019 Edgar Sousa +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Standard SSH key exchange ("kex" if you wanna sound cool). Diffie-Hellman of +4096 bit key halves, using a known "p" prime and "g" generator. +""" + +from paramiko.kex_group1 import KexGroup1 +from hashlib import sha512 + + +class KexGroup16SHA512(KexGroup1): + name = "diffie-hellman-group16-sha512" + # http://tools.ietf.org/html/rfc3526#section-5 + P = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF # noqa + G = 2 + + name = "diffie-hellman-group16-sha512" + hash_algo = sha512 diff --git a/venv/lib/python3.11/site-packages/paramiko/kex_gss.py b/venv/lib/python3.11/site-packages/paramiko/kex_gss.py new file mode 100644 index 0000000..2a5f29e --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/kex_gss.py @@ -0,0 +1,686 @@ +# Copyright (C) 2003-2007 Robey Pointer +# Copyright (C) 2013-2014 science + computing ag +# Author: Sebastian Deiss +# +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +""" +This module provides GSS-API / SSPI Key Exchange as defined in :rfc:`4462`. + +.. note:: Credential delegation is not supported in server mode. + +.. note:: + `RFC 4462 Section 2.2 + `_ says we are not + required to implement GSS-API error messages. Thus, in many methods within + this module, if an error occurs an exception will be thrown and the + connection will be terminated. + +.. seealso:: :doc:`/api/ssh_gss` + +.. versionadded:: 1.15 +""" + +import os +from hashlib import sha1 + +from paramiko.common import ( + DEBUG, + max_byte, + zero_byte, + byte_chr, + byte_mask, + byte_ord, +) +from paramiko import util +from paramiko.message import Message +from paramiko.ssh_exception import SSHException + + +( + MSG_KEXGSS_INIT, + MSG_KEXGSS_CONTINUE, + MSG_KEXGSS_COMPLETE, + MSG_KEXGSS_HOSTKEY, + MSG_KEXGSS_ERROR, +) = range(30, 35) +(MSG_KEXGSS_GROUPREQ, MSG_KEXGSS_GROUP) = range(40, 42) +( + c_MSG_KEXGSS_INIT, + c_MSG_KEXGSS_CONTINUE, + c_MSG_KEXGSS_COMPLETE, + c_MSG_KEXGSS_HOSTKEY, + c_MSG_KEXGSS_ERROR, +) = [byte_chr(c) for c in range(30, 35)] +(c_MSG_KEXGSS_GROUPREQ, c_MSG_KEXGSS_GROUP) = [ + byte_chr(c) for c in range(40, 42) +] + + +class KexGSSGroup1: + """ + GSS-API / SSPI Authenticated Diffie-Hellman Key Exchange as defined in `RFC + 4462 Section 2 `_ + """ + + # draft-ietf-secsh-transport-09.txt, page 17 + P = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF # noqa + G = 2 + b7fffffffffffffff = byte_chr(0x7F) + max_byte * 7 # noqa + b0000000000000000 = zero_byte * 8 # noqa + NAME = "gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==" + + def __init__(self, transport): + self.transport = transport + self.kexgss = self.transport.kexgss_ctxt + self.gss_host = None + self.x = 0 + self.e = 0 + self.f = 0 + + def start_kex(self): + """ + Start the GSS-API / SSPI Authenticated Diffie-Hellman Key Exchange. + """ + self._generate_x() + if self.transport.server_mode: + # compute f = g^x mod p, but don't send it yet + self.f = pow(self.G, self.x, self.P) + self.transport._expect_packet(MSG_KEXGSS_INIT) + return + # compute e = g^x mod p (where g=2), and send it + self.e = pow(self.G, self.x, self.P) + # Initialize GSS-API Key Exchange + self.gss_host = self.transport.gss_host + m = Message() + m.add_byte(c_MSG_KEXGSS_INIT) + m.add_string(self.kexgss.ssh_init_sec_context(target=self.gss_host)) + m.add_mpint(self.e) + self.transport._send_message(m) + self.transport._expect_packet( + MSG_KEXGSS_HOSTKEY, + MSG_KEXGSS_CONTINUE, + MSG_KEXGSS_COMPLETE, + MSG_KEXGSS_ERROR, + ) + + def parse_next(self, ptype, m): + """ + Parse the next packet. + + :param ptype: The (string) type of the incoming packet + :param `.Message` m: The packet content + """ + if self.transport.server_mode and (ptype == MSG_KEXGSS_INIT): + return self._parse_kexgss_init(m) + elif not self.transport.server_mode and (ptype == MSG_KEXGSS_HOSTKEY): + return self._parse_kexgss_hostkey(m) + elif self.transport.server_mode and (ptype == MSG_KEXGSS_CONTINUE): + return self._parse_kexgss_continue(m) + elif not self.transport.server_mode and (ptype == MSG_KEXGSS_COMPLETE): + return self._parse_kexgss_complete(m) + elif ptype == MSG_KEXGSS_ERROR: + return self._parse_kexgss_error(m) + msg = "GSS KexGroup1 asked to handle packet type {:d}" + raise SSHException(msg.format(ptype)) + + # ## internals... + + def _generate_x(self): + """ + generate an "x" (1 < x < q), where q is (p-1)/2. + p is a 128-byte (1024-bit) number, where the first 64 bits are 1. + therefore q can be approximated as a 2^1023. we drop the subset of + potential x where the first 63 bits are 1, because some of those will + be larger than q (but this is a tiny tiny subset of potential x). + """ + while 1: + x_bytes = os.urandom(128) + x_bytes = byte_mask(x_bytes[0], 0x7F) + x_bytes[1:] + first = x_bytes[:8] + if first not in (self.b7fffffffffffffff, self.b0000000000000000): + break + self.x = util.inflate_long(x_bytes) + + def _parse_kexgss_hostkey(self, m): + """ + Parse the SSH2_MSG_KEXGSS_HOSTKEY message (client mode). + + :param `.Message` m: The content of the SSH2_MSG_KEXGSS_HOSTKEY message + """ + # client mode + host_key = m.get_string() + self.transport.host_key = host_key + sig = m.get_string() + self.transport._verify_key(host_key, sig) + self.transport._expect_packet(MSG_KEXGSS_CONTINUE, MSG_KEXGSS_COMPLETE) + + def _parse_kexgss_continue(self, m): + """ + Parse the SSH2_MSG_KEXGSS_CONTINUE message. + + :param `.Message` m: The content of the SSH2_MSG_KEXGSS_CONTINUE + message + """ + if not self.transport.server_mode: + srv_token = m.get_string() + m = Message() + m.add_byte(c_MSG_KEXGSS_CONTINUE) + m.add_string( + self.kexgss.ssh_init_sec_context( + target=self.gss_host, recv_token=srv_token + ) + ) + self.transport.send_message(m) + self.transport._expect_packet( + MSG_KEXGSS_CONTINUE, MSG_KEXGSS_COMPLETE, MSG_KEXGSS_ERROR + ) + else: + pass + + def _parse_kexgss_complete(self, m): + """ + Parse the SSH2_MSG_KEXGSS_COMPLETE message (client mode). + + :param `.Message` m: The content of the + SSH2_MSG_KEXGSS_COMPLETE message + """ + # client mode + if self.transport.host_key is None: + self.transport.host_key = NullHostKey() + self.f = m.get_mpint() + if (self.f < 1) or (self.f > self.P - 1): + raise SSHException('Server kex "f" is out of range') + mic_token = m.get_string() + # This must be TRUE, if there is a GSS-API token in this message. + bool = m.get_boolean() + srv_token = None + if bool: + srv_token = m.get_string() + K = pow(self.f, self.x, self.P) + # okay, build up the hash H of + # (V_C || V_S || I_C || I_S || K_S || e || f || K) + hm = Message() + hm.add( + self.transport.local_version, + self.transport.remote_version, + self.transport.local_kex_init, + self.transport.remote_kex_init, + ) + hm.add_string(self.transport.host_key.__str__()) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) + H = sha1(str(hm)).digest() + self.transport._set_K_H(K, H) + if srv_token is not None: + self.kexgss.ssh_init_sec_context( + target=self.gss_host, recv_token=srv_token + ) + self.kexgss.ssh_check_mic(mic_token, H) + else: + self.kexgss.ssh_check_mic(mic_token, H) + self.transport.gss_kex_used = True + self.transport._activate_outbound() + + def _parse_kexgss_init(self, m): + """ + Parse the SSH2_MSG_KEXGSS_INIT message (server mode). + + :param `.Message` m: The content of the SSH2_MSG_KEXGSS_INIT message + """ + # server mode + client_token = m.get_string() + self.e = m.get_mpint() + if (self.e < 1) or (self.e > self.P - 1): + raise SSHException('Client kex "e" is out of range') + K = pow(self.e, self.x, self.P) + self.transport.host_key = NullHostKey() + key = self.transport.host_key.__str__() + # okay, build up the hash H of + # (V_C || V_S || I_C || I_S || K_S || e || f || K) + hm = Message() + hm.add( + self.transport.remote_version, + self.transport.local_version, + self.transport.remote_kex_init, + self.transport.local_kex_init, + ) + hm.add_string(key) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) + H = sha1(hm.asbytes()).digest() + self.transport._set_K_H(K, H) + srv_token = self.kexgss.ssh_accept_sec_context( + self.gss_host, client_token + ) + m = Message() + if self.kexgss._gss_srv_ctxt_status: + mic_token = self.kexgss.ssh_get_mic( + self.transport.session_id, gss_kex=True + ) + m.add_byte(c_MSG_KEXGSS_COMPLETE) + m.add_mpint(self.f) + m.add_string(mic_token) + if srv_token is not None: + m.add_boolean(True) + m.add_string(srv_token) + else: + m.add_boolean(False) + self.transport._send_message(m) + self.transport.gss_kex_used = True + self.transport._activate_outbound() + else: + m.add_byte(c_MSG_KEXGSS_CONTINUE) + m.add_string(srv_token) + self.transport._send_message(m) + self.transport._expect_packet( + MSG_KEXGSS_CONTINUE, MSG_KEXGSS_COMPLETE, MSG_KEXGSS_ERROR + ) + + def _parse_kexgss_error(self, m): + """ + Parse the SSH2_MSG_KEXGSS_ERROR message (client mode). + The server may send a GSS-API error message. if it does, we display + the error by throwing an exception (client mode). + + :param `.Message` m: The content of the SSH2_MSG_KEXGSS_ERROR message + :raise SSHException: Contains GSS-API major and minor status as well as + the error message and the language tag of the + message + """ + maj_status = m.get_int() + min_status = m.get_int() + err_msg = m.get_string() + m.get_string() # we don't care about the language! + raise SSHException( + """GSS-API Error: +Major Status: {} +Minor Status: {} +Error Message: {} +""".format( + maj_status, min_status, err_msg + ) + ) + + +class KexGSSGroup14(KexGSSGroup1): + """ + GSS-API / SSPI Authenticated Diffie-Hellman Group14 Key Exchange as defined + in `RFC 4462 Section 2 + `_ + """ + + P = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF # noqa + G = 2 + NAME = "gss-group14-sha1-toWM5Slw5Ew8Mqkay+al2g==" + + +class KexGSSGex: + """ + GSS-API / SSPI Authenticated Diffie-Hellman Group Exchange as defined in + `RFC 4462 Section 2 `_ + """ + + NAME = "gss-gex-sha1-toWM5Slw5Ew8Mqkay+al2g==" + min_bits = 1024 + max_bits = 8192 + preferred_bits = 2048 + + def __init__(self, transport): + self.transport = transport + self.kexgss = self.transport.kexgss_ctxt + self.gss_host = None + self.p = None + self.q = None + self.g = None + self.x = None + self.e = None + self.f = None + self.old_style = False + + def start_kex(self): + """ + Start the GSS-API / SSPI Authenticated Diffie-Hellman Group Exchange + """ + if self.transport.server_mode: + self.transport._expect_packet(MSG_KEXGSS_GROUPREQ) + return + # request a bit range: we accept (min_bits) to (max_bits), but prefer + # (preferred_bits). according to the spec, we shouldn't pull the + # minimum up above 1024. + self.gss_host = self.transport.gss_host + m = Message() + m.add_byte(c_MSG_KEXGSS_GROUPREQ) + m.add_int(self.min_bits) + m.add_int(self.preferred_bits) + m.add_int(self.max_bits) + self.transport._send_message(m) + self.transport._expect_packet(MSG_KEXGSS_GROUP) + + def parse_next(self, ptype, m): + """ + Parse the next packet. + + :param ptype: The (string) type of the incoming packet + :param `.Message` m: The packet content + """ + if ptype == MSG_KEXGSS_GROUPREQ: + return self._parse_kexgss_groupreq(m) + elif ptype == MSG_KEXGSS_GROUP: + return self._parse_kexgss_group(m) + elif ptype == MSG_KEXGSS_INIT: + return self._parse_kexgss_gex_init(m) + elif ptype == MSG_KEXGSS_HOSTKEY: + return self._parse_kexgss_hostkey(m) + elif ptype == MSG_KEXGSS_CONTINUE: + return self._parse_kexgss_continue(m) + elif ptype == MSG_KEXGSS_COMPLETE: + return self._parse_kexgss_complete(m) + elif ptype == MSG_KEXGSS_ERROR: + return self._parse_kexgss_error(m) + msg = "KexGex asked to handle packet type {:d}" + raise SSHException(msg.format(ptype)) + + # ## internals... + + def _generate_x(self): + # generate an "x" (1 < x < (p-1)/2). + q = (self.p - 1) // 2 + qnorm = util.deflate_long(q, 0) + qhbyte = byte_ord(qnorm[0]) + byte_count = len(qnorm) + qmask = 0xFF + while not (qhbyte & 0x80): + qhbyte <<= 1 + qmask >>= 1 + while True: + x_bytes = os.urandom(byte_count) + x_bytes = byte_mask(x_bytes[0], qmask) + x_bytes[1:] + x = util.inflate_long(x_bytes, 1) + if (x > 1) and (x < q): + break + self.x = x + + def _parse_kexgss_groupreq(self, m): + """ + Parse the SSH2_MSG_KEXGSS_GROUPREQ message (server mode). + + :param `.Message` m: The content of the + SSH2_MSG_KEXGSS_GROUPREQ message + """ + minbits = m.get_int() + preferredbits = m.get_int() + maxbits = m.get_int() + # smoosh the user's preferred size into our own limits + if preferredbits > self.max_bits: + preferredbits = self.max_bits + if preferredbits < self.min_bits: + preferredbits = self.min_bits + # fix min/max if they're inconsistent. technically, we could just pout + # and hang up, but there's no harm in giving them the benefit of the + # doubt and just picking a bitsize for them. + if minbits > preferredbits: + minbits = preferredbits + if maxbits < preferredbits: + maxbits = preferredbits + # now save a copy + self.min_bits = minbits + self.preferred_bits = preferredbits + self.max_bits = maxbits + # generate prime + pack = self.transport._get_modulus_pack() + if pack is None: + raise SSHException("Can't do server-side gex with no modulus pack") + self.transport._log( + DEBUG, # noqa + "Picking p ({} <= {} <= {} bits)".format( + minbits, preferredbits, maxbits + ), + ) + self.g, self.p = pack.get_modulus(minbits, preferredbits, maxbits) + m = Message() + m.add_byte(c_MSG_KEXGSS_GROUP) + m.add_mpint(self.p) + m.add_mpint(self.g) + self.transport._send_message(m) + self.transport._expect_packet(MSG_KEXGSS_INIT) + + def _parse_kexgss_group(self, m): + """ + Parse the SSH2_MSG_KEXGSS_GROUP message (client mode). + + :param `Message` m: The content of the SSH2_MSG_KEXGSS_GROUP message + """ + self.p = m.get_mpint() + self.g = m.get_mpint() + # reject if p's bit length < 1024 or > 8192 + bitlen = util.bit_length(self.p) + if (bitlen < 1024) or (bitlen > 8192): + raise SSHException( + "Server-generated gex p (don't ask) is out of range " + "({} bits)".format(bitlen) + ) + self.transport._log( + DEBUG, "Got server p ({} bits)".format(bitlen) + ) # noqa + self._generate_x() + # now compute e = g^x mod p + self.e = pow(self.g, self.x, self.p) + m = Message() + m.add_byte(c_MSG_KEXGSS_INIT) + m.add_string(self.kexgss.ssh_init_sec_context(target=self.gss_host)) + m.add_mpint(self.e) + self.transport._send_message(m) + self.transport._expect_packet( + MSG_KEXGSS_HOSTKEY, + MSG_KEXGSS_CONTINUE, + MSG_KEXGSS_COMPLETE, + MSG_KEXGSS_ERROR, + ) + + def _parse_kexgss_gex_init(self, m): + """ + Parse the SSH2_MSG_KEXGSS_INIT message (server mode). + + :param `Message` m: The content of the SSH2_MSG_KEXGSS_INIT message + """ + client_token = m.get_string() + self.e = m.get_mpint() + if (self.e < 1) or (self.e > self.p - 1): + raise SSHException('Client kex "e" is out of range') + self._generate_x() + self.f = pow(self.g, self.x, self.p) + K = pow(self.e, self.x, self.p) + self.transport.host_key = NullHostKey() + key = self.transport.host_key.__str__() + # okay, build up the hash H of + # (V_C || V_S || I_C || I_S || K_S || min || n || max || p || g || e || f || K) # noqa + hm = Message() + hm.add( + self.transport.remote_version, + self.transport.local_version, + self.transport.remote_kex_init, + self.transport.local_kex_init, + key, + ) + hm.add_int(self.min_bits) + hm.add_int(self.preferred_bits) + hm.add_int(self.max_bits) + hm.add_mpint(self.p) + hm.add_mpint(self.g) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) + H = sha1(hm.asbytes()).digest() + self.transport._set_K_H(K, H) + srv_token = self.kexgss.ssh_accept_sec_context( + self.gss_host, client_token + ) + m = Message() + if self.kexgss._gss_srv_ctxt_status: + mic_token = self.kexgss.ssh_get_mic( + self.transport.session_id, gss_kex=True + ) + m.add_byte(c_MSG_KEXGSS_COMPLETE) + m.add_mpint(self.f) + m.add_string(mic_token) + if srv_token is not None: + m.add_boolean(True) + m.add_string(srv_token) + else: + m.add_boolean(False) + self.transport._send_message(m) + self.transport.gss_kex_used = True + self.transport._activate_outbound() + else: + m.add_byte(c_MSG_KEXGSS_CONTINUE) + m.add_string(srv_token) + self.transport._send_message(m) + self.transport._expect_packet( + MSG_KEXGSS_CONTINUE, MSG_KEXGSS_COMPLETE, MSG_KEXGSS_ERROR + ) + + def _parse_kexgss_hostkey(self, m): + """ + Parse the SSH2_MSG_KEXGSS_HOSTKEY message (client mode). + + :param `Message` m: The content of the SSH2_MSG_KEXGSS_HOSTKEY message + """ + # client mode + host_key = m.get_string() + self.transport.host_key = host_key + sig = m.get_string() + self.transport._verify_key(host_key, sig) + self.transport._expect_packet(MSG_KEXGSS_CONTINUE, MSG_KEXGSS_COMPLETE) + + def _parse_kexgss_continue(self, m): + """ + Parse the SSH2_MSG_KEXGSS_CONTINUE message. + + :param `Message` m: The content of the SSH2_MSG_KEXGSS_CONTINUE message + """ + if not self.transport.server_mode: + srv_token = m.get_string() + m = Message() + m.add_byte(c_MSG_KEXGSS_CONTINUE) + m.add_string( + self.kexgss.ssh_init_sec_context( + target=self.gss_host, recv_token=srv_token + ) + ) + self.transport.send_message(m) + self.transport._expect_packet( + MSG_KEXGSS_CONTINUE, MSG_KEXGSS_COMPLETE, MSG_KEXGSS_ERROR + ) + else: + pass + + def _parse_kexgss_complete(self, m): + """ + Parse the SSH2_MSG_KEXGSS_COMPLETE message (client mode). + + :param `Message` m: The content of the SSH2_MSG_KEXGSS_COMPLETE message + """ + if self.transport.host_key is None: + self.transport.host_key = NullHostKey() + self.f = m.get_mpint() + mic_token = m.get_string() + # This must be TRUE, if there is a GSS-API token in this message. + bool = m.get_boolean() + srv_token = None + if bool: + srv_token = m.get_string() + if (self.f < 1) or (self.f > self.p - 1): + raise SSHException('Server kex "f" is out of range') + K = pow(self.f, self.x, self.p) + # okay, build up the hash H of + # (V_C || V_S || I_C || I_S || K_S || min || n || max || p || g || e || f || K) # noqa + hm = Message() + hm.add( + self.transport.local_version, + self.transport.remote_version, + self.transport.local_kex_init, + self.transport.remote_kex_init, + self.transport.host_key.__str__(), + ) + if not self.old_style: + hm.add_int(self.min_bits) + hm.add_int(self.preferred_bits) + if not self.old_style: + hm.add_int(self.max_bits) + hm.add_mpint(self.p) + hm.add_mpint(self.g) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) + H = sha1(hm.asbytes()).digest() + self.transport._set_K_H(K, H) + if srv_token is not None: + self.kexgss.ssh_init_sec_context( + target=self.gss_host, recv_token=srv_token + ) + self.kexgss.ssh_check_mic(mic_token, H) + else: + self.kexgss.ssh_check_mic(mic_token, H) + self.transport.gss_kex_used = True + self.transport._activate_outbound() + + def _parse_kexgss_error(self, m): + """ + Parse the SSH2_MSG_KEXGSS_ERROR message (client mode). + The server may send a GSS-API error message. if it does, we display + the error by throwing an exception (client mode). + + :param `Message` m: The content of the SSH2_MSG_KEXGSS_ERROR message + :raise SSHException: Contains GSS-API major and minor status as well as + the error message and the language tag of the + message + """ + maj_status = m.get_int() + min_status = m.get_int() + err_msg = m.get_string() + m.get_string() # we don't care about the language (lang_tag)! + raise SSHException( + """GSS-API Error: +Major Status: {} +Minor Status: {} +Error Message: {} +""".format( + maj_status, min_status, err_msg + ) + ) + + +class NullHostKey: + """ + This class represents the Null Host Key for GSS-API Key Exchange as defined + in `RFC 4462 Section 5 + `_ + """ + + def __init__(self): + self.key = "" + + def __str__(self): + return self.key + + def get_name(self): + return self.key diff --git a/venv/lib/python3.11/site-packages/paramiko/message.py b/venv/lib/python3.11/site-packages/paramiko/message.py new file mode 100644 index 0000000..8c2b3bd --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/message.py @@ -0,0 +1,318 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Implementation of an SSH2 "message". +""" + +import struct +from io import BytesIO + +from paramiko import util +from paramiko.common import zero_byte, max_byte, one_byte +from paramiko.util import u + + +class Message: + """ + An SSH2 message is a stream of bytes that encodes some combination of + strings, integers, bools, and infinite-precision integers. This class + builds or breaks down such a byte stream. + + Normally you don't need to deal with anything this low-level, but it's + exposed for people implementing custom extensions, or features that + paramiko doesn't support yet. + """ + + big_int = 0xFF000000 + + def __init__(self, content=None): + """ + Create a new SSH2 message. + + :param bytes content: + the byte stream to use as the message content (passed in only when + decomposing a message). + """ + if content is not None: + self.packet = BytesIO(content) + else: + self.packet = BytesIO() + + def __bytes__(self): + return self.asbytes() + + def __repr__(self): + """ + Returns a string representation of this object, for debugging. + """ + return "paramiko.Message(" + repr(self.packet.getvalue()) + ")" + + # TODO 4.0: just merge into __bytes__ (everywhere) + def asbytes(self): + """ + Return the byte stream content of this Message, as a `bytes`. + """ + return self.packet.getvalue() + + def rewind(self): + """ + Rewind the message to the beginning as if no items had been parsed + out of it yet. + """ + self.packet.seek(0) + + def get_remainder(self): + """ + Return the `bytes` of this message that haven't already been parsed and + returned. + """ + position = self.packet.tell() + remainder = self.packet.read() + self.packet.seek(position) + return remainder + + def get_so_far(self): + """ + Returns the `bytes` of this message that have been parsed and + returned. The string passed into a message's constructor can be + regenerated by concatenating ``get_so_far`` and `get_remainder`. + """ + position = self.packet.tell() + self.rewind() + return self.packet.read(position) + + def get_bytes(self, n): + """ + Return the next ``n`` bytes of the message, without decomposing into an + int, decoded string, etc. Just the raw bytes are returned. Returns a + string of ``n`` zero bytes if there weren't ``n`` bytes remaining in + the message. + """ + b = self.packet.read(n) + max_pad_size = 1 << 20 # Limit padding to 1 MB + if len(b) < n < max_pad_size: + return b + zero_byte * (n - len(b)) + return b + + def get_byte(self): + """ + Return the next byte of the message, without decomposing it. This + is equivalent to `get_bytes(1) `. + + :return: + the next (`bytes`) byte of the message, or ``b'\000'`` if there + aren't any bytes remaining. + """ + return self.get_bytes(1) + + def get_boolean(self): + """ + Fetch a boolean from the stream. + """ + b = self.get_bytes(1) + return b != zero_byte + + def get_adaptive_int(self): + """ + Fetch an int from the stream. + + :return: a 32-bit unsigned `int`. + """ + byte = self.get_bytes(1) + if byte == max_byte: + return util.inflate_long(self.get_binary()) + byte += self.get_bytes(3) + return struct.unpack(">I", byte)[0] + + def get_int(self): + """ + Fetch an int from the stream. + """ + return struct.unpack(">I", self.get_bytes(4))[0] + + def get_int64(self): + """ + Fetch a 64-bit int from the stream. + + :return: a 64-bit unsigned integer (`int`). + """ + return struct.unpack(">Q", self.get_bytes(8))[0] + + def get_mpint(self): + """ + Fetch a long int (mpint) from the stream. + + :return: an arbitrary-length integer (`int`). + """ + return util.inflate_long(self.get_binary()) + + # TODO 4.0: depending on where this is used internally or downstream, force + # users to specify get_binary instead and delete this. + def get_string(self): + """ + Fetch a "string" from the stream. This will actually be a `bytes` + object, and may contain unprintable characters. (It's not unheard of + for a string to contain another byte-stream message.) + """ + return self.get_bytes(self.get_int()) + + # TODO 4.0: also consider having this take over the get_string name, and + # remove this name instead. + def get_text(self): + """ + Fetch a Unicode string from the stream. + + This currently operates by attempting to encode the next "string" as + ``utf-8``. + """ + return u(self.get_string()) + + def get_binary(self): + """ + Alias for `get_string` (obtains a bytestring). + """ + return self.get_bytes(self.get_int()) + + def get_list(self): + """ + Fetch a list of `strings ` from the stream. + + These are trivially encoded as comma-separated values in a string. + """ + return self.get_text().split(",") + + def add_bytes(self, b): + """ + Write bytes to the stream, without any formatting. + + :param bytes b: bytes to add + """ + self.packet.write(b) + return self + + def add_byte(self, b): + """ + Write a single byte to the stream, without any formatting. + + :param bytes b: byte to add + """ + self.packet.write(b) + return self + + def add_boolean(self, b): + """ + Add a boolean value to the stream. + + :param bool b: boolean value to add + """ + if b: + self.packet.write(one_byte) + else: + self.packet.write(zero_byte) + return self + + def add_int(self, n): + """ + Add an integer to the stream. + + :param int n: integer to add + """ + self.packet.write(struct.pack(">I", n)) + return self + + def add_adaptive_int(self, n): + """ + Add an integer to the stream. + + :param int n: integer to add + """ + if n >= Message.big_int: + self.packet.write(max_byte) + self.add_string(util.deflate_long(n)) + else: + self.packet.write(struct.pack(">I", n)) + return self + + def add_int64(self, n): + """ + Add a 64-bit int to the stream. + + :param int n: long int to add + """ + self.packet.write(struct.pack(">Q", n)) + return self + + def add_mpint(self, z): + """ + Add a long int to the stream, encoded as an infinite-precision + integer. This method only works on positive numbers. + + :param int z: long int to add + """ + self.add_string(util.deflate_long(z)) + return self + + # TODO: see the TODO for get_string/get_text/et al, this should change + # to match. + def add_string(self, s): + """ + Add a bytestring to the stream. + + :param byte s: bytestring to add + """ + s = util.asbytes(s) + self.add_int(len(s)) + self.packet.write(s) + return self + + def add_list(self, l): # noqa: E741 + """ + Add a list of strings to the stream. They are encoded identically to + a single string of values separated by commas. (Yes, really, that's + how SSH2 does it.) + + :param l: list of strings to add + """ + self.add_string(",".join(l)) + return self + + def _add(self, i): + if type(i) is bool: + return self.add_boolean(i) + elif isinstance(i, int): + return self.add_adaptive_int(i) + elif type(i) is list: + return self.add_list(i) + else: + return self.add_string(i) + + # TODO: this would never have worked for unicode strings under Python 3, + # guessing nobody/nothing ever used it for that purpose? + def add(self, *seq): + """ + Add a sequence of items to the stream. The values are encoded based + on their type: bytes, str, int, bool, or list. + + .. warning:: + Longs are encoded non-deterministically. Don't use this method. + + :param seq: the sequence of items + """ + for item in seq: + self._add(item) diff --git a/venv/lib/python3.11/site-packages/paramiko/packet.py b/venv/lib/python3.11/site-packages/paramiko/packet.py new file mode 100644 index 0000000..f1de4b0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/packet.py @@ -0,0 +1,696 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Packet handling +""" + +import errno +import os +import socket +import struct +import threading +import time +from hmac import HMAC + +from paramiko import util +from paramiko.common import ( + linefeed_byte, + cr_byte_value, + MSG_NAMES, + DEBUG, + xffffffff, + zero_byte, + byte_ord, +) +from paramiko.util import u +from paramiko.ssh_exception import SSHException, ProxyCommandFailure +from paramiko.message import Message + + +def compute_hmac(key, message, digest_class): + return HMAC(key, message, digest_class).digest() + + +class NeedRekeyException(Exception): + """ + Exception indicating a rekey is needed. + """ + + pass + + +def first_arg(e): + arg = None + if type(e.args) is tuple and len(e.args) > 0: + arg = e.args[0] + return arg + + +class Packetizer: + """ + Implementation of the base SSH packet protocol. + """ + + # READ the secsh RFC's before raising these values. if anything, + # they should probably be lower. + REKEY_PACKETS = pow(2, 29) + REKEY_BYTES = pow(2, 29) + + # Allow receiving this many packets after a re-key request before + # terminating + REKEY_PACKETS_OVERFLOW_MAX = pow(2, 29) + # Allow receiving this many bytes after a re-key request before terminating + REKEY_BYTES_OVERFLOW_MAX = pow(2, 29) + + def __init__(self, socket): + self.__socket = socket + self.__logger = None + self.__closed = False + self.__dump_packets = False + self.__need_rekey = False + self.__init_count = 0 + self.__remainder = bytes() + self._initial_kex_done = False + + # used for noticing when to re-key: + self.__sent_bytes = 0 + self.__sent_packets = 0 + self.__received_bytes = 0 + self.__received_packets = 0 + self.__received_bytes_overflow = 0 + self.__received_packets_overflow = 0 + + # current inbound/outbound ciphering: + self.__block_size_out = 8 + self.__block_size_in = 8 + self.__mac_size_out = 0 + self.__mac_size_in = 0 + self.__block_engine_out = None + self.__block_engine_in = None + self.__sdctr_out = False + self.__mac_engine_out = None + self.__mac_engine_in = None + self.__mac_key_out = bytes() + self.__mac_key_in = bytes() + self.__compress_engine_out = None + self.__compress_engine_in = None + self.__sequence_number_out = 0 + self.__sequence_number_in = 0 + self.__etm_out = False + self.__etm_in = False + + # AEAD (eg aes128-gcm/aes256-gcm) cipher use + self.__aead_out = False + self.__aead_in = False + self.__iv_out = None + self.__iv_in = None + + # lock around outbound writes (packet computation) + self.__write_lock = threading.RLock() + + # keepalives: + self.__keepalive_interval = 0 + self.__keepalive_last = time.time() + self.__keepalive_callback = None + + self.__timer = None + self.__handshake_complete = False + self.__timer_expired = False + + @property + def closed(self): + return self.__closed + + def reset_seqno_out(self): + self.__sequence_number_out = 0 + + def reset_seqno_in(self): + self.__sequence_number_in = 0 + + def set_log(self, log): + """ + Set the Python log object to use for logging. + """ + self.__logger = log + + def set_outbound_cipher( + self, + block_engine, + block_size, + mac_engine, + mac_size, + mac_key, + sdctr=False, + etm=False, + aead=False, + iv_out=None, + ): + """ + Switch outbound data cipher. + :param etm: Set encrypt-then-mac from OpenSSH + """ + self.__block_engine_out = block_engine + self.__sdctr_out = sdctr + self.__block_size_out = block_size + self.__mac_engine_out = mac_engine + self.__mac_size_out = mac_size + self.__mac_key_out = mac_key + self.__sent_bytes = 0 + self.__sent_packets = 0 + self.__etm_out = etm + self.__aead_out = aead + self.__iv_out = iv_out + # wait until the reset happens in both directions before clearing + # rekey flag + self.__init_count |= 1 + if self.__init_count == 3: + self.__init_count = 0 + self.__need_rekey = False + + def set_inbound_cipher( + self, + block_engine, + block_size, + mac_engine, + mac_size, + mac_key, + etm=False, + aead=False, + iv_in=None, + ): + """ + Switch inbound data cipher. + :param etm: Set encrypt-then-mac from OpenSSH + """ + self.__block_engine_in = block_engine + self.__block_size_in = block_size + self.__mac_engine_in = mac_engine + self.__mac_size_in = mac_size + self.__mac_key_in = mac_key + self.__received_bytes = 0 + self.__received_packets = 0 + self.__received_bytes_overflow = 0 + self.__received_packets_overflow = 0 + self.__etm_in = etm + self.__aead_in = aead + self.__iv_in = iv_in + # wait until the reset happens in both directions before clearing + # rekey flag + self.__init_count |= 2 + if self.__init_count == 3: + self.__init_count = 0 + self.__need_rekey = False + + def set_outbound_compressor(self, compressor): + self.__compress_engine_out = compressor + + def set_inbound_compressor(self, compressor): + self.__compress_engine_in = compressor + + def close(self): + self.__closed = True + self.__socket.close() + + def set_hexdump(self, hexdump): + self.__dump_packets = hexdump + + def get_hexdump(self): + return self.__dump_packets + + def get_mac_size_in(self): + return self.__mac_size_in + + def get_mac_size_out(self): + return self.__mac_size_out + + def need_rekey(self): + """ + Returns ``True`` if a new set of keys needs to be negotiated. This + will be triggered during a packet read or write, so it should be + checked after every read or write, or at least after every few. + """ + return self.__need_rekey + + def set_keepalive(self, interval, callback): + """ + Turn on/off the callback keepalive. If ``interval`` seconds pass with + no data read from or written to the socket, the callback will be + executed and the timer will be reset. + """ + self.__keepalive_interval = interval + self.__keepalive_callback = callback + self.__keepalive_last = time.time() + + def read_timer(self): + self.__timer_expired = True + + def start_handshake(self, timeout): + """ + Tells `Packetizer` that the handshake process started. + Starts a book keeping timer that can signal a timeout in the + handshake process. + + :param float timeout: amount of seconds to wait before timing out + """ + if not self.__timer: + self.__timer = threading.Timer(float(timeout), self.read_timer) + self.__timer.start() + + def handshake_timed_out(self): + """ + Checks if the handshake has timed out. + + If `start_handshake` wasn't called before the call to this function, + the return value will always be `False`. If the handshake completed + before a timeout was reached, the return value will be `False` + + :return: handshake time out status, as a `bool` + """ + if not self.__timer: + return False + if self.__handshake_complete: + return False + return self.__timer_expired + + def complete_handshake(self): + """ + Tells `Packetizer` that the handshake has completed. + """ + if self.__timer: + self.__timer.cancel() + self.__timer_expired = False + self.__handshake_complete = True + + def read_all(self, n, check_rekey=False): + """ + Read as close to N bytes as possible, blocking as long as necessary. + + :param int n: number of bytes to read + :return: the data read, as a `str` + + :raises: + ``EOFError`` -- if the socket was closed before all the bytes could + be read + """ + out = bytes() + # handle over-reading from reading the banner line + if len(self.__remainder) > 0: + out = self.__remainder[:n] + self.__remainder = self.__remainder[n:] + n -= len(out) + while n > 0: + got_timeout = False + if self.handshake_timed_out(): + raise EOFError() + try: + x = self.__socket.recv(n) + if len(x) == 0: + raise EOFError() + out += x + n -= len(x) + except socket.timeout: + got_timeout = True + except socket.error as e: + # on Linux, sometimes instead of socket.timeout, we get + # EAGAIN. this is a bug in recent (> 2.6.9) kernels but + # we need to work around it. + arg = first_arg(e) + if arg == errno.EAGAIN: + got_timeout = True + elif self.__closed: + raise EOFError() + else: + raise + if got_timeout: + if self.__closed: + raise EOFError() + if check_rekey and (len(out) == 0) and self.__need_rekey: + raise NeedRekeyException() + self._check_keepalive() + return out + + def write_all(self, out): + self.__keepalive_last = time.time() + iteration_with_zero_as_return_value = 0 + while len(out) > 0: + retry_write = False + try: + n = self.__socket.send(out) + except socket.timeout: + retry_write = True + except socket.error as e: + arg = first_arg(e) + if arg == errno.EAGAIN: + retry_write = True + else: + n = -1 + except ProxyCommandFailure: + raise # so it doesn't get swallowed by the below catchall + except Exception: + # could be: (32, 'Broken pipe') + n = -1 + if retry_write: + n = 0 + if self.__closed: + n = -1 + else: + if n == 0 and iteration_with_zero_as_return_value > 10: + # We shouldn't retry the write, but we didn't + # manage to send anything over the socket. This might be an + # indication that we have lost contact with the remote + # side, but are yet to receive an EOFError or other socket + # errors. Let's give it some iteration to try and catch up. + n = -1 + iteration_with_zero_as_return_value += 1 + if n < 0: + raise EOFError() + if n == len(out): + break + out = out[n:] + return + + def readline(self, timeout): + """ + Read a line from the socket. We assume no data is pending after the + line, so it's okay to attempt large reads. + """ + buf = self.__remainder + while linefeed_byte not in buf: + buf += self._read_timeout(timeout) + n = buf.index(linefeed_byte) + self.__remainder = buf[n + 1 :] + buf = buf[:n] + if (len(buf) > 0) and (buf[-1] == cr_byte_value): + buf = buf[:-1] + return u(buf) + + def _inc_iv_counter(self, iv): + # Per https://www.rfc-editor.org/rfc/rfc5647.html#section-7.1 , + # we increment the last 8 bytes of the 12-byte IV... + iv_counter_b = iv[4:] + iv_counter = int.from_bytes(iv_counter_b, "big") + inc_iv_counter = iv_counter + 1 + inc_iv_counter_b = inc_iv_counter.to_bytes(8, "big") + # ...then re-concatenate it with the static first 4 bytes + new_iv = iv[0:4] + inc_iv_counter_b + return new_iv + + def send_message(self, data): + """ + Write a block of data using the current cipher, as an SSH block. + """ + # encrypt this sucka + data = data.asbytes() + cmd = byte_ord(data[0]) + if cmd in MSG_NAMES: + cmd_name = MSG_NAMES[cmd] + else: + cmd_name = "${:x}".format(cmd) + orig_len = len(data) + self.__write_lock.acquire() + try: + if self.__compress_engine_out is not None: + data = self.__compress_engine_out(data) + packet = self._build_packet(data) + if self.__dump_packets: + self._log( + DEBUG, + "Write packet <{}>, length {}".format(cmd_name, orig_len), + ) + self._log(DEBUG, util.format_binary(packet, "OUT: ")) + if self.__block_engine_out is not None: + if self.__etm_out: + # packet length is not encrypted in EtM + out = packet[0:4] + self.__block_engine_out.update( + packet[4:] + ) + elif self.__aead_out: + # Packet-length field is used as the 'associated data' + # under AES-GCM, so like EtM, it's not encrypted. See + # https://www.rfc-editor.org/rfc/rfc5647#section-7.3 + out = packet[0:4] + self.__block_engine_out.encrypt( + self.__iv_out, packet[4:], packet[0:4] + ) + self.__iv_out = self._inc_iv_counter(self.__iv_out) + else: + out = self.__block_engine_out.update(packet) + else: + out = packet + # Append an MAC when needed (eg, not under AES-GCM) + if self.__block_engine_out is not None and not self.__aead_out: + packed = struct.pack(">I", self.__sequence_number_out) + payload = packed + (out if self.__etm_out else packet) + out += compute_hmac( + self.__mac_key_out, payload, self.__mac_engine_out + )[: self.__mac_size_out] + next_seq = (self.__sequence_number_out + 1) & xffffffff + if next_seq == 0 and not self._initial_kex_done: + raise SSHException( + "Sequence number rolled over during initial kex!" + ) + self.__sequence_number_out = next_seq + self.write_all(out) + + self.__sent_bytes += len(out) + self.__sent_packets += 1 + sent_too_much = ( + self.__sent_packets >= self.REKEY_PACKETS + or self.__sent_bytes >= self.REKEY_BYTES + ) + if sent_too_much and not self.__need_rekey: + # only ask once for rekeying + msg = "Rekeying (hit {} packets, {} bytes sent)" + self._log( + DEBUG, msg.format(self.__sent_packets, self.__sent_bytes) + ) + self.__received_bytes_overflow = 0 + self.__received_packets_overflow = 0 + self._trigger_rekey() + finally: + self.__write_lock.release() + + def read_message(self): + """ + Only one thread should ever be in this function (no other locking is + done). + + :raises: `.SSHException` -- if the packet is mangled + :raises: `.NeedRekeyException` -- if the transport should rekey + """ + header = self.read_all(self.__block_size_in, check_rekey=True) + if self.__etm_in: + packet_size = struct.unpack(">I", header[:4])[0] + remaining = packet_size - self.__block_size_in + 4 + packet = header[4:] + self.read_all(remaining, check_rekey=False) + mac = self.read_all(self.__mac_size_in, check_rekey=False) + mac_payload = ( + struct.pack(">II", self.__sequence_number_in, packet_size) + + packet + ) + my_mac = compute_hmac( + self.__mac_key_in, mac_payload, self.__mac_engine_in + )[: self.__mac_size_in] + if not util.constant_time_bytes_eq(my_mac, mac): + raise SSHException("Mismatched MAC") + header = packet + + if self.__aead_in: + # Grab unencrypted (considered 'additional data' under GCM) packet + # length. + packet_size = struct.unpack(">I", header[:4])[0] + aad = header[:4] + remaining = ( + packet_size - self.__block_size_in + 4 + self.__mac_size_in + ) + packet = header[4:] + self.read_all(remaining, check_rekey=False) + header = self.__block_engine_in.decrypt(self.__iv_in, packet, aad) + + self.__iv_in = self._inc_iv_counter(self.__iv_in) + + if self.__block_engine_in is not None and not self.__aead_in: + header = self.__block_engine_in.update(header) + if self.__dump_packets: + self._log(DEBUG, util.format_binary(header, "IN: ")) + + # When ETM or AEAD (GCM) are in use, we've already read the packet size + # & decrypted everything, so just set the packet back to the header we + # obtained. + if self.__etm_in or self.__aead_in: + packet = header + # Otherwise, use the older non-ETM logic + else: + packet_size = struct.unpack(">I", header[:4])[0] + + # leftover contains decrypted bytes from the first block (after the + # length field) + leftover = header[4:] + if (packet_size - len(leftover)) % self.__block_size_in != 0: + raise SSHException("Invalid packet blocking") + buf = self.read_all( + packet_size + self.__mac_size_in - len(leftover) + ) + packet = buf[: packet_size - len(leftover)] + post_packet = buf[packet_size - len(leftover) :] + + if self.__block_engine_in is not None: + packet = self.__block_engine_in.update(packet) + packet = leftover + packet + + if self.__dump_packets: + self._log(DEBUG, util.format_binary(packet, "IN: ")) + + if self.__mac_size_in > 0 and not self.__etm_in and not self.__aead_in: + mac = post_packet[: self.__mac_size_in] + mac_payload = ( + struct.pack(">II", self.__sequence_number_in, packet_size) + + packet + ) + my_mac = compute_hmac( + self.__mac_key_in, mac_payload, self.__mac_engine_in + )[: self.__mac_size_in] + if not util.constant_time_bytes_eq(my_mac, mac): + raise SSHException("Mismatched MAC") + padding = byte_ord(packet[0]) + payload = packet[1 : packet_size - padding] + + if self.__dump_packets: + self._log( + DEBUG, + "Got payload ({} bytes, {} padding)".format( + packet_size, padding + ), + ) + + if self.__compress_engine_in is not None: + payload = self.__compress_engine_in(payload) + + msg = Message(payload[1:]) + msg.seqno = self.__sequence_number_in + next_seq = (self.__sequence_number_in + 1) & xffffffff + if next_seq == 0 and not self._initial_kex_done: + raise SSHException( + "Sequence number rolled over during initial kex!" + ) + self.__sequence_number_in = next_seq + + # check for rekey + raw_packet_size = packet_size + self.__mac_size_in + 4 + self.__received_bytes += raw_packet_size + self.__received_packets += 1 + if self.__need_rekey: + # we've asked to rekey -- give them some packets to comply before + # dropping the connection + self.__received_bytes_overflow += raw_packet_size + self.__received_packets_overflow += 1 + if ( + self.__received_packets_overflow + >= self.REKEY_PACKETS_OVERFLOW_MAX + ) or ( + self.__received_bytes_overflow >= self.REKEY_BYTES_OVERFLOW_MAX + ): + raise SSHException( + "Remote transport is ignoring rekey requests" + ) + elif (self.__received_packets >= self.REKEY_PACKETS) or ( + self.__received_bytes >= self.REKEY_BYTES + ): + # only ask once for rekeying + err = "Rekeying (hit {} packets, {} bytes received)" + self._log( + DEBUG, + err.format(self.__received_packets, self.__received_bytes), + ) + self.__received_bytes_overflow = 0 + self.__received_packets_overflow = 0 + self._trigger_rekey() + + cmd = byte_ord(payload[0]) + if cmd in MSG_NAMES: + cmd_name = MSG_NAMES[cmd] + else: + cmd_name = "${:x}".format(cmd) + if self.__dump_packets: + self._log( + DEBUG, + "Read packet <{}>, length {}".format(cmd_name, len(payload)), + ) + return cmd, msg + + # ...protected... + + def _log(self, level, msg): + if self.__logger is None: + return + if issubclass(type(msg), list): + for m in msg: + self.__logger.log(level, m) + else: + self.__logger.log(level, msg) + + def _check_keepalive(self): + if ( + not self.__keepalive_interval + or not self.__block_engine_out + or self.__need_rekey + ): + # wait till we're encrypting, and not in the middle of rekeying + return + now = time.time() + if now > self.__keepalive_last + self.__keepalive_interval: + self.__keepalive_callback() + self.__keepalive_last = now + + def _read_timeout(self, timeout): + start = time.time() + while True: + try: + x = self.__socket.recv(128) + if len(x) == 0: + raise EOFError() + break + except socket.timeout: + pass + if self.__closed: + raise EOFError() + now = time.time() + if now - start >= timeout: + raise socket.timeout() + return x + + def _build_packet(self, payload): + # pad up at least 4 bytes, to nearest block-size (usually 8) + bsize = self.__block_size_out + # do not include payload length in computations for padding in EtM mode + # (payload length won't be encrypted) + addlen = 4 if self.__etm_out or self.__aead_out else 8 + padding = 3 + bsize - ((len(payload) + addlen) % bsize) + packet = struct.pack(">IB", len(payload) + padding + 1, padding) + packet += payload + if self.__sdctr_out or self.__block_engine_out is None: + # cute trick i caught openssh doing: if we're not encrypting or + # SDCTR mode (RFC4344), + # don't waste random bytes for the padding + packet += zero_byte * padding + else: + packet += os.urandom(padding) + return packet + + def _trigger_rekey(self): + # outside code should check for this flag + self.__need_rekey = True diff --git a/venv/lib/python3.11/site-packages/paramiko/pipe.py b/venv/lib/python3.11/site-packages/paramiko/pipe.py new file mode 100644 index 0000000..65944fa --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/pipe.py @@ -0,0 +1,148 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Abstraction of a one-way pipe where the read end can be used in +`select.select`. Normally this is trivial, but Windows makes it nearly +impossible. + +The pipe acts like an Event, which can be set or cleared. When set, the pipe +will trigger as readable in `select `. +""" + +import sys +import os +import socket + + +def make_pipe(): + if sys.platform[:3] != "win": + p = PosixPipe() + else: + p = WindowsPipe() + return p + + +class PosixPipe: + def __init__(self): + self._rfd, self._wfd = os.pipe() + self._set = False + self._forever = False + self._closed = False + + def close(self): + os.close(self._rfd) + os.close(self._wfd) + # used for unit tests: + self._closed = True + + def fileno(self): + return self._rfd + + def clear(self): + if not self._set or self._forever: + return + os.read(self._rfd, 1) + self._set = False + + def set(self): + if self._set or self._closed: + return + self._set = True + os.write(self._wfd, b"*") + + def set_forever(self): + self._forever = True + self.set() + + +class WindowsPipe: + """ + On Windows, only an OS-level "WinSock" may be used in select(), but reads + and writes must be to the actual socket object. + """ + + def __init__(self): + serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + serv.bind(("127.0.0.1", 0)) + serv.listen(1) + + # need to save sockets in _rsock/_wsock so they don't get closed + self._rsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self._rsock.connect(("127.0.0.1", serv.getsockname()[1])) + + self._wsock, addr = serv.accept() + serv.close() + self._set = False + self._forever = False + self._closed = False + + def close(self): + self._rsock.close() + self._wsock.close() + # used for unit tests: + self._closed = True + + def fileno(self): + return self._rsock.fileno() + + def clear(self): + if not self._set or self._forever: + return + self._rsock.recv(1) + self._set = False + + def set(self): + if self._set or self._closed: + return + self._set = True + self._wsock.send(b"*") + + def set_forever(self): + self._forever = True + self.set() + + +class OrPipe: + def __init__(self, pipe): + self._set = False + self._partner = None + self._pipe = pipe + + def set(self): + self._set = True + if not self._partner._set: + self._pipe.set() + + def clear(self): + self._set = False + if not self._partner._set: + self._pipe.clear() + + +def make_or_pipe(pipe): + """ + wraps a pipe into two pipe-like objects which are "or"d together to + affect the real pipe. if either returned pipe is set, the wrapped pipe + is set. when both are cleared, the wrapped pipe is cleared. + """ + p1 = OrPipe(pipe) + p2 = OrPipe(pipe) + p1._partner = p2 + p2._partner = p1 + return p1, p2 diff --git a/venv/lib/python3.11/site-packages/paramiko/pkey.py b/venv/lib/python3.11/site-packages/paramiko/pkey.py new file mode 100644 index 0000000..9a4cf90 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/pkey.py @@ -0,0 +1,957 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Common API for all public keys. +""" + +import base64 +from base64 import encodebytes, decodebytes +from binascii import unhexlify +import os +from pathlib import Path +from hashlib import md5, sha256 +import re +import struct + +import bcrypt + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import padding, serialization +from cryptography.hazmat.primitives.ciphers import algorithms, modes, Cipher +from cryptography.hazmat.primitives import asymmetric + +from paramiko import util +from paramiko.util import u, b +from paramiko.common import o600 +from paramiko.ssh_exception import SSHException, PasswordRequiredException +from paramiko.message import Message + + +# TripleDES is moving from `cryptography.hazmat.primitives.ciphers.algorithms` +# in cryptography>=43.0.0 to `cryptography.hazmat.decrepit.ciphers.algorithms` +# It will be removed from `cryptography.hazmat.primitives.ciphers.algorithms` +# in cryptography==48.0.0. +# +# Source References: +# - https://github.com/pyca/cryptography/commit/722a6393e61b3ac +# - https://github.com/pyca/cryptography/pull/11407/files +try: + from cryptography.hazmat.decrepit.ciphers.algorithms import TripleDES +except ImportError: + from cryptography.hazmat.primitives.ciphers.algorithms import TripleDES + + +OPENSSH_AUTH_MAGIC = b"openssh-key-v1\x00" + + +def _unpad_openssh(data): + # At the moment, this is only used for unpadding private keys on disk. This + # really ought to be made constant time (possibly by upstreaming this logic + # into pyca/cryptography). + padding_length = data[-1] + if 0x20 <= padding_length < 0x7F: + return data # no padding, last byte part comment (printable ascii) + if padding_length > 15: + raise SSHException("Invalid key") + for i in range(padding_length): + if data[i - padding_length] != i + 1: + raise SSHException("Invalid key") + return data[:-padding_length] + + +class UnknownKeyType(Exception): + """ + An unknown public/private key algorithm was attempted to be read. + """ + + def __init__(self, key_type=None, key_bytes=None): + self.key_type = key_type + self.key_bytes = key_bytes + + def __str__(self): + return f"UnknownKeyType(type={self.key_type!r}, bytes=<{len(self.key_bytes)}>)" # noqa + + +class PKey: + """ + Base class for public keys. + + Also includes some "meta" level convenience constructors such as + `.from_type_string`. + """ + + # known encryption types for private key files: + _CIPHER_TABLE = { + "AES-128-CBC": { + "cipher": algorithms.AES, + "keysize": 16, + "blocksize": 16, + "mode": modes.CBC, + }, + "AES-256-CBC": { + "cipher": algorithms.AES, + "keysize": 32, + "blocksize": 16, + "mode": modes.CBC, + }, + "DES-EDE3-CBC": { + "cipher": TripleDES, + "keysize": 24, + "blocksize": 8, + "mode": modes.CBC, + }, + } + _PRIVATE_KEY_FORMAT_ORIGINAL = 1 + _PRIVATE_KEY_FORMAT_OPENSSH = 2 + BEGIN_TAG = re.compile( + r"^-{5}BEGIN (RSA|DSA|EC|OPENSSH) PRIVATE KEY-{5}\s*$" + ) + END_TAG = re.compile(r"^-{5}END (RSA|DSA|EC|OPENSSH) PRIVATE KEY-{5}\s*$") + + @staticmethod + def from_path(path, passphrase=None): + """ + Attempt to instantiate appropriate key subclass from given file path. + + :param Path path: The path to load (may also be a `str`). + + :returns: + A `PKey` subclass instance. + + :raises: + `UnknownKeyType`, if our crypto backend doesn't know this key type. + + .. versionadded:: 3.2 + """ + # TODO: make sure sphinx is reading Path right in param list... + + # Lazy import to avoid circular import issues + from paramiko import DSSKey, RSAKey, Ed25519Key, ECDSAKey + + # Normalize to string, as cert suffix isn't quite an extension, so + # pathlib isn't useful for this. + path = str(path) + + # Sort out cert vs key, i.e. it is 'legal' to hand this kind of API + # /either/ the key /or/ the cert, when there is a key/cert pair. + cert_suffix = "-cert.pub" + if str(path).endswith(cert_suffix): + key_path = path[: -len(cert_suffix)] + cert_path = path + else: + key_path = path + cert_path = path + cert_suffix + + key_path = Path(key_path).expanduser() + cert_path = Path(cert_path).expanduser() + + data = key_path.read_bytes() + # Like OpenSSH, try modern/OpenSSH-specific key load first + try: + loaded = serialization.load_ssh_private_key( + data=data, password=passphrase + ) + # Then fall back to assuming legacy PEM type + except ValueError: + loaded = serialization.load_pem_private_key( + data=data, password=passphrase + ) + # TODO Python 3.10: match statement? (NOTE: we cannot use a dict + # because the results from the loader are literal backend, eg openssl, + # private classes, so isinstance tests work but exact 'x class is y' + # tests will not work) + # TODO: leverage already-parsed/math'd obj to avoid duplicate cpu + # cycles? seemingly requires most of our key subclasses to be rewritten + # to be cryptography-object-forward. this is still likely faster than + # the old SSHClient code that just tried instantiating every class! + key_class = None + if isinstance(loaded, asymmetric.dsa.DSAPrivateKey): + key_class = DSSKey + elif isinstance(loaded, asymmetric.rsa.RSAPrivateKey): + key_class = RSAKey + elif isinstance(loaded, asymmetric.ed25519.Ed25519PrivateKey): + key_class = Ed25519Key + elif isinstance(loaded, asymmetric.ec.EllipticCurvePrivateKey): + key_class = ECDSAKey + else: + raise UnknownKeyType(key_bytes=data, key_type=loaded.__class__) + with key_path.open() as fd: + key = key_class.from_private_key(fd, password=passphrase) + if cert_path.exists(): + # load_certificate can take Message, path-str, or value-str + key.load_certificate(str(cert_path)) + return key + + @staticmethod + def from_type_string(key_type, key_bytes): + """ + Given type `str` & raw `bytes`, return a `PKey` subclass instance. + + For example, ``PKey.from_type_string("ssh-ed25519", )`` + will (if successful) return a new `.Ed25519Key`. + + :param str key_type: + The key type, eg ``"ssh-ed25519"``. + :param bytes key_bytes: + The raw byte data forming the key material, as expected by + subclasses' ``data`` parameter. + + :returns: + A `PKey` subclass instance. + + :raises: + `UnknownKeyType`, if no registered classes knew about this type. + + .. versionadded:: 3.2 + """ + from paramiko import key_classes + + for key_class in key_classes: + if key_type in key_class.identifiers(): + # TODO: needs to passthru things like passphrase + return key_class(data=key_bytes) + raise UnknownKeyType(key_type=key_type, key_bytes=key_bytes) + + @classmethod + def identifiers(cls): + """ + returns an iterable of key format/name strings this class can handle. + + Most classes only have a single identifier, and thus this default + implementation suffices; see `.ECDSAKey` for one example of an + override. + """ + return [cls.name] + + # TODO 4.0: make this and subclasses consistent, some of our own + # classmethods even assume kwargs we don't define! + # TODO 4.0: prob also raise NotImplementedError instead of pass'ing; the + # contract is pretty obviously that you need to handle msg/data/filename + # appropriately. (If 'pass' is a concession to testing, see about doing the + # work to fix the tests instead) + def __init__(self, msg=None, data=None): + """ + Create a new instance of this public key type. If ``msg`` is given, + the key's public part(s) will be filled in from the message. If + ``data`` is given, the key's public part(s) will be filled in from + the string. + + :param .Message msg: + an optional SSH `.Message` containing a public key of this type. + :param bytes data: + optional, the bytes of a public key of this type + + :raises: `.SSHException` -- + if a key cannot be created from the ``data`` or ``msg`` given, or + no key was passed in. + """ + pass + + # TODO: arguably this might want to be __str__ instead? ehh + # TODO: ditto the interplay between showing class name (currently we just + # say PKey writ large) and algorithm (usually == class name, but not + # always, also sometimes shows certificate-ness) + # TODO: if we do change it, we also want to tweak eg AgentKey, as it + # currently displays agent-ness with a suffix + def __repr__(self): + comment = "" + # Works for AgentKey, may work for others? + if hasattr(self, "comment") and self.comment: + comment = f", comment={self.comment!r}" + return f"PKey(alg={self.algorithm_name}, bits={self.get_bits()}, fp={self.fingerprint}{comment})" # noqa + + # TODO 4.0: just merge into __bytes__ (everywhere) + def asbytes(self): + """ + Return a string of an SSH `.Message` made up of the public part(s) of + this key. This string is suitable for passing to `__init__` to + re-create the key object later. + """ + return bytes() + + def __bytes__(self): + return self.asbytes() + + def __eq__(self, other): + return isinstance(other, PKey) and self._fields == other._fields + + def __hash__(self): + return hash(self._fields) + + @property + def _fields(self): + raise NotImplementedError + + def get_name(self): + """ + Return the name of this private key implementation. + + :return: + name of this private key type, in SSH terminology, as a `str` (for + example, ``"ssh-rsa"``). + """ + return "" + + @property + def algorithm_name(self): + """ + Return the key algorithm identifier for this key. + + Similar to `get_name`, but aimed at pure algorithm name instead of SSH + protocol field value. + """ + # Nuke the leading 'ssh-' + # TODO in Python 3.9: use .removeprefix() + name = self.get_name().replace("ssh-", "") + # Trim any cert suffix (but leave the -cert, as OpenSSH does) + cert_tail = "-cert-v01@openssh.com" + if cert_tail in name: + name = name.replace(cert_tail, "-cert") + # Nuke any eg ECDSA suffix, OpenSSH does basically this too. + else: + name = name.split("-")[0] + return name.upper() + + def get_bits(self): + """ + Return the number of significant bits in this key. This is useful + for judging the relative security of a key. + + :return: bits in the key (as an `int`) + """ + # TODO 4.0: raise NotImplementedError, 0 is unlikely to ever be + # _correct_ and nothing in the critical path seems to use this. + return 0 + + def can_sign(self): + """ + Return ``True`` if this key has the private part necessary for signing + data. + """ + return False + + def get_fingerprint(self): + """ + Return an MD5 fingerprint of the public part of this key. Nothing + secret is revealed. + + :return: + a 16-byte `string ` (binary) of the MD5 fingerprint, in SSH + format. + """ + return md5(self.asbytes()).digest() + + @property + def fingerprint(self): + """ + Modern fingerprint property designed to be comparable to OpenSSH. + + Currently only does SHA256 (the OpenSSH default). + + .. versionadded:: 3.2 + """ + hashy = sha256(bytes(self)) + hash_name = hashy.name.upper() + b64ed = encodebytes(hashy.digest()) + cleaned = u(b64ed).strip().rstrip("=") # yes, OpenSSH does this too! + return f"{hash_name}:{cleaned}" + + def get_base64(self): + """ + Return a base64 string containing the public part of this key. Nothing + secret is revealed. This format is compatible with that used to store + public key files or recognized host keys. + + :return: a base64 `string ` containing the public part of the key. + """ + return u(encodebytes(self.asbytes())).replace("\n", "") + + def sign_ssh_data(self, data, algorithm=None): + """ + Sign a blob of data with this private key, and return a `.Message` + representing an SSH signature message. + + :param bytes data: + the data to sign. + :param str algorithm: + the signature algorithm to use, if different from the key's + internal name. Default: ``None``. + :return: an SSH signature `message <.Message>`. + + .. versionchanged:: 2.9 + Added the ``algorithm`` kwarg. + """ + return bytes() + + def verify_ssh_sig(self, data, msg): + """ + Given a blob of data, and an SSH message representing a signature of + that data, verify that it was signed with this key. + + :param bytes data: the data that was signed. + :param .Message msg: an SSH signature message + :return: + ``True`` if the signature verifies correctly; ``False`` otherwise. + """ + return False + + @classmethod + def from_private_key_file(cls, filename, password=None): + """ + Create a key object by reading a private key file. If the private + key is encrypted and ``password`` is not ``None``, the given password + will be used to decrypt the key (otherwise `.PasswordRequiredException` + is thrown). Through the magic of Python, this factory method will + exist in all subclasses of PKey (such as `.RSAKey` or `.DSSKey`), but + is useless on the abstract PKey class. + + :param str filename: name of the file to read + :param str password: + an optional password to use to decrypt the key file, if it's + encrypted + :return: a new `.PKey` based on the given private key + + :raises: ``IOError`` -- if there was an error reading the file + :raises: `.PasswordRequiredException` -- if the private key file is + encrypted, and ``password`` is ``None`` + :raises: `.SSHException` -- if the key file is invalid + """ + key = cls(filename=filename, password=password) + return key + + @classmethod + def from_private_key(cls, file_obj, password=None): + """ + Create a key object by reading a private key from a file (or file-like) + object. If the private key is encrypted and ``password`` is not + ``None``, the given password will be used to decrypt the key (otherwise + `.PasswordRequiredException` is thrown). + + :param file_obj: the file-like object to read from + :param str password: + an optional password to use to decrypt the key, if it's encrypted + :return: a new `.PKey` based on the given private key + + :raises: ``IOError`` -- if there was an error reading the key + :raises: `.PasswordRequiredException` -- + if the private key file is encrypted, and ``password`` is ``None`` + :raises: `.SSHException` -- if the key file is invalid + """ + key = cls(file_obj=file_obj, password=password) + return key + + def write_private_key_file(self, filename, password=None): + """ + Write private key contents into a file. If the password is not + ``None``, the key is encrypted before writing. + + :param str filename: name of the file to write + :param str password: + an optional password to use to encrypt the key file + + :raises: ``IOError`` -- if there was an error writing the file + :raises: `.SSHException` -- if the key is invalid + """ + raise Exception("Not implemented in PKey") + + def write_private_key(self, file_obj, password=None): + """ + Write private key contents into a file (or file-like) object. If the + password is not ``None``, the key is encrypted before writing. + + :param file_obj: the file-like object to write into + :param str password: an optional password to use to encrypt the key + + :raises: ``IOError`` -- if there was an error writing to the file + :raises: `.SSHException` -- if the key is invalid + """ + # TODO 4.0: NotImplementedError (plus everywhere else in here) + raise Exception("Not implemented in PKey") + + def _read_private_key_file(self, tag, filename, password=None): + """ + Read an SSH2-format private key file, looking for a string of the type + ``"BEGIN xxx PRIVATE KEY"`` for some ``xxx``, base64-decode the text we + find, and return it as a string. If the private key is encrypted and + ``password`` is not ``None``, the given password will be used to + decrypt the key (otherwise `.PasswordRequiredException` is thrown). + + :param str tag: ``"RSA"`` or ``"DSA"``, the tag used to mark the + data block. + :param str filename: name of the file to read. + :param str password: + an optional password to use to decrypt the key file, if it's + encrypted. + :return: the `bytes` that make up the private key. + + :raises: ``IOError`` -- if there was an error reading the file. + :raises: `.PasswordRequiredException` -- if the private key file is + encrypted, and ``password`` is ``None``. + :raises: `.SSHException` -- if the key file is invalid. + """ + with open(filename, "r") as f: + data = self._read_private_key(tag, f, password) + return data + + def _read_private_key(self, tag, f, password=None): + lines = f.readlines() + if not lines: + raise SSHException("no lines in {} private key file".format(tag)) + + # find the BEGIN tag + start = 0 + m = self.BEGIN_TAG.match(lines[start]) + line_range = len(lines) - 1 + while start < line_range and not m: + start += 1 + m = self.BEGIN_TAG.match(lines[start]) + start += 1 + keytype = m.group(1) if m else None + if start >= len(lines) or keytype is None: + raise SSHException("not a valid {} private key file".format(tag)) + + # find the END tag + end = start + m = self.END_TAG.match(lines[end]) + while end < line_range and not m: + end += 1 + m = self.END_TAG.match(lines[end]) + + if keytype == tag: + data = self._read_private_key_pem(lines, end, password) + pkformat = self._PRIVATE_KEY_FORMAT_ORIGINAL + elif keytype == "OPENSSH": + data = self._read_private_key_openssh(lines[start:end], password) + pkformat = self._PRIVATE_KEY_FORMAT_OPENSSH + else: + raise SSHException( + "encountered {} key, expected {} key".format(keytype, tag) + ) + + return pkformat, data + + def _got_bad_key_format_id(self, id_): + err = "{}._read_private_key() spat out an unknown key format id '{}'" + raise SSHException(err.format(self.__class__.__name__, id_)) + + def _read_private_key_pem(self, lines, end, password): + start = 0 + # parse any headers first + headers = {} + start += 1 + while start < len(lines): + line = lines[start].split(": ") + if len(line) == 1: + break + headers[line[0].lower()] = line[1].strip() + start += 1 + # if we trudged to the end of the file, just try to cope. + try: + data = decodebytes(b("".join(lines[start:end]))) + except base64.binascii.Error as e: + raise SSHException("base64 decoding error: {}".format(e)) + if "proc-type" not in headers: + # unencryped: done + return data + # encrypted keyfile: will need a password + proc_type = headers["proc-type"] + if proc_type != "4,ENCRYPTED": + raise SSHException( + 'Unknown private key structure "{}"'.format(proc_type) + ) + try: + encryption_type, saltstr = headers["dek-info"].split(",") + except: + raise SSHException("Can't parse DEK-info in private key file") + if encryption_type not in self._CIPHER_TABLE: + raise SSHException( + 'Unknown private key cipher "{}"'.format(encryption_type) + ) + # if no password was passed in, + # raise an exception pointing out that we need one + if password is None: + raise PasswordRequiredException("Private key file is encrypted") + cipher = self._CIPHER_TABLE[encryption_type]["cipher"] + keysize = self._CIPHER_TABLE[encryption_type]["keysize"] + mode = self._CIPHER_TABLE[encryption_type]["mode"] + salt = unhexlify(b(saltstr)) + key = util.generate_key_bytes(md5, salt, password, keysize) + decryptor = Cipher( + cipher(key), mode(salt), backend=default_backend() + ).decryptor() + decrypted_data = decryptor.update(data) + decryptor.finalize() + unpadder = padding.PKCS7(cipher.block_size).unpadder() + try: + return unpadder.update(decrypted_data) + unpadder.finalize() + except ValueError: + raise SSHException("Bad password or corrupt private key file") + + def _read_private_key_openssh(self, lines, password): + """ + Read the new OpenSSH SSH2 private key format available + since OpenSSH version 6.5 + Reference: + https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key + """ + try: + data = decodebytes(b("".join(lines))) + except base64.binascii.Error as e: + raise SSHException("base64 decoding error: {}".format(e)) + + # read data struct + auth_magic = data[:15] + if auth_magic != OPENSSH_AUTH_MAGIC: + raise SSHException("unexpected OpenSSH key header encountered") + + cstruct = self._uint32_cstruct_unpack(data[15:], "sssur") + cipher, kdfname, kdf_options, num_pubkeys, remainder = cstruct + # For now, just support 1 key. + if num_pubkeys > 1: + raise SSHException( + "unsupported: private keyfile has multiple keys" + ) + pubkey, privkey_blob = self._uint32_cstruct_unpack(remainder, "ss") + + if kdfname == b("bcrypt"): + if cipher == b("aes256-cbc"): + mode = modes.CBC + elif cipher == b("aes256-ctr"): + mode = modes.CTR + else: + raise SSHException( + "unknown cipher `{}` used in private key file".format( + cipher.decode("utf-8") + ) + ) + # Encrypted private key. + # If no password was passed in, raise an exception pointing + # out that we need one + if password is None: + raise PasswordRequiredException( + "private key file is encrypted" + ) + + # Unpack salt and rounds from kdfoptions + salt, rounds = self._uint32_cstruct_unpack(kdf_options, "su") + + # run bcrypt kdf to derive key and iv/nonce (32 + 16 bytes) + key_iv = bcrypt.kdf( + b(password), + b(salt), + 48, + rounds, + # We can't control how many rounds are on disk, so no sense + # warning about it. + ignore_few_rounds=True, + ) + key = key_iv[:32] + iv = key_iv[32:] + + # decrypt private key blob + decryptor = Cipher( + algorithms.AES(key), mode(iv), default_backend() + ).decryptor() + decrypted_privkey = decryptor.update(privkey_blob) + decrypted_privkey += decryptor.finalize() + elif cipher == b("none") and kdfname == b("none"): + # Unencrypted private key + decrypted_privkey = privkey_blob + else: + raise SSHException( + "unknown cipher or kdf used in private key file" + ) + + # Unpack private key and verify checkints + cstruct = self._uint32_cstruct_unpack(decrypted_privkey, "uusr") + checkint1, checkint2, keytype, keydata = cstruct + + if checkint1 != checkint2: + raise SSHException( + "OpenSSH private key file checkints do not match" + ) + + return _unpad_openssh(keydata) + + def _uint32_cstruct_unpack(self, data, strformat): + """ + Used to read new OpenSSH private key format. + Unpacks a c data structure containing a mix of 32-bit uints and + variable length strings prefixed by 32-bit uint size field, + according to the specified format. Returns the unpacked vars + in a tuple. + Format strings: + s - denotes a string + i - denotes a long integer, encoded as a byte string + u - denotes a 32-bit unsigned integer + r - the remainder of the input string, returned as a string + """ + arr = [] + idx = 0 + try: + for f in strformat: + if f == "s": + # string + s_size = struct.unpack(">L", data[idx : idx + 4])[0] + idx += 4 + s = data[idx : idx + s_size] + idx += s_size + arr.append(s) + if f == "i": + # long integer + s_size = struct.unpack(">L", data[idx : idx + 4])[0] + idx += 4 + s = data[idx : idx + s_size] + idx += s_size + i = util.inflate_long(s, True) + arr.append(i) + elif f == "u": + # 32-bit unsigned int + u = struct.unpack(">L", data[idx : idx + 4])[0] + idx += 4 + arr.append(u) + elif f == "r": + # remainder as string + s = data[idx:] + arr.append(s) + break + except Exception as e: + # PKey-consuming code frequently wants to save-and-skip-over issues + # with loading keys, and uses SSHException as the (really friggin + # awful) signal for this. So for now...we do this. + raise SSHException(str(e)) + return tuple(arr) + + def _write_private_key_file(self, filename, key, format, password=None): + """ + Write an SSH2-format private key file in a form that can be read by + paramiko or openssh. If no password is given, the key is written in + a trivially-encoded format (base64) which is completely insecure. If + a password is given, DES-EDE3-CBC is used. + + :param str tag: + ``"RSA"`` or ``"DSA"``, the tag used to mark the data block. + :param filename: name of the file to write. + :param bytes data: data blob that makes up the private key. + :param str password: an optional password to use to encrypt the file. + + :raises: ``IOError`` -- if there was an error writing the file. + """ + # Ensure that we create new key files directly with a user-only mode, + # instead of opening, writing, then chmodding, which leaves us open to + # CVE-2022-24302. + with os.fdopen( + os.open( + filename, + # NOTE: O_TRUNC is a noop on new files, and O_CREAT is a noop + # on existing files, so using all 3 in both cases is fine. + flags=os.O_WRONLY | os.O_TRUNC | os.O_CREAT, + # Ditto the use of the 'mode' argument; it should be safe to + # give even for existing files (though it will not act like a + # chmod in that case). + mode=o600, + ), + # Yea, you still gotta inform the FLO that it is in "write" mode. + "w", + ) as f: + self._write_private_key(f, key, format, password=password) + + def _write_private_key(self, f, key, format, password=None): + if password is None: + encryption = serialization.NoEncryption() + else: + encryption = serialization.BestAvailableEncryption(b(password)) + + f.write( + key.private_bytes( + serialization.Encoding.PEM, format, encryption + ).decode() + ) + + def _check_type_and_load_cert(self, msg, key_type, cert_type): + """ + Perform message type-checking & optional certificate loading. + + This includes fast-forwarding cert ``msg`` objects past the nonce, so + that the subsequent fields are the key numbers; thus the caller may + expect to treat the message as key material afterwards either way. + + The obtained key type is returned for classes which need to know what + it was (e.g. ECDSA.) + """ + # Normalization; most classes have a single key type and give a string, + # but eg ECDSA is a 1:N mapping. + key_types = key_type + cert_types = cert_type + if isinstance(key_type, str): + key_types = [key_types] + if isinstance(cert_types, str): + cert_types = [cert_types] + # Can't do much with no message, that should've been handled elsewhere + if msg is None: + raise SSHException("Key object may not be empty") + # First field is always key type, in either kind of object. (make sure + # we rewind before grabbing it - sometimes caller had to do their own + # introspection first!) + msg.rewind() + type_ = msg.get_text() + # Regular public key - nothing special to do besides the implicit + # type check. + if type_ in key_types: + pass + # OpenSSH-compatible certificate - store full copy as .public_blob + # (so signing works correctly) and then fast-forward past the + # nonce. + elif type_ in cert_types: + # This seems the cleanest way to 'clone' an already-being-read + # message; they're *IO objects at heart and their .getvalue() + # always returns the full value regardless of pointer position. + self.load_certificate(Message(msg.asbytes())) + # Read out nonce as it comes before the public numbers - our caller + # is likely going to use the (only borrowed by us, not owned) + # 'msg' object for loading those numbers right after this. + # TODO: usefully interpret it & other non-public-number fields + # (requires going back into per-type subclasses.) + msg.get_string() + else: + err = "Invalid key (class: {}, data type: {}" + raise SSHException(err.format(self.__class__.__name__, type_)) + + def load_certificate(self, value): + """ + Supplement the private key contents with data loaded from an OpenSSH + public key (``.pub``) or certificate (``-cert.pub``) file, a string + containing such a file, or a `.Message` object. + + The .pub contents adds no real value, since the private key + file includes sufficient information to derive the public + key info. For certificates, however, this can be used on + the client side to offer authentication requests to the server + based on certificate instead of raw public key. + + See: + https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.certkeys + + Note: very little effort is made to validate the certificate contents, + that is for the server to decide if it is good enough to authenticate + successfully. + """ + if isinstance(value, Message): + constructor = "from_message" + elif os.path.isfile(value): + constructor = "from_file" + else: + constructor = "from_string" + blob = getattr(PublicBlob, constructor)(value) + if not blob.key_type.startswith(self.get_name()): + err = "PublicBlob type {} incompatible with key type {}" + raise ValueError(err.format(blob.key_type, self.get_name())) + self.public_blob = blob + + +# General construct for an OpenSSH style Public Key blob +# readable from a one-line file of the format: +# [] +# Of little value in the case of standard public keys +# {ssh-rsa, ssh-dss, ssh-ecdsa, ssh-ed25519}, but should +# provide rudimentary support for {*-cert.v01} +class PublicBlob: + """ + OpenSSH plain public key or OpenSSH signed public key (certificate). + + Tries to be as dumb as possible and barely cares about specific + per-key-type data. + + .. note:: + + Most of the time you'll want to call `from_file`, `from_string` or + `from_message` for useful instantiation, the main constructor is + basically "I should be using ``attrs`` for this." + """ + + def __init__(self, type_, blob, comment=None): + """ + Create a new public blob of given type and contents. + + :param str type_: Type indicator, eg ``ssh-rsa``. + :param bytes blob: The blob bytes themselves. + :param str comment: A comment, if one was given (e.g. file-based.) + """ + self.key_type = type_ + self.key_blob = blob + self.comment = comment + + @classmethod + def from_file(cls, filename): + """ + Create a public blob from a ``-cert.pub``-style file on disk. + """ + with open(filename) as f: + string = f.read() + return cls.from_string(string) + + @classmethod + def from_string(cls, string): + """ + Create a public blob from a ``-cert.pub``-style string. + """ + fields = string.split(None, 2) + if len(fields) < 2: + msg = "Not enough fields for public blob: {}" + raise ValueError(msg.format(fields)) + key_type = fields[0] + key_blob = decodebytes(b(fields[1])) + try: + comment = fields[2].strip() + except IndexError: + comment = None + # Verify that the blob message first (string) field matches the + # key_type + m = Message(key_blob) + blob_type = m.get_text() + if blob_type != key_type: + deets = "key type={!r}, but blob type={!r}".format( + key_type, blob_type + ) + raise ValueError("Invalid PublicBlob contents: {}".format(deets)) + # All good? All good. + return cls(type_=key_type, blob=key_blob, comment=comment) + + @classmethod + def from_message(cls, message): + """ + Create a public blob from a network `.Message`. + + Specifically, a cert-bearing pubkey auth packet, because by definition + OpenSSH-style certificates 'are' their own network representation." + """ + type_ = message.get_text() + return cls(type_=type_, blob=message.asbytes()) + + def __str__(self): + ret = "{} public key/certificate".format(self.key_type) + if self.comment: + ret += "- {}".format(self.comment) + return ret + + def __eq__(self, other): + # Just piggyback on Message/BytesIO, since both of these should be one. + return self and other and self.key_blob == other.key_blob + + def __ne__(self, other): + return not self == other diff --git a/venv/lib/python3.11/site-packages/paramiko/primes.py b/venv/lib/python3.11/site-packages/paramiko/primes.py new file mode 100644 index 0000000..663c58e --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/primes.py @@ -0,0 +1,148 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Utility functions for dealing with primes. +""" + +import os + +from paramiko import util +from paramiko.common import byte_mask +from paramiko.ssh_exception import SSHException + + +def _roll_random(n): + """returns a random # from 0 to N-1""" + bits = util.bit_length(n - 1) + byte_count = (bits + 7) // 8 + hbyte_mask = pow(2, bits % 8) - 1 + + # so here's the plan: + # we fetch as many random bits as we'd need to fit N-1, and if the + # generated number is >= N, we try again. in the worst case (N-1 is a + # power of 2), we have slightly better than 50% odds of getting one that + # fits, so i can't guarantee that this loop will ever finish, but the odds + # of it looping forever should be infinitesimal. + while True: + x = os.urandom(byte_count) + if hbyte_mask > 0: + x = byte_mask(x[0], hbyte_mask) + x[1:] + num = util.inflate_long(x, 1) + if num < n: + break + return num + + +class ModulusPack: + """ + convenience object for holding the contents of the /etc/ssh/moduli file, + on systems that have such a file. + """ + + def __init__(self): + # pack is a hash of: bits -> [ (generator, modulus) ... ] + self.pack = {} + self.discarded = [] + + def _parse_modulus(self, line): + ( + timestamp, + mod_type, + tests, + tries, + size, + generator, + modulus, + ) = line.split() + mod_type = int(mod_type) + tests = int(tests) + tries = int(tries) + size = int(size) + generator = int(generator) + modulus = int(modulus, 16) + + # weed out primes that aren't at least: + # type 2 (meets basic structural requirements) + # test 4 (more than just a small-prime sieve) + # tries < 100 if test & 4 (at least 100 tries of miller-rabin) + if ( + mod_type < 2 + or tests < 4 + or (tests & 4 and tests < 8 and tries < 100) + ): + self.discarded.append( + (modulus, "does not meet basic requirements") + ) + return + if generator == 0: + generator = 2 + + # there's a bug in the ssh "moduli" file (yeah, i know: shock! dismay! + # call cnn!) where it understates the bit lengths of these primes by 1. + # this is okay. + bl = util.bit_length(modulus) + if (bl != size) and (bl != size + 1): + self.discarded.append( + (modulus, "incorrectly reported bit length {}".format(size)) + ) + return + if bl not in self.pack: + self.pack[bl] = [] + self.pack[bl].append((generator, modulus)) + + def read_file(self, filename): + """ + :raises IOError: passed from any file operations that fail. + """ + self.pack = {} + with open(filename, "r") as f: + for line in f: + line = line.strip() + if (len(line) == 0) or (line[0] == "#"): + continue + try: + self._parse_modulus(line) + except: + continue + + def get_modulus(self, min, prefer, max): + bitsizes = sorted(self.pack.keys()) + if len(bitsizes) == 0: + raise SSHException("no moduli available") + good = -1 + # find nearest bitsize >= preferred + for b in bitsizes: + if (b >= prefer) and (b <= max) and (b < good or good == -1): + good = b + # if that failed, find greatest bitsize >= min + if good == -1: + for b in bitsizes: + if (b >= min) and (b <= max) and (b > good): + good = b + if good == -1: + # their entire (min, max) range has no intersection with our range. + # if their range is below ours, pick the smallest. otherwise pick + # the largest. it'll be out of their range requirement either way, + # but we'll be sending them the closest one we have. + good = bitsizes[0] + if min > good: + good = bitsizes[-1] + # now pick a random modulus of this bitsize + n = _roll_random(len(self.pack[good])) + return self.pack[good][n] diff --git a/venv/lib/python3.11/site-packages/paramiko/proxy.py b/venv/lib/python3.11/site-packages/paramiko/proxy.py new file mode 100644 index 0000000..f7609c9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/proxy.py @@ -0,0 +1,134 @@ +# Copyright (C) 2012 Yipit, Inc +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import os +import shlex +import signal +from select import select +import socket +import time + +# Try-and-ignore import so platforms w/o subprocess (eg Google App Engine) can +# still import paramiko. +subprocess, subprocess_import_error = None, None +try: + import subprocess +except ImportError as e: + subprocess_import_error = e + +from paramiko.ssh_exception import ProxyCommandFailure +from paramiko.util import ClosingContextManager + + +class ProxyCommand(ClosingContextManager): + """ + Wraps a subprocess running ProxyCommand-driven programs. + + This class implements a the socket-like interface needed by the + `.Transport` and `.Packetizer` classes. Using this class instead of a + regular socket makes it possible to talk with a Popen'd command that will + proxy traffic between the client and a server hosted in another machine. + + Instances of this class may be used as context managers. + """ + + def __init__(self, command_line): + """ + Create a new CommandProxy instance. The instance created by this + class can be passed as an argument to the `.Transport` class. + + :param str command_line: + the command that should be executed and used as the proxy. + """ + if subprocess is None: + raise subprocess_import_error + self.cmd = shlex.split(command_line) + self.process = subprocess.Popen( + self.cmd, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + bufsize=0, + ) + self.timeout = None + + def send(self, content): + """ + Write the content received from the SSH client to the standard + input of the forked command. + + :param str content: string to be sent to the forked command + """ + try: + self.process.stdin.write(content) + except IOError as e: + # There was a problem with the child process. It probably + # died and we can't proceed. The best option here is to + # raise an exception informing the user that the informed + # ProxyCommand is not working. + raise ProxyCommandFailure(" ".join(self.cmd), e.strerror) + return len(content) + + def recv(self, size): + """ + Read from the standard output of the forked program. + + :param int size: how many chars should be read + + :return: the string of bytes read, which may be shorter than requested + """ + try: + buffer = b"" + start = time.time() + while len(buffer) < size: + select_timeout = None + if self.timeout is not None: + elapsed = time.time() - start + if elapsed >= self.timeout: + raise socket.timeout() + select_timeout = self.timeout - elapsed + + r, w, x = select([self.process.stdout], [], [], select_timeout) + if r and r[0] == self.process.stdout: + buffer += os.read( + self.process.stdout.fileno(), size - len(buffer) + ) + return buffer + except socket.timeout: + if buffer: + # Don't raise socket.timeout, return partial result instead + return buffer + raise # socket.timeout is a subclass of IOError + except IOError as e: + raise ProxyCommandFailure(" ".join(self.cmd), e.strerror) + + def close(self): + os.kill(self.process.pid, signal.SIGTERM) + + @property + def closed(self): + return self.process.returncode is not None + + @property + def _closed(self): + # Concession to Python 3 socket-like API + return self.closed + + def settimeout(self, timeout): + self.timeout = timeout diff --git a/venv/lib/python3.11/site-packages/paramiko/rsakey.py b/venv/lib/python3.11/site-packages/paramiko/rsakey.py new file mode 100644 index 0000000..b7ad3ce --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/rsakey.py @@ -0,0 +1,227 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +RSA keys. +""" + +from cryptography.exceptions import InvalidSignature, UnsupportedAlgorithm +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import rsa, padding + +from paramiko.message import Message +from paramiko.pkey import PKey +from paramiko.ssh_exception import SSHException + + +class RSAKey(PKey): + """ + Representation of an RSA key which can be used to sign and verify SSH2 + data. + """ + + name = "ssh-rsa" + HASHES = { + "ssh-rsa": hashes.SHA1, + "ssh-rsa-cert-v01@openssh.com": hashes.SHA1, + "rsa-sha2-256": hashes.SHA256, + "rsa-sha2-256-cert-v01@openssh.com": hashes.SHA256, + "rsa-sha2-512": hashes.SHA512, + "rsa-sha2-512-cert-v01@openssh.com": hashes.SHA512, + } + + def __init__( + self, + msg=None, + data=None, + filename=None, + password=None, + key=None, + file_obj=None, + ): + self.key = None + self.public_blob = None + if file_obj is not None: + self._from_private_key(file_obj, password) + return + if filename is not None: + self._from_private_key_file(filename, password) + return + if (msg is None) and (data is not None): + msg = Message(data) + if key is not None: + self.key = key + else: + self._check_type_and_load_cert( + msg=msg, + # NOTE: this does NOT change when using rsa2 signatures; it's + # purely about key loading, not exchange or verification + key_type=self.name, + cert_type="ssh-rsa-cert-v01@openssh.com", + ) + self.key = rsa.RSAPublicNumbers( + e=msg.get_mpint(), n=msg.get_mpint() + ).public_key(default_backend()) + + @classmethod + def identifiers(cls): + return list(cls.HASHES.keys()) + + @property + def size(self): + return self.key.key_size + + @property + def public_numbers(self): + if isinstance(self.key, rsa.RSAPrivateKey): + return self.key.private_numbers().public_numbers + else: + return self.key.public_numbers() + + def asbytes(self): + m = Message() + m.add_string(self.name) + m.add_mpint(self.public_numbers.e) + m.add_mpint(self.public_numbers.n) + return m.asbytes() + + def __str__(self): + # NOTE: see #853 to explain some legacy behavior. + # TODO 4.0: replace with a nice clean fingerprint display or something + return self.asbytes().decode("utf8", errors="ignore") + + @property + def _fields(self): + return (self.get_name(), self.public_numbers.e, self.public_numbers.n) + + def get_name(self): + return self.name + + def get_bits(self): + return self.size + + def can_sign(self): + return isinstance(self.key, rsa.RSAPrivateKey) + + def sign_ssh_data(self, data, algorithm=None): + if algorithm is None: + algorithm = self.name + sig = self.key.sign( + data, + padding=padding.PKCS1v15(), + # HASHES being just a map from long identifier to either SHA1 or + # SHA256 - cert'ness is not truly relevant. + algorithm=self.HASHES[algorithm](), + ) + m = Message() + # And here again, cert'ness is irrelevant, so it is stripped out. + m.add_string(algorithm.replace("-cert-v01@openssh.com", "")) + m.add_string(sig) + return m + + def verify_ssh_sig(self, data, msg): + sig_algorithm = msg.get_text() + if sig_algorithm not in self.HASHES: + return False + key = self.key + if isinstance(key, rsa.RSAPrivateKey): + key = key.public_key() + + # NOTE: pad received signature with leading zeros, key.verify() + # expects a signature of key size (e.g. PuTTY doesn't pad) + sign = msg.get_binary() + diff = key.key_size - len(sign) * 8 + if diff > 0: + sign = b"\x00" * ((diff + 7) // 8) + sign + + try: + key.verify( + sign, data, padding.PKCS1v15(), self.HASHES[sig_algorithm]() + ) + except InvalidSignature: + return False + else: + return True + + def write_private_key_file(self, filename, password=None): + self._write_private_key_file( + filename, + self.key, + serialization.PrivateFormat.TraditionalOpenSSL, + password=password, + ) + + def write_private_key(self, file_obj, password=None): + self._write_private_key( + file_obj, + self.key, + serialization.PrivateFormat.TraditionalOpenSSL, + password=password, + ) + + @staticmethod + def generate(bits, progress_func=None): + """ + Generate a new private RSA key. This factory function can be used to + generate a new host key or authentication key. + + :param int bits: number of bits the generated key should be. + :param progress_func: Unused + :return: new `.RSAKey` private key + """ + key = rsa.generate_private_key( + public_exponent=65537, key_size=bits, backend=default_backend() + ) + return RSAKey(key=key) + + # ...internals... + + def _from_private_key_file(self, filename, password): + data = self._read_private_key_file("RSA", filename, password) + self._decode_key(data) + + def _from_private_key(self, file_obj, password): + data = self._read_private_key("RSA", file_obj, password) + self._decode_key(data) + + def _decode_key(self, data): + pkformat, data = data + if pkformat == self._PRIVATE_KEY_FORMAT_ORIGINAL: + try: + key = serialization.load_der_private_key( + data, password=None, backend=default_backend() + ) + except (ValueError, TypeError, UnsupportedAlgorithm) as e: + raise SSHException(str(e)) + elif pkformat == self._PRIVATE_KEY_FORMAT_OPENSSH: + n, e, d, iqmp, p, q = self._uint32_cstruct_unpack(data, "iiiiii") + public_numbers = rsa.RSAPublicNumbers(e=e, n=n) + key = rsa.RSAPrivateNumbers( + p=p, + q=q, + d=d, + dmp1=d % (p - 1), + dmq1=d % (q - 1), + iqmp=iqmp, + public_numbers=public_numbers, + ).private_key(default_backend()) + else: + self._got_bad_key_format_id(pkformat) + assert isinstance(key, rsa.RSAPrivateKey) + self.key = key diff --git a/venv/lib/python3.11/site-packages/paramiko/server.py b/venv/lib/python3.11/site-packages/paramiko/server.py new file mode 100644 index 0000000..6923bdf --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/server.py @@ -0,0 +1,732 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +`.ServerInterface` is an interface to override for server support. +""" + +import threading +from paramiko import util +from paramiko.common import ( + DEBUG, + ERROR, + OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED, + AUTH_FAILED, + AUTH_SUCCESSFUL, +) + + +class ServerInterface: + """ + This class defines an interface for controlling the behavior of Paramiko + in server mode. + + Methods on this class are called from Paramiko's primary thread, so you + shouldn't do too much work in them. (Certainly nothing that blocks or + sleeps.) + """ + + def check_channel_request(self, kind, chanid): + """ + Determine if a channel request of a given type will be granted, and + return ``OPEN_SUCCEEDED`` or an error code. This method is + called in server mode when the client requests a channel, after + authentication is complete. + + If you allow channel requests (and an ssh server that didn't would be + useless), you should also override some of the channel request methods + below, which are used to determine which services will be allowed on + a given channel: + + - `check_channel_pty_request` + - `check_channel_shell_request` + - `check_channel_subsystem_request` + - `check_channel_window_change_request` + - `check_channel_x11_request` + - `check_channel_forward_agent_request` + + The ``chanid`` parameter is a small number that uniquely identifies the + channel within a `.Transport`. A `.Channel` object is not created + unless this method returns ``OPEN_SUCCEEDED`` -- once a + `.Channel` object is created, you can call `.Channel.get_id` to + retrieve the channel ID. + + The return value should either be ``OPEN_SUCCEEDED`` (or + ``0``) to allow the channel request, or one of the following error + codes to reject it: + + - ``OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED`` + - ``OPEN_FAILED_CONNECT_FAILED`` + - ``OPEN_FAILED_UNKNOWN_CHANNEL_TYPE`` + - ``OPEN_FAILED_RESOURCE_SHORTAGE`` + + The default implementation always returns + ``OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED``. + + :param str kind: + the kind of channel the client would like to open (usually + ``"session"``). + :param int chanid: ID of the channel + :return: an `int` success or failure code (listed above) + """ + return OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED + + def get_allowed_auths(self, username): + """ + Return a list of authentication methods supported by the server. + This list is sent to clients attempting to authenticate, to inform them + of authentication methods that might be successful. + + The "list" is actually a string of comma-separated names of types of + authentication. Possible values are ``"password"``, ``"publickey"``, + and ``"none"``. + + The default implementation always returns ``"password"``. + + :param str username: the username requesting authentication. + :return: a comma-separated `str` of authentication types + """ + return "password" + + def check_auth_none(self, username): + """ + Determine if a client may open channels with no (further) + authentication. + + Return ``AUTH_FAILED`` if the client must authenticate, or + ``AUTH_SUCCESSFUL`` if it's okay for the client to not + authenticate. + + The default implementation always returns ``AUTH_FAILED``. + + :param str username: the username of the client. + :return: + ``AUTH_FAILED`` if the authentication fails; ``AUTH_SUCCESSFUL`` if + it succeeds. + :rtype: int + """ + return AUTH_FAILED + + def check_auth_password(self, username, password): + """ + Determine if a given username and password supplied by the client is + acceptable for use in authentication. + + Return ``AUTH_FAILED`` if the password is not accepted, + ``AUTH_SUCCESSFUL`` if the password is accepted and completes + the authentication, or ``AUTH_PARTIALLY_SUCCESSFUL`` if your + authentication is stateful, and this key is accepted for + authentication, but more authentication is required. (In this latter + case, `get_allowed_auths` will be called to report to the client what + options it has for continuing the authentication.) + + The default implementation always returns ``AUTH_FAILED``. + + :param str username: the username of the authenticating client. + :param str password: the password given by the client. + :return: + ``AUTH_FAILED`` if the authentication fails; ``AUTH_SUCCESSFUL`` if + it succeeds; ``AUTH_PARTIALLY_SUCCESSFUL`` if the password auth is + successful, but authentication must continue. + :rtype: int + """ + return AUTH_FAILED + + def check_auth_publickey(self, username, key): + """ + Determine if a given key supplied by the client is acceptable for use + in authentication. You should override this method in server mode to + check the username and key and decide if you would accept a signature + made using this key. + + Return ``AUTH_FAILED`` if the key is not accepted, + ``AUTH_SUCCESSFUL`` if the key is accepted and completes the + authentication, or ``AUTH_PARTIALLY_SUCCESSFUL`` if your + authentication is stateful, and this password is accepted for + authentication, but more authentication is required. (In this latter + case, `get_allowed_auths` will be called to report to the client what + options it has for continuing the authentication.) + + Note that you don't have to actually verify any key signtature here. + If you're willing to accept the key, Paramiko will do the work of + verifying the client's signature. + + The default implementation always returns ``AUTH_FAILED``. + + :param str username: the username of the authenticating client + :param .PKey key: the key object provided by the client + :return: + ``AUTH_FAILED`` if the client can't authenticate with this key; + ``AUTH_SUCCESSFUL`` if it can; ``AUTH_PARTIALLY_SUCCESSFUL`` if it + can authenticate with this key but must continue with + authentication + :rtype: int + """ + return AUTH_FAILED + + def check_auth_interactive(self, username, submethods): + """ + Begin an interactive authentication challenge, if supported. You + should override this method in server mode if you want to support the + ``"keyboard-interactive"`` auth type, which requires you to send a + series of questions for the client to answer. + + Return ``AUTH_FAILED`` if this auth method isn't supported. Otherwise, + you should return an `.InteractiveQuery` object containing the prompts + and instructions for the user. The response will be sent via a call + to `check_auth_interactive_response`. + + The default implementation always returns ``AUTH_FAILED``. + + :param str username: the username of the authenticating client + :param str submethods: + a comma-separated list of methods preferred by the client (usually + empty) + :return: + ``AUTH_FAILED`` if this auth method isn't supported; otherwise an + object containing queries for the user + :rtype: int or `.InteractiveQuery` + """ + return AUTH_FAILED + + def check_auth_interactive_response(self, responses): + """ + Continue or finish an interactive authentication challenge, if + supported. You should override this method in server mode if you want + to support the ``"keyboard-interactive"`` auth type. + + Return ``AUTH_FAILED`` if the responses are not accepted, + ``AUTH_SUCCESSFUL`` if the responses are accepted and complete + the authentication, or ``AUTH_PARTIALLY_SUCCESSFUL`` if your + authentication is stateful, and this set of responses is accepted for + authentication, but more authentication is required. (In this latter + case, `get_allowed_auths` will be called to report to the client what + options it has for continuing the authentication.) + + If you wish to continue interactive authentication with more questions, + you may return an `.InteractiveQuery` object, which should cause the + client to respond with more answers, calling this method again. This + cycle can continue indefinitely. + + The default implementation always returns ``AUTH_FAILED``. + + :param responses: list of `str` responses from the client + :return: + ``AUTH_FAILED`` if the authentication fails; ``AUTH_SUCCESSFUL`` if + it succeeds; ``AUTH_PARTIALLY_SUCCESSFUL`` if the interactive auth + is successful, but authentication must continue; otherwise an + object containing queries for the user + :rtype: int or `.InteractiveQuery` + """ + return AUTH_FAILED + + def check_auth_gssapi_with_mic( + self, username, gss_authenticated=AUTH_FAILED, cc_file=None + ): + """ + Authenticate the given user to the server if he is a valid krb5 + principal. + + :param str username: The username of the authenticating client + :param int gss_authenticated: The result of the krb5 authentication + :param str cc_filename: The krb5 client credentials cache filename + :return: ``AUTH_FAILED`` if the user is not authenticated otherwise + ``AUTH_SUCCESSFUL`` + :rtype: int + :note: Kerberos credential delegation is not supported. + :see: `.ssh_gss` + :note: : We are just checking in L{AuthHandler} that the given user is + a valid krb5 principal! + We don't check if the krb5 principal is allowed to log in on + the server, because there is no way to do that in python. So + if you develop your own SSH server with paramiko for a certain + platform like Linux, you should call C{krb5_kuserok()} in + your local kerberos library to make sure that the + krb5_principal has an account on the server and is allowed to + log in as a user. + :see: http://www.unix.com/man-page/all/3/krb5_kuserok/ + """ + if gss_authenticated == AUTH_SUCCESSFUL: + return AUTH_SUCCESSFUL + return AUTH_FAILED + + def check_auth_gssapi_keyex( + self, username, gss_authenticated=AUTH_FAILED, cc_file=None + ): + """ + Authenticate the given user to the server if he is a valid krb5 + principal and GSS-API Key Exchange was performed. + If GSS-API Key Exchange was not performed, this authentication method + won't be available. + + :param str username: The username of the authenticating client + :param int gss_authenticated: The result of the krb5 authentication + :param str cc_filename: The krb5 client credentials cache filename + :return: ``AUTH_FAILED`` if the user is not authenticated otherwise + ``AUTH_SUCCESSFUL`` + :rtype: int + :note: Kerberos credential delegation is not supported. + :see: `.ssh_gss` `.kex_gss` + :note: : We are just checking in L{AuthHandler} that the given user is + a valid krb5 principal! + We don't check if the krb5 principal is allowed to log in on + the server, because there is no way to do that in python. So + if you develop your own SSH server with paramiko for a certain + platform like Linux, you should call C{krb5_kuserok()} in + your local kerberos library to make sure that the + krb5_principal has an account on the server and is allowed + to log in as a user. + :see: http://www.unix.com/man-page/all/3/krb5_kuserok/ + """ + if gss_authenticated == AUTH_SUCCESSFUL: + return AUTH_SUCCESSFUL + return AUTH_FAILED + + def enable_auth_gssapi(self): + """ + Overwrite this function in your SSH server to enable GSSAPI + authentication. + The default implementation always returns false. + + :returns bool: Whether GSSAPI authentication is enabled. + :see: `.ssh_gss` + """ + UseGSSAPI = False + return UseGSSAPI + + def check_port_forward_request(self, address, port): + """ + Handle a request for port forwarding. The client is asking that + connections to the given address and port be forwarded back across + this ssh connection. An address of ``"0.0.0.0"`` indicates a global + address (any address associated with this server) and a port of ``0`` + indicates that no specific port is requested (usually the OS will pick + a port). + + The default implementation always returns ``False``, rejecting the + port forwarding request. If the request is accepted, you should return + the port opened for listening. + + :param str address: the requested address + :param int port: the requested port + :return: + the port number (`int`) that was opened for listening, or ``False`` + to reject + """ + return False + + def cancel_port_forward_request(self, address, port): + """ + The client would like to cancel a previous port-forwarding request. + If the given address and port is being forwarded across this ssh + connection, the port should be closed. + + :param str address: the forwarded address + :param int port: the forwarded port + """ + pass + + def check_global_request(self, kind, msg): + """ + Handle a global request of the given ``kind``. This method is called + in server mode and client mode, whenever the remote host makes a global + request. If there are any arguments to the request, they will be in + ``msg``. + + There aren't any useful global requests defined, aside from port + forwarding, so usually this type of request is an extension to the + protocol. + + If the request was successful and you would like to return contextual + data to the remote host, return a tuple. Items in the tuple will be + sent back with the successful result. (Note that the items in the + tuple can only be strings, ints, or bools.) + + The default implementation always returns ``False``, indicating that it + does not support any global requests. + + .. note:: Port forwarding requests are handled separately, in + `check_port_forward_request`. + + :param str kind: the kind of global request being made. + :param .Message msg: any extra arguments to the request. + :return: + ``True`` or a `tuple` of data if the request was granted; ``False`` + otherwise. + """ + return False + + # ...Channel requests... + + def check_channel_pty_request( + self, channel, term, width, height, pixelwidth, pixelheight, modes + ): + """ + Determine if a pseudo-terminal of the given dimensions (usually + requested for shell access) can be provided on the given channel. + + The default implementation always returns ``False``. + + :param .Channel channel: the `.Channel` the pty request arrived on. + :param str term: type of terminal requested (for example, ``"vt100"``). + :param int width: width of screen in characters. + :param int height: height of screen in characters. + :param int pixelwidth: + width of screen in pixels, if known (may be ``0`` if unknown). + :param int pixelheight: + height of screen in pixels, if known (may be ``0`` if unknown). + :return: + ``True`` if the pseudo-terminal has been allocated; ``False`` + otherwise. + """ + return False + + def check_channel_shell_request(self, channel): + """ + Determine if a shell will be provided to the client on the given + channel. If this method returns ``True``, the channel should be + connected to the stdin/stdout of a shell (or something that acts like + a shell). + + The default implementation always returns ``False``. + + :param .Channel channel: the `.Channel` the request arrived on. + :return: + ``True`` if this channel is now hooked up to a shell; ``False`` if + a shell can't or won't be provided. + """ + return False + + def check_channel_exec_request(self, channel, command): + """ + Determine if a shell command will be executed for the client. If this + method returns ``True``, the channel should be connected to the stdin, + stdout, and stderr of the shell command. + + The default implementation always returns ``False``. + + :param .Channel channel: the `.Channel` the request arrived on. + :param str command: the command to execute. + :return: + ``True`` if this channel is now hooked up to the stdin, stdout, and + stderr of the executing command; ``False`` if the command will not + be executed. + + .. versionadded:: 1.1 + """ + return False + + def check_channel_subsystem_request(self, channel, name): + """ + Determine if a requested subsystem will be provided to the client on + the given channel. If this method returns ``True``, all future I/O + through this channel will be assumed to be connected to the requested + subsystem. An example of a subsystem is ``sftp``. + + The default implementation checks for a subsystem handler assigned via + `.Transport.set_subsystem_handler`. + If one has been set, the handler is invoked and this method returns + ``True``. Otherwise it returns ``False``. + + .. note:: Because the default implementation uses the `.Transport` to + identify valid subsystems, you probably won't need to override this + method. + + :param .Channel channel: the `.Channel` the pty request arrived on. + :param str name: name of the requested subsystem. + :return: + ``True`` if this channel is now hooked up to the requested + subsystem; ``False`` if that subsystem can't or won't be provided. + """ + transport = channel.get_transport() + handler_class, args, kwargs = transport._get_subsystem_handler(name) + if handler_class is None: + return False + handler = handler_class(channel, name, self, *args, **kwargs) + handler.start() + return True + + def check_channel_window_change_request( + self, channel, width, height, pixelwidth, pixelheight + ): + """ + Determine if the pseudo-terminal on the given channel can be resized. + This only makes sense if a pty was previously allocated on it. + + The default implementation always returns ``False``. + + :param .Channel channel: the `.Channel` the pty request arrived on. + :param int width: width of screen in characters. + :param int height: height of screen in characters. + :param int pixelwidth: + width of screen in pixels, if known (may be ``0`` if unknown). + :param int pixelheight: + height of screen in pixels, if known (may be ``0`` if unknown). + :return: ``True`` if the terminal was resized; ``False`` if not. + """ + return False + + def check_channel_x11_request( + self, + channel, + single_connection, + auth_protocol, + auth_cookie, + screen_number, + ): + """ + Determine if the client will be provided with an X11 session. If this + method returns ``True``, X11 applications should be routed through new + SSH channels, using `.Transport.open_x11_channel`. + + The default implementation always returns ``False``. + + :param .Channel channel: the `.Channel` the X11 request arrived on + :param bool single_connection: + ``True`` if only a single X11 channel should be opened, else + ``False``. + :param str auth_protocol: the protocol used for X11 authentication + :param str auth_cookie: the cookie used to authenticate to X11 + :param int screen_number: the number of the X11 screen to connect to + :return: ``True`` if the X11 session was opened; ``False`` if not + """ + return False + + def check_channel_forward_agent_request(self, channel): + """ + Determine if the client will be provided with an forward agent session. + If this method returns ``True``, the server will allow SSH Agent + forwarding. + + The default implementation always returns ``False``. + + :param .Channel channel: the `.Channel` the request arrived on + :return: ``True`` if the AgentForward was loaded; ``False`` if not + + If ``True`` is returned, the server should create an + :class:`AgentServerProxy` to access the agent. + """ + return False + + def check_channel_direct_tcpip_request(self, chanid, origin, destination): + """ + Determine if a local port forwarding channel will be granted, and + return ``OPEN_SUCCEEDED`` or an error code. This method is + called in server mode when the client requests a channel, after + authentication is complete. + + The ``chanid`` parameter is a small number that uniquely identifies the + channel within a `.Transport`. A `.Channel` object is not created + unless this method returns ``OPEN_SUCCEEDED`` -- once a + `.Channel` object is created, you can call `.Channel.get_id` to + retrieve the channel ID. + + The origin and destination parameters are (ip_address, port) tuples + that correspond to both ends of the TCP connection in the forwarding + tunnel. + + The return value should either be ``OPEN_SUCCEEDED`` (or + ``0``) to allow the channel request, or one of the following error + codes to reject it: + + - ``OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED`` + - ``OPEN_FAILED_CONNECT_FAILED`` + - ``OPEN_FAILED_UNKNOWN_CHANNEL_TYPE`` + - ``OPEN_FAILED_RESOURCE_SHORTAGE`` + + The default implementation always returns + ``OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED``. + + :param int chanid: ID of the channel + :param tuple origin: + 2-tuple containing the IP address and port of the originator + (client side) + :param tuple destination: + 2-tuple containing the IP address and port of the destination + (server side) + :return: an `int` success or failure code (listed above) + """ + return OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED + + def check_channel_env_request(self, channel, name, value): + """ + Check whether a given environment variable can be specified for the + given channel. This method should return ``True`` if the server + is willing to set the specified environment variable. Note that + some environment variables (e.g., PATH) can be exceedingly + dangerous, so blindly allowing the client to set the environment + is almost certainly not a good idea. + + The default implementation always returns ``False``. + + :param channel: the `.Channel` the env request arrived on + :param str name: name + :param str value: Channel value + :returns: A boolean + """ + return False + + def get_banner(self): + """ + A pre-login banner to display to the user. The message may span + multiple lines separated by crlf pairs. The language should be in + rfc3066 style, for example: en-US + + The default implementation always returns ``(None, None)``. + + :returns: A tuple containing the banner and language code. + + .. versionadded:: 2.3 + """ + return (None, None) + + +class InteractiveQuery: + """ + A query (set of prompts) for a user during interactive authentication. + """ + + def __init__(self, name="", instructions="", *prompts): + """ + Create a new interactive query to send to the client. The name and + instructions are optional, but are generally displayed to the end + user. A list of prompts may be included, or they may be added via + the `add_prompt` method. + + :param str name: name of this query + :param str instructions: + user instructions (usually short) about this query + :param str prompts: one or more authentication prompts + """ + self.name = name + self.instructions = instructions + self.prompts = [] + for x in prompts: + if isinstance(x, str): + self.add_prompt(x) + else: + self.add_prompt(x[0], x[1]) + + def add_prompt(self, prompt, echo=True): + """ + Add a prompt to this query. The prompt should be a (reasonably short) + string. Multiple prompts can be added to the same query. + + :param str prompt: the user prompt + :param bool echo: + ``True`` (default) if the user's response should be echoed; + ``False`` if not (for a password or similar) + """ + self.prompts.append((prompt, echo)) + + +class SubsystemHandler(threading.Thread): + """ + Handler for a subsystem in server mode. If you create a subclass of this + class and pass it to `.Transport.set_subsystem_handler`, an object of this + class will be created for each request for this subsystem. Each new object + will be executed within its own new thread by calling `start_subsystem`. + When that method completes, the channel is closed. + + For example, if you made a subclass ``MP3Handler`` and registered it as the + handler for subsystem ``"mp3"``, then whenever a client has successfully + authenticated and requests subsystem ``"mp3"``, an object of class + ``MP3Handler`` will be created, and `start_subsystem` will be called on + it from a new thread. + """ + + def __init__(self, channel, name, server): + """ + Create a new handler for a channel. This is used by `.ServerInterface` + to start up a new handler when a channel requests this subsystem. You + don't need to override this method, but if you do, be sure to pass the + ``channel`` and ``name`` parameters through to the original + ``__init__`` method here. + + :param .Channel channel: the channel associated with this + subsystem request. + :param str name: name of the requested subsystem. + :param .ServerInterface server: + the server object for the session that started this subsystem + """ + threading.Thread.__init__(self, target=self._run) + self.__channel = channel + self.__transport = channel.get_transport() + self.__name = name + self.__server = server + + def get_server(self): + """ + Return the `.ServerInterface` object associated with this channel and + subsystem. + """ + return self.__server + + def _run(self): + try: + self.__transport._log( + DEBUG, "Starting handler for subsystem {}".format(self.__name) + ) + self.start_subsystem(self.__name, self.__transport, self.__channel) + except Exception as e: + self.__transport._log( + ERROR, + 'Exception in subsystem handler for "{}": {}'.format( + self.__name, e + ), + ) + self.__transport._log(ERROR, util.tb_strings()) + try: + self.finish_subsystem() + except: + pass + + def start_subsystem(self, name, transport, channel): + """ + Process an ssh subsystem in server mode. This method is called on a + new object (and in a new thread) for each subsystem request. It is + assumed that all subsystem logic will take place here, and when the + subsystem is finished, this method will return. After this method + returns, the channel is closed. + + The combination of ``transport`` and ``channel`` are unique; this + handler corresponds to exactly one `.Channel` on one `.Transport`. + + .. note:: + It is the responsibility of this method to exit if the underlying + `.Transport` is closed. This can be done by checking + `.Transport.is_active` or noticing an EOF on the `.Channel`. If + this method loops forever without checking for this case, your + Python interpreter may refuse to exit because this thread will + still be running. + + :param str name: name of the requested subsystem. + :param .Transport transport: the server-mode `.Transport`. + :param .Channel channel: the channel associated with this subsystem + request. + """ + pass + + def finish_subsystem(self): + """ + Perform any cleanup at the end of a subsystem. The default + implementation just closes the channel. + + .. versionadded:: 1.1 + """ + self.__channel.close() diff --git a/venv/lib/python3.11/site-packages/paramiko/sftp.py b/venv/lib/python3.11/site-packages/paramiko/sftp.py new file mode 100644 index 0000000..b3528d4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/sftp.py @@ -0,0 +1,224 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import select +import socket +import struct + +from paramiko import util +from paramiko.common import DEBUG, byte_chr, byte_ord +from paramiko.message import Message + + +( + CMD_INIT, + CMD_VERSION, + CMD_OPEN, + CMD_CLOSE, + CMD_READ, + CMD_WRITE, + CMD_LSTAT, + CMD_FSTAT, + CMD_SETSTAT, + CMD_FSETSTAT, + CMD_OPENDIR, + CMD_READDIR, + CMD_REMOVE, + CMD_MKDIR, + CMD_RMDIR, + CMD_REALPATH, + CMD_STAT, + CMD_RENAME, + CMD_READLINK, + CMD_SYMLINK, +) = range(1, 21) +(CMD_STATUS, CMD_HANDLE, CMD_DATA, CMD_NAME, CMD_ATTRS) = range(101, 106) +(CMD_EXTENDED, CMD_EXTENDED_REPLY) = range(200, 202) + +SFTP_OK = 0 +( + SFTP_EOF, + SFTP_NO_SUCH_FILE, + SFTP_PERMISSION_DENIED, + SFTP_FAILURE, + SFTP_BAD_MESSAGE, + SFTP_NO_CONNECTION, + SFTP_CONNECTION_LOST, + SFTP_OP_UNSUPPORTED, +) = range(1, 9) + +SFTP_DESC = [ + "Success", + "End of file", + "No such file", + "Permission denied", + "Failure", + "Bad message", + "No connection", + "Connection lost", + "Operation unsupported", +] + +SFTP_FLAG_READ = 0x1 +SFTP_FLAG_WRITE = 0x2 +SFTP_FLAG_APPEND = 0x4 +SFTP_FLAG_CREATE = 0x8 +SFTP_FLAG_TRUNC = 0x10 +SFTP_FLAG_EXCL = 0x20 + +_VERSION = 3 + + +# for debugging +CMD_NAMES = { + CMD_INIT: "init", + CMD_VERSION: "version", + CMD_OPEN: "open", + CMD_CLOSE: "close", + CMD_READ: "read", + CMD_WRITE: "write", + CMD_LSTAT: "lstat", + CMD_FSTAT: "fstat", + CMD_SETSTAT: "setstat", + CMD_FSETSTAT: "fsetstat", + CMD_OPENDIR: "opendir", + CMD_READDIR: "readdir", + CMD_REMOVE: "remove", + CMD_MKDIR: "mkdir", + CMD_RMDIR: "rmdir", + CMD_REALPATH: "realpath", + CMD_STAT: "stat", + CMD_RENAME: "rename", + CMD_READLINK: "readlink", + CMD_SYMLINK: "symlink", + CMD_STATUS: "status", + CMD_HANDLE: "handle", + CMD_DATA: "data", + CMD_NAME: "name", + CMD_ATTRS: "attrs", + CMD_EXTENDED: "extended", + CMD_EXTENDED_REPLY: "extended_reply", +} + + +# TODO: rewrite SFTP file/server modules' overly-flexible "make a request with +# xyz components" so we don't need this very silly method of signaling whether +# a given Python integer should be 32- or 64-bit. +# NOTE: this only became an issue when dropping Python 2 support; prior to +# doing so, we had to support actual-longs, which served as that signal. This +# is simply recreating that structure in a more tightly scoped fashion. +class int64(int): + pass + + +class SFTPError(Exception): + pass + + +class BaseSFTP: + def __init__(self): + self.logger = util.get_logger("paramiko.sftp") + self.sock = None + self.ultra_debug = False + + # ...internals... + + def _send_version(self): + m = Message() + m.add_int(_VERSION) + self._send_packet(CMD_INIT, m) + t, data = self._read_packet() + if t != CMD_VERSION: + raise SFTPError("Incompatible sftp protocol") + version = struct.unpack(">I", data[:4])[0] + # if version != _VERSION: + # raise SFTPError('Incompatible sftp protocol') + return version + + def _send_server_version(self): + # winscp will freak out if the server sends version info before the + # client finishes sending INIT. + t, data = self._read_packet() + if t != CMD_INIT: + raise SFTPError("Incompatible sftp protocol") + version = struct.unpack(">I", data[:4])[0] + # advertise that we support "check-file" + extension_pairs = ["check-file", "md5,sha1"] + msg = Message() + msg.add_int(_VERSION) + msg.add(*extension_pairs) + self._send_packet(CMD_VERSION, msg) + return version + + def _log(self, level, msg, *args): + self.logger.log(level, msg, *args) + + def _write_all(self, out): + while len(out) > 0: + n = self.sock.send(out) + if n <= 0: + raise EOFError() + if n == len(out): + return + out = out[n:] + return + + def _read_all(self, n): + out = bytes() + while n > 0: + if isinstance(self.sock, socket.socket): + # sometimes sftp is used directly over a socket instead of + # through a paramiko channel. in this case, check periodically + # if the socket is closed. (for some reason, recv() won't ever + # return or raise an exception, but calling select on a closed + # socket will.) + while True: + read, write, err = select.select([self.sock], [], [], 0.1) + if len(read) > 0: + x = self.sock.recv(n) + break + else: + x = self.sock.recv(n) + + if len(x) == 0: + raise EOFError() + out += x + n -= len(x) + return out + + def _send_packet(self, t, packet): + packet = packet.asbytes() + out = struct.pack(">I", len(packet) + 1) + byte_chr(t) + packet + if self.ultra_debug: + self._log(DEBUG, util.format_binary(out, "OUT: ")) + self._write_all(out) + + def _read_packet(self): + x = self._read_all(4) + # most sftp servers won't accept packets larger than about 32k, so + # anything with the high byte set (> 16MB) is just garbage. + if byte_ord(x[0]): + raise SFTPError("Garbage packet received") + size = struct.unpack(">I", x)[0] + data = self._read_all(size) + if self.ultra_debug: + self._log(DEBUG, util.format_binary(data, "IN: ")) + if size > 0: + t = byte_ord(data[0]) + return t, data[1:] + return 0, bytes() diff --git a/venv/lib/python3.11/site-packages/paramiko/sftp_attr.py b/venv/lib/python3.11/site-packages/paramiko/sftp_attr.py new file mode 100644 index 0000000..18ffbf8 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/sftp_attr.py @@ -0,0 +1,239 @@ +# Copyright (C) 2003-2006 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import stat +import time +from paramiko.common import x80000000, o700, o70, xffffffff + + +class SFTPAttributes: + """ + Representation of the attributes of a file (or proxied file) for SFTP in + client or server mode. It attempts to mirror the object returned by + `os.stat` as closely as possible, so it may have the following fields, + with the same meanings as those returned by an `os.stat` object: + + - ``st_size`` + - ``st_uid`` + - ``st_gid`` + - ``st_mode`` + - ``st_atime`` + - ``st_mtime`` + + Because SFTP allows flags to have other arbitrary named attributes, these + are stored in a dict named ``attr``. Occasionally, the filename is also + stored, in ``filename``. + """ + + FLAG_SIZE = 1 + FLAG_UIDGID = 2 + FLAG_PERMISSIONS = 4 + FLAG_AMTIME = 8 + FLAG_EXTENDED = x80000000 + + def __init__(self): + """ + Create a new (empty) SFTPAttributes object. All fields will be empty. + """ + self._flags = 0 + self.st_size = None + self.st_uid = None + self.st_gid = None + self.st_mode = None + self.st_atime = None + self.st_mtime = None + self.attr = {} + + @classmethod + def from_stat(cls, obj, filename=None): + """ + Create an `.SFTPAttributes` object from an existing ``stat`` object (an + object returned by `os.stat`). + + :param object obj: an object returned by `os.stat` (or equivalent). + :param str filename: the filename associated with this file. + :return: new `.SFTPAttributes` object with the same attribute fields. + """ + attr = cls() + attr.st_size = obj.st_size + attr.st_uid = obj.st_uid + attr.st_gid = obj.st_gid + attr.st_mode = obj.st_mode + attr.st_atime = obj.st_atime + attr.st_mtime = obj.st_mtime + if filename is not None: + attr.filename = filename + return attr + + def __repr__(self): + return "".format(self._debug_str()) + + # ...internals... + @classmethod + def _from_msg(cls, msg, filename=None, longname=None): + attr = cls() + attr._unpack(msg) + if filename is not None: + attr.filename = filename + if longname is not None: + attr.longname = longname + return attr + + def _unpack(self, msg): + self._flags = msg.get_int() + if self._flags & self.FLAG_SIZE: + self.st_size = msg.get_int64() + if self._flags & self.FLAG_UIDGID: + self.st_uid = msg.get_int() + self.st_gid = msg.get_int() + if self._flags & self.FLAG_PERMISSIONS: + self.st_mode = msg.get_int() + if self._flags & self.FLAG_AMTIME: + self.st_atime = msg.get_int() + self.st_mtime = msg.get_int() + if self._flags & self.FLAG_EXTENDED: + count = msg.get_int() + for i in range(count): + self.attr[msg.get_string()] = msg.get_string() + + def _pack(self, msg): + self._flags = 0 + if self.st_size is not None: + self._flags |= self.FLAG_SIZE + if (self.st_uid is not None) and (self.st_gid is not None): + self._flags |= self.FLAG_UIDGID + if self.st_mode is not None: + self._flags |= self.FLAG_PERMISSIONS + if (self.st_atime is not None) and (self.st_mtime is not None): + self._flags |= self.FLAG_AMTIME + if len(self.attr) > 0: + self._flags |= self.FLAG_EXTENDED + msg.add_int(self._flags) + if self._flags & self.FLAG_SIZE: + msg.add_int64(self.st_size) + if self._flags & self.FLAG_UIDGID: + msg.add_int(self.st_uid) + msg.add_int(self.st_gid) + if self._flags & self.FLAG_PERMISSIONS: + msg.add_int(self.st_mode) + if self._flags & self.FLAG_AMTIME: + # throw away any fractional seconds + msg.add_int(int(self.st_atime)) + msg.add_int(int(self.st_mtime)) + if self._flags & self.FLAG_EXTENDED: + msg.add_int(len(self.attr)) + for key, val in self.attr.items(): + msg.add_string(key) + msg.add_string(val) + return + + def _debug_str(self): + out = "[ " + if self.st_size is not None: + out += "size={} ".format(self.st_size) + if (self.st_uid is not None) and (self.st_gid is not None): + out += "uid={} gid={} ".format(self.st_uid, self.st_gid) + if self.st_mode is not None: + out += "mode=" + oct(self.st_mode) + " " + if (self.st_atime is not None) and (self.st_mtime is not None): + out += "atime={} mtime={} ".format(self.st_atime, self.st_mtime) + for k, v in self.attr.items(): + out += '"{}"={!r} '.format(str(k), v) + out += "]" + return out + + @staticmethod + def _rwx(n, suid, sticky=False): + if suid: + suid = 2 + out = "-r"[n >> 2] + "-w"[(n >> 1) & 1] + if sticky: + out += "-xTt"[suid + (n & 1)] + else: + out += "-xSs"[suid + (n & 1)] + return out + + def __str__(self): + """create a unix-style long description of the file (like ls -l)""" + if self.st_mode is not None: + kind = stat.S_IFMT(self.st_mode) + if kind == stat.S_IFIFO: + ks = "p" + elif kind == stat.S_IFCHR: + ks = "c" + elif kind == stat.S_IFDIR: + ks = "d" + elif kind == stat.S_IFBLK: + ks = "b" + elif kind == stat.S_IFREG: + ks = "-" + elif kind == stat.S_IFLNK: + ks = "l" + elif kind == stat.S_IFSOCK: + ks = "s" + else: + ks = "?" + ks += self._rwx( + (self.st_mode & o700) >> 6, self.st_mode & stat.S_ISUID + ) + ks += self._rwx( + (self.st_mode & o70) >> 3, self.st_mode & stat.S_ISGID + ) + ks += self._rwx( + self.st_mode & 7, self.st_mode & stat.S_ISVTX, True + ) + else: + ks = "?---------" + # compute display date + if (self.st_mtime is None) or (self.st_mtime == xffffffff): + # shouldn't really happen + datestr = "(unknown date)" + else: + time_tuple = time.localtime(self.st_mtime) + if abs(time.time() - self.st_mtime) > 15_552_000: + # (15,552,000s = 6 months) + datestr = time.strftime("%d %b %Y", time_tuple) + else: + datestr = time.strftime("%d %b %H:%M", time_tuple) + filename = getattr(self, "filename", "?") + + # not all servers support uid/gid + uid = self.st_uid + gid = self.st_gid + size = self.st_size + if uid is None: + uid = 0 + if gid is None: + gid = 0 + if size is None: + size = 0 + + # TODO: not sure this actually worked as expected beforehand, leaving + # it untouched for the time being, re: .format() upgrade, until someone + # has time to doublecheck + return "%s 1 %-8d %-8d %8d %-12s %s" % ( + ks, + uid, + gid, + size, + datestr, + filename, + ) + + def asbytes(self): + return str(self).encode() diff --git a/venv/lib/python3.11/site-packages/paramiko/sftp_client.py b/venv/lib/python3.11/site-packages/paramiko/sftp_client.py new file mode 100644 index 0000000..066cd83 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/sftp_client.py @@ -0,0 +1,965 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of Paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +from binascii import hexlify +import errno +import os +import stat +import threading +import time +import weakref +from paramiko import util +from paramiko.channel import Channel +from paramiko.message import Message +from paramiko.common import INFO, DEBUG, o777 +from paramiko.sftp import ( + BaseSFTP, + CMD_OPENDIR, + CMD_HANDLE, + SFTPError, + CMD_READDIR, + CMD_NAME, + CMD_CLOSE, + SFTP_FLAG_READ, + SFTP_FLAG_WRITE, + SFTP_FLAG_CREATE, + SFTP_FLAG_TRUNC, + SFTP_FLAG_APPEND, + SFTP_FLAG_EXCL, + CMD_OPEN, + CMD_REMOVE, + CMD_RENAME, + CMD_MKDIR, + CMD_RMDIR, + CMD_STAT, + CMD_ATTRS, + CMD_LSTAT, + CMD_SYMLINK, + CMD_SETSTAT, + CMD_READLINK, + CMD_REALPATH, + CMD_STATUS, + CMD_EXTENDED, + SFTP_OK, + SFTP_EOF, + SFTP_NO_SUCH_FILE, + SFTP_PERMISSION_DENIED, + int64, +) + +from paramiko.sftp_attr import SFTPAttributes +from paramiko.ssh_exception import SSHException +from paramiko.sftp_file import SFTPFile +from paramiko.util import ClosingContextManager, b, u + + +def _to_unicode(s): + """ + decode a string as ascii or utf8 if possible (as required by the sftp + protocol). if neither works, just return a byte string because the server + probably doesn't know the filename's encoding. + """ + try: + return s.encode("ascii") + except (UnicodeError, AttributeError): + try: + return s.decode("utf-8") + except UnicodeError: + return s + + +b_slash = b"/" + + +class SFTPClient(BaseSFTP, ClosingContextManager): + """ + SFTP client object. + + Used to open an SFTP session across an open SSH `.Transport` and perform + remote file operations. + + Instances of this class may be used as context managers. + """ + + def __init__(self, sock): + """ + Create an SFTP client from an existing `.Channel`. The channel + should already have requested the ``"sftp"`` subsystem. + + An alternate way to create an SFTP client context is by using + `from_transport`. + + :param .Channel sock: an open `.Channel` using the ``"sftp"`` subsystem + + :raises: + `.SSHException` -- if there's an exception while negotiating sftp + """ + BaseSFTP.__init__(self) + self.sock = sock + self.ultra_debug = False + self.request_number = 1 + # lock for request_number + self._lock = threading.Lock() + self._cwd = None + # request # -> SFTPFile + self._expecting = weakref.WeakValueDictionary() + if type(sock) is Channel: + # override default logger + transport = self.sock.get_transport() + self.logger = util.get_logger( + transport.get_log_channel() + ".sftp" + ) + self.ultra_debug = transport.get_hexdump() + try: + server_version = self._send_version() + except EOFError: + raise SSHException("EOF during negotiation") + self._log( + INFO, + "Opened sftp connection (server version {})".format( + server_version + ), + ) + + @classmethod + def from_transport(cls, t, window_size=None, max_packet_size=None): + """ + Create an SFTP client channel from an open `.Transport`. + + Setting the window and packet sizes might affect the transfer speed. + The default settings in the `.Transport` class are the same as in + OpenSSH and should work adequately for both files transfers and + interactive sessions. + + :param .Transport t: an open `.Transport` which is already + authenticated + :param int window_size: + optional window size for the `.SFTPClient` session. + :param int max_packet_size: + optional max packet size for the `.SFTPClient` session.. + + :return: + a new `.SFTPClient` object, referring to an sftp session (channel) + across the transport + + .. versionchanged:: 1.15 + Added the ``window_size`` and ``max_packet_size`` arguments. + """ + chan = t.open_session( + window_size=window_size, max_packet_size=max_packet_size + ) + if chan is None: + return None + chan.invoke_subsystem("sftp") + return cls(chan) + + def _log(self, level, msg, *args): + if isinstance(msg, list): + for m in msg: + self._log(level, m, *args) + else: + # NOTE: these bits MUST continue using %-style format junk because + # logging.Logger.log() explicitly requires it. Grump. + # escape '%' in msg (they could come from file or directory names) + # before logging + msg = msg.replace("%", "%%") + super()._log( + level, + "[chan %s] " + msg, + *([self.sock.get_name()] + list(args)) + ) + + def close(self): + """ + Close the SFTP session and its underlying channel. + + .. versionadded:: 1.4 + """ + self._log(INFO, "sftp session closed.") + self.sock.close() + + def get_channel(self): + """ + Return the underlying `.Channel` object for this SFTP session. This + might be useful for doing things like setting a timeout on the channel. + + .. versionadded:: 1.7.1 + """ + return self.sock + + def listdir(self, path="."): + """ + Return a list containing the names of the entries in the given + ``path``. + + The list is in arbitrary order. It does not include the special + entries ``'.'`` and ``'..'`` even if they are present in the folder. + This method is meant to mirror ``os.listdir`` as closely as possible. + For a list of full `.SFTPAttributes` objects, see `listdir_attr`. + + :param str path: path to list (defaults to ``'.'``) + """ + return [f.filename for f in self.listdir_attr(path)] + + def listdir_attr(self, path="."): + """ + Return a list containing `.SFTPAttributes` objects corresponding to + files in the given ``path``. The list is in arbitrary order. It does + not include the special entries ``'.'`` and ``'..'`` even if they are + present in the folder. + + The returned `.SFTPAttributes` objects will each have an additional + field: ``longname``, which may contain a formatted string of the file's + attributes, in unix format. The content of this string will probably + depend on the SFTP server implementation. + + :param str path: path to list (defaults to ``'.'``) + :return: list of `.SFTPAttributes` objects + + .. versionadded:: 1.2 + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "listdir({!r})".format(path)) + t, msg = self._request(CMD_OPENDIR, path) + if t != CMD_HANDLE: + raise SFTPError("Expected handle") + handle = msg.get_binary() + filelist = [] + while True: + try: + t, msg = self._request(CMD_READDIR, handle) + except EOFError: + # done with handle + break + if t != CMD_NAME: + raise SFTPError("Expected name response") + count = msg.get_int() + for i in range(count): + filename = msg.get_text() + longname = msg.get_text() + attr = SFTPAttributes._from_msg(msg, filename, longname) + if (filename != ".") and (filename != ".."): + filelist.append(attr) + self._request(CMD_CLOSE, handle) + return filelist + + def listdir_iter(self, path=".", read_aheads=50): + """ + Generator version of `.listdir_attr`. + + See the API docs for `.listdir_attr` for overall details. + + This function adds one more kwarg on top of `.listdir_attr`: + ``read_aheads``, an integer controlling how many + ``SSH_FXP_READDIR`` requests are made to the server. The default of 50 + should suffice for most file listings as each request/response cycle + may contain multiple files (dependent on server implementation.) + + .. versionadded:: 1.15 + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "listdir({!r})".format(path)) + t, msg = self._request(CMD_OPENDIR, path) + + if t != CMD_HANDLE: + raise SFTPError("Expected handle") + + handle = msg.get_string() + + nums = list() + while True: + try: + # Send out a bunch of readdir requests so that we can read the + # responses later on Section 6.7 of the SSH file transfer RFC + # explains this + # http://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt + for i in range(read_aheads): + num = self._async_request(type(None), CMD_READDIR, handle) + nums.append(num) + + # For each of our sent requests + # Read and parse the corresponding packets + # If we're at the end of our queued requests, then fire off + # some more requests + # Exit the loop when we've reached the end of the directory + # handle + for num in nums: + t, pkt_data = self._read_packet() + msg = Message(pkt_data) + new_num = msg.get_int() + if num == new_num: + if t == CMD_STATUS: + self._convert_status(msg) + count = msg.get_int() + for i in range(count): + filename = msg.get_text() + longname = msg.get_text() + attr = SFTPAttributes._from_msg( + msg, filename, longname + ) + if (filename != ".") and (filename != ".."): + yield attr + + # If we've hit the end of our queued requests, reset nums. + nums = list() + + except EOFError: + self._request(CMD_CLOSE, handle) + return + + def open(self, filename, mode="r", bufsize=-1): + """ + Open a file on the remote server. The arguments are the same as for + Python's built-in `python:file` (aka `python:open`). A file-like + object is returned, which closely mimics the behavior of a normal + Python file object, including the ability to be used as a context + manager. + + The mode indicates how the file is to be opened: ``'r'`` for reading, + ``'w'`` for writing (truncating an existing file), ``'a'`` for + appending, ``'r+'`` for reading/writing, ``'w+'`` for reading/writing + (truncating an existing file), ``'a+'`` for reading/appending. The + Python ``'b'`` flag is ignored, since SSH treats all files as binary. + The ``'U'`` flag is supported in a compatible way. + + Since 1.5.2, an ``'x'`` flag indicates that the operation should only + succeed if the file was created and did not previously exist. This has + no direct mapping to Python's file flags, but is commonly known as the + ``O_EXCL`` flag in posix. + + The file will be buffered in standard Python style by default, but + can be altered with the ``bufsize`` parameter. ``<=0`` turns off + buffering, ``1`` uses line buffering, and any number greater than 1 + (``>1``) uses that specific buffer size. + + :param str filename: name of the file to open + :param str mode: mode (Python-style) to open in + :param int bufsize: desired buffering (default: ``-1``) + :return: an `.SFTPFile` object representing the open file + + :raises: ``IOError`` -- if the file could not be opened. + """ + filename = self._adjust_cwd(filename) + self._log(DEBUG, "open({!r}, {!r})".format(filename, mode)) + imode = 0 + if ("r" in mode) or ("+" in mode): + imode |= SFTP_FLAG_READ + if ("w" in mode) or ("+" in mode) or ("a" in mode): + imode |= SFTP_FLAG_WRITE + if "w" in mode: + imode |= SFTP_FLAG_CREATE | SFTP_FLAG_TRUNC + if "a" in mode: + imode |= SFTP_FLAG_CREATE | SFTP_FLAG_APPEND + if "x" in mode: + imode |= SFTP_FLAG_CREATE | SFTP_FLAG_EXCL + attrblock = SFTPAttributes() + t, msg = self._request(CMD_OPEN, filename, imode, attrblock) + if t != CMD_HANDLE: + raise SFTPError("Expected handle") + handle = msg.get_binary() + self._log( + DEBUG, + "open({!r}, {!r}) -> {}".format( + filename, mode, u(hexlify(handle)) + ), + ) + return SFTPFile(self, handle, mode, bufsize) + + # Python continues to vacillate about "open" vs "file"... + file = open + + def remove(self, path): + """ + Remove the file at the given path. This only works on files; for + removing folders (directories), use `rmdir`. + + :param str path: path (absolute or relative) of the file to remove + + :raises: ``IOError`` -- if the path refers to a folder (directory) + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "remove({!r})".format(path)) + self._request(CMD_REMOVE, path) + + unlink = remove + + def rename(self, oldpath, newpath): + """ + Rename a file or folder from ``oldpath`` to ``newpath``. + + .. note:: + This method implements 'standard' SFTP ``RENAME`` behavior; those + seeking the OpenSSH "POSIX rename" extension behavior should use + `posix_rename`. + + :param str oldpath: + existing name of the file or folder + :param str newpath: + new name for the file or folder, must not exist already + + :raises: + ``IOError`` -- if ``newpath`` is a folder, or something else goes + wrong + """ + oldpath = self._adjust_cwd(oldpath) + newpath = self._adjust_cwd(newpath) + self._log(DEBUG, "rename({!r}, {!r})".format(oldpath, newpath)) + self._request(CMD_RENAME, oldpath, newpath) + + def posix_rename(self, oldpath, newpath): + """ + Rename a file or folder from ``oldpath`` to ``newpath``, following + posix conventions. + + :param str oldpath: existing name of the file or folder + :param str newpath: new name for the file or folder, will be + overwritten if it already exists + + :raises: + ``IOError`` -- if ``newpath`` is a folder, posix-rename is not + supported by the server or something else goes wrong + + :versionadded: 2.2 + """ + oldpath = self._adjust_cwd(oldpath) + newpath = self._adjust_cwd(newpath) + self._log(DEBUG, "posix_rename({!r}, {!r})".format(oldpath, newpath)) + self._request( + CMD_EXTENDED, "posix-rename@openssh.com", oldpath, newpath + ) + + def mkdir(self, path, mode=o777): + """ + Create a folder (directory) named ``path`` with numeric mode ``mode``. + The default mode is 0777 (octal). On some systems, mode is ignored. + Where it is used, the current umask value is first masked out. + + :param str path: name of the folder to create + :param int mode: permissions (posix-style) for the newly-created folder + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "mkdir({!r}, {!r})".format(path, mode)) + attr = SFTPAttributes() + attr.st_mode = mode + self._request(CMD_MKDIR, path, attr) + + def rmdir(self, path): + """ + Remove the folder named ``path``. + + :param str path: name of the folder to remove + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "rmdir({!r})".format(path)) + self._request(CMD_RMDIR, path) + + def stat(self, path): + """ + Retrieve information about a file on the remote system. The return + value is an object whose attributes correspond to the attributes of + Python's ``stat`` structure as returned by ``os.stat``, except that it + contains fewer fields. An SFTP server may return as much or as little + info as it wants, so the results may vary from server to server. + + Unlike a Python `python:stat` object, the result may not be accessed as + a tuple. This is mostly due to the author's slack factor. + + The fields supported are: ``st_mode``, ``st_size``, ``st_uid``, + ``st_gid``, ``st_atime``, and ``st_mtime``. + + :param str path: the filename to stat + :return: + an `.SFTPAttributes` object containing attributes about the given + file + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "stat({!r})".format(path)) + t, msg = self._request(CMD_STAT, path) + if t != CMD_ATTRS: + raise SFTPError("Expected attributes") + return SFTPAttributes._from_msg(msg) + + def lstat(self, path): + """ + Retrieve information about a file on the remote system, without + following symbolic links (shortcuts). This otherwise behaves exactly + the same as `stat`. + + :param str path: the filename to stat + :return: + an `.SFTPAttributes` object containing attributes about the given + file + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "lstat({!r})".format(path)) + t, msg = self._request(CMD_LSTAT, path) + if t != CMD_ATTRS: + raise SFTPError("Expected attributes") + return SFTPAttributes._from_msg(msg) + + def symlink(self, source, dest): + """ + Create a symbolic link to the ``source`` path at ``destination``. + + :param str source: path of the original file + :param str dest: path of the newly created symlink + """ + dest = self._adjust_cwd(dest) + self._log(DEBUG, "symlink({!r}, {!r})".format(source, dest)) + source = b(source) + self._request(CMD_SYMLINK, source, dest) + + def chmod(self, path, mode): + """ + Change the mode (permissions) of a file. The permissions are + unix-style and identical to those used by Python's `os.chmod` + function. + + :param str path: path of the file to change the permissions of + :param int mode: new permissions + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "chmod({!r}, {!r})".format(path, mode)) + attr = SFTPAttributes() + attr.st_mode = mode + self._request(CMD_SETSTAT, path, attr) + + def chown(self, path, uid, gid): + """ + Change the owner (``uid``) and group (``gid``) of a file. As with + Python's `os.chown` function, you must pass both arguments, so if you + only want to change one, use `stat` first to retrieve the current + owner and group. + + :param str path: path of the file to change the owner and group of + :param int uid: new owner's uid + :param int gid: new group id + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "chown({!r}, {!r}, {!r})".format(path, uid, gid)) + attr = SFTPAttributes() + attr.st_uid, attr.st_gid = uid, gid + self._request(CMD_SETSTAT, path, attr) + + def utime(self, path, times): + """ + Set the access and modified times of the file specified by ``path``. + If ``times`` is ``None``, then the file's access and modified times + are set to the current time. Otherwise, ``times`` must be a 2-tuple + of numbers, of the form ``(atime, mtime)``, which is used to set the + access and modified times, respectively. This bizarre API is mimicked + from Python for the sake of consistency -- I apologize. + + :param str path: path of the file to modify + :param tuple times: + ``None`` or a tuple of (access time, modified time) in standard + internet epoch time (seconds since 01 January 1970 GMT) + """ + path = self._adjust_cwd(path) + if times is None: + times = (time.time(), time.time()) + self._log(DEBUG, "utime({!r}, {!r})".format(path, times)) + attr = SFTPAttributes() + attr.st_atime, attr.st_mtime = times + self._request(CMD_SETSTAT, path, attr) + + def truncate(self, path, size): + """ + Change the size of the file specified by ``path``. This usually + extends or shrinks the size of the file, just like the `~file.truncate` + method on Python file objects. + + :param str path: path of the file to modify + :param int size: the new size of the file + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "truncate({!r}, {!r})".format(path, size)) + attr = SFTPAttributes() + attr.st_size = size + self._request(CMD_SETSTAT, path, attr) + + def readlink(self, path): + """ + Return the target of a symbolic link (shortcut). You can use + `symlink` to create these. The result may be either an absolute or + relative pathname. + + :param str path: path of the symbolic link file + :return: target path, as a `str` + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "readlink({!r})".format(path)) + t, msg = self._request(CMD_READLINK, path) + if t != CMD_NAME: + raise SFTPError("Expected name response") + count = msg.get_int() + if count == 0: + return None + if count != 1: + raise SFTPError("Readlink returned {} results".format(count)) + return _to_unicode(msg.get_string()) + + def normalize(self, path): + """ + Return the normalized path (on the server) of a given path. This + can be used to quickly resolve symbolic links or determine what the + server is considering to be the "current folder" (by passing ``'.'`` + as ``path``). + + :param str path: path to be normalized + :return: normalized form of the given path (as a `str`) + + :raises: ``IOError`` -- if the path can't be resolved on the server + """ + path = self._adjust_cwd(path) + self._log(DEBUG, "normalize({!r})".format(path)) + t, msg = self._request(CMD_REALPATH, path) + if t != CMD_NAME: + raise SFTPError("Expected name response") + count = msg.get_int() + if count != 1: + raise SFTPError("Realpath returned {} results".format(count)) + return msg.get_text() + + def chdir(self, path=None): + """ + Change the "current directory" of this SFTP session. Since SFTP + doesn't really have the concept of a current working directory, this is + emulated by Paramiko. Once you use this method to set a working + directory, all operations on this `.SFTPClient` object will be relative + to that path. You can pass in ``None`` to stop using a current working + directory. + + :param str path: new current working directory + + :raises: + ``IOError`` -- if the requested path doesn't exist on the server + + .. versionadded:: 1.4 + """ + if path is None: + self._cwd = None + return + if not stat.S_ISDIR(self.stat(path).st_mode): + code = errno.ENOTDIR + raise SFTPError(code, "{}: {}".format(os.strerror(code), path)) + self._cwd = b(self.normalize(path)) + + def getcwd(self): + """ + Return the "current working directory" for this SFTP session, as + emulated by Paramiko. If no directory has been set with `chdir`, + this method will return ``None``. + + .. versionadded:: 1.4 + """ + # TODO: make class initialize with self._cwd set to self.normalize('.') + return self._cwd and u(self._cwd) + + def _transfer_with_callback(self, reader, writer, file_size, callback): + size = 0 + while True: + data = reader.read(32768) + writer.write(data) + size += len(data) + if len(data) == 0: + break + if callback is not None: + callback(size, file_size) + return size + + def putfo(self, fl, remotepath, file_size=0, callback=None, confirm=True): + """ + Copy the contents of an open file object (``fl``) to the SFTP server as + ``remotepath``. Any exception raised by operations will be passed + through. + + The SFTP operations use pipelining for speed. + + :param fl: opened file or file-like object to copy + :param str remotepath: the destination path on the SFTP server + :param int file_size: + optional size parameter passed to callback. If none is specified, + size defaults to 0 + :param callable callback: + optional callback function (form: ``func(int, int)``) that accepts + the bytes transferred so far and the total bytes to be transferred + (since 1.7.4) + :param bool confirm: + whether to do a stat() on the file afterwards to confirm the file + size (since 1.7.7) + + :return: + an `.SFTPAttributes` object containing attributes about the given + file. + + .. versionadded:: 1.10 + """ + with self.file(remotepath, "wb") as fr: + fr.set_pipelined(True) + size = self._transfer_with_callback( + reader=fl, writer=fr, file_size=file_size, callback=callback + ) + if confirm: + s = self.stat(remotepath) + if s.st_size != size: + raise IOError( + "size mismatch in put! {} != {}".format(s.st_size, size) + ) + else: + s = SFTPAttributes() + return s + + def put(self, localpath, remotepath, callback=None, confirm=True): + """ + Copy a local file (``localpath``) to the SFTP server as ``remotepath``. + Any exception raised by operations will be passed through. This + method is primarily provided as a convenience. + + The SFTP operations use pipelining for speed. + + :param str localpath: the local file to copy + :param str remotepath: the destination path on the SFTP server. Note + that the filename should be included. Only specifying a directory + may result in an error. + :param callable callback: + optional callback function (form: ``func(int, int)``) that accepts + the bytes transferred so far and the total bytes to be transferred + :param bool confirm: + whether to do a stat() on the file afterwards to confirm the file + size + + :return: an `.SFTPAttributes` object containing attributes about the + given file + + .. versionadded:: 1.4 + .. versionchanged:: 1.7.4 + ``callback`` and rich attribute return value added. + .. versionchanged:: 1.7.7 + ``confirm`` param added. + """ + file_size = os.stat(localpath).st_size + with open(localpath, "rb") as fl: + return self.putfo(fl, remotepath, file_size, callback, confirm) + + def getfo( + self, + remotepath, + fl, + callback=None, + prefetch=True, + max_concurrent_prefetch_requests=None, + ): + """ + Copy a remote file (``remotepath``) from the SFTP server and write to + an open file or file-like object, ``fl``. Any exception raised by + operations will be passed through. This method is primarily provided + as a convenience. + + :param object remotepath: opened file or file-like object to copy to + :param str fl: + the destination path on the local host or open file object + :param callable callback: + optional callback function (form: ``func(int, int)``) that accepts + the bytes transferred so far and the total bytes to be transferred + :param bool prefetch: + controls whether prefetching is performed (default: True) + :param int max_concurrent_prefetch_requests: + The maximum number of concurrent read requests to prefetch. See + `.SFTPClient.get` (its ``max_concurrent_prefetch_requests`` param) + for details. + :return: the `number ` of bytes written to the opened file object + + .. versionadded:: 1.10 + .. versionchanged:: 2.8 + Added the ``prefetch`` keyword argument. + .. versionchanged:: 3.3 + Added ``max_concurrent_prefetch_requests``. + """ + file_size = self.stat(remotepath).st_size + with self.open(remotepath, "rb") as fr: + if prefetch: + fr.prefetch(file_size, max_concurrent_prefetch_requests) + return self._transfer_with_callback( + reader=fr, writer=fl, file_size=file_size, callback=callback + ) + + def get( + self, + remotepath, + localpath, + callback=None, + prefetch=True, + max_concurrent_prefetch_requests=None, + ): + """ + Copy a remote file (``remotepath``) from the SFTP server to the local + host as ``localpath``. Any exception raised by operations will be + passed through. This method is primarily provided as a convenience. + + :param str remotepath: the remote file to copy + :param str localpath: the destination path on the local host + :param callable callback: + optional callback function (form: ``func(int, int)``) that accepts + the bytes transferred so far and the total bytes to be transferred + :param bool prefetch: + controls whether prefetching is performed (default: True) + :param int max_concurrent_prefetch_requests: + The maximum number of concurrent read requests to prefetch. + When this is ``None`` (the default), do not limit the number of + concurrent prefetch requests. Note: OpenSSH's sftp internally + imposes a limit of 64 concurrent requests, while Paramiko imposes + no limit by default; consider setting a limit if a file can be + successfully received with sftp but hangs with Paramiko. + + .. versionadded:: 1.4 + .. versionchanged:: 1.7.4 + Added the ``callback`` param + .. versionchanged:: 2.8 + Added the ``prefetch`` keyword argument. + .. versionchanged:: 3.3 + Added ``max_concurrent_prefetch_requests``. + """ + with open(localpath, "wb") as fl: + size = self.getfo( + remotepath, + fl, + callback, + prefetch, + max_concurrent_prefetch_requests, + ) + s = os.stat(localpath) + if s.st_size != size: + raise IOError( + "size mismatch in get! {} != {}".format(s.st_size, size) + ) + + # ...internals... + + def _request(self, t, *args): + num = self._async_request(type(None), t, *args) + return self._read_response(num) + + def _async_request(self, fileobj, t, *args): + # this method may be called from other threads (prefetch) + self._lock.acquire() + try: + msg = Message() + msg.add_int(self.request_number) + for item in args: + if isinstance(item, int64): + msg.add_int64(item) + elif isinstance(item, int): + msg.add_int(item) + elif isinstance(item, SFTPAttributes): + item._pack(msg) + else: + # For all other types, rely on as_string() to either coerce + # to bytes before writing or raise a suitable exception. + msg.add_string(item) + num = self.request_number + self._expecting[num] = fileobj + self.request_number += 1 + finally: + self._lock.release() + self._send_packet(t, msg) + return num + + def _read_response(self, waitfor=None): + while True: + try: + t, data = self._read_packet() + except EOFError as e: + raise SSHException("Server connection dropped: {}".format(e)) + msg = Message(data) + num = msg.get_int() + self._lock.acquire() + try: + if num not in self._expecting: + # might be response for a file that was closed before + # responses came back + self._log(DEBUG, "Unexpected response #{}".format(num)) + if waitfor is None: + # just doing a single check + break + continue + fileobj = self._expecting[num] + del self._expecting[num] + finally: + self._lock.release() + if num == waitfor: + # synchronous + if t == CMD_STATUS: + self._convert_status(msg) + return t, msg + + # can not rewrite this to deal with E721, either as a None check + # nor as not an instance of None or NoneType + if fileobj is not type(None): # noqa + fileobj._async_response(t, msg, num) + if waitfor is None: + # just doing a single check + break + return None, None + + def _finish_responses(self, fileobj): + while fileobj in self._expecting.values(): + self._read_response() + fileobj._check_exception() + + def _convert_status(self, msg): + """ + Raises EOFError or IOError on error status; otherwise does nothing. + """ + code = msg.get_int() + text = msg.get_text() + if code == SFTP_OK: + return + elif code == SFTP_EOF: + raise EOFError(text) + elif code == SFTP_NO_SUCH_FILE: + # clever idea from john a. meinel: map the error codes to errno + raise IOError(errno.ENOENT, text) + elif code == SFTP_PERMISSION_DENIED: + raise IOError(errno.EACCES, text) + else: + raise IOError(text) + + def _adjust_cwd(self, path): + """ + Return an adjusted path if we're emulating a "current working + directory" for the server. + """ + path = b(path) + if self._cwd is None: + return path + if len(path) and path[0:1] == b_slash: + # absolute path + return path + if self._cwd == b_slash: + return self._cwd + path + return self._cwd + b_slash + path + + +class SFTP(SFTPClient): + """ + An alias for `.SFTPClient` for backwards compatibility. + """ + + pass diff --git a/venv/lib/python3.11/site-packages/paramiko/sftp_file.py b/venv/lib/python3.11/site-packages/paramiko/sftp_file.py new file mode 100644 index 0000000..c74695e --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/sftp_file.py @@ -0,0 +1,594 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +SFTP file object +""" + + +from binascii import hexlify +from collections import deque +import socket +import threading +import time +from paramiko.common import DEBUG, io_sleep + +from paramiko.file import BufferedFile +from paramiko.util import u +from paramiko.sftp import ( + CMD_CLOSE, + CMD_READ, + CMD_DATA, + SFTPError, + CMD_WRITE, + CMD_STATUS, + CMD_FSTAT, + CMD_ATTRS, + CMD_FSETSTAT, + CMD_EXTENDED, + int64, +) +from paramiko.sftp_attr import SFTPAttributes + + +class SFTPFile(BufferedFile): + """ + Proxy object for a file on the remote server, in client mode SFTP. + + Instances of this class may be used as context managers in the same way + that built-in Python file objects are. + """ + + # Some sftp servers will choke if you send read/write requests larger than + # this size. + MAX_REQUEST_SIZE = 32768 + + def __init__(self, sftp, handle, mode="r", bufsize=-1): + BufferedFile.__init__(self) + self.sftp = sftp + self.handle = handle + BufferedFile._set_mode(self, mode, bufsize) + self.pipelined = False + self._prefetching = False + self._prefetch_done = False + self._prefetch_data = {} + self._prefetch_extents = {} + self._prefetch_lock = threading.Lock() + self._saved_exception = None + self._reqs = deque() + + def __del__(self): + self._close(async_=True) + + def close(self): + """ + Close the file. + """ + self._close(async_=False) + + def _close(self, async_=False): + # We allow double-close without signaling an error, because real + # Python file objects do. However, we must protect against actually + # sending multiple CMD_CLOSE packets, because after we close our + # handle, the same handle may be re-allocated by the server, and we + # may end up mysteriously closing some random other file. (This is + # especially important because we unconditionally call close() from + # __del__.) + if self._closed: + return + self.sftp._log(DEBUG, "close({})".format(u(hexlify(self.handle)))) + if self.pipelined: + self.sftp._finish_responses(self) + BufferedFile.close(self) + try: + if async_: + # GC'd file handle could be called from an arbitrary thread + # -- don't wait for a response + self.sftp._async_request(type(None), CMD_CLOSE, self.handle) + else: + self.sftp._request(CMD_CLOSE, self.handle) + except EOFError: + # may have outlived the Transport connection + pass + except (IOError, socket.error): + # may have outlived the Transport connection + pass + + def _data_in_prefetch_requests(self, offset, size): + k = [ + x for x in list(self._prefetch_extents.values()) if x[0] <= offset + ] + if len(k) == 0: + return False + k.sort(key=lambda x: x[0]) + buf_offset, buf_size = k[-1] + if buf_offset + buf_size <= offset: + # prefetch request ends before this one begins + return False + if buf_offset + buf_size >= offset + size: + # inclusive + return True + # well, we have part of the request. see if another chunk has + # the rest. + return self._data_in_prefetch_requests( + buf_offset + buf_size, offset + size - buf_offset - buf_size + ) + + def _data_in_prefetch_buffers(self, offset): + """ + if a block of data is present in the prefetch buffers, at the given + offset, return the offset of the relevant prefetch buffer. otherwise, + return None. this guarantees nothing about the number of bytes + collected in the prefetch buffer so far. + """ + k = [i for i in self._prefetch_data.keys() if i <= offset] + if len(k) == 0: + return None + index = max(k) + buf_offset = offset - index + if buf_offset >= len(self._prefetch_data[index]): + # it's not here + return None + return index + + def _read_prefetch(self, size): + """ + read data out of the prefetch buffer, if possible. if the data isn't + in the buffer, return None. otherwise, behaves like a normal read. + """ + # while not closed, and haven't fetched past the current position, + # and haven't reached EOF... + while True: + offset = self._data_in_prefetch_buffers(self._realpos) + if offset is not None: + break + if self._prefetch_done or self._closed: + break + self.sftp._read_response() + self._check_exception() + if offset is None: + self._prefetching = False + return None + prefetch = self._prefetch_data[offset] + del self._prefetch_data[offset] + + buf_offset = self._realpos - offset + if buf_offset > 0: + self._prefetch_data[offset] = prefetch[:buf_offset] + prefetch = prefetch[buf_offset:] + if size < len(prefetch): + self._prefetch_data[self._realpos + size] = prefetch[size:] + prefetch = prefetch[:size] + return prefetch + + def _read(self, size): + size = min(size, self.MAX_REQUEST_SIZE) + if self._prefetching: + data = self._read_prefetch(size) + if data is not None: + return data + t, msg = self.sftp._request( + CMD_READ, self.handle, int64(self._realpos), int(size) + ) + if t != CMD_DATA: + raise SFTPError("Expected data") + return msg.get_string() + + def _write(self, data): + # may write less than requested if it would exceed max packet size + chunk = min(len(data), self.MAX_REQUEST_SIZE) + sftp_async_request = self.sftp._async_request( + type(None), + CMD_WRITE, + self.handle, + int64(self._realpos), + data[:chunk], + ) + self._reqs.append(sftp_async_request) + if not self.pipelined or ( + len(self._reqs) > 100 and self.sftp.sock.recv_ready() + ): + while len(self._reqs): + req = self._reqs.popleft() + t, msg = self.sftp._read_response(req) + if t != CMD_STATUS: + raise SFTPError("Expected status") + # convert_status already called + return chunk + + def settimeout(self, timeout): + """ + Set a timeout on read/write operations on the underlying socket or + ssh `.Channel`. + + :param float timeout: + seconds to wait for a pending read/write operation before raising + ``socket.timeout``, or ``None`` for no timeout + + .. seealso:: `.Channel.settimeout` + """ + self.sftp.sock.settimeout(timeout) + + def gettimeout(self): + """ + Returns the timeout in seconds (as a `float`) associated with the + socket or ssh `.Channel` used for this file. + + .. seealso:: `.Channel.gettimeout` + """ + return self.sftp.sock.gettimeout() + + def setblocking(self, blocking): + """ + Set blocking or non-blocking mode on the underiying socket or ssh + `.Channel`. + + :param int blocking: + 0 to set non-blocking mode; non-0 to set blocking mode. + + .. seealso:: `.Channel.setblocking` + """ + self.sftp.sock.setblocking(blocking) + + def seekable(self): + """ + Check if the file supports random access. + + :return: + `True` if the file supports random access. If `False`, + :meth:`seek` will raise an exception + """ + return True + + def seek(self, offset, whence=0): + """ + Set the file's current position. + + See `file.seek` for details. + """ + self.flush() + if whence == self.SEEK_SET: + self._realpos = self._pos = offset + elif whence == self.SEEK_CUR: + self._pos += offset + self._realpos = self._pos + else: + self._realpos = self._pos = self._get_size() + offset + self._rbuffer = bytes() + + def stat(self): + """ + Retrieve information about this file from the remote system. This is + exactly like `.SFTPClient.stat`, except that it operates on an + already-open file. + + :returns: + an `.SFTPAttributes` object containing attributes about this file. + """ + t, msg = self.sftp._request(CMD_FSTAT, self.handle) + if t != CMD_ATTRS: + raise SFTPError("Expected attributes") + return SFTPAttributes._from_msg(msg) + + def chmod(self, mode): + """ + Change the mode (permissions) of this file. The permissions are + unix-style and identical to those used by Python's `os.chmod` + function. + + :param int mode: new permissions + """ + self.sftp._log( + DEBUG, "chmod({}, {!r})".format(hexlify(self.handle), mode) + ) + attr = SFTPAttributes() + attr.st_mode = mode + self.sftp._request(CMD_FSETSTAT, self.handle, attr) + + def chown(self, uid, gid): + """ + Change the owner (``uid``) and group (``gid``) of this file. As with + Python's `os.chown` function, you must pass both arguments, so if you + only want to change one, use `stat` first to retrieve the current + owner and group. + + :param int uid: new owner's uid + :param int gid: new group id + """ + self.sftp._log( + DEBUG, + "chown({}, {!r}, {!r})".format(hexlify(self.handle), uid, gid), + ) + attr = SFTPAttributes() + attr.st_uid, attr.st_gid = uid, gid + self.sftp._request(CMD_FSETSTAT, self.handle, attr) + + def utime(self, times): + """ + Set the access and modified times of this file. If + ``times`` is ``None``, then the file's access and modified times are + set to the current time. Otherwise, ``times`` must be a 2-tuple of + numbers, of the form ``(atime, mtime)``, which is used to set the + access and modified times, respectively. This bizarre API is mimicked + from Python for the sake of consistency -- I apologize. + + :param tuple times: + ``None`` or a tuple of (access time, modified time) in standard + internet epoch time (seconds since 01 January 1970 GMT) + """ + if times is None: + times = (time.time(), time.time()) + self.sftp._log( + DEBUG, "utime({}, {!r})".format(hexlify(self.handle), times) + ) + attr = SFTPAttributes() + attr.st_atime, attr.st_mtime = times + self.sftp._request(CMD_FSETSTAT, self.handle, attr) + + def truncate(self, size): + """ + Change the size of this file. This usually extends + or shrinks the size of the file, just like the ``truncate()`` method on + Python file objects. + + :param size: the new size of the file + """ + self.sftp._log( + DEBUG, "truncate({}, {!r})".format(hexlify(self.handle), size) + ) + attr = SFTPAttributes() + attr.st_size = size + self.sftp._request(CMD_FSETSTAT, self.handle, attr) + + def check(self, hash_algorithm, offset=0, length=0, block_size=0): + """ + Ask the server for a hash of a section of this file. This can be used + to verify a successful upload or download, or for various rsync-like + operations. + + The file is hashed from ``offset``, for ``length`` bytes. + If ``length`` is 0, the remainder of the file is hashed. Thus, if both + ``offset`` and ``length`` are zero, the entire file is hashed. + + Normally, ``block_size`` will be 0 (the default), and this method will + return a byte string representing the requested hash (for example, a + string of length 16 for MD5, or 20 for SHA-1). If a non-zero + ``block_size`` is given, each chunk of the file (from ``offset`` to + ``offset + length``) of ``block_size`` bytes is computed as a separate + hash. The hash results are all concatenated and returned as a single + string. + + For example, ``check('sha1', 0, 1024, 512)`` will return a string of + length 40. The first 20 bytes will be the SHA-1 of the first 512 bytes + of the file, and the last 20 bytes will be the SHA-1 of the next 512 + bytes. + + :param str hash_algorithm: + the name of the hash algorithm to use (normally ``"sha1"`` or + ``"md5"``) + :param offset: + offset into the file to begin hashing (0 means to start from the + beginning) + :param length: + number of bytes to hash (0 means continue to the end of the file) + :param int block_size: + number of bytes to hash per result (must not be less than 256; 0 + means to compute only one hash of the entire segment) + :return: + `str` of bytes representing the hash of each block, concatenated + together + + :raises: + ``IOError`` -- if the server doesn't support the "check-file" + extension, or possibly doesn't support the hash algorithm requested + + .. note:: Many (most?) servers don't support this extension yet. + + .. versionadded:: 1.4 + """ + t, msg = self.sftp._request( + CMD_EXTENDED, + "check-file", + self.handle, + hash_algorithm, + int64(offset), + int64(length), + block_size, + ) + msg.get_text() # ext + msg.get_text() # alg + data = msg.get_remainder() + return data + + def set_pipelined(self, pipelined=True): + """ + Turn on/off the pipelining of write operations to this file. When + pipelining is on, paramiko won't wait for the server response after + each write operation. Instead, they're collected as they come in. At + the first non-write operation (including `.close`), all remaining + server responses are collected. This means that if there was an error + with one of your later writes, an exception might be thrown from within + `.close` instead of `.write`. + + By default, files are not pipelined. + + :param bool pipelined: + ``True`` if pipelining should be turned on for this file; ``False`` + otherwise + + .. versionadded:: 1.5 + """ + self.pipelined = pipelined + + def prefetch(self, file_size=None, max_concurrent_requests=None): + """ + Pre-fetch the remaining contents of this file in anticipation of future + `.read` calls. If reading the entire file, pre-fetching can + dramatically improve the download speed by avoiding roundtrip latency. + The file's contents are incrementally buffered in a background thread. + + The prefetched data is stored in a buffer until read via the `.read` + method. Once data has been read, it's removed from the buffer. The + data may be read in a random order (using `.seek`); chunks of the + buffer that haven't been read will continue to be buffered. + + :param int file_size: + When this is ``None`` (the default), this method calls `stat` to + determine the remote file size. In some situations, doing so can + cause exceptions or hangs (see `#562 + `_); as a + workaround, one may call `stat` explicitly and pass its value in + via this parameter. + :param int max_concurrent_requests: + The maximum number of concurrent read requests to prefetch. See + `.SFTPClient.get` (its ``max_concurrent_prefetch_requests`` param) + for details. + + .. versionadded:: 1.5.1 + .. versionchanged:: 1.16.0 + The ``file_size`` parameter was added (with no default value). + .. versionchanged:: 1.16.1 + The ``file_size`` parameter was made optional for backwards + compatibility. + .. versionchanged:: 3.3 + Added ``max_concurrent_requests``. + """ + if file_size is None: + file_size = self.stat().st_size + + # queue up async reads for the rest of the file + chunks = [] + n = self._realpos + while n < file_size: + chunk = min(self.MAX_REQUEST_SIZE, file_size - n) + chunks.append((n, chunk)) + n += chunk + if len(chunks) > 0: + self._start_prefetch(chunks, max_concurrent_requests) + + def readv(self, chunks, max_concurrent_prefetch_requests=None): + """ + Read a set of blocks from the file by (offset, length). This is more + efficient than doing a series of `.seek` and `.read` calls, since the + prefetch machinery is used to retrieve all the requested blocks at + once. + + :param chunks: + a list of ``(offset, length)`` tuples indicating which sections of + the file to read + :param int max_concurrent_prefetch_requests: + The maximum number of concurrent read requests to prefetch. See + `.SFTPClient.get` (its ``max_concurrent_prefetch_requests`` param) + for details. + :return: a list of blocks read, in the same order as in ``chunks`` + + .. versionadded:: 1.5.4 + .. versionchanged:: 3.3 + Added ``max_concurrent_prefetch_requests``. + """ + self.sftp._log( + DEBUG, "readv({}, {!r})".format(hexlify(self.handle), chunks) + ) + + read_chunks = [] + for offset, size in chunks: + # don't fetch data that's already in the prefetch buffer + if self._data_in_prefetch_buffers( + offset + ) or self._data_in_prefetch_requests(offset, size): + continue + + # break up anything larger than the max read size + while size > 0: + chunk_size = min(size, self.MAX_REQUEST_SIZE) + read_chunks.append((offset, chunk_size)) + offset += chunk_size + size -= chunk_size + + self._start_prefetch(read_chunks, max_concurrent_prefetch_requests) + # now we can just devolve to a bunch of read()s :) + for x in chunks: + self.seek(x[0]) + yield self.read(x[1]) + + # ...internals... + + def _get_size(self): + try: + return self.stat().st_size + except: + return 0 + + def _start_prefetch(self, chunks, max_concurrent_requests=None): + self._prefetching = True + self._prefetch_done = False + + t = threading.Thread( + target=self._prefetch_thread, + args=(chunks, max_concurrent_requests), + ) + t.daemon = True + t.start() + + def _prefetch_thread(self, chunks, max_concurrent_requests): + # do these read requests in a temporary thread because there may be + # a lot of them, so it may block. + for offset, length in chunks: + # Limit the number of concurrent requests in a busy-loop + if max_concurrent_requests is not None: + while True: + with self._prefetch_lock: + pf_len = len(self._prefetch_extents) + if pf_len < max_concurrent_requests: + break + time.sleep(io_sleep) + + num = self.sftp._async_request( + self, CMD_READ, self.handle, int64(offset), int(length) + ) + with self._prefetch_lock: + self._prefetch_extents[num] = (offset, length) + + def _async_response(self, t, msg, num): + if t == CMD_STATUS: + # save exception and re-raise it on next file operation + try: + self.sftp._convert_status(msg) + except Exception as e: + self._saved_exception = e + return + if t != CMD_DATA: + raise SFTPError("Expected data") + data = msg.get_string() + while True: + with self._prefetch_lock: + # spin if in race with _prefetch_thread + if num in self._prefetch_extents: + offset, length = self._prefetch_extents[num] + self._prefetch_data[offset] = data + del self._prefetch_extents[num] + if len(self._prefetch_extents) == 0: + self._prefetch_done = True + break + + def _check_exception(self): + """if there's a saved exception, raise & clear it""" + if self._saved_exception is not None: + x = self._saved_exception + self._saved_exception = None + raise x diff --git a/venv/lib/python3.11/site-packages/paramiko/sftp_handle.py b/venv/lib/python3.11/site-packages/paramiko/sftp_handle.py new file mode 100644 index 0000000..b204652 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/sftp_handle.py @@ -0,0 +1,196 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Abstraction of an SFTP file handle (for server mode). +""" + +import os +from paramiko.sftp import SFTP_OP_UNSUPPORTED, SFTP_OK +from paramiko.util import ClosingContextManager + + +class SFTPHandle(ClosingContextManager): + """ + Abstract object representing a handle to an open file (or folder) in an + SFTP server implementation. Each handle has a string representation used + by the client to refer to the underlying file. + + Server implementations can (and should) subclass SFTPHandle to implement + features of a file handle, like `stat` or `chattr`. + + Instances of this class may be used as context managers. + """ + + def __init__(self, flags=0): + """ + Create a new file handle representing a local file being served over + SFTP. If ``flags`` is passed in, it's used to determine if the file + is open in append mode. + + :param int flags: optional flags as passed to + `.SFTPServerInterface.open` + """ + self.__flags = flags + self.__name = None + # only for handles to folders: + self.__files = {} + self.__tell = None + + def close(self): + """ + When a client closes a file, this method is called on the handle. + Normally you would use this method to close the underlying OS level + file object(s). + + The default implementation checks for attributes on ``self`` named + ``readfile`` and/or ``writefile``, and if either or both are present, + their ``close()`` methods are called. This means that if you are + using the default implementations of `read` and `write`, this + method's default implementation should be fine also. + """ + readfile = getattr(self, "readfile", None) + if readfile is not None: + readfile.close() + writefile = getattr(self, "writefile", None) + if writefile is not None: + writefile.close() + + def read(self, offset, length): + """ + Read up to ``length`` bytes from this file, starting at position + ``offset``. The offset may be a Python long, since SFTP allows it + to be 64 bits. + + If the end of the file has been reached, this method may return an + empty string to signify EOF, or it may also return ``SFTP_EOF``. + + The default implementation checks for an attribute on ``self`` named + ``readfile``, and if present, performs the read operation on the Python + file-like object found there. (This is meant as a time saver for the + common case where you are wrapping a Python file object.) + + :param offset: position in the file to start reading from. + :param int length: number of bytes to attempt to read. + :return: the `bytes` read, or an error code `int`. + """ + readfile = getattr(self, "readfile", None) + if readfile is None: + return SFTP_OP_UNSUPPORTED + try: + if self.__tell is None: + self.__tell = readfile.tell() + if offset != self.__tell: + readfile.seek(offset) + self.__tell = offset + data = readfile.read(length) + except IOError as e: + self.__tell = None + return SFTPServer.convert_errno(e.errno) + self.__tell += len(data) + return data + + def write(self, offset, data): + """ + Write ``data`` into this file at position ``offset``. Extending the + file past its original end is expected. Unlike Python's normal + ``write()`` methods, this method cannot do a partial write: it must + write all of ``data`` or else return an error. + + The default implementation checks for an attribute on ``self`` named + ``writefile``, and if present, performs the write operation on the + Python file-like object found there. The attribute is named + differently from ``readfile`` to make it easy to implement read-only + (or write-only) files, but if both attributes are present, they should + refer to the same file. + + :param offset: position in the file to start reading from. + :param bytes data: data to write into the file. + :return: an SFTP error code like ``SFTP_OK``. + """ + writefile = getattr(self, "writefile", None) + if writefile is None: + return SFTP_OP_UNSUPPORTED + try: + # in append mode, don't care about seeking + if (self.__flags & os.O_APPEND) == 0: + if self.__tell is None: + self.__tell = writefile.tell() + if offset != self.__tell: + writefile.seek(offset) + self.__tell = offset + writefile.write(data) + writefile.flush() + except IOError as e: + self.__tell = None + return SFTPServer.convert_errno(e.errno) + if self.__tell is not None: + self.__tell += len(data) + return SFTP_OK + + def stat(self): + """ + Return an `.SFTPAttributes` object referring to this open file, or an + error code. This is equivalent to `.SFTPServerInterface.stat`, except + it's called on an open file instead of a path. + + :return: + an attributes object for the given file, or an SFTP error code + (like ``SFTP_PERMISSION_DENIED``). + :rtype: `.SFTPAttributes` or error code + """ + return SFTP_OP_UNSUPPORTED + + def chattr(self, attr): + """ + Change the attributes of this file. The ``attr`` object will contain + only those fields provided by the client in its request, so you should + check for the presence of fields before using them. + + :param .SFTPAttributes attr: the attributes to change on this file. + :return: an `int` error code like ``SFTP_OK``. + """ + return SFTP_OP_UNSUPPORTED + + # ...internals... + + def _set_files(self, files): + """ + Used by the SFTP server code to cache a directory listing. (In + the SFTP protocol, listing a directory is a multi-stage process + requiring a temporary handle.) + """ + self.__files = files + + def _get_next_files(self): + """ + Used by the SFTP server code to retrieve a cached directory + listing. + """ + fnlist = self.__files[:16] + self.__files = self.__files[16:] + return fnlist + + def _get_name(self): + return self.__name + + def _set_name(self, name): + self.__name = name + + +from paramiko.sftp_server import SFTPServer diff --git a/venv/lib/python3.11/site-packages/paramiko/sftp_server.py b/venv/lib/python3.11/site-packages/paramiko/sftp_server.py new file mode 100644 index 0000000..cd3910d --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/sftp_server.py @@ -0,0 +1,537 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Server-mode SFTP support. +""" + +import os +import errno +import sys +from hashlib import md5, sha1 + +from paramiko import util +from paramiko.sftp import ( + BaseSFTP, + Message, + SFTP_FAILURE, + SFTP_PERMISSION_DENIED, + SFTP_NO_SUCH_FILE, + int64, +) +from paramiko.sftp_si import SFTPServerInterface +from paramiko.sftp_attr import SFTPAttributes +from paramiko.common import DEBUG +from paramiko.server import SubsystemHandler +from paramiko.util import b + + +# known hash algorithms for the "check-file" extension +from paramiko.sftp import ( + CMD_HANDLE, + SFTP_DESC, + CMD_STATUS, + SFTP_EOF, + CMD_NAME, + SFTP_BAD_MESSAGE, + CMD_EXTENDED_REPLY, + SFTP_FLAG_READ, + SFTP_FLAG_WRITE, + SFTP_FLAG_APPEND, + SFTP_FLAG_CREATE, + SFTP_FLAG_TRUNC, + SFTP_FLAG_EXCL, + CMD_NAMES, + CMD_OPEN, + CMD_CLOSE, + SFTP_OK, + CMD_READ, + CMD_DATA, + CMD_WRITE, + CMD_REMOVE, + CMD_RENAME, + CMD_MKDIR, + CMD_RMDIR, + CMD_OPENDIR, + CMD_READDIR, + CMD_STAT, + CMD_ATTRS, + CMD_LSTAT, + CMD_FSTAT, + CMD_SETSTAT, + CMD_FSETSTAT, + CMD_READLINK, + CMD_SYMLINK, + CMD_REALPATH, + CMD_EXTENDED, + SFTP_OP_UNSUPPORTED, +) + +_hash_class = {"sha1": sha1, "md5": md5} + + +class SFTPServer(BaseSFTP, SubsystemHandler): + """ + Server-side SFTP subsystem support. Since this is a `.SubsystemHandler`, + it can be (and is meant to be) set as the handler for ``"sftp"`` requests. + Use `.Transport.set_subsystem_handler` to activate this class. + """ + + def __init__( + self, + channel, + name, + server, + sftp_si=SFTPServerInterface, + *args, + **kwargs + ): + """ + The constructor for SFTPServer is meant to be called from within the + `.Transport` as a subsystem handler. ``server`` and any additional + parameters or keyword parameters are passed from the original call to + `.Transport.set_subsystem_handler`. + + :param .Channel channel: channel passed from the `.Transport`. + :param str name: name of the requested subsystem. + :param .ServerInterface server: + the server object associated with this channel and subsystem + :param sftp_si: + a subclass of `.SFTPServerInterface` to use for handling individual + requests. + """ + BaseSFTP.__init__(self) + SubsystemHandler.__init__(self, channel, name, server) + transport = channel.get_transport() + self.logger = util.get_logger(transport.get_log_channel() + ".sftp") + self.ultra_debug = transport.get_hexdump() + self.next_handle = 1 + # map of handle-string to SFTPHandle for files & folders: + self.file_table = {} + self.folder_table = {} + self.server = sftp_si(server, *args, **kwargs) + + def _log(self, level, msg): + if issubclass(type(msg), list): + for m in msg: + super()._log(level, "[chan " + self.sock.get_name() + "] " + m) + else: + super()._log(level, "[chan " + self.sock.get_name() + "] " + msg) + + def start_subsystem(self, name, transport, channel): + self.sock = channel + self._log(DEBUG, "Started sftp server on channel {!r}".format(channel)) + self._send_server_version() + self.server.session_started() + while True: + try: + t, data = self._read_packet() + except EOFError: + self._log(DEBUG, "EOF -- end of session") + return + except Exception as e: + self._log(DEBUG, "Exception on channel: " + str(e)) + self._log(DEBUG, util.tb_strings()) + return + msg = Message(data) + request_number = msg.get_int() + try: + self._process(t, request_number, msg) + except Exception as e: + self._log(DEBUG, "Exception in server processing: " + str(e)) + self._log(DEBUG, util.tb_strings()) + # send some kind of failure message, at least + try: + self._send_status(request_number, SFTP_FAILURE) + except: + pass + + def finish_subsystem(self): + self.server.session_ended() + super().finish_subsystem() + # close any file handles that were left open + # (so we can return them to the OS quickly) + for f in self.file_table.values(): + f.close() + for f in self.folder_table.values(): + f.close() + self.file_table = {} + self.folder_table = {} + + @staticmethod + def convert_errno(e): + """ + Convert an errno value (as from an ``OSError`` or ``IOError``) into a + standard SFTP result code. This is a convenience function for trapping + exceptions in server code and returning an appropriate result. + + :param int e: an errno code, as from ``OSError.errno``. + :return: an `int` SFTP error code like ``SFTP_NO_SUCH_FILE``. + """ + if e == errno.EACCES: + # permission denied + return SFTP_PERMISSION_DENIED + elif (e == errno.ENOENT) or (e == errno.ENOTDIR): + # no such file + return SFTP_NO_SUCH_FILE + else: + return SFTP_FAILURE + + @staticmethod + def set_file_attr(filename, attr): + """ + Change a file's attributes on the local filesystem. The contents of + ``attr`` are used to change the permissions, owner, group ownership, + and/or modification & access time of the file, depending on which + attributes are present in ``attr``. + + This is meant to be a handy helper function for translating SFTP file + requests into local file operations. + + :param str filename: + name of the file to alter (should usually be an absolute path). + :param .SFTPAttributes attr: attributes to change. + """ + if sys.platform != "win32": + # mode operations are meaningless on win32 + if attr._flags & attr.FLAG_PERMISSIONS: + os.chmod(filename, attr.st_mode) + if attr._flags & attr.FLAG_UIDGID: + os.chown(filename, attr.st_uid, attr.st_gid) + if attr._flags & attr.FLAG_AMTIME: + os.utime(filename, (attr.st_atime, attr.st_mtime)) + if attr._flags & attr.FLAG_SIZE: + with open(filename, "w+") as f: + f.truncate(attr.st_size) + + # ...internals... + + def _response(self, request_number, t, *args): + msg = Message() + msg.add_int(request_number) + for item in args: + # NOTE: this is a very silly tiny class used for SFTPFile mostly + if isinstance(item, int64): + msg.add_int64(item) + elif isinstance(item, int): + msg.add_int(item) + elif isinstance(item, (str, bytes)): + msg.add_string(item) + elif type(item) is SFTPAttributes: + item._pack(msg) + else: + raise Exception( + "unknown type for {!r} type {!r}".format(item, type(item)) + ) + self._send_packet(t, msg) + + def _send_handle_response(self, request_number, handle, folder=False): + if not issubclass(type(handle), SFTPHandle): + # must be error code + self._send_status(request_number, handle) + return + handle._set_name(b("hx{:d}".format(self.next_handle))) + self.next_handle += 1 + if folder: + self.folder_table[handle._get_name()] = handle + else: + self.file_table[handle._get_name()] = handle + self._response(request_number, CMD_HANDLE, handle._get_name()) + + def _send_status(self, request_number, code, desc=None): + if desc is None: + try: + desc = SFTP_DESC[code] + except IndexError: + desc = "Unknown" + # some clients expect a "language" tag at the end + # (but don't mind it being blank) + self._response(request_number, CMD_STATUS, code, desc, "") + + def _open_folder(self, request_number, path): + resp = self.server.list_folder(path) + if issubclass(type(resp), list): + # got an actual list of filenames in the folder + folder = SFTPHandle() + folder._set_files(resp) + self._send_handle_response(request_number, folder, True) + return + # must be an error code + self._send_status(request_number, resp) + + def _read_folder(self, request_number, folder): + flist = folder._get_next_files() + if len(flist) == 0: + self._send_status(request_number, SFTP_EOF) + return + msg = Message() + msg.add_int(request_number) + msg.add_int(len(flist)) + for attr in flist: + msg.add_string(attr.filename) + msg.add_string(attr) + attr._pack(msg) + self._send_packet(CMD_NAME, msg) + + def _check_file(self, request_number, msg): + # this extension actually comes from v6 protocol, but since it's an + # extension, i feel like we can reasonably support it backported. + # it's very useful for verifying uploaded files or checking for + # rsync-like differences between local and remote files. + handle = msg.get_binary() + alg_list = msg.get_list() + start = msg.get_int64() + length = msg.get_int64() + block_size = msg.get_int() + if handle not in self.file_table: + self._send_status( + request_number, SFTP_BAD_MESSAGE, "Invalid handle" + ) + return + f = self.file_table[handle] + for x in alg_list: + if x in _hash_class: + algname = x + alg = _hash_class[x] + break + else: + self._send_status( + request_number, SFTP_FAILURE, "No supported hash types found" + ) + return + if length == 0: + st = f.stat() + if not issubclass(type(st), SFTPAttributes): + self._send_status(request_number, st, "Unable to stat file") + return + length = st.st_size - start + if block_size == 0: + block_size = length + if block_size < 256: + self._send_status( + request_number, SFTP_FAILURE, "Block size too small" + ) + return + + sum_out = bytes() + offset = start + while offset < start + length: + blocklen = min(block_size, start + length - offset) + # don't try to read more than about 64KB at a time + chunklen = min(blocklen, 65536) + count = 0 + hash_obj = alg() + while count < blocklen: + data = f.read(offset, chunklen) + if not isinstance(data, bytes): + self._send_status( + request_number, data, "Unable to hash file" + ) + return + hash_obj.update(data) + count += len(data) + offset += count + sum_out += hash_obj.digest() + + msg = Message() + msg.add_int(request_number) + msg.add_string("check-file") + msg.add_string(algname) + msg.add_bytes(sum_out) + self._send_packet(CMD_EXTENDED_REPLY, msg) + + def _convert_pflags(self, pflags): + """convert SFTP-style open() flags to Python's os.open() flags""" + if (pflags & SFTP_FLAG_READ) and (pflags & SFTP_FLAG_WRITE): + flags = os.O_RDWR + elif pflags & SFTP_FLAG_WRITE: + flags = os.O_WRONLY + else: + flags = os.O_RDONLY + if pflags & SFTP_FLAG_APPEND: + flags |= os.O_APPEND + if pflags & SFTP_FLAG_CREATE: + flags |= os.O_CREAT + if pflags & SFTP_FLAG_TRUNC: + flags |= os.O_TRUNC + if pflags & SFTP_FLAG_EXCL: + flags |= os.O_EXCL + return flags + + def _process(self, t, request_number, msg): + self._log(DEBUG, "Request: {}".format(CMD_NAMES[t])) + if t == CMD_OPEN: + path = msg.get_text() + flags = self._convert_pflags(msg.get_int()) + attr = SFTPAttributes._from_msg(msg) + self._send_handle_response( + request_number, self.server.open(path, flags, attr) + ) + elif t == CMD_CLOSE: + handle = msg.get_binary() + if handle in self.folder_table: + del self.folder_table[handle] + self._send_status(request_number, SFTP_OK) + return + if handle in self.file_table: + self.file_table[handle].close() + del self.file_table[handle] + self._send_status(request_number, SFTP_OK) + return + self._send_status( + request_number, SFTP_BAD_MESSAGE, "Invalid handle" + ) + elif t == CMD_READ: + handle = msg.get_binary() + offset = msg.get_int64() + length = msg.get_int() + if handle not in self.file_table: + self._send_status( + request_number, SFTP_BAD_MESSAGE, "Invalid handle" + ) + return + data = self.file_table[handle].read(offset, length) + if isinstance(data, (bytes, str)): + if len(data) == 0: + self._send_status(request_number, SFTP_EOF) + else: + self._response(request_number, CMD_DATA, data) + else: + self._send_status(request_number, data) + elif t == CMD_WRITE: + handle = msg.get_binary() + offset = msg.get_int64() + data = msg.get_binary() + if handle not in self.file_table: + self._send_status( + request_number, SFTP_BAD_MESSAGE, "Invalid handle" + ) + return + self._send_status( + request_number, self.file_table[handle].write(offset, data) + ) + elif t == CMD_REMOVE: + path = msg.get_text() + self._send_status(request_number, self.server.remove(path)) + elif t == CMD_RENAME: + oldpath = msg.get_text() + newpath = msg.get_text() + self._send_status( + request_number, self.server.rename(oldpath, newpath) + ) + elif t == CMD_MKDIR: + path = msg.get_text() + attr = SFTPAttributes._from_msg(msg) + self._send_status(request_number, self.server.mkdir(path, attr)) + elif t == CMD_RMDIR: + path = msg.get_text() + self._send_status(request_number, self.server.rmdir(path)) + elif t == CMD_OPENDIR: + path = msg.get_text() + self._open_folder(request_number, path) + return + elif t == CMD_READDIR: + handle = msg.get_binary() + if handle not in self.folder_table: + self._send_status( + request_number, SFTP_BAD_MESSAGE, "Invalid handle" + ) + return + folder = self.folder_table[handle] + self._read_folder(request_number, folder) + elif t == CMD_STAT: + path = msg.get_text() + resp = self.server.stat(path) + if issubclass(type(resp), SFTPAttributes): + self._response(request_number, CMD_ATTRS, resp) + else: + self._send_status(request_number, resp) + elif t == CMD_LSTAT: + path = msg.get_text() + resp = self.server.lstat(path) + if issubclass(type(resp), SFTPAttributes): + self._response(request_number, CMD_ATTRS, resp) + else: + self._send_status(request_number, resp) + elif t == CMD_FSTAT: + handle = msg.get_binary() + if handle not in self.file_table: + self._send_status( + request_number, SFTP_BAD_MESSAGE, "Invalid handle" + ) + return + resp = self.file_table[handle].stat() + if issubclass(type(resp), SFTPAttributes): + self._response(request_number, CMD_ATTRS, resp) + else: + self._send_status(request_number, resp) + elif t == CMD_SETSTAT: + path = msg.get_text() + attr = SFTPAttributes._from_msg(msg) + self._send_status(request_number, self.server.chattr(path, attr)) + elif t == CMD_FSETSTAT: + handle = msg.get_binary() + attr = SFTPAttributes._from_msg(msg) + if handle not in self.file_table: + self._response( + request_number, SFTP_BAD_MESSAGE, "Invalid handle" + ) + return + self._send_status( + request_number, self.file_table[handle].chattr(attr) + ) + elif t == CMD_READLINK: + path = msg.get_text() + resp = self.server.readlink(path) + if isinstance(resp, (bytes, str)): + self._response( + request_number, CMD_NAME, 1, resp, "", SFTPAttributes() + ) + else: + self._send_status(request_number, resp) + elif t == CMD_SYMLINK: + # the sftp 2 draft is incorrect here! + # path always follows target_path + target_path = msg.get_text() + path = msg.get_text() + self._send_status( + request_number, self.server.symlink(target_path, path) + ) + elif t == CMD_REALPATH: + path = msg.get_text() + rpath = self.server.canonicalize(path) + self._response( + request_number, CMD_NAME, 1, rpath, "", SFTPAttributes() + ) + elif t == CMD_EXTENDED: + tag = msg.get_text() + if tag == "check-file": + self._check_file(request_number, msg) + elif tag == "posix-rename@openssh.com": + oldpath = msg.get_text() + newpath = msg.get_text() + self._send_status( + request_number, self.server.posix_rename(oldpath, newpath) + ) + else: + self._send_status(request_number, SFTP_OP_UNSUPPORTED) + else: + self._send_status(request_number, SFTP_OP_UNSUPPORTED) + + +from paramiko.sftp_handle import SFTPHandle diff --git a/venv/lib/python3.11/site-packages/paramiko/sftp_si.py b/venv/lib/python3.11/site-packages/paramiko/sftp_si.py new file mode 100644 index 0000000..72b5db9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/sftp_si.py @@ -0,0 +1,316 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +An interface to override for SFTP server support. +""" + +import os +import sys +from paramiko.sftp import SFTP_OP_UNSUPPORTED + + +class SFTPServerInterface: + """ + This class defines an interface for controlling the behavior of paramiko + when using the `.SFTPServer` subsystem to provide an SFTP server. + + Methods on this class are called from the SFTP session's thread, so you can + block as long as necessary without affecting other sessions (even other + SFTP sessions). However, raising an exception will usually cause the SFTP + session to abruptly end, so you will usually want to catch exceptions and + return an appropriate error code. + + All paths are in string form instead of unicode because not all SFTP + clients & servers obey the requirement that paths be encoded in UTF-8. + """ + + def __init__(self, server, *args, **kwargs): + """ + Create a new SFTPServerInterface object. This method does nothing by + default and is meant to be overridden by subclasses. + + :param .ServerInterface server: + the server object associated with this channel and SFTP subsystem + """ + super().__init__(*args, **kwargs) + + def session_started(self): + """ + The SFTP server session has just started. This method is meant to be + overridden to perform any necessary setup before handling callbacks + from SFTP operations. + """ + pass + + def session_ended(self): + """ + The SFTP server session has just ended, either cleanly or via an + exception. This method is meant to be overridden to perform any + necessary cleanup before this `.SFTPServerInterface` object is + destroyed. + """ + pass + + def open(self, path, flags, attr): + """ + Open a file on the server and create a handle for future operations + on that file. On success, a new object subclassed from `.SFTPHandle` + should be returned. This handle will be used for future operations + on the file (read, write, etc). On failure, an error code such as + ``SFTP_PERMISSION_DENIED`` should be returned. + + ``flags`` contains the requested mode for opening (read-only, + write-append, etc) as a bitset of flags from the ``os`` module: + + - ``os.O_RDONLY`` + - ``os.O_WRONLY`` + - ``os.O_RDWR`` + - ``os.O_APPEND`` + - ``os.O_CREAT`` + - ``os.O_TRUNC`` + - ``os.O_EXCL`` + + (One of ``os.O_RDONLY``, ``os.O_WRONLY``, or ``os.O_RDWR`` will always + be set.) + + The ``attr`` object contains requested attributes of the file if it + has to be created. Some or all attribute fields may be missing if + the client didn't specify them. + + .. note:: The SFTP protocol defines all files to be in "binary" mode. + There is no equivalent to Python's "text" mode. + + :param str path: + the requested path (relative or absolute) of the file to be opened. + :param int flags: + flags or'd together from the ``os`` module indicating the requested + mode for opening the file. + :param .SFTPAttributes attr: + requested attributes of the file if it is newly created. + :return: a new `.SFTPHandle` or error code. + """ + return SFTP_OP_UNSUPPORTED + + def list_folder(self, path): + """ + Return a list of files within a given folder. The ``path`` will use + posix notation (``"/"`` separates folder names) and may be an absolute + or relative path. + + The list of files is expected to be a list of `.SFTPAttributes` + objects, which are similar in structure to the objects returned by + ``os.stat``. In addition, each object should have its ``filename`` + field filled in, since this is important to a directory listing and + not normally present in ``os.stat`` results. The method + `.SFTPAttributes.from_stat` will usually do what you want. + + In case of an error, you should return one of the ``SFTP_*`` error + codes, such as ``SFTP_PERMISSION_DENIED``. + + :param str path: the requested path (relative or absolute) to be + listed. + :return: + a list of the files in the given folder, using `.SFTPAttributes` + objects. + + .. note:: + You should normalize the given ``path`` first (see the `os.path` + module) and check appropriate permissions before returning the list + of files. Be careful of malicious clients attempting to use + relative paths to escape restricted folders, if you're doing a + direct translation from the SFTP server path to your local + filesystem. + """ + return SFTP_OP_UNSUPPORTED + + def stat(self, path): + """ + Return an `.SFTPAttributes` object for a path on the server, or an + error code. If your server supports symbolic links (also known as + "aliases"), you should follow them. (`lstat` is the corresponding + call that doesn't follow symlinks/aliases.) + + :param str path: + the requested path (relative or absolute) to fetch file statistics + for. + :return: + an `.SFTPAttributes` object for the given file, or an SFTP error + code (like ``SFTP_PERMISSION_DENIED``). + """ + return SFTP_OP_UNSUPPORTED + + def lstat(self, path): + """ + Return an `.SFTPAttributes` object for a path on the server, or an + error code. If your server supports symbolic links (also known as + "aliases"), you should not follow them -- instead, you should + return data on the symlink or alias itself. (`stat` is the + corresponding call that follows symlinks/aliases.) + + :param str path: + the requested path (relative or absolute) to fetch file statistics + for. + :type path: str + :return: + an `.SFTPAttributes` object for the given file, or an SFTP error + code (like ``SFTP_PERMISSION_DENIED``). + """ + return SFTP_OP_UNSUPPORTED + + def remove(self, path): + """ + Delete a file, if possible. + + :param str path: + the requested path (relative or absolute) of the file to delete. + :return: an SFTP error code `int` like ``SFTP_OK``. + """ + return SFTP_OP_UNSUPPORTED + + def rename(self, oldpath, newpath): + """ + Rename (or move) a file. The SFTP specification implies that this + method can be used to move an existing file into a different folder, + and since there's no other (easy) way to move files via SFTP, it's + probably a good idea to implement "move" in this method too, even for + files that cross disk partition boundaries, if at all possible. + + .. note:: You should return an error if a file with the same name as + ``newpath`` already exists. (The rename operation should be + non-desctructive.) + + .. note:: + This method implements 'standard' SFTP ``RENAME`` behavior; those + seeking the OpenSSH "POSIX rename" extension behavior should use + `posix_rename`. + + :param str oldpath: + the requested path (relative or absolute) of the existing file. + :param str newpath: the requested new path of the file. + :return: an SFTP error code `int` like ``SFTP_OK``. + """ + return SFTP_OP_UNSUPPORTED + + def posix_rename(self, oldpath, newpath): + """ + Rename (or move) a file, following posix conventions. If newpath + already exists, it will be overwritten. + + :param str oldpath: + the requested path (relative or absolute) of the existing file. + :param str newpath: the requested new path of the file. + :return: an SFTP error code `int` like ``SFTP_OK``. + + :versionadded: 2.2 + """ + return SFTP_OP_UNSUPPORTED + + def mkdir(self, path, attr): + """ + Create a new directory with the given attributes. The ``attr`` + object may be considered a "hint" and ignored. + + The ``attr`` object will contain only those fields provided by the + client in its request, so you should use ``hasattr`` to check for + the presence of fields before using them. In some cases, the ``attr`` + object may be completely empty. + + :param str path: + requested path (relative or absolute) of the new folder. + :param .SFTPAttributes attr: requested attributes of the new folder. + :return: an SFTP error code `int` like ``SFTP_OK``. + """ + return SFTP_OP_UNSUPPORTED + + def rmdir(self, path): + """ + Remove a directory if it exists. The ``path`` should refer to an + existing, empty folder -- otherwise this method should return an + error. + + :param str path: + requested path (relative or absolute) of the folder to remove. + :return: an SFTP error code `int` like ``SFTP_OK``. + """ + return SFTP_OP_UNSUPPORTED + + def chattr(self, path, attr): + """ + Change the attributes of a file. The ``attr`` object will contain + only those fields provided by the client in its request, so you + should check for the presence of fields before using them. + + :param str path: + requested path (relative or absolute) of the file to change. + :param attr: + requested attributes to change on the file (an `.SFTPAttributes` + object) + :return: an error code `int` like ``SFTP_OK``. + """ + return SFTP_OP_UNSUPPORTED + + def canonicalize(self, path): + """ + Return the canonical form of a path on the server. For example, + if the server's home folder is ``/home/foo``, the path + ``"../betty"`` would be canonicalized to ``"/home/betty"``. Note + the obvious security issues: if you're serving files only from a + specific folder, you probably don't want this method to reveal path + names outside that folder. + + You may find the Python methods in ``os.path`` useful, especially + ``os.path.normpath`` and ``os.path.realpath``. + + The default implementation returns ``os.path.normpath('/' + path)``. + """ + if os.path.isabs(path): + out = os.path.normpath(path) + else: + out = os.path.normpath("/" + path) + if sys.platform == "win32": + # on windows, normalize backslashes to sftp/posix format + out = out.replace("\\", "/") + return out + + def readlink(self, path): + """ + Return the target of a symbolic link (or shortcut) on the server. + If the specified path doesn't refer to a symbolic link, an error + should be returned. + + :param str path: path (relative or absolute) of the symbolic link. + :return: + the target `str` path of the symbolic link, or an error code like + ``SFTP_NO_SUCH_FILE``. + """ + return SFTP_OP_UNSUPPORTED + + def symlink(self, target_path, path): + """ + Create a symbolic link on the server, as new pathname ``path``, + with ``target_path`` as the target of the link. + + :param str target_path: + path (relative or absolute) of the target for this new symbolic + link. + :param str path: + path (relative or absolute) of the symbolic link to create. + :return: an error code `int` like ``SFTP_OK``. + """ + return SFTP_OP_UNSUPPORTED diff --git a/venv/lib/python3.11/site-packages/paramiko/ssh_exception.py b/venv/lib/python3.11/site-packages/paramiko/ssh_exception.py new file mode 100644 index 0000000..2b68ebe --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/ssh_exception.py @@ -0,0 +1,250 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import socket + + +class SSHException(Exception): + """ + Exception raised by failures in SSH2 protocol negotiation or logic errors. + """ + + pass + + +class AuthenticationException(SSHException): + """ + Exception raised when authentication failed for some reason. It may be + possible to retry with different credentials. (Other classes specify more + specific reasons.) + + .. versionadded:: 1.6 + """ + + pass + + +class PasswordRequiredException(AuthenticationException): + """ + Exception raised when a password is needed to unlock a private key file. + """ + + pass + + +class BadAuthenticationType(AuthenticationException): + """ + Exception raised when an authentication type (like password) is used, but + the server isn't allowing that type. (It may only allow public-key, for + example.) + + .. versionadded:: 1.1 + """ + + allowed_types = [] + + # TODO 4.0: remove explanation kwarg + def __init__(self, explanation, types): + # TODO 4.0: remove this supercall unless it's actually required for + # pickling (after fixing pickling) + AuthenticationException.__init__(self, explanation, types) + self.explanation = explanation + self.allowed_types = types + + def __str__(self): + return "{}; allowed types: {!r}".format( + self.explanation, self.allowed_types + ) + + +class PartialAuthentication(AuthenticationException): + """ + An internal exception thrown in the case of partial authentication. + """ + + allowed_types = [] + + def __init__(self, types): + AuthenticationException.__init__(self, types) + self.allowed_types = types + + def __str__(self): + return "Partial authentication; allowed types: {!r}".format( + self.allowed_types + ) + + +# TODO 4.0: stop inheriting from SSHException, move to auth.py +class UnableToAuthenticate(AuthenticationException): + pass + + +class ChannelException(SSHException): + """ + Exception raised when an attempt to open a new `.Channel` fails. + + :param int code: the error code returned by the server + + .. versionadded:: 1.6 + """ + + def __init__(self, code, text): + SSHException.__init__(self, code, text) + self.code = code + self.text = text + + def __str__(self): + return "ChannelException({!r}, {!r})".format(self.code, self.text) + + +class BadHostKeyException(SSHException): + """ + The host key given by the SSH server did not match what we were expecting. + + :param str hostname: the hostname of the SSH server + :param PKey got_key: the host key presented by the server + :param PKey expected_key: the host key expected + + .. versionadded:: 1.6 + """ + + def __init__(self, hostname, got_key, expected_key): + SSHException.__init__(self, hostname, got_key, expected_key) + self.hostname = hostname + self.key = got_key + self.expected_key = expected_key + + def __str__(self): + msg = "Host key for server '{}' does not match: got '{}', expected '{}'" # noqa + return msg.format( + self.hostname, + self.key.get_base64(), + self.expected_key.get_base64(), + ) + + +class IncompatiblePeer(SSHException): + """ + A disagreement arose regarding an algorithm required for key exchange. + + .. versionadded:: 2.9 + """ + + # TODO 4.0: consider making this annotate w/ 1..N 'missing' algorithms, + # either just the first one that would halt kex, or even updating the + # Transport logic so we record /all/ that /could/ halt kex. + # TODO: update docstrings where this may end up raised so they are more + # specific. + pass + + +class ProxyCommandFailure(SSHException): + """ + The "ProxyCommand" found in the .ssh/config file returned an error. + + :param str command: The command line that is generating this exception. + :param str error: The error captured from the proxy command output. + """ + + def __init__(self, command, error): + SSHException.__init__(self, command, error) + self.command = command + self.error = error + + def __str__(self): + return 'ProxyCommand("{}") returned nonzero exit status: {}'.format( + self.command, self.error + ) + + +class NoValidConnectionsError(socket.error): + """ + Multiple connection attempts were made and no families succeeded. + + This exception class wraps multiple "real" underlying connection errors, + all of which represent failed connection attempts. Because these errors are + not guaranteed to all be of the same error type (i.e. different errno, + `socket.error` subclass, message, etc) we expose a single unified error + message and a ``None`` errno so that instances of this class match most + normal handling of `socket.error` objects. + + To see the wrapped exception objects, access the ``errors`` attribute. + ``errors`` is a dict whose keys are address tuples (e.g. ``('127.0.0.1', + 22)``) and whose values are the exception encountered trying to connect to + that address. + + It is implied/assumed that all the errors given to a single instance of + this class are from connecting to the same hostname + port (and thus that + the differences are in the resolution of the hostname - e.g. IPv4 vs v6). + + .. versionadded:: 1.16 + """ + + def __init__(self, errors): + """ + :param dict errors: + The errors dict to store, as described by class docstring. + """ + addrs = sorted(errors.keys()) + body = ", ".join([x[0] for x in addrs[:-1]]) + tail = addrs[-1][0] + if body: + msg = "Unable to connect to port {0} on {1} or {2}" + else: + msg = "Unable to connect to port {0} on {2}" + super().__init__( + None, msg.format(addrs[0][1], body, tail) # stand-in for errno + ) + self.errors = errors + + def __reduce__(self): + return (self.__class__, (self.errors,)) + + +class CouldNotCanonicalize(SSHException): + """ + Raised when hostname canonicalization fails & fallback is disabled. + + .. versionadded:: 2.7 + """ + + pass + + +class ConfigParseError(SSHException): + """ + A fatal error was encountered trying to parse SSH config data. + + Typically this means a config file violated the ``ssh_config`` + specification in a manner that requires exiting immediately, such as not + matching ``key = value`` syntax or misusing certain ``Match`` keywords. + + .. versionadded:: 2.7 + """ + + pass + + +class MessageOrderError(SSHException): + """ + Out-of-order protocol messages were received, violating "strict kex" mode. + + .. versionadded:: 3.4 + """ + + pass diff --git a/venv/lib/python3.11/site-packages/paramiko/ssh_gss.py b/venv/lib/python3.11/site-packages/paramiko/ssh_gss.py new file mode 100644 index 0000000..ee49c34 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/ssh_gss.py @@ -0,0 +1,778 @@ +# Copyright (C) 2013-2014 science + computing ag +# Author: Sebastian Deiss +# +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +""" +This module provides GSS-API / SSPI authentication as defined in :rfc:`4462`. + +.. note:: Credential delegation is not supported in server mode. + +.. seealso:: :doc:`/api/kex_gss` + +.. versionadded:: 1.15 +""" + +import struct +import os +import sys + + +#: A boolean constraint that indicates if GSS-API / SSPI is available. +GSS_AUTH_AVAILABLE = True + + +#: A tuple of the exception types used by the underlying GSSAPI implementation. +GSS_EXCEPTIONS = () + + +#: :var str _API: Constraint for the used API +_API = None + +try: + import gssapi + + if hasattr(gssapi, "__title__") and gssapi.__title__ == "python-gssapi": + # old, unmaintained python-gssapi package + _API = "MIT" # keep this for compatibility + GSS_EXCEPTIONS = (gssapi.GSSException,) + else: + _API = "PYTHON-GSSAPI-NEW" + GSS_EXCEPTIONS = ( + gssapi.exceptions.GeneralError, + gssapi.raw.misc.GSSError, + ) +except (ImportError, OSError): + try: + import pywintypes + import sspicon + import sspi + + _API = "SSPI" + GSS_EXCEPTIONS = (pywintypes.error,) + except ImportError: + GSS_AUTH_AVAILABLE = False + _API = None + +from paramiko.common import MSG_USERAUTH_REQUEST +from paramiko.ssh_exception import SSHException +from paramiko._version import __version_info__ + + +def GSSAuth(auth_method, gss_deleg_creds=True): + """ + Provide SSH2 GSS-API / SSPI authentication. + + :param str auth_method: The name of the SSH authentication mechanism + (gssapi-with-mic or gss-keyex) + :param bool gss_deleg_creds: Delegate client credentials or not. + We delegate credentials by default. + :return: Either an `._SSH_GSSAPI_OLD` or `._SSH_GSSAPI_NEW` (Unix) + object or an `_SSH_SSPI` (Windows) object + :rtype: object + + :raises: ``ImportError`` -- If no GSS-API / SSPI module could be imported. + + :see: `RFC 4462 `_ + :note: Check for the available API and return either an `._SSH_GSSAPI_OLD` + (MIT GSSAPI using python-gssapi package) object, an + `._SSH_GSSAPI_NEW` (MIT GSSAPI using gssapi package) object + or an `._SSH_SSPI` (MS SSPI) object. + If there is no supported API available, + ``None`` will be returned. + """ + if _API == "MIT": + return _SSH_GSSAPI_OLD(auth_method, gss_deleg_creds) + elif _API == "PYTHON-GSSAPI-NEW": + return _SSH_GSSAPI_NEW(auth_method, gss_deleg_creds) + elif _API == "SSPI" and os.name == "nt": + return _SSH_SSPI(auth_method, gss_deleg_creds) + else: + raise ImportError("Unable to import a GSS-API / SSPI module!") + + +class _SSH_GSSAuth: + """ + Contains the shared variables and methods of `._SSH_GSSAPI_OLD`, + `._SSH_GSSAPI_NEW` and `._SSH_SSPI`. + """ + + def __init__(self, auth_method, gss_deleg_creds): + """ + :param str auth_method: The name of the SSH authentication mechanism + (gssapi-with-mic or gss-keyex) + :param bool gss_deleg_creds: Delegate client credentials or not + """ + self._auth_method = auth_method + self._gss_deleg_creds = gss_deleg_creds + self._gss_host = None + self._username = None + self._session_id = None + self._service = "ssh-connection" + """ + OpenSSH supports Kerberos V5 mechanism only for GSS-API authentication, + so we also support the krb5 mechanism only. + """ + self._krb5_mech = "1.2.840.113554.1.2.2" + + # client mode + self._gss_ctxt = None + self._gss_ctxt_status = False + + # server mode + self._gss_srv_ctxt = None + self._gss_srv_ctxt_status = False + self.cc_file = None + + def set_service(self, service): + """ + This is just a setter to use a non default service. + I added this method, because RFC 4462 doesn't specify "ssh-connection" + as the only service value. + + :param str service: The desired SSH service + """ + if service.find("ssh-"): + self._service = service + + def set_username(self, username): + """ + Setter for C{username}. If GSS-API Key Exchange is performed, the + username is not set by C{ssh_init_sec_context}. + + :param str username: The name of the user who attempts to login + """ + self._username = username + + def ssh_gss_oids(self, mode="client"): + """ + This method returns a single OID, because we only support the + Kerberos V5 mechanism. + + :param str mode: Client for client mode and server for server mode + :return: A byte sequence containing the number of supported + OIDs, the length of the OID and the actual OID encoded with + DER + :note: In server mode we just return the OID length and the DER encoded + OID. + """ + from pyasn1.type.univ import ObjectIdentifier + from pyasn1.codec.der import encoder + + OIDs = self._make_uint32(1) + krb5_OID = encoder.encode(ObjectIdentifier(self._krb5_mech)) + OID_len = self._make_uint32(len(krb5_OID)) + if mode == "server": + return OID_len + krb5_OID + return OIDs + OID_len + krb5_OID + + def ssh_check_mech(self, desired_mech): + """ + Check if the given OID is the Kerberos V5 OID (server mode). + + :param str desired_mech: The desired GSS-API mechanism of the client + :return: ``True`` if the given OID is supported, otherwise C{False} + """ + from pyasn1.codec.der import decoder + + mech, __ = decoder.decode(desired_mech) + if mech.__str__() != self._krb5_mech: + return False + return True + + # Internals + # ------------------------------------------------------------------------- + def _make_uint32(self, integer): + """ + Create a 32 bit unsigned integer (The byte sequence of an integer). + + :param int integer: The integer value to convert + :return: The byte sequence of an 32 bit integer + """ + return struct.pack("!I", integer) + + def _ssh_build_mic(self, session_id, username, service, auth_method): + """ + Create the SSH2 MIC filed for gssapi-with-mic. + + :param str session_id: The SSH session ID + :param str username: The name of the user who attempts to login + :param str service: The requested SSH service + :param str auth_method: The requested SSH authentication mechanism + :return: The MIC as defined in RFC 4462. The contents of the + MIC field are: + string session_identifier, + byte SSH_MSG_USERAUTH_REQUEST, + string user-name, + string service (ssh-connection), + string authentication-method + (gssapi-with-mic or gssapi-keyex) + """ + mic = self._make_uint32(len(session_id)) + mic += session_id + mic += struct.pack("B", MSG_USERAUTH_REQUEST) + mic += self._make_uint32(len(username)) + mic += username.encode() + mic += self._make_uint32(len(service)) + mic += service.encode() + mic += self._make_uint32(len(auth_method)) + mic += auth_method.encode() + return mic + + +class _SSH_GSSAPI_OLD(_SSH_GSSAuth): + """ + Implementation of the GSS-API MIT Kerberos Authentication for SSH2, + using the older (unmaintained) python-gssapi package. + + :see: `.GSSAuth` + """ + + def __init__(self, auth_method, gss_deleg_creds): + """ + :param str auth_method: The name of the SSH authentication mechanism + (gssapi-with-mic or gss-keyex) + :param bool gss_deleg_creds: Delegate client credentials or not + """ + _SSH_GSSAuth.__init__(self, auth_method, gss_deleg_creds) + + if self._gss_deleg_creds: + self._gss_flags = ( + gssapi.C_PROT_READY_FLAG, + gssapi.C_INTEG_FLAG, + gssapi.C_MUTUAL_FLAG, + gssapi.C_DELEG_FLAG, + ) + else: + self._gss_flags = ( + gssapi.C_PROT_READY_FLAG, + gssapi.C_INTEG_FLAG, + gssapi.C_MUTUAL_FLAG, + ) + + def ssh_init_sec_context( + self, target, desired_mech=None, username=None, recv_token=None + ): + """ + Initialize a GSS-API context. + + :param str username: The name of the user who attempts to login + :param str target: The hostname of the target to connect to + :param str desired_mech: The negotiated GSS-API mechanism + ("pseudo negotiated" mechanism, because we + support just the krb5 mechanism :-)) + :param str recv_token: The GSS-API token received from the Server + :raises: + `.SSHException` -- Is raised if the desired mechanism of the client + is not supported + :return: A ``String`` if the GSS-API has returned a token or + ``None`` if no token was returned + """ + from pyasn1.codec.der import decoder + + self._username = username + self._gss_host = target + targ_name = gssapi.Name( + "host@" + self._gss_host, gssapi.C_NT_HOSTBASED_SERVICE + ) + ctx = gssapi.Context() + ctx.flags = self._gss_flags + if desired_mech is None: + krb5_mech = gssapi.OID.mech_from_string(self._krb5_mech) + else: + mech, __ = decoder.decode(desired_mech) + if mech.__str__() != self._krb5_mech: + raise SSHException("Unsupported mechanism OID.") + else: + krb5_mech = gssapi.OID.mech_from_string(self._krb5_mech) + token = None + try: + if recv_token is None: + self._gss_ctxt = gssapi.InitContext( + peer_name=targ_name, + mech_type=krb5_mech, + req_flags=ctx.flags, + ) + token = self._gss_ctxt.step(token) + else: + token = self._gss_ctxt.step(recv_token) + except gssapi.GSSException: + message = "{} Target: {}".format(sys.exc_info()[1], self._gss_host) + raise gssapi.GSSException(message) + self._gss_ctxt_status = self._gss_ctxt.established + return token + + def ssh_get_mic(self, session_id, gss_kex=False): + """ + Create the MIC token for a SSH2 message. + + :param str session_id: The SSH session ID + :param bool gss_kex: Generate the MIC for GSS-API Key Exchange or not + :return: gssapi-with-mic: + Returns the MIC token from GSS-API for the message we created + with ``_ssh_build_mic``. + gssapi-keyex: + Returns the MIC token from GSS-API with the SSH session ID as + message. + """ + self._session_id = session_id + if not gss_kex: + mic_field = self._ssh_build_mic( + self._session_id, + self._username, + self._service, + self._auth_method, + ) + mic_token = self._gss_ctxt.get_mic(mic_field) + else: + # for key exchange with gssapi-keyex + mic_token = self._gss_srv_ctxt.get_mic(self._session_id) + return mic_token + + def ssh_accept_sec_context(self, hostname, recv_token, username=None): + """ + Accept a GSS-API context (server mode). + + :param str hostname: The servers hostname + :param str username: The name of the user who attempts to login + :param str recv_token: The GSS-API Token received from the server, + if it's not the initial call. + :return: A ``String`` if the GSS-API has returned a token or ``None`` + if no token was returned + """ + # hostname and username are not required for GSSAPI, but for SSPI + self._gss_host = hostname + self._username = username + if self._gss_srv_ctxt is None: + self._gss_srv_ctxt = gssapi.AcceptContext() + token = self._gss_srv_ctxt.step(recv_token) + self._gss_srv_ctxt_status = self._gss_srv_ctxt.established + return token + + def ssh_check_mic(self, mic_token, session_id, username=None): + """ + Verify the MIC token for a SSH2 message. + + :param str mic_token: The MIC token received from the client + :param str session_id: The SSH session ID + :param str username: The name of the user who attempts to login + :return: None if the MIC check was successful + :raises: ``gssapi.GSSException`` -- if the MIC check failed + """ + self._session_id = session_id + self._username = username + if self._username is not None: + # server mode + mic_field = self._ssh_build_mic( + self._session_id, + self._username, + self._service, + self._auth_method, + ) + self._gss_srv_ctxt.verify_mic(mic_field, mic_token) + else: + # for key exchange with gssapi-keyex + # client mode + self._gss_ctxt.verify_mic(self._session_id, mic_token) + + @property + def credentials_delegated(self): + """ + Checks if credentials are delegated (server mode). + + :return: ``True`` if credentials are delegated, otherwise ``False`` + """ + if self._gss_srv_ctxt.delegated_cred is not None: + return True + return False + + def save_client_creds(self, client_token): + """ + Save the Client token in a file. This is used by the SSH server + to store the client credentials if credentials are delegated + (server mode). + + :param str client_token: The GSS-API token received form the client + :raises: + ``NotImplementedError`` -- Credential delegation is currently not + supported in server mode + """ + raise NotImplementedError + + +if __version_info__ < (2, 5): + # provide the old name for strict backward compatibility + _SSH_GSSAPI = _SSH_GSSAPI_OLD + + +class _SSH_GSSAPI_NEW(_SSH_GSSAuth): + """ + Implementation of the GSS-API MIT Kerberos Authentication for SSH2, + using the newer, currently maintained gssapi package. + + :see: `.GSSAuth` + """ + + def __init__(self, auth_method, gss_deleg_creds): + """ + :param str auth_method: The name of the SSH authentication mechanism + (gssapi-with-mic or gss-keyex) + :param bool gss_deleg_creds: Delegate client credentials or not + """ + _SSH_GSSAuth.__init__(self, auth_method, gss_deleg_creds) + + if self._gss_deleg_creds: + self._gss_flags = ( + gssapi.RequirementFlag.protection_ready, + gssapi.RequirementFlag.integrity, + gssapi.RequirementFlag.mutual_authentication, + gssapi.RequirementFlag.delegate_to_peer, + ) + else: + self._gss_flags = ( + gssapi.RequirementFlag.protection_ready, + gssapi.RequirementFlag.integrity, + gssapi.RequirementFlag.mutual_authentication, + ) + + def ssh_init_sec_context( + self, target, desired_mech=None, username=None, recv_token=None + ): + """ + Initialize a GSS-API context. + + :param str username: The name of the user who attempts to login + :param str target: The hostname of the target to connect to + :param str desired_mech: The negotiated GSS-API mechanism + ("pseudo negotiated" mechanism, because we + support just the krb5 mechanism :-)) + :param str recv_token: The GSS-API token received from the Server + :raises: `.SSHException` -- Is raised if the desired mechanism of the + client is not supported + :raises: ``gssapi.exceptions.GSSError`` if there is an error signaled + by the GSS-API implementation + :return: A ``String`` if the GSS-API has returned a token or ``None`` + if no token was returned + """ + from pyasn1.codec.der import decoder + + self._username = username + self._gss_host = target + targ_name = gssapi.Name( + "host@" + self._gss_host, + name_type=gssapi.NameType.hostbased_service, + ) + if desired_mech is not None: + mech, __ = decoder.decode(desired_mech) + if mech.__str__() != self._krb5_mech: + raise SSHException("Unsupported mechanism OID.") + krb5_mech = gssapi.MechType.kerberos + token = None + if recv_token is None: + self._gss_ctxt = gssapi.SecurityContext( + name=targ_name, + flags=self._gss_flags, + mech=krb5_mech, + usage="initiate", + ) + token = self._gss_ctxt.step(token) + else: + token = self._gss_ctxt.step(recv_token) + self._gss_ctxt_status = self._gss_ctxt.complete + return token + + def ssh_get_mic(self, session_id, gss_kex=False): + """ + Create the MIC token for a SSH2 message. + + :param str session_id: The SSH session ID + :param bool gss_kex: Generate the MIC for GSS-API Key Exchange or not + :return: gssapi-with-mic: + Returns the MIC token from GSS-API for the message we created + with ``_ssh_build_mic``. + gssapi-keyex: + Returns the MIC token from GSS-API with the SSH session ID as + message. + :rtype: str + """ + self._session_id = session_id + if not gss_kex: + mic_field = self._ssh_build_mic( + self._session_id, + self._username, + self._service, + self._auth_method, + ) + mic_token = self._gss_ctxt.get_signature(mic_field) + else: + # for key exchange with gssapi-keyex + mic_token = self._gss_srv_ctxt.get_signature(self._session_id) + return mic_token + + def ssh_accept_sec_context(self, hostname, recv_token, username=None): + """ + Accept a GSS-API context (server mode). + + :param str hostname: The servers hostname + :param str username: The name of the user who attempts to login + :param str recv_token: The GSS-API Token received from the server, + if it's not the initial call. + :return: A ``String`` if the GSS-API has returned a token or ``None`` + if no token was returned + """ + # hostname and username are not required for GSSAPI, but for SSPI + self._gss_host = hostname + self._username = username + if self._gss_srv_ctxt is None: + self._gss_srv_ctxt = gssapi.SecurityContext(usage="accept") + token = self._gss_srv_ctxt.step(recv_token) + self._gss_srv_ctxt_status = self._gss_srv_ctxt.complete + return token + + def ssh_check_mic(self, mic_token, session_id, username=None): + """ + Verify the MIC token for a SSH2 message. + + :param str mic_token: The MIC token received from the client + :param str session_id: The SSH session ID + :param str username: The name of the user who attempts to login + :return: None if the MIC check was successful + :raises: ``gssapi.exceptions.GSSError`` -- if the MIC check failed + """ + self._session_id = session_id + self._username = username + if self._username is not None: + # server mode + mic_field = self._ssh_build_mic( + self._session_id, + self._username, + self._service, + self._auth_method, + ) + self._gss_srv_ctxt.verify_signature(mic_field, mic_token) + else: + # for key exchange with gssapi-keyex + # client mode + self._gss_ctxt.verify_signature(self._session_id, mic_token) + + @property + def credentials_delegated(self): + """ + Checks if credentials are delegated (server mode). + + :return: ``True`` if credentials are delegated, otherwise ``False`` + :rtype: bool + """ + if self._gss_srv_ctxt.delegated_creds is not None: + return True + return False + + def save_client_creds(self, client_token): + """ + Save the Client token in a file. This is used by the SSH server + to store the client credentials if credentials are delegated + (server mode). + + :param str client_token: The GSS-API token received form the client + :raises: ``NotImplementedError`` -- Credential delegation is currently + not supported in server mode + """ + raise NotImplementedError + + +class _SSH_SSPI(_SSH_GSSAuth): + """ + Implementation of the Microsoft SSPI Kerberos Authentication for SSH2. + + :see: `.GSSAuth` + """ + + def __init__(self, auth_method, gss_deleg_creds): + """ + :param str auth_method: The name of the SSH authentication mechanism + (gssapi-with-mic or gss-keyex) + :param bool gss_deleg_creds: Delegate client credentials or not + """ + _SSH_GSSAuth.__init__(self, auth_method, gss_deleg_creds) + + if self._gss_deleg_creds: + self._gss_flags = ( + sspicon.ISC_REQ_INTEGRITY + | sspicon.ISC_REQ_MUTUAL_AUTH + | sspicon.ISC_REQ_DELEGATE + ) + else: + self._gss_flags = ( + sspicon.ISC_REQ_INTEGRITY | sspicon.ISC_REQ_MUTUAL_AUTH + ) + + def ssh_init_sec_context( + self, target, desired_mech=None, username=None, recv_token=None + ): + """ + Initialize a SSPI context. + + :param str username: The name of the user who attempts to login + :param str target: The FQDN of the target to connect to + :param str desired_mech: The negotiated SSPI mechanism + ("pseudo negotiated" mechanism, because we + support just the krb5 mechanism :-)) + :param recv_token: The SSPI token received from the Server + :raises: + `.SSHException` -- Is raised if the desired mechanism of the client + is not supported + :return: A ``String`` if the SSPI has returned a token or ``None`` if + no token was returned + """ + from pyasn1.codec.der import decoder + + self._username = username + self._gss_host = target + error = 0 + targ_name = "host/" + self._gss_host + if desired_mech is not None: + mech, __ = decoder.decode(desired_mech) + if mech.__str__() != self._krb5_mech: + raise SSHException("Unsupported mechanism OID.") + try: + if recv_token is None: + self._gss_ctxt = sspi.ClientAuth( + "Kerberos", scflags=self._gss_flags, targetspn=targ_name + ) + error, token = self._gss_ctxt.authorize(recv_token) + token = token[0].Buffer + except pywintypes.error as e: + e.strerror += ", Target: {}".format(self._gss_host) + raise + + if error == 0: + """ + if the status is GSS_COMPLETE (error = 0) the context is fully + established an we can set _gss_ctxt_status to True. + """ + self._gss_ctxt_status = True + token = None + """ + You won't get another token if the context is fully established, + so i set token to None instead of "" + """ + return token + + def ssh_get_mic(self, session_id, gss_kex=False): + """ + Create the MIC token for a SSH2 message. + + :param str session_id: The SSH session ID + :param bool gss_kex: Generate the MIC for Key Exchange with SSPI or not + :return: gssapi-with-mic: + Returns the MIC token from SSPI for the message we created + with ``_ssh_build_mic``. + gssapi-keyex: + Returns the MIC token from SSPI with the SSH session ID as + message. + """ + self._session_id = session_id + if not gss_kex: + mic_field = self._ssh_build_mic( + self._session_id, + self._username, + self._service, + self._auth_method, + ) + mic_token = self._gss_ctxt.sign(mic_field) + else: + # for key exchange with gssapi-keyex + mic_token = self._gss_srv_ctxt.sign(self._session_id) + return mic_token + + def ssh_accept_sec_context(self, hostname, username, recv_token): + """ + Accept a SSPI context (server mode). + + :param str hostname: The servers FQDN + :param str username: The name of the user who attempts to login + :param str recv_token: The SSPI Token received from the server, + if it's not the initial call. + :return: A ``String`` if the SSPI has returned a token or ``None`` if + no token was returned + """ + self._gss_host = hostname + self._username = username + targ_name = "host/" + self._gss_host + self._gss_srv_ctxt = sspi.ServerAuth("Kerberos", spn=targ_name) + error, token = self._gss_srv_ctxt.authorize(recv_token) + token = token[0].Buffer + if error == 0: + self._gss_srv_ctxt_status = True + token = None + return token + + def ssh_check_mic(self, mic_token, session_id, username=None): + """ + Verify the MIC token for a SSH2 message. + + :param str mic_token: The MIC token received from the client + :param str session_id: The SSH session ID + :param str username: The name of the user who attempts to login + :return: None if the MIC check was successful + :raises: ``sspi.error`` -- if the MIC check failed + """ + self._session_id = session_id + self._username = username + if username is not None: + # server mode + mic_field = self._ssh_build_mic( + self._session_id, + self._username, + self._service, + self._auth_method, + ) + # Verifies data and its signature. If verification fails, an + # sspi.error will be raised. + self._gss_srv_ctxt.verify(mic_field, mic_token) + else: + # for key exchange with gssapi-keyex + # client mode + # Verifies data and its signature. If verification fails, an + # sspi.error will be raised. + self._gss_ctxt.verify(self._session_id, mic_token) + + @property + def credentials_delegated(self): + """ + Checks if credentials are delegated (server mode). + + :return: ``True`` if credentials are delegated, otherwise ``False`` + """ + return self._gss_flags & sspicon.ISC_REQ_DELEGATE and ( + self._gss_srv_ctxt_status or self._gss_flags + ) + + def save_client_creds(self, client_token): + """ + Save the Client token in a file. This is used by the SSH server + to store the client credentails if credentials are delegated + (server mode). + + :param str client_token: The SSPI token received form the client + :raises: + ``NotImplementedError`` -- Credential delegation is currently not + supported in server mode + """ + raise NotImplementedError diff --git a/venv/lib/python3.11/site-packages/paramiko/transport.py b/venv/lib/python3.11/site-packages/paramiko/transport.py new file mode 100644 index 0000000..f0fcb97 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/transport.py @@ -0,0 +1,3462 @@ +# Copyright (C) 2003-2007 Robey Pointer +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Core protocol implementation +""" + +import os +import socket +import sys +import threading +import time +import weakref +from hashlib import md5, sha1, sha256, sha512 + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.ciphers import ( + algorithms, + Cipher, + modes, + aead, +) + +import paramiko +from paramiko import util +from paramiko.auth_handler import AuthHandler, AuthOnlyHandler +from paramiko.ssh_gss import GSSAuth +from paramiko.channel import Channel +from paramiko.common import ( + xffffffff, + cMSG_CHANNEL_OPEN, + cMSG_IGNORE, + cMSG_GLOBAL_REQUEST, + DEBUG, + MSG_KEXINIT, + MSG_IGNORE, + MSG_DISCONNECT, + MSG_DEBUG, + ERROR, + WARNING, + cMSG_UNIMPLEMENTED, + INFO, + cMSG_KEXINIT, + cMSG_NEWKEYS, + MSG_NEWKEYS, + cMSG_REQUEST_SUCCESS, + cMSG_REQUEST_FAILURE, + CONNECTION_FAILED_CODE, + OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED, + OPEN_SUCCEEDED, + cMSG_CHANNEL_OPEN_FAILURE, + cMSG_CHANNEL_OPEN_SUCCESS, + MSG_GLOBAL_REQUEST, + MSG_REQUEST_SUCCESS, + MSG_REQUEST_FAILURE, + cMSG_SERVICE_REQUEST, + MSG_SERVICE_ACCEPT, + MSG_CHANNEL_OPEN_SUCCESS, + MSG_CHANNEL_OPEN_FAILURE, + MSG_CHANNEL_OPEN, + MSG_CHANNEL_SUCCESS, + MSG_CHANNEL_FAILURE, + MSG_CHANNEL_DATA, + MSG_CHANNEL_EXTENDED_DATA, + MSG_CHANNEL_WINDOW_ADJUST, + MSG_CHANNEL_REQUEST, + MSG_CHANNEL_EOF, + MSG_CHANNEL_CLOSE, + MIN_WINDOW_SIZE, + MIN_PACKET_SIZE, + MAX_WINDOW_SIZE, + DEFAULT_WINDOW_SIZE, + DEFAULT_MAX_PACKET_SIZE, + HIGHEST_USERAUTH_MESSAGE_ID, + MSG_UNIMPLEMENTED, + MSG_NAMES, + MSG_EXT_INFO, + cMSG_EXT_INFO, + byte_ord, +) +from paramiko.compress import ZlibCompressor, ZlibDecompressor +from paramiko.dsskey import DSSKey +from paramiko.ed25519key import Ed25519Key +from paramiko.kex_curve25519 import KexCurve25519 +from paramiko.kex_gex import KexGex, KexGexSHA256 +from paramiko.kex_group1 import KexGroup1 +from paramiko.kex_group14 import KexGroup14, KexGroup14SHA256 +from paramiko.kex_group16 import KexGroup16SHA512 +from paramiko.kex_ecdh_nist import KexNistp256, KexNistp384, KexNistp521 +from paramiko.kex_gss import KexGSSGex, KexGSSGroup1, KexGSSGroup14 +from paramiko.message import Message +from paramiko.packet import Packetizer, NeedRekeyException +from paramiko.primes import ModulusPack +from paramiko.rsakey import RSAKey +from paramiko.ecdsakey import ECDSAKey +from paramiko.server import ServerInterface +from paramiko.sftp_client import SFTPClient +from paramiko.ssh_exception import ( + BadAuthenticationType, + ChannelException, + IncompatiblePeer, + MessageOrderError, + ProxyCommandFailure, + SSHException, +) +from paramiko.util import ( + ClosingContextManager, + clamp_value, + b, +) + + +# TripleDES is moving from `cryptography.hazmat.primitives.ciphers.algorithms` +# in cryptography>=43.0.0 to `cryptography.hazmat.decrepit.ciphers.algorithms` +# It will be removed from `cryptography.hazmat.primitives.ciphers.algorithms` +# in cryptography==48.0.0. +# +# Source References: +# - https://github.com/pyca/cryptography/commit/722a6393e61b3ac +# - https://github.com/pyca/cryptography/pull/11407/files +try: + from cryptography.hazmat.decrepit.ciphers.algorithms import TripleDES +except ImportError: + from cryptography.hazmat.primitives.ciphers.algorithms import TripleDES + + +# for thread cleanup +_active_threads = [] + + +def _join_lingering_threads(): + for thr in _active_threads: + thr.stop_thread() + + +import atexit + +atexit.register(_join_lingering_threads) + + +class Transport(threading.Thread, ClosingContextManager): + """ + An SSH Transport attaches to a stream (usually a socket), negotiates an + encrypted session, authenticates, and then creates stream tunnels, called + `channels <.Channel>`, across the session. Multiple channels can be + multiplexed across a single session (and often are, in the case of port + forwardings). + + Instances of this class may be used as context managers. + """ + + _ENCRYPT = object() + _DECRYPT = object() + + _PROTO_ID = "2.0" + _CLIENT_ID = "paramiko_{}".format(paramiko.__version__) + + # These tuples of algorithm identifiers are in preference order; do not + # reorder without reason! + # NOTE: if you need to modify these, we suggest leveraging the + # `disabled_algorithms` constructor argument (also available in SSHClient) + # instead of monkeypatching or subclassing. + _preferred_ciphers = ( + "aes128-ctr", + "aes192-ctr", + "aes256-ctr", + "aes128-cbc", + "aes192-cbc", + "aes256-cbc", + "3des-cbc", + "aes128-gcm@openssh.com", + "aes256-gcm@openssh.com", + ) + _preferred_macs = ( + "hmac-sha2-256", + "hmac-sha2-512", + "hmac-sha2-256-etm@openssh.com", + "hmac-sha2-512-etm@openssh.com", + "hmac-sha1", + "hmac-md5", + "hmac-sha1-96", + "hmac-md5-96", + ) + # ~= HostKeyAlgorithms in OpenSSH land + _preferred_keys = ( + "ssh-ed25519", + "ecdsa-sha2-nistp256", + "ecdsa-sha2-nistp384", + "ecdsa-sha2-nistp521", + "rsa-sha2-512", + "rsa-sha2-256", + "ssh-rsa", + "ssh-dss", + ) + # ~= PubKeyAcceptedAlgorithms + _preferred_pubkeys = ( + "ssh-ed25519", + "ecdsa-sha2-nistp256", + "ecdsa-sha2-nistp384", + "ecdsa-sha2-nistp521", + "rsa-sha2-512", + "rsa-sha2-256", + "ssh-rsa", + "ssh-dss", + ) + _preferred_kex = ( + "ecdh-sha2-nistp256", + "ecdh-sha2-nistp384", + "ecdh-sha2-nistp521", + "diffie-hellman-group16-sha512", + "diffie-hellman-group-exchange-sha256", + "diffie-hellman-group14-sha256", + "diffie-hellman-group-exchange-sha1", + "diffie-hellman-group14-sha1", + "diffie-hellman-group1-sha1", + ) + if KexCurve25519.is_available(): + _preferred_kex = ("curve25519-sha256@libssh.org",) + _preferred_kex + _preferred_gsskex = ( + "gss-gex-sha1-toWM5Slw5Ew8Mqkay+al2g==", + "gss-group14-sha1-toWM5Slw5Ew8Mqkay+al2g==", + "gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==", + ) + _preferred_compression = ("none",) + + _cipher_info = { + "aes128-ctr": { + "class": algorithms.AES, + "mode": modes.CTR, + "block-size": 16, + "key-size": 16, + }, + "aes192-ctr": { + "class": algorithms.AES, + "mode": modes.CTR, + "block-size": 16, + "key-size": 24, + }, + "aes256-ctr": { + "class": algorithms.AES, + "mode": modes.CTR, + "block-size": 16, + "key-size": 32, + }, + "aes128-cbc": { + "class": algorithms.AES, + "mode": modes.CBC, + "block-size": 16, + "key-size": 16, + }, + "aes192-cbc": { + "class": algorithms.AES, + "mode": modes.CBC, + "block-size": 16, + "key-size": 24, + }, + "aes256-cbc": { + "class": algorithms.AES, + "mode": modes.CBC, + "block-size": 16, + "key-size": 32, + }, + "3des-cbc": { + "class": TripleDES, + "mode": modes.CBC, + "block-size": 8, + "key-size": 24, + }, + "aes128-gcm@openssh.com": { + "class": aead.AESGCM, + "block-size": 16, + "iv-size": 12, + "key-size": 16, + "is_aead": True, + }, + "aes256-gcm@openssh.com": { + "class": aead.AESGCM, + "block-size": 16, + "iv-size": 12, + "key-size": 32, + "is_aead": True, + }, + } + + _mac_info = { + "hmac-sha1": {"class": sha1, "size": 20}, + "hmac-sha1-96": {"class": sha1, "size": 12}, + "hmac-sha2-256": {"class": sha256, "size": 32}, + "hmac-sha2-256-etm@openssh.com": {"class": sha256, "size": 32}, + "hmac-sha2-512": {"class": sha512, "size": 64}, + "hmac-sha2-512-etm@openssh.com": {"class": sha512, "size": 64}, + "hmac-md5": {"class": md5, "size": 16}, + "hmac-md5-96": {"class": md5, "size": 12}, + } + + _key_info = { + # TODO: at some point we will want to drop this as it's no longer + # considered secure due to using SHA-1 for signatures. OpenSSH 8.8 no + # longer supports it. Question becomes at what point do we want to + # prevent users with older setups from using this? + "ssh-rsa": RSAKey, + "ssh-rsa-cert-v01@openssh.com": RSAKey, + "rsa-sha2-256": RSAKey, + "rsa-sha2-256-cert-v01@openssh.com": RSAKey, + "rsa-sha2-512": RSAKey, + "rsa-sha2-512-cert-v01@openssh.com": RSAKey, + "ssh-dss": DSSKey, + "ssh-dss-cert-v01@openssh.com": DSSKey, + "ecdsa-sha2-nistp256": ECDSAKey, + "ecdsa-sha2-nistp256-cert-v01@openssh.com": ECDSAKey, + "ecdsa-sha2-nistp384": ECDSAKey, + "ecdsa-sha2-nistp384-cert-v01@openssh.com": ECDSAKey, + "ecdsa-sha2-nistp521": ECDSAKey, + "ecdsa-sha2-nistp521-cert-v01@openssh.com": ECDSAKey, + "ssh-ed25519": Ed25519Key, + "ssh-ed25519-cert-v01@openssh.com": Ed25519Key, + } + + _kex_info = { + "diffie-hellman-group1-sha1": KexGroup1, + "diffie-hellman-group14-sha1": KexGroup14, + "diffie-hellman-group-exchange-sha1": KexGex, + "diffie-hellman-group-exchange-sha256": KexGexSHA256, + "diffie-hellman-group14-sha256": KexGroup14SHA256, + "diffie-hellman-group16-sha512": KexGroup16SHA512, + "gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==": KexGSSGroup1, + "gss-group14-sha1-toWM5Slw5Ew8Mqkay+al2g==": KexGSSGroup14, + "gss-gex-sha1-toWM5Slw5Ew8Mqkay+al2g==": KexGSSGex, + "ecdh-sha2-nistp256": KexNistp256, + "ecdh-sha2-nistp384": KexNistp384, + "ecdh-sha2-nistp521": KexNistp521, + } + if KexCurve25519.is_available(): + _kex_info["curve25519-sha256@libssh.org"] = KexCurve25519 + + _compression_info = { + # zlib@openssh.com is just zlib, but only turned on after a successful + # authentication. openssh servers may only offer this type because + # they've had troubles with security holes in zlib in the past. + "zlib@openssh.com": (ZlibCompressor, ZlibDecompressor), + "zlib": (ZlibCompressor, ZlibDecompressor), + "none": (None, None), + } + + _modulus_pack = None + _active_check_timeout = 0.1 + + def __init__( + self, + sock, + default_window_size=DEFAULT_WINDOW_SIZE, + default_max_packet_size=DEFAULT_MAX_PACKET_SIZE, + gss_kex=False, + gss_deleg_creds=True, + disabled_algorithms=None, + server_sig_algs=True, + strict_kex=True, + packetizer_class=None, + ): + """ + Create a new SSH session over an existing socket, or socket-like + object. This only creates the `.Transport` object; it doesn't begin + the SSH session yet. Use `connect` or `start_client` to begin a client + session, or `start_server` to begin a server session. + + If the object is not actually a socket, it must have the following + methods: + + - ``send(bytes)``: Writes from 1 to ``len(bytes)`` bytes, and returns + an int representing the number of bytes written. Returns + 0 or raises ``EOFError`` if the stream has been closed. + - ``recv(int)``: Reads from 1 to ``int`` bytes and returns them as a + string. Returns 0 or raises ``EOFError`` if the stream has been + closed. + - ``close()``: Closes the socket. + - ``settimeout(n)``: Sets a (float) timeout on I/O operations. + + For ease of use, you may also pass in an address (as a tuple) or a host + string as the ``sock`` argument. (A host string is a hostname with an + optional port (separated by ``":"``) which will be converted into a + tuple of ``(hostname, port)``.) A socket will be connected to this + address and used for communication. Exceptions from the ``socket`` + call may be thrown in this case. + + .. note:: + Modifying the the window and packet sizes might have adverse + effects on your channels created from this transport. The default + values are the same as in the OpenSSH code base and have been + battle tested. + + :param socket sock: + a socket or socket-like object to create the session over. + :param int default_window_size: + sets the default window size on the transport. (defaults to + 2097152) + :param int default_max_packet_size: + sets the default max packet size on the transport. (defaults to + 32768) + :param bool gss_kex: + Whether to enable GSSAPI key exchange when GSSAPI is in play. + Default: ``False``. + :param bool gss_deleg_creds: + Whether to enable GSSAPI credential delegation when GSSAPI is in + play. Default: ``True``. + :param dict disabled_algorithms: + If given, must be a dictionary mapping algorithm type to an + iterable of algorithm identifiers, which will be disabled for the + lifetime of the transport. + + Keys should match the last word in the class' builtin algorithm + tuple attributes, such as ``"ciphers"`` to disable names within + ``_preferred_ciphers``; or ``"kex"`` to disable something defined + inside ``_preferred_kex``. Values should exactly match members of + the matching attribute. + + For example, if you need to disable + ``diffie-hellman-group16-sha512`` key exchange (perhaps because + your code talks to a server which implements it differently from + Paramiko), specify ``disabled_algorithms={"kex": + ["diffie-hellman-group16-sha512"]}``. + :param bool server_sig_algs: + Whether to send an extra message to compatible clients, in server + mode, with a list of supported pubkey algorithms. Default: + ``True``. + :param bool strict_kex: + Whether to advertise (and implement, if client also advertises + support for) a "strict kex" mode for safer handshaking. Default: + ``True``. + :param packetizer_class: + Which class to use for instantiating the internal packet handler. + Default: ``None`` (i.e.: use `Packetizer` as normal). + + .. versionchanged:: 1.15 + Added the ``default_window_size`` and ``default_max_packet_size`` + arguments. + .. versionchanged:: 1.15 + Added the ``gss_kex`` and ``gss_deleg_creds`` kwargs. + .. versionchanged:: 2.6 + Added the ``disabled_algorithms`` kwarg. + .. versionchanged:: 2.9 + Added the ``server_sig_algs`` kwarg. + .. versionchanged:: 3.4 + Added the ``strict_kex`` kwarg. + .. versionchanged:: 3.4 + Added the ``packetizer_class`` kwarg. + """ + self.active = False + self.hostname = None + self.server_extensions = {} + self.advertise_strict_kex = strict_kex + self.agreed_on_strict_kex = False + + # TODO: these two overrides on sock's type should go away sometime, too + # many ways to do it! + if isinstance(sock, str): + # convert "host:port" into (host, port) + hl = sock.split(":", 1) + self.hostname = hl[0] + if len(hl) == 1: + sock = (hl[0], 22) + else: + sock = (hl[0], int(hl[1])) + if type(sock) is tuple: + # connect to the given (host, port) + hostname, port = sock + self.hostname = hostname + reason = "No suitable address family" + addrinfos = socket.getaddrinfo( + hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM + ) + for family, socktype, proto, canonname, sockaddr in addrinfos: + if socktype == socket.SOCK_STREAM: + af = family + # addr = sockaddr + sock = socket.socket(af, socket.SOCK_STREAM) + try: + sock.connect((hostname, port)) + except socket.error as e: + reason = str(e) + else: + break + else: + raise SSHException( + "Unable to connect to {}: {}".format(hostname, reason) + ) + # okay, normal socket-ish flow here... + threading.Thread.__init__(self) + self.daemon = True + self.sock = sock + # we set the timeout so we can check self.active periodically to + # see if we should bail. socket.timeout exception is never propagated. + self.sock.settimeout(self._active_check_timeout) + + # negotiated crypto parameters + self.packetizer = (packetizer_class or Packetizer)(sock) + self.local_version = "SSH-" + self._PROTO_ID + "-" + self._CLIENT_ID + self.remote_version = "" + self.local_cipher = self.remote_cipher = "" + self.local_kex_init = self.remote_kex_init = None + self.local_mac = self.remote_mac = None + self.local_compression = self.remote_compression = None + self.session_id = None + self.host_key_type = None + self.host_key = None + + # GSS-API / SSPI Key Exchange + self.use_gss_kex = gss_kex + # This will be set to True if GSS-API Key Exchange was performed + self.gss_kex_used = False + self.kexgss_ctxt = None + self.gss_host = None + if self.use_gss_kex: + self.kexgss_ctxt = GSSAuth("gssapi-keyex", gss_deleg_creds) + self._preferred_kex = self._preferred_gsskex + self._preferred_kex + + # state used during negotiation + self.kex_engine = None + self.H = None + self.K = None + + self.initial_kex_done = False + self.in_kex = False + self.authenticated = False + self._expected_packet = tuple() + # synchronization (always higher level than write_lock) + self.lock = threading.Lock() + + # tracking open channels + self._channels = ChannelMap() + self.channel_events = {} # (id -> Event) + self.channels_seen = {} # (id -> True) + self._channel_counter = 0 + self.default_max_packet_size = default_max_packet_size + self.default_window_size = default_window_size + self._forward_agent_handler = None + self._x11_handler = None + self._tcp_handler = None + + self.saved_exception = None + self.clear_to_send = threading.Event() + self.clear_to_send_lock = threading.Lock() + self.clear_to_send_timeout = 30.0 + self.log_name = "paramiko.transport" + self.logger = util.get_logger(self.log_name) + self.packetizer.set_log(self.logger) + self.auth_handler = None + # response Message from an arbitrary global request + self.global_response = None + # user-defined event callbacks + self.completion_event = None + # how long (seconds) to wait for the SSH banner + self.banner_timeout = 15 + # how long (seconds) to wait for the handshake to finish after SSH + # banner sent. + self.handshake_timeout = 15 + # how long (seconds) to wait for the auth response. + self.auth_timeout = 30 + # how long (seconds) to wait for opening a channel + self.channel_timeout = 60 * 60 + self.disabled_algorithms = disabled_algorithms or {} + self.server_sig_algs = server_sig_algs + + # server mode: + self.server_mode = False + self.server_object = None + self.server_key_dict = {} + self.server_accepts = [] + self.server_accept_cv = threading.Condition(self.lock) + self.subsystem_table = {} + + # Handler table, now set at init time for easier per-instance + # manipulation and subclass twiddling. + self._handler_table = { + MSG_EXT_INFO: self._parse_ext_info, + MSG_NEWKEYS: self._parse_newkeys, + MSG_GLOBAL_REQUEST: self._parse_global_request, + MSG_REQUEST_SUCCESS: self._parse_request_success, + MSG_REQUEST_FAILURE: self._parse_request_failure, + MSG_CHANNEL_OPEN_SUCCESS: self._parse_channel_open_success, + MSG_CHANNEL_OPEN_FAILURE: self._parse_channel_open_failure, + MSG_CHANNEL_OPEN: self._parse_channel_open, + MSG_KEXINIT: self._negotiate_keys, + } + + def _filter_algorithm(self, type_): + default = getattr(self, "_preferred_{}".format(type_)) + return tuple( + x + for x in default + if x not in self.disabled_algorithms.get(type_, []) + ) + + @property + def preferred_ciphers(self): + return self._filter_algorithm("ciphers") + + @property + def preferred_macs(self): + return self._filter_algorithm("macs") + + @property + def preferred_keys(self): + # Interleave cert variants here; resistant to various background + # overwriting of _preferred_keys, and necessary as hostkeys can't use + # the logic pubkey auth does re: injecting/checking for certs at + # runtime + filtered = self._filter_algorithm("keys") + return tuple( + filtered + + tuple("{}-cert-v01@openssh.com".format(x) for x in filtered) + ) + + @property + def preferred_pubkeys(self): + return self._filter_algorithm("pubkeys") + + @property + def preferred_kex(self): + return self._filter_algorithm("kex") + + @property + def preferred_compression(self): + return self._filter_algorithm("compression") + + def __repr__(self): + """ + Returns a string representation of this object, for debugging. + """ + id_ = hex(id(self) & xffffffff) + out = "` or + `auth_publickey `. + + .. note:: `connect` is a simpler method for connecting as a client. + + .. note:: + After calling this method (or `start_server` or `connect`), you + should no longer directly read from or write to the original socket + object. + + :param .threading.Event event: + an event to trigger when negotiation is complete (optional) + + :param float timeout: + a timeout, in seconds, for SSH2 session negotiation (optional) + + :raises: + `.SSHException` -- if negotiation fails (and no ``event`` was + passed in) + """ + self.active = True + if event is not None: + # async, return immediately and let the app poll for completion + self.completion_event = event + self.start() + return + + # synchronous, wait for a result + self.completion_event = event = threading.Event() + self.start() + max_time = time.time() + timeout if timeout is not None else None + while True: + event.wait(0.1) + if not self.active: + e = self.get_exception() + if e is not None: + raise e + raise SSHException("Negotiation failed.") + if event.is_set() or ( + timeout is not None and time.time() >= max_time + ): + break + + def start_server(self, event=None, server=None): + """ + Negotiate a new SSH2 session as a server. This is the first step after + creating a new `.Transport` and setting up your server host key(s). A + separate thread is created for protocol negotiation. + + If an event is passed in, this method returns immediately. When + negotiation is done (successful or not), the given ``Event`` will + be triggered. On failure, `is_active` will return ``False``. + + (Since 1.4) If ``event`` is ``None``, this method will not return until + negotiation is done. On success, the method returns normally. + Otherwise an SSHException is raised. + + After a successful negotiation, the client will need to authenticate. + Override the methods `get_allowed_auths + <.ServerInterface.get_allowed_auths>`, `check_auth_none + <.ServerInterface.check_auth_none>`, `check_auth_password + <.ServerInterface.check_auth_password>`, and `check_auth_publickey + <.ServerInterface.check_auth_publickey>` in the given ``server`` object + to control the authentication process. + + After a successful authentication, the client should request to open a + channel. Override `check_channel_request + <.ServerInterface.check_channel_request>` in the given ``server`` + object to allow channels to be opened. + + .. note:: + After calling this method (or `start_client` or `connect`), you + should no longer directly read from or write to the original socket + object. + + :param .threading.Event event: + an event to trigger when negotiation is complete. + :param .ServerInterface server: + an object used to perform authentication and create `channels + <.Channel>` + + :raises: + `.SSHException` -- if negotiation fails (and no ``event`` was + passed in) + """ + if server is None: + server = ServerInterface() + self.server_mode = True + self.server_object = server + self.active = True + if event is not None: + # async, return immediately and let the app poll for completion + self.completion_event = event + self.start() + return + + # synchronous, wait for a result + self.completion_event = event = threading.Event() + self.start() + while True: + event.wait(0.1) + if not self.active: + e = self.get_exception() + if e is not None: + raise e + raise SSHException("Negotiation failed.") + if event.is_set(): + break + + def add_server_key(self, key): + """ + Add a host key to the list of keys used for server mode. When behaving + as a server, the host key is used to sign certain packets during the + SSH2 negotiation, so that the client can trust that we are who we say + we are. Because this is used for signing, the key must contain private + key info, not just the public half. Only one key of each type (RSA or + DSS) is kept. + + :param .PKey key: + the host key to add, usually an `.RSAKey` or `.DSSKey`. + """ + self.server_key_dict[key.get_name()] = key + # Handle SHA-2 extensions for RSA by ensuring that lookups into + # self.server_key_dict will yield this key for any of the algorithm + # names. + if isinstance(key, RSAKey): + self.server_key_dict["rsa-sha2-256"] = key + self.server_key_dict["rsa-sha2-512"] = key + + def get_server_key(self): + """ + Return the active host key, in server mode. After negotiating with the + client, this method will return the negotiated host key. If only one + type of host key was set with `add_server_key`, that's the only key + that will ever be returned. But in cases where you have set more than + one type of host key (for example, an RSA key and a DSS key), the key + type will be negotiated by the client, and this method will return the + key of the type agreed on. If the host key has not been negotiated + yet, ``None`` is returned. In client mode, the behavior is undefined. + + :return: + host key (`.PKey`) of the type negotiated by the client, or + ``None``. + """ + try: + return self.server_key_dict[self.host_key_type] + except KeyError: + pass + return None + + @staticmethod + def load_server_moduli(filename=None): + """ + (optional) + Load a file of prime moduli for use in doing group-exchange key + negotiation in server mode. It's a rather obscure option and can be + safely ignored. + + In server mode, the remote client may request "group-exchange" key + negotiation, which asks the server to send a random prime number that + fits certain criteria. These primes are pretty difficult to compute, + so they can't be generated on demand. But many systems contain a file + of suitable primes (usually named something like ``/etc/ssh/moduli``). + If you call `load_server_moduli` and it returns ``True``, then this + file of primes has been loaded and we will support "group-exchange" in + server mode. Otherwise server mode will just claim that it doesn't + support that method of key negotiation. + + :param str filename: + optional path to the moduli file, if you happen to know that it's + not in a standard location. + :return: + True if a moduli file was successfully loaded; False otherwise. + + .. note:: This has no effect when used in client mode. + """ + Transport._modulus_pack = ModulusPack() + # places to look for the openssh "moduli" file + file_list = ["/etc/ssh/moduli", "/usr/local/etc/moduli"] + if filename is not None: + file_list.insert(0, filename) + for fn in file_list: + try: + Transport._modulus_pack.read_file(fn) + return True + except IOError: + pass + # none succeeded + Transport._modulus_pack = None + return False + + def close(self): + """ + Close this session, and any open channels that are tied to it. + """ + if not self.active: + return + self.stop_thread() + for chan in list(self._channels.values()): + chan._unlink() + self.sock.close() + + def get_remote_server_key(self): + """ + Return the host key of the server (in client mode). + + .. note:: + Previously this call returned a tuple of ``(key type, key + string)``. You can get the same effect by calling `.PKey.get_name` + for the key type, and ``str(key)`` for the key string. + + :raises: `.SSHException` -- if no session is currently active. + + :return: public key (`.PKey`) of the remote server + """ + if (not self.active) or (not self.initial_kex_done): + raise SSHException("No existing session") + return self.host_key + + def is_active(self): + """ + Return true if this session is active (open). + + :return: + True if the session is still active (open); False if the session is + closed + """ + return self.active + + def open_session( + self, window_size=None, max_packet_size=None, timeout=None + ): + """ + Request a new channel to the server, of type ``"session"``. This is + just an alias for calling `open_channel` with an argument of + ``"session"``. + + .. note:: Modifying the the window and packet sizes might have adverse + effects on the session created. The default values are the same + as in the OpenSSH code base and have been battle tested. + + :param int window_size: + optional window size for this session. + :param int max_packet_size: + optional max packet size for this session. + + :return: a new `.Channel` + + :raises: + `.SSHException` -- if the request is rejected or the session ends + prematurely + + .. versionchanged:: 1.13.4/1.14.3/1.15.3 + Added the ``timeout`` argument. + .. versionchanged:: 1.15 + Added the ``window_size`` and ``max_packet_size`` arguments. + """ + return self.open_channel( + "session", + window_size=window_size, + max_packet_size=max_packet_size, + timeout=timeout, + ) + + def open_x11_channel(self, src_addr=None): + """ + Request a new channel to the client, of type ``"x11"``. This + is just an alias for ``open_channel('x11', src_addr=src_addr)``. + + :param tuple src_addr: + the source address (``(str, int)``) of the x11 server (port is the + x11 port, ie. 6010) + :return: a new `.Channel` + + :raises: + `.SSHException` -- if the request is rejected or the session ends + prematurely + """ + return self.open_channel("x11", src_addr=src_addr) + + def open_forward_agent_channel(self): + """ + Request a new channel to the client, of type + ``"auth-agent@openssh.com"``. + + This is just an alias for ``open_channel('auth-agent@openssh.com')``. + + :return: a new `.Channel` + + :raises: `.SSHException` -- + if the request is rejected or the session ends prematurely + """ + return self.open_channel("auth-agent@openssh.com") + + def open_forwarded_tcpip_channel(self, src_addr, dest_addr): + """ + Request a new channel back to the client, of type ``forwarded-tcpip``. + + This is used after a client has requested port forwarding, for sending + incoming connections back to the client. + + :param src_addr: originator's address + :param dest_addr: local (server) connected address + """ + return self.open_channel("forwarded-tcpip", dest_addr, src_addr) + + def open_channel( + self, + kind, + dest_addr=None, + src_addr=None, + window_size=None, + max_packet_size=None, + timeout=None, + ): + """ + Request a new channel to the server. `Channels <.Channel>` are + socket-like objects used for the actual transfer of data across the + session. You may only request a channel after negotiating encryption + (using `connect` or `start_client`) and authenticating. + + .. note:: Modifying the the window and packet sizes might have adverse + effects on the channel created. The default values are the same + as in the OpenSSH code base and have been battle tested. + + :param str kind: + the kind of channel requested (usually ``"session"``, + ``"forwarded-tcpip"``, ``"direct-tcpip"``, or ``"x11"``) + :param tuple dest_addr: + the destination address (address + port tuple) of this port + forwarding, if ``kind`` is ``"forwarded-tcpip"`` or + ``"direct-tcpip"`` (ignored for other channel types) + :param src_addr: the source address of this port forwarding, if + ``kind`` is ``"forwarded-tcpip"``, ``"direct-tcpip"``, or ``"x11"`` + :param int window_size: + optional window size for this session. + :param int max_packet_size: + optional max packet size for this session. + :param float timeout: + optional timeout opening a channel, default 3600s (1h) + + :return: a new `.Channel` on success + + :raises: + `.SSHException` -- if the request is rejected, the session ends + prematurely or there is a timeout opening a channel + + .. versionchanged:: 1.15 + Added the ``window_size`` and ``max_packet_size`` arguments. + """ + if not self.active: + raise SSHException("SSH session not active") + timeout = self.channel_timeout if timeout is None else timeout + self.lock.acquire() + try: + window_size = self._sanitize_window_size(window_size) + max_packet_size = self._sanitize_packet_size(max_packet_size) + chanid = self._next_channel() + m = Message() + m.add_byte(cMSG_CHANNEL_OPEN) + m.add_string(kind) + m.add_int(chanid) + m.add_int(window_size) + m.add_int(max_packet_size) + if (kind == "forwarded-tcpip") or (kind == "direct-tcpip"): + m.add_string(dest_addr[0]) + m.add_int(dest_addr[1]) + m.add_string(src_addr[0]) + m.add_int(src_addr[1]) + elif kind == "x11": + m.add_string(src_addr[0]) + m.add_int(src_addr[1]) + chan = Channel(chanid) + self._channels.put(chanid, chan) + self.channel_events[chanid] = event = threading.Event() + self.channels_seen[chanid] = True + chan._set_transport(self) + chan._set_window(window_size, max_packet_size) + finally: + self.lock.release() + self._send_user_message(m) + start_ts = time.time() + while True: + event.wait(0.1) + if not self.active: + e = self.get_exception() + if e is None: + e = SSHException("Unable to open channel.") + raise e + if event.is_set(): + break + elif start_ts + timeout < time.time(): + raise SSHException("Timeout opening channel.") + chan = self._channels.get(chanid) + if chan is not None: + return chan + e = self.get_exception() + if e is None: + e = SSHException("Unable to open channel.") + raise e + + def request_port_forward(self, address, port, handler=None): + """ + Ask the server to forward TCP connections from a listening port on + the server, across this SSH session. + + If a handler is given, that handler is called from a different thread + whenever a forwarded connection arrives. The handler parameters are:: + + handler( + channel, + (origin_addr, origin_port), + (server_addr, server_port), + ) + + where ``server_addr`` and ``server_port`` are the address and port that + the server was listening on. + + If no handler is set, the default behavior is to send new incoming + forwarded connections into the accept queue, to be picked up via + `accept`. + + :param str address: the address to bind when forwarding + :param int port: + the port to forward, or 0 to ask the server to allocate any port + :param callable handler: + optional handler for incoming forwarded connections, of the form + ``func(Channel, (str, int), (str, int))``. + + :return: the port number (`int`) allocated by the server + + :raises: + `.SSHException` -- if the server refused the TCP forward request + """ + if not self.active: + raise SSHException("SSH session not active") + port = int(port) + response = self.global_request( + "tcpip-forward", (address, port), wait=True + ) + if response is None: + raise SSHException("TCP forwarding request denied") + if port == 0: + port = response.get_int() + if handler is None: + + def default_handler(channel, src_addr, dest_addr_port): + # src_addr, src_port = src_addr_port + # dest_addr, dest_port = dest_addr_port + self._queue_incoming_channel(channel) + + handler = default_handler + self._tcp_handler = handler + return port + + def cancel_port_forward(self, address, port): + """ + Ask the server to cancel a previous port-forwarding request. No more + connections to the given address & port will be forwarded across this + ssh connection. + + :param str address: the address to stop forwarding + :param int port: the port to stop forwarding + """ + if not self.active: + return + self._tcp_handler = None + self.global_request("cancel-tcpip-forward", (address, port), wait=True) + + def open_sftp_client(self): + """ + Create an SFTP client channel from an open transport. On success, an + SFTP session will be opened with the remote host, and a new + `.SFTPClient` object will be returned. + + :return: + a new `.SFTPClient` referring to an sftp session (channel) across + this transport + """ + return SFTPClient.from_transport(self) + + def send_ignore(self, byte_count=None): + """ + Send a junk packet across the encrypted link. This is sometimes used + to add "noise" to a connection to confuse would-be attackers. It can + also be used as a keep-alive for long lived connections traversing + firewalls. + + :param int byte_count: + the number of random bytes to send in the payload of the ignored + packet -- defaults to a random number from 10 to 41. + """ + m = Message() + m.add_byte(cMSG_IGNORE) + if byte_count is None: + byte_count = (byte_ord(os.urandom(1)) % 32) + 10 + m.add_bytes(os.urandom(byte_count)) + self._send_user_message(m) + + def renegotiate_keys(self): + """ + Force this session to switch to new keys. Normally this is done + automatically after the session hits a certain number of packets or + bytes sent or received, but this method gives you the option of forcing + new keys whenever you want. Negotiating new keys causes a pause in + traffic both ways as the two sides swap keys and do computations. This + method returns when the session has switched to new keys. + + :raises: + `.SSHException` -- if the key renegotiation failed (which causes + the session to end) + """ + self.completion_event = threading.Event() + self._send_kex_init() + while True: + self.completion_event.wait(0.1) + if not self.active: + e = self.get_exception() + if e is not None: + raise e + raise SSHException("Negotiation failed.") + if self.completion_event.is_set(): + break + return + + def set_keepalive(self, interval): + """ + Turn on/off keepalive packets (default is off). If this is set, after + ``interval`` seconds without sending any data over the connection, a + "keepalive" packet will be sent (and ignored by the remote host). This + can be useful to keep connections alive over a NAT, for example. + + :param int interval: + seconds to wait before sending a keepalive packet (or + 0 to disable keepalives). + """ + + def _request(x=weakref.proxy(self)): + return x.global_request("keepalive@lag.net", wait=False) + + self.packetizer.set_keepalive(interval, _request) + + def global_request(self, kind, data=None, wait=True): + """ + Make a global request to the remote host. These are normally + extensions to the SSH2 protocol. + + :param str kind: name of the request. + :param tuple data: + an optional tuple containing additional data to attach to the + request. + :param bool wait: + ``True`` if this method should not return until a response is + received; ``False`` otherwise. + :return: + a `.Message` containing possible additional data if the request was + successful (or an empty `.Message` if ``wait`` was ``False``); + ``None`` if the request was denied. + """ + if wait: + self.completion_event = threading.Event() + m = Message() + m.add_byte(cMSG_GLOBAL_REQUEST) + m.add_string(kind) + m.add_boolean(wait) + if data is not None: + m.add(*data) + self._log(DEBUG, 'Sending global request "{}"'.format(kind)) + self._send_user_message(m) + if not wait: + return None + while True: + self.completion_event.wait(0.1) + if not self.active: + return None + if self.completion_event.is_set(): + break + return self.global_response + + def accept(self, timeout=None): + """ + Return the next channel opened by the client over this transport, in + server mode. If no channel is opened before the given timeout, + ``None`` is returned. + + :param int timeout: + seconds to wait for a channel, or ``None`` to wait forever + :return: a new `.Channel` opened by the client + """ + self.lock.acquire() + try: + if len(self.server_accepts) > 0: + chan = self.server_accepts.pop(0) + else: + self.server_accept_cv.wait(timeout) + if len(self.server_accepts) > 0: + chan = self.server_accepts.pop(0) + else: + # timeout + chan = None + finally: + self.lock.release() + return chan + + def connect( + self, + hostkey=None, + username="", + password=None, + pkey=None, + gss_host=None, + gss_auth=False, + gss_kex=False, + gss_deleg_creds=True, + gss_trust_dns=True, + ): + """ + Negotiate an SSH2 session, and optionally verify the server's host key + and authenticate using a password or private key. This is a shortcut + for `start_client`, `get_remote_server_key`, and + `Transport.auth_password` or `Transport.auth_publickey`. Use those + methods if you want more control. + + You can use this method immediately after creating a Transport to + negotiate encryption with a server. If it fails, an exception will be + thrown. On success, the method will return cleanly, and an encrypted + session exists. You may immediately call `open_channel` or + `open_session` to get a `.Channel` object, which is used for data + transfer. + + .. note:: + If you fail to supply a password or private key, this method may + succeed, but a subsequent `open_channel` or `open_session` call may + fail because you haven't authenticated yet. + + :param .PKey hostkey: + the host key expected from the server, or ``None`` if you don't + want to do host key verification. + :param str username: the username to authenticate as. + :param str password: + a password to use for authentication, if you want to use password + authentication; otherwise ``None``. + :param .PKey pkey: + a private key to use for authentication, if you want to use private + key authentication; otherwise ``None``. + :param str gss_host: + The target's name in the kerberos database. Default: hostname + :param bool gss_auth: + ``True`` if you want to use GSS-API authentication. + :param bool gss_kex: + Perform GSS-API Key Exchange and user authentication. + :param bool gss_deleg_creds: + Whether to delegate GSS-API client credentials. + :param gss_trust_dns: + Indicates whether or not the DNS is trusted to securely + canonicalize the name of the host being connected to (default + ``True``). + + :raises: `.SSHException` -- if the SSH2 negotiation fails, the host key + supplied by the server is incorrect, or authentication fails. + + .. versionchanged:: 2.3 + Added the ``gss_trust_dns`` argument. + """ + if hostkey is not None: + # TODO: a more robust implementation would be to ask each key class + # for its nameS plural, and just use that. + # TODO: that could be used in a bunch of other spots too + if isinstance(hostkey, RSAKey): + self._preferred_keys = [ + "rsa-sha2-512", + "rsa-sha2-256", + "ssh-rsa", + ] + else: + self._preferred_keys = [hostkey.get_name()] + + self.set_gss_host( + gss_host=gss_host, + trust_dns=gss_trust_dns, + gssapi_requested=gss_kex or gss_auth, + ) + + self.start_client() + + # check host key if we were given one + # If GSS-API Key Exchange was performed, we are not required to check + # the host key. + if (hostkey is not None) and not gss_kex: + key = self.get_remote_server_key() + if ( + key.get_name() != hostkey.get_name() + or key.asbytes() != hostkey.asbytes() + ): + self._log(DEBUG, "Bad host key from server") + self._log( + DEBUG, + "Expected: {}: {}".format( + hostkey.get_name(), repr(hostkey.asbytes()) + ), + ) + self._log( + DEBUG, + "Got : {}: {}".format( + key.get_name(), repr(key.asbytes()) + ), + ) + raise SSHException("Bad host key from server") + self._log( + DEBUG, "Host key verified ({})".format(hostkey.get_name()) + ) + + if (pkey is not None) or (password is not None) or gss_auth or gss_kex: + if gss_auth: + self._log( + DEBUG, "Attempting GSS-API auth... (gssapi-with-mic)" + ) # noqa + self.auth_gssapi_with_mic( + username, self.gss_host, gss_deleg_creds + ) + elif gss_kex: + self._log(DEBUG, "Attempting GSS-API auth... (gssapi-keyex)") + self.auth_gssapi_keyex(username) + elif pkey is not None: + self._log(DEBUG, "Attempting public-key auth...") + self.auth_publickey(username, pkey) + else: + self._log(DEBUG, "Attempting password auth...") + self.auth_password(username, password) + + return + + def get_exception(self): + """ + Return any exception that happened during the last server request. + This can be used to fetch more specific error information after using + calls like `start_client`. The exception (if any) is cleared after + this call. + + :return: + an exception, or ``None`` if there is no stored exception. + + .. versionadded:: 1.1 + """ + self.lock.acquire() + try: + e = self.saved_exception + self.saved_exception = None + return e + finally: + self.lock.release() + + def set_subsystem_handler(self, name, handler, *args, **kwargs): + """ + Set the handler class for a subsystem in server mode. If a request + for this subsystem is made on an open ssh channel later, this handler + will be constructed and called -- see `.SubsystemHandler` for more + detailed documentation. + + Any extra parameters (including keyword arguments) are saved and + passed to the `.SubsystemHandler` constructor later. + + :param str name: name of the subsystem. + :param handler: + subclass of `.SubsystemHandler` that handles this subsystem. + """ + try: + self.lock.acquire() + self.subsystem_table[name] = (handler, args, kwargs) + finally: + self.lock.release() + + def is_authenticated(self): + """ + Return true if this session is active and authenticated. + + :return: + True if the session is still open and has been authenticated + successfully; False if authentication failed and/or the session is + closed. + """ + return ( + self.active + and self.auth_handler is not None + and self.auth_handler.is_authenticated() + ) + + def get_username(self): + """ + Return the username this connection is authenticated for. If the + session is not authenticated (or authentication failed), this method + returns ``None``. + + :return: username that was authenticated (a `str`), or ``None``. + """ + if not self.active or (self.auth_handler is None): + return None + return self.auth_handler.get_username() + + def get_banner(self): + """ + Return the banner supplied by the server upon connect. If no banner is + supplied, this method returns ``None``. + + :returns: server supplied banner (`str`), or ``None``. + + .. versionadded:: 1.13 + """ + if not self.active or (self.auth_handler is None): + return None + return self.auth_handler.banner + + def auth_none(self, username): + """ + Try to authenticate to the server using no authentication at all. + This will almost always fail. It may be useful for determining the + list of authentication types supported by the server, by catching the + `.BadAuthenticationType` exception raised. + + :param str username: the username to authenticate as + :return: + list of auth types permissible for the next stage of + authentication (normally empty) + + :raises: + `.BadAuthenticationType` -- if "none" authentication isn't allowed + by the server for this user + :raises: + `.SSHException` -- if the authentication failed due to a network + error + + .. versionadded:: 1.5 + """ + if (not self.active) or (not self.initial_kex_done): + raise SSHException("No existing session") + my_event = threading.Event() + self.auth_handler = AuthHandler(self) + self.auth_handler.auth_none(username, my_event) + return self.auth_handler.wait_for_response(my_event) + + def auth_password(self, username, password, event=None, fallback=True): + """ + Authenticate to the server using a password. The username and password + are sent over an encrypted link. + + If an ``event`` is passed in, this method will return immediately, and + the event will be triggered once authentication succeeds or fails. On + success, `is_authenticated` will return ``True``. On failure, you may + use `get_exception` to get more detailed error information. + + Since 1.1, if no event is passed, this method will block until the + authentication succeeds or fails. On failure, an exception is raised. + Otherwise, the method simply returns. + + Since 1.5, if no event is passed and ``fallback`` is ``True`` (the + default), if the server doesn't support plain password authentication + but does support so-called "keyboard-interactive" mode, an attempt + will be made to authenticate using this interactive mode. If it fails, + the normal exception will be thrown as if the attempt had never been + made. This is useful for some recent Gentoo and Debian distributions, + which turn off plain password authentication in a misguided belief + that interactive authentication is "more secure". (It's not.) + + If the server requires multi-step authentication (which is very rare), + this method will return a list of auth types permissible for the next + step. Otherwise, in the normal case, an empty list is returned. + + :param str username: the username to authenticate as + :param basestring password: the password to authenticate with + :param .threading.Event event: + an event to trigger when the authentication attempt is complete + (whether it was successful or not) + :param bool fallback: + ``True`` if an attempt at an automated "interactive" password auth + should be made if the server doesn't support normal password auth + :return: + list of auth types permissible for the next stage of + authentication (normally empty) + + :raises: + `.BadAuthenticationType` -- if password authentication isn't + allowed by the server for this user (and no event was passed in) + :raises: + `.AuthenticationException` -- if the authentication failed (and no + event was passed in) + :raises: `.SSHException` -- if there was a network error + """ + if (not self.active) or (not self.initial_kex_done): + # we should never try to send the password unless we're on a secure + # link + raise SSHException("No existing session") + if event is None: + my_event = threading.Event() + else: + my_event = event + self.auth_handler = AuthHandler(self) + self.auth_handler.auth_password(username, password, my_event) + if event is not None: + # caller wants to wait for event themselves + return [] + try: + return self.auth_handler.wait_for_response(my_event) + except BadAuthenticationType as e: + # if password auth isn't allowed, but keyboard-interactive *is*, + # try to fudge it + if not fallback or ("keyboard-interactive" not in e.allowed_types): + raise + try: + + def handler(title, instructions, fields): + if len(fields) > 1: + raise SSHException("Fallback authentication failed.") + if len(fields) == 0: + # for some reason, at least on os x, a 2nd request will + # be made with zero fields requested. maybe it's just + # to try to fake out automated scripting of the exact + # type we're doing here. *shrug* :) + return [] + return [password] + + return self.auth_interactive(username, handler) + except SSHException: + # attempt failed; just raise the original exception + raise e + + def auth_publickey(self, username, key, event=None): + """ + Authenticate to the server using a private key. The key is used to + sign data from the server, so it must include the private part. + + If an ``event`` is passed in, this method will return immediately, and + the event will be triggered once authentication succeeds or fails. On + success, `is_authenticated` will return ``True``. On failure, you may + use `get_exception` to get more detailed error information. + + Since 1.1, if no event is passed, this method will block until the + authentication succeeds or fails. On failure, an exception is raised. + Otherwise, the method simply returns. + + If the server requires multi-step authentication (which is very rare), + this method will return a list of auth types permissible for the next + step. Otherwise, in the normal case, an empty list is returned. + + :param str username: the username to authenticate as + :param .PKey key: the private key to authenticate with + :param .threading.Event event: + an event to trigger when the authentication attempt is complete + (whether it was successful or not) + :return: + list of auth types permissible for the next stage of + authentication (normally empty) + + :raises: + `.BadAuthenticationType` -- if public-key authentication isn't + allowed by the server for this user (and no event was passed in) + :raises: + `.AuthenticationException` -- if the authentication failed (and no + event was passed in) + :raises: `.SSHException` -- if there was a network error + """ + if (not self.active) or (not self.initial_kex_done): + # we should never try to authenticate unless we're on a secure link + raise SSHException("No existing session") + if event is None: + my_event = threading.Event() + else: + my_event = event + self.auth_handler = AuthHandler(self) + self.auth_handler.auth_publickey(username, key, my_event) + if event is not None: + # caller wants to wait for event themselves + return [] + return self.auth_handler.wait_for_response(my_event) + + def auth_interactive(self, username, handler, submethods=""): + """ + Authenticate to the server interactively. A handler is used to answer + arbitrary questions from the server. On many servers, this is just a + dumb wrapper around PAM. + + This method will block until the authentication succeeds or fails, + periodically calling the handler asynchronously to get answers to + authentication questions. The handler may be called more than once + if the server continues to ask questions. + + The handler is expected to be a callable that will handle calls of the + form: ``handler(title, instructions, prompt_list)``. The ``title`` is + meant to be a dialog-window title, and the ``instructions`` are user + instructions (both are strings). ``prompt_list`` will be a list of + prompts, each prompt being a tuple of ``(str, bool)``. The string is + the prompt and the boolean indicates whether the user text should be + echoed. + + A sample call would thus be: + ``handler('title', 'instructions', [('Password:', False)])``. + + The handler should return a list or tuple of answers to the server's + questions. + + If the server requires multi-step authentication (which is very rare), + this method will return a list of auth types permissible for the next + step. Otherwise, in the normal case, an empty list is returned. + + :param str username: the username to authenticate as + :param callable handler: a handler for responding to server questions + :param str submethods: a string list of desired submethods (optional) + :return: + list of auth types permissible for the next stage of + authentication (normally empty). + + :raises: `.BadAuthenticationType` -- if public-key authentication isn't + allowed by the server for this user + :raises: `.AuthenticationException` -- if the authentication failed + :raises: `.SSHException` -- if there was a network error + + .. versionadded:: 1.5 + """ + if (not self.active) or (not self.initial_kex_done): + # we should never try to authenticate unless we're on a secure link + raise SSHException("No existing session") + my_event = threading.Event() + self.auth_handler = AuthHandler(self) + self.auth_handler.auth_interactive( + username, handler, my_event, submethods + ) + return self.auth_handler.wait_for_response(my_event) + + def auth_interactive_dumb(self, username, handler=None, submethods=""): + """ + Authenticate to the server interactively but dumber. + Just print the prompt and / or instructions to stdout and send back + the response. This is good for situations where partial auth is + achieved by key and then the user has to enter a 2fac token. + """ + + if not handler: + + def handler(title, instructions, prompt_list): + answers = [] + if title: + print(title.strip()) + if instructions: + print(instructions.strip()) + for prompt, show_input in prompt_list: + print(prompt.strip(), end=" ") + answers.append(input()) + return answers + + return self.auth_interactive(username, handler, submethods) + + def auth_gssapi_with_mic(self, username, gss_host, gss_deleg_creds): + """ + Authenticate to the Server using GSS-API / SSPI. + + :param str username: The username to authenticate as + :param str gss_host: The target host + :param bool gss_deleg_creds: Delegate credentials or not + :return: list of auth types permissible for the next stage of + authentication (normally empty) + :raises: `.BadAuthenticationType` -- if gssapi-with-mic isn't + allowed by the server (and no event was passed in) + :raises: + `.AuthenticationException` -- if the authentication failed (and no + event was passed in) + :raises: `.SSHException` -- if there was a network error + """ + if (not self.active) or (not self.initial_kex_done): + # we should never try to authenticate unless we're on a secure link + raise SSHException("No existing session") + my_event = threading.Event() + self.auth_handler = AuthHandler(self) + self.auth_handler.auth_gssapi_with_mic( + username, gss_host, gss_deleg_creds, my_event + ) + return self.auth_handler.wait_for_response(my_event) + + def auth_gssapi_keyex(self, username): + """ + Authenticate to the server with GSS-API/SSPI if GSS-API kex is in use. + + :param str username: The username to authenticate as. + :returns: + a list of auth types permissible for the next stage of + authentication (normally empty) + :raises: `.BadAuthenticationType` -- + if GSS-API Key Exchange was not performed (and no event was passed + in) + :raises: `.AuthenticationException` -- + if the authentication failed (and no event was passed in) + :raises: `.SSHException` -- if there was a network error + """ + if (not self.active) or (not self.initial_kex_done): + # we should never try to authenticate unless we're on a secure link + raise SSHException("No existing session") + my_event = threading.Event() + self.auth_handler = AuthHandler(self) + self.auth_handler.auth_gssapi_keyex(username, my_event) + return self.auth_handler.wait_for_response(my_event) + + def set_log_channel(self, name): + """ + Set the channel for this transport's logging. The default is + ``"paramiko.transport"`` but it can be set to anything you want. (See + the `.logging` module for more info.) SSH Channels will log to a + sub-channel of the one specified. + + :param str name: new channel name for logging + + .. versionadded:: 1.1 + """ + self.log_name = name + self.logger = util.get_logger(name) + self.packetizer.set_log(self.logger) + + def get_log_channel(self): + """ + Return the channel name used for this transport's logging. + + :return: channel name as a `str` + + .. versionadded:: 1.2 + """ + return self.log_name + + def set_hexdump(self, hexdump): + """ + Turn on/off logging a hex dump of protocol traffic at DEBUG level in + the logs. Normally you would want this off (which is the default), + but if you are debugging something, it may be useful. + + :param bool hexdump: + ``True`` to log protocol traffix (in hex) to the log; ``False`` + otherwise. + """ + self.packetizer.set_hexdump(hexdump) + + def get_hexdump(self): + """ + Return ``True`` if the transport is currently logging hex dumps of + protocol traffic. + + :return: ``True`` if hex dumps are being logged, else ``False``. + + .. versionadded:: 1.4 + """ + return self.packetizer.get_hexdump() + + def use_compression(self, compress=True): + """ + Turn on/off compression. This will only have an affect before starting + the transport (ie before calling `connect`, etc). By default, + compression is off since it negatively affects interactive sessions. + + :param bool compress: + ``True`` to ask the remote client/server to compress traffic; + ``False`` to refuse compression + + .. versionadded:: 1.5.2 + """ + if compress: + self._preferred_compression = ("zlib@openssh.com", "zlib", "none") + else: + self._preferred_compression = ("none",) + + def getpeername(self): + """ + Return the address of the remote side of this Transport, if possible. + + This is effectively a wrapper around ``getpeername`` on the underlying + socket. If the socket-like object has no ``getpeername`` method, then + ``("unknown", 0)`` is returned. + + :return: + the address of the remote host, if known, as a ``(str, int)`` + tuple. + """ + gp = getattr(self.sock, "getpeername", None) + if gp is None: + return "unknown", 0 + return gp() + + def stop_thread(self): + self.active = False + self.packetizer.close() + # Keep trying to join() our main thread, quickly, until: + # * We join()ed successfully (self.is_alive() == False) + # * Or it looks like we've hit issue #520 (socket.recv hitting some + # race condition preventing it from timing out correctly), wherein + # our socket and packetizer are both closed (but where we'd + # otherwise be sitting forever on that recv()). + while ( + self.is_alive() + and self is not threading.current_thread() + and not self.sock._closed + and not self.packetizer.closed + ): + self.join(0.1) + + # internals... + + # TODO 4.0: make a public alias for this because multiple other classes + # already explicitly rely on it...or just rewrite logging :D + def _log(self, level, msg, *args): + if issubclass(type(msg), list): + for m in msg: + self.logger.log(level, m) + else: + self.logger.log(level, msg, *args) + + def _get_modulus_pack(self): + """used by KexGex to find primes for group exchange""" + return self._modulus_pack + + def _next_channel(self): + """you are holding the lock""" + chanid = self._channel_counter + while self._channels.get(chanid) is not None: + self._channel_counter = (self._channel_counter + 1) & 0xFFFFFF + chanid = self._channel_counter + self._channel_counter = (self._channel_counter + 1) & 0xFFFFFF + return chanid + + def _unlink_channel(self, chanid): + """used by a Channel to remove itself from the active channel list""" + self._channels.delete(chanid) + + def _send_message(self, data): + self.packetizer.send_message(data) + + def _send_user_message(self, data): + """ + send a message, but block if we're in key negotiation. this is used + for user-initiated requests. + """ + start = time.time() + while True: + self.clear_to_send.wait(0.1) + if not self.active: + self._log( + DEBUG, "Dropping user packet because connection is dead." + ) # noqa + return + self.clear_to_send_lock.acquire() + if self.clear_to_send.is_set(): + break + self.clear_to_send_lock.release() + if time.time() > start + self.clear_to_send_timeout: + raise SSHException( + "Key-exchange timed out waiting for key negotiation" + ) # noqa + try: + self._send_message(data) + finally: + self.clear_to_send_lock.release() + + def _set_K_H(self, k, h): + """ + Used by a kex obj to set the K (root key) and H (exchange hash). + """ + self.K = k + self.H = h + if self.session_id is None: + self.session_id = h + + def _expect_packet(self, *ptypes): + """ + Used by a kex obj to register the next packet type it expects to see. + """ + self._expected_packet = tuple(ptypes) + + def _verify_key(self, host_key, sig): + key = self._key_info[self.host_key_type](Message(host_key)) + if key is None: + raise SSHException("Unknown host key type") + if not key.verify_ssh_sig(self.H, Message(sig)): + raise SSHException( + "Signature verification ({}) failed.".format( + self.host_key_type + ) + ) # noqa + self.host_key = key + + def _compute_key(self, id, nbytes): + """id is 'A' - 'F' for the various keys used by ssh""" + m = Message() + m.add_mpint(self.K) + m.add_bytes(self.H) + m.add_byte(b(id)) + m.add_bytes(self.session_id) + # Fallback to SHA1 for kex engines that fail to specify a hex + # algorithm, or for e.g. transport tests that don't run kexinit. + hash_algo = getattr(self.kex_engine, "hash_algo", None) + hash_select_msg = "kex engine {} specified hash_algo {!r}".format( + self.kex_engine.__class__.__name__, hash_algo + ) + if hash_algo is None: + hash_algo = sha1 + hash_select_msg += ", falling back to sha1" + if not hasattr(self, "_logged_hash_selection"): + self._log(DEBUG, hash_select_msg) + setattr(self, "_logged_hash_selection", True) + out = sofar = hash_algo(m.asbytes()).digest() + while len(out) < nbytes: + m = Message() + m.add_mpint(self.K) + m.add_bytes(self.H) + m.add_bytes(sofar) + digest = hash_algo(m.asbytes()).digest() + out += digest + sofar += digest + return out[:nbytes] + + def _get_engine(self, name, key, iv=None, operation=None, aead=False): + if name not in self._cipher_info: + raise SSHException("Unknown cipher " + name) + info = self._cipher_info[name] + algorithm = info["class"](key) + # AEAD types (eg GCM) use their algorithm class /as/ the encryption + # engine (they expose the same encrypt/decrypt API as a CipherContext) + if aead: + return algorithm + # All others go through the Cipher class. + cipher = Cipher( + algorithm=algorithm, + # TODO: why is this getting tickled in aesgcm mode??? + mode=info["mode"](iv), + backend=default_backend(), + ) + if operation is self._ENCRYPT: + return cipher.encryptor() + else: + return cipher.decryptor() + + def _set_forward_agent_handler(self, handler): + if handler is None: + + def default_handler(channel): + self._queue_incoming_channel(channel) + + self._forward_agent_handler = default_handler + else: + self._forward_agent_handler = handler + + def _set_x11_handler(self, handler): + # only called if a channel has turned on x11 forwarding + if handler is None: + # by default, use the same mechanism as accept() + def default_handler(channel, src_addr_port): + self._queue_incoming_channel(channel) + + self._x11_handler = default_handler + else: + self._x11_handler = handler + + def _queue_incoming_channel(self, channel): + self.lock.acquire() + try: + self.server_accepts.append(channel) + self.server_accept_cv.notify() + finally: + self.lock.release() + + def _sanitize_window_size(self, window_size): + if window_size is None: + window_size = self.default_window_size + return clamp_value(MIN_WINDOW_SIZE, window_size, MAX_WINDOW_SIZE) + + def _sanitize_packet_size(self, max_packet_size): + if max_packet_size is None: + max_packet_size = self.default_max_packet_size + return clamp_value(MIN_PACKET_SIZE, max_packet_size, MAX_WINDOW_SIZE) + + def _ensure_authed(self, ptype, message): + """ + Checks message type against current auth state. + + If server mode, and auth has not succeeded, and the message is of a + post-auth type (channel open or global request) an appropriate error + response Message is crafted and returned to caller for sending. + + Otherwise (client mode, authed, or pre-auth message) returns None. + """ + if ( + not self.server_mode + or ptype <= HIGHEST_USERAUTH_MESSAGE_ID + or self.is_authenticated() + ): + return None + # WELP. We must be dealing with someone trying to do non-auth things + # without being authed. Tell them off, based on message class. + reply = Message() + # Global requests have no details, just failure. + if ptype == MSG_GLOBAL_REQUEST: + reply.add_byte(cMSG_REQUEST_FAILURE) + # Channel opens let us reject w/ a specific type + message. + elif ptype == MSG_CHANNEL_OPEN: + kind = message.get_text() # noqa + chanid = message.get_int() + reply.add_byte(cMSG_CHANNEL_OPEN_FAILURE) + reply.add_int(chanid) + reply.add_int(OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED) + reply.add_string("") + reply.add_string("en") + # NOTE: Post-open channel messages do not need checking; the above will + # reject attempts to open channels, meaning that even if a malicious + # user tries to send a MSG_CHANNEL_REQUEST, it will simply fall under + # the logic that handles unknown channel IDs (as the channel list will + # be empty.) + return reply + + def _enforce_strict_kex(self, ptype): + """ + Conditionally raise `MessageOrderError` during strict initial kex. + + This method should only be called inside code that handles non-KEXINIT + messages; it does not interrogate ``ptype`` besides using it to log + more accurately. + """ + if self.agreed_on_strict_kex and not self.initial_kex_done: + name = MSG_NAMES.get(ptype, f"msg {ptype}") + raise MessageOrderError( + f"In strict-kex mode, but was sent {name!r}!" + ) + + def run(self): + # (use the exposed "run" method, because if we specify a thread target + # of a private method, threading.Thread will keep a reference to it + # indefinitely, creating a GC cycle and not letting Transport ever be + # GC'd. it's a bug in Thread.) + + # Hold reference to 'sys' so we can test sys.modules to detect + # interpreter shutdown. + self.sys = sys + + # active=True occurs before the thread is launched, to avoid a race + _active_threads.append(self) + tid = hex(id(self) & xffffffff) + if self.server_mode: + self._log(DEBUG, "starting thread (server mode): {}".format(tid)) + else: + self._log(DEBUG, "starting thread (client mode): {}".format(tid)) + try: + try: + self.packetizer.write_all(b(self.local_version + "\r\n")) + self._log( + DEBUG, + "Local version/idstring: {}".format(self.local_version), + ) # noqa + self._check_banner() + # The above is actually very much part of the handshake, but + # sometimes the banner can be read but the machine is not + # responding, for example when the remote ssh daemon is loaded + # in to memory but we can not read from the disk/spawn a new + # shell. + # Make sure we can specify a timeout for the initial handshake. + # Re-use the banner timeout for now. + self.packetizer.start_handshake(self.handshake_timeout) + self._send_kex_init() + self._expect_packet(MSG_KEXINIT) + + while self.active: + if self.packetizer.need_rekey() and not self.in_kex: + self._send_kex_init() + try: + ptype, m = self.packetizer.read_message() + except NeedRekeyException: + continue + if ptype == MSG_IGNORE: + self._enforce_strict_kex(ptype) + continue + elif ptype == MSG_DISCONNECT: + self._parse_disconnect(m) + break + elif ptype == MSG_DEBUG: + self._enforce_strict_kex(ptype) + self._parse_debug(m) + continue + if len(self._expected_packet) > 0: + if ptype not in self._expected_packet: + exc_class = SSHException + if self.agreed_on_strict_kex: + exc_class = MessageOrderError + raise exc_class( + "Expecting packet from {!r}, got {:d}".format( + self._expected_packet, ptype + ) + ) # noqa + self._expected_packet = tuple() + # These message IDs indicate key exchange & will differ + # depending on exact exchange algorithm + if (ptype >= 30) and (ptype <= 41): + self.kex_engine.parse_next(ptype, m) + continue + + if ptype in self._handler_table: + error_msg = self._ensure_authed(ptype, m) + if error_msg: + self._send_message(error_msg) + else: + self._handler_table[ptype](m) + elif ptype in self._channel_handler_table: + chanid = m.get_int() + chan = self._channels.get(chanid) + if chan is not None: + self._channel_handler_table[ptype](chan, m) + elif chanid in self.channels_seen: + self._log( + DEBUG, + "Ignoring message for dead channel {:d}".format( # noqa + chanid + ), + ) + else: + self._log( + ERROR, + "Channel request for unknown channel {:d}".format( # noqa + chanid + ), + ) + break + elif ( + self.auth_handler is not None + and ptype in self.auth_handler._handler_table + ): + handler = self.auth_handler._handler_table[ptype] + handler(m) + if len(self._expected_packet) > 0: + continue + else: + # Respond with "I don't implement this particular + # message type" message (unless the message type was + # itself literally MSG_UNIMPLEMENTED, in which case, we + # just shut up to avoid causing a useless loop). + name = MSG_NAMES[ptype] + warning = "Oops, unhandled type {} ({!r})".format( + ptype, name + ) + self._log(WARNING, warning) + if ptype != MSG_UNIMPLEMENTED: + msg = Message() + msg.add_byte(cMSG_UNIMPLEMENTED) + msg.add_int(m.seqno) + self._send_message(msg) + self.packetizer.complete_handshake() + except SSHException as e: + self._log( + ERROR, + "Exception ({}): {}".format( + "server" if self.server_mode else "client", e + ), + ) + self._log(ERROR, util.tb_strings()) + self.saved_exception = e + except EOFError as e: + self._log(DEBUG, "EOF in transport thread") + self.saved_exception = e + except socket.error as e: + if type(e.args) is tuple: + if e.args: + emsg = "{} ({:d})".format(e.args[1], e.args[0]) + else: # empty tuple, e.g. socket.timeout + emsg = str(e) or repr(e) + else: + emsg = e.args + self._log(ERROR, "Socket exception: " + emsg) + self.saved_exception = e + except Exception as e: + self._log(ERROR, "Unknown exception: " + str(e)) + self._log(ERROR, util.tb_strings()) + self.saved_exception = e + _active_threads.remove(self) + for chan in list(self._channels.values()): + chan._unlink() + if self.active: + self.active = False + self.packetizer.close() + if self.completion_event is not None: + self.completion_event.set() + if self.auth_handler is not None: + self.auth_handler.abort() + for event in self.channel_events.values(): + event.set() + try: + self.lock.acquire() + self.server_accept_cv.notify() + finally: + self.lock.release() + self.sock.close() + except: + # Don't raise spurious 'NoneType has no attribute X' errors when we + # wake up during interpreter shutdown. Or rather -- raise + # everything *if* sys.modules (used as a convenient sentinel) + # appears to still exist. + if self.sys.modules is not None: + raise + + def _log_agreement(self, which, local, remote): + # Log useful, non-duplicative line re: an agreed-upon algorithm. + # Old code implied algorithms could be asymmetrical (different for + # inbound vs outbound) so we preserve that possibility. + msg = "{}: ".format(which) + if local == remote: + msg += local + else: + msg += "local={}, remote={}".format(local, remote) + self._log(DEBUG, msg) + + # protocol stages + + def _negotiate_keys(self, m): + # throws SSHException on anything unusual + self.clear_to_send_lock.acquire() + try: + self.clear_to_send.clear() + finally: + self.clear_to_send_lock.release() + if self.local_kex_init is None: + # remote side wants to renegotiate + self._send_kex_init() + self._parse_kex_init(m) + self.kex_engine.start_kex() + + def _check_banner(self): + # this is slow, but we only have to do it once + for i in range(100): + # give them 15 seconds for the first line, then just 2 seconds + # each additional line. (some sites have very high latency.) + if i == 0: + timeout = self.banner_timeout + else: + timeout = 2 + try: + buf = self.packetizer.readline(timeout) + except ProxyCommandFailure: + raise + except Exception as e: + raise SSHException( + "Error reading SSH protocol banner" + str(e) + ) + if buf[:4] == "SSH-": + break + self._log(DEBUG, "Banner: " + buf) + if buf[:4] != "SSH-": + raise SSHException('Indecipherable protocol version "' + buf + '"') + # save this server version string for later + self.remote_version = buf + self._log(DEBUG, "Remote version/idstring: {}".format(buf)) + # pull off any attached comment + # NOTE: comment used to be stored in a variable and then...never used. + # since 2003. ca 877cd974b8182d26fa76d566072917ea67b64e67 + i = buf.find(" ") + if i >= 0: + buf = buf[:i] + # parse out version string and make sure it matches + segs = buf.split("-", 2) + if len(segs) < 3: + raise SSHException("Invalid SSH banner") + version = segs[1] + client = segs[2] + if version != "1.99" and version != "2.0": + msg = "Incompatible version ({} instead of 2.0)" + raise IncompatiblePeer(msg.format(version)) + msg = "Connected (version {}, client {})".format(version, client) + self._log(INFO, msg) + + def _send_kex_init(self): + """ + announce to the other side that we'd like to negotiate keys, and what + kind of key negotiation we support. + """ + self.clear_to_send_lock.acquire() + try: + self.clear_to_send.clear() + finally: + self.clear_to_send_lock.release() + self.gss_kex_used = False + self.in_kex = True + kex_algos = list(self.preferred_kex) + if self.server_mode: + mp_required_prefix = "diffie-hellman-group-exchange-sha" + kex_mp = [k for k in kex_algos if k.startswith(mp_required_prefix)] + if (self._modulus_pack is None) and (len(kex_mp) > 0): + # can't do group-exchange if we don't have a pack of potential + # primes + pkex = [ + k + for k in self.get_security_options().kex + if not k.startswith(mp_required_prefix) + ] + self.get_security_options().kex = pkex + available_server_keys = list( + filter( + list(self.server_key_dict.keys()).__contains__, + # TODO: ensure tests will catch if somebody streamlines + # this by mistake - case is the admittedly silly one where + # the only calls to add_server_key() contain keys which + # were filtered out of the below via disabled_algorithms. + # If this is streamlined, we would then be allowing the + # disabled algorithm(s) for hostkey use + # TODO: honestly this prob just wants to get thrown out + # when we make kex configuration more straightforward + self.preferred_keys, + ) + ) + else: + available_server_keys = self.preferred_keys + # Signal support for MSG_EXT_INFO so server will send it to us. + # NOTE: doing this here handily means we don't even consider this + # value when agreeing on real kex algo to use (which is a common + # pitfall when adding this apparently). + kex_algos.append("ext-info-c") + + # Similar to ext-info, but used in both server modes, so done outside + # of above if/else. + if self.advertise_strict_kex: + which = "s" if self.server_mode else "c" + kex_algos.append(f"kex-strict-{which}-v00@openssh.com") + + m = Message() + m.add_byte(cMSG_KEXINIT) + m.add_bytes(os.urandom(16)) + m.add_list(kex_algos) + m.add_list(available_server_keys) + m.add_list(self.preferred_ciphers) + m.add_list(self.preferred_ciphers) + m.add_list(self.preferred_macs) + m.add_list(self.preferred_macs) + m.add_list(self.preferred_compression) + m.add_list(self.preferred_compression) + m.add_string(bytes()) + m.add_string(bytes()) + m.add_boolean(False) + m.add_int(0) + # save a copy for later (needed to compute a hash) + self.local_kex_init = self._latest_kex_init = m.asbytes() + self._send_message(m) + + def _really_parse_kex_init(self, m, ignore_first_byte=False): + parsed = {} + if ignore_first_byte: + m.get_byte() + m.get_bytes(16) # cookie, discarded + parsed["kex_algo_list"] = m.get_list() + parsed["server_key_algo_list"] = m.get_list() + parsed["client_encrypt_algo_list"] = m.get_list() + parsed["server_encrypt_algo_list"] = m.get_list() + parsed["client_mac_algo_list"] = m.get_list() + parsed["server_mac_algo_list"] = m.get_list() + parsed["client_compress_algo_list"] = m.get_list() + parsed["server_compress_algo_list"] = m.get_list() + parsed["client_lang_list"] = m.get_list() + parsed["server_lang_list"] = m.get_list() + parsed["kex_follows"] = m.get_boolean() + m.get_int() # unused + return parsed + + def _get_latest_kex_init(self): + return self._really_parse_kex_init( + Message(self._latest_kex_init), + ignore_first_byte=True, + ) + + def _parse_kex_init(self, m): + parsed = self._really_parse_kex_init(m) + kex_algo_list = parsed["kex_algo_list"] + server_key_algo_list = parsed["server_key_algo_list"] + client_encrypt_algo_list = parsed["client_encrypt_algo_list"] + server_encrypt_algo_list = parsed["server_encrypt_algo_list"] + client_mac_algo_list = parsed["client_mac_algo_list"] + server_mac_algo_list = parsed["server_mac_algo_list"] + client_compress_algo_list = parsed["client_compress_algo_list"] + server_compress_algo_list = parsed["server_compress_algo_list"] + client_lang_list = parsed["client_lang_list"] + server_lang_list = parsed["server_lang_list"] + kex_follows = parsed["kex_follows"] + + self._log(DEBUG, "=== Key exchange possibilities ===") + for prefix, value in ( + ("kex algos", kex_algo_list), + ("server key", server_key_algo_list), + # TODO: shouldn't these two lines say "cipher" to match usual + # terminology (including elsewhere in paramiko!)? + ("client encrypt", client_encrypt_algo_list), + ("server encrypt", server_encrypt_algo_list), + ("client mac", client_mac_algo_list), + ("server mac", server_mac_algo_list), + ("client compress", client_compress_algo_list), + ("server compress", server_compress_algo_list), + ("client lang", client_lang_list), + ("server lang", server_lang_list), + ): + if value == [""]: + value = [""] + value = ", ".join(value) + self._log(DEBUG, "{}: {}".format(prefix, value)) + self._log(DEBUG, "kex follows: {}".format(kex_follows)) + self._log(DEBUG, "=== Key exchange agreements ===") + + # Record, and strip out, ext-info and/or strict-kex non-algorithms + self._remote_ext_info = None + self._remote_strict_kex = None + to_pop = [] + for i, algo in enumerate(kex_algo_list): + if algo.startswith("ext-info-"): + self._remote_ext_info = algo + to_pop.insert(0, i) + elif algo.startswith("kex-strict-"): + # NOTE: this is what we are expecting from the /remote/ end. + which = "c" if self.server_mode else "s" + expected = f"kex-strict-{which}-v00@openssh.com" + # Set strict mode if agreed. + self.agreed_on_strict_kex = ( + algo == expected and self.advertise_strict_kex + ) + self._log( + DEBUG, f"Strict kex mode: {self.agreed_on_strict_kex}" + ) + to_pop.insert(0, i) + for i in to_pop: + kex_algo_list.pop(i) + + # CVE mitigation: expect zeroed-out seqno anytime we are performing kex + # init phase, if strict mode was negotiated. + if ( + self.agreed_on_strict_kex + and not self.initial_kex_done + and m.seqno != 0 + ): + raise MessageOrderError( + "In strict-kex mode, but KEXINIT was not the first packet!" + ) + + # as a server, we pick the first item in the client's list that we + # support. + # as a client, we pick the first item in our list that the server + # supports. + if self.server_mode: + agreed_kex = list( + filter(self.preferred_kex.__contains__, kex_algo_list) + ) + else: + agreed_kex = list( + filter(kex_algo_list.__contains__, self.preferred_kex) + ) + if len(agreed_kex) == 0: + # TODO: do an auth-overhaul style aggregate exception here? + # TODO: would let us streamline log output & show all failures up + # front + raise IncompatiblePeer( + "Incompatible ssh peer (no acceptable kex algorithm)" + ) # noqa + self.kex_engine = self._kex_info[agreed_kex[0]](self) + self._log(DEBUG, "Kex: {}".format(agreed_kex[0])) + + if self.server_mode: + available_server_keys = list( + filter( + list(self.server_key_dict.keys()).__contains__, + self.preferred_keys, + ) + ) + agreed_keys = list( + filter( + available_server_keys.__contains__, server_key_algo_list + ) + ) + else: + agreed_keys = list( + filter(server_key_algo_list.__contains__, self.preferred_keys) + ) + if len(agreed_keys) == 0: + raise IncompatiblePeer( + "Incompatible ssh peer (no acceptable host key)" + ) # noqa + self.host_key_type = agreed_keys[0] + if self.server_mode and (self.get_server_key() is None): + raise IncompatiblePeer( + "Incompatible ssh peer (can't match requested host key type)" + ) # noqa + self._log_agreement("HostKey", agreed_keys[0], agreed_keys[0]) + + if self.server_mode: + agreed_local_ciphers = list( + filter( + self.preferred_ciphers.__contains__, + server_encrypt_algo_list, + ) + ) + agreed_remote_ciphers = list( + filter( + self.preferred_ciphers.__contains__, + client_encrypt_algo_list, + ) + ) + else: + agreed_local_ciphers = list( + filter( + client_encrypt_algo_list.__contains__, + self.preferred_ciphers, + ) + ) + agreed_remote_ciphers = list( + filter( + server_encrypt_algo_list.__contains__, + self.preferred_ciphers, + ) + ) + if len(agreed_local_ciphers) == 0 or len(agreed_remote_ciphers) == 0: + raise IncompatiblePeer( + "Incompatible ssh server (no acceptable ciphers)" + ) # noqa + self.local_cipher = agreed_local_ciphers[0] + self.remote_cipher = agreed_remote_ciphers[0] + self._log_agreement( + "Cipher", local=self.local_cipher, remote=self.remote_cipher + ) + + if self.server_mode: + agreed_remote_macs = list( + filter(self.preferred_macs.__contains__, client_mac_algo_list) + ) + agreed_local_macs = list( + filter(self.preferred_macs.__contains__, server_mac_algo_list) + ) + else: + agreed_local_macs = list( + filter(client_mac_algo_list.__contains__, self.preferred_macs) + ) + agreed_remote_macs = list( + filter(server_mac_algo_list.__contains__, self.preferred_macs) + ) + if (len(agreed_local_macs) == 0) or (len(agreed_remote_macs) == 0): + raise IncompatiblePeer( + "Incompatible ssh server (no acceptable macs)" + ) + self.local_mac = agreed_local_macs[0] + self.remote_mac = agreed_remote_macs[0] + self._log_agreement( + "MAC", local=self.local_mac, remote=self.remote_mac + ) + + if self.server_mode: + agreed_remote_compression = list( + filter( + self.preferred_compression.__contains__, + client_compress_algo_list, + ) + ) + agreed_local_compression = list( + filter( + self.preferred_compression.__contains__, + server_compress_algo_list, + ) + ) + else: + agreed_local_compression = list( + filter( + client_compress_algo_list.__contains__, + self.preferred_compression, + ) + ) + agreed_remote_compression = list( + filter( + server_compress_algo_list.__contains__, + self.preferred_compression, + ) + ) + if ( + len(agreed_local_compression) == 0 + or len(agreed_remote_compression) == 0 + ): + msg = "Incompatible ssh server (no acceptable compression)" + msg += " {!r} {!r} {!r}" + raise IncompatiblePeer( + msg.format( + agreed_local_compression, + agreed_remote_compression, + self.preferred_compression, + ) + ) + self.local_compression = agreed_local_compression[0] + self.remote_compression = agreed_remote_compression[0] + self._log_agreement( + "Compression", + local=self.local_compression, + remote=self.remote_compression, + ) + self._log(DEBUG, "=== End of kex handshake ===") + + # save for computing hash later... + # now wait! openssh has a bug (and others might too) where there are + # actually some extra bytes (one NUL byte in openssh's case) added to + # the end of the packet but not parsed. turns out we need to throw + # away those bytes because they aren't part of the hash. + self.remote_kex_init = cMSG_KEXINIT + m.get_so_far() + + def _activate_inbound(self): + """switch on newly negotiated encryption parameters for + inbound traffic""" + info = self._cipher_info[self.remote_cipher] + aead = info.get("is_aead", False) + block_size = info["block-size"] + key_size = info["key-size"] + # Non-AEAD/GCM type ciphers' IV size is their block size. + iv_size = info.get("iv-size", block_size) + if self.server_mode: + iv_in = self._compute_key("A", iv_size) + key_in = self._compute_key("C", key_size) + else: + iv_in = self._compute_key("B", iv_size) + key_in = self._compute_key("D", key_size) + + engine = self._get_engine( + name=self.remote_cipher, + key=key_in, + iv=iv_in, + operation=self._DECRYPT, + aead=aead, + ) + etm = (not aead) and "etm@openssh.com" in self.remote_mac + mac_size = self._mac_info[self.remote_mac]["size"] + mac_engine = self._mac_info[self.remote_mac]["class"] + # initial mac keys are done in the hash's natural size (not the + # potentially truncated transmission size) + if self.server_mode: + mac_key = self._compute_key("E", mac_engine().digest_size) + else: + mac_key = self._compute_key("F", mac_engine().digest_size) + + self.packetizer.set_inbound_cipher( + block_engine=engine, + block_size=block_size, + mac_engine=None if aead else mac_engine, + mac_size=16 if aead else mac_size, + mac_key=None if aead else mac_key, + etm=etm, + aead=aead, + iv_in=iv_in if aead else None, + ) + + compress_in = self._compression_info[self.remote_compression][1] + if compress_in is not None and ( + self.remote_compression != "zlib@openssh.com" or self.authenticated + ): + self._log(DEBUG, "Switching on inbound compression ...") + self.packetizer.set_inbound_compressor(compress_in()) + # Reset inbound sequence number if strict mode. + if self.agreed_on_strict_kex: + self._log( + DEBUG, + "Resetting inbound seqno after NEWKEYS due to strict mode", + ) + self.packetizer.reset_seqno_in() + + def _activate_outbound(self): + """switch on newly negotiated encryption parameters for + outbound traffic""" + m = Message() + m.add_byte(cMSG_NEWKEYS) + self._send_message(m) + # Reset outbound sequence number if strict mode. + if self.agreed_on_strict_kex: + self._log( + DEBUG, + "Resetting outbound seqno after NEWKEYS due to strict mode", + ) + self.packetizer.reset_seqno_out() + info = self._cipher_info[self.local_cipher] + aead = info.get("is_aead", False) + block_size = info["block-size"] + key_size = info["key-size"] + # Non-AEAD/GCM type ciphers' IV size is their block size. + iv_size = info.get("iv-size", block_size) + if self.server_mode: + iv_out = self._compute_key("B", iv_size) + key_out = self._compute_key("D", key_size) + else: + iv_out = self._compute_key("A", iv_size) + key_out = self._compute_key("C", key_size) + + engine = self._get_engine( + name=self.local_cipher, + key=key_out, + iv=iv_out, + operation=self._ENCRYPT, + aead=aead, + ) + etm = (not aead) and "etm@openssh.com" in self.local_mac + mac_size = self._mac_info[self.local_mac]["size"] + mac_engine = self._mac_info[self.local_mac]["class"] + # initial mac keys are done in the hash's natural size (not the + # potentially truncated transmission size) + if self.server_mode: + mac_key = self._compute_key("F", mac_engine().digest_size) + else: + mac_key = self._compute_key("E", mac_engine().digest_size) + sdctr = self.local_cipher.endswith("-ctr") + + self.packetizer.set_outbound_cipher( + block_engine=engine, + block_size=block_size, + mac_engine=None if aead else mac_engine, + mac_size=16 if aead else mac_size, + mac_key=None if aead else mac_key, + sdctr=sdctr, + etm=etm, + aead=aead, + iv_out=iv_out if aead else None, + ) + + compress_out = self._compression_info[self.local_compression][0] + if compress_out is not None and ( + self.local_compression != "zlib@openssh.com" or self.authenticated + ): + self._log(DEBUG, "Switching on outbound compression ...") + self.packetizer.set_outbound_compressor(compress_out()) + if not self.packetizer.need_rekey(): + self.in_kex = False + # If client indicated extension support, send that packet immediately + if ( + self.server_mode + and self.server_sig_algs + and self._remote_ext_info == "ext-info-c" + ): + extensions = {"server-sig-algs": ",".join(self.preferred_pubkeys)} + m = Message() + m.add_byte(cMSG_EXT_INFO) + m.add_int(len(extensions)) + for name, value in sorted(extensions.items()): + m.add_string(name) + m.add_string(value) + self._send_message(m) + # we always expect to receive NEWKEYS now + self._expect_packet(MSG_NEWKEYS) + + def _auth_trigger(self): + self.authenticated = True + # delayed initiation of compression + if self.local_compression == "zlib@openssh.com": + compress_out = self._compression_info[self.local_compression][0] + self._log(DEBUG, "Switching on outbound compression ...") + self.packetizer.set_outbound_compressor(compress_out()) + if self.remote_compression == "zlib@openssh.com": + compress_in = self._compression_info[self.remote_compression][1] + self._log(DEBUG, "Switching on inbound compression ...") + self.packetizer.set_inbound_compressor(compress_in()) + + def _parse_ext_info(self, msg): + # Packet is a count followed by that many key-string to possibly-bytes + # pairs. + extensions = {} + for _ in range(msg.get_int()): + name = msg.get_text() + value = msg.get_string() + extensions[name] = value + self._log(DEBUG, "Got EXT_INFO: {}".format(extensions)) + # NOTE: this should work ok in cases where a server sends /two/ such + # messages; the RFC explicitly states a 2nd one should overwrite the + # 1st. + self.server_extensions = extensions + + def _parse_newkeys(self, m): + self._log(DEBUG, "Switch to new keys ...") + self._activate_inbound() + # can also free a bunch of stuff here + self.local_kex_init = self.remote_kex_init = None + self.K = None + self.kex_engine = None + if self.server_mode and (self.auth_handler is None): + # create auth handler for server mode + self.auth_handler = AuthHandler(self) + if not self.initial_kex_done: + # this was the first key exchange + # (also signal to packetizer as it sometimes wants to know this + # status as well, eg when seqnos rollover) + self.initial_kex_done = self.packetizer._initial_kex_done = True + # send an event? + if self.completion_event is not None: + self.completion_event.set() + # it's now okay to send data again (if this was a re-key) + if not self.packetizer.need_rekey(): + self.in_kex = False + self.clear_to_send_lock.acquire() + try: + self.clear_to_send.set() + finally: + self.clear_to_send_lock.release() + return + + def _parse_disconnect(self, m): + code = m.get_int() + desc = m.get_text() + self._log(INFO, "Disconnect (code {:d}): {}".format(code, desc)) + + def _parse_global_request(self, m): + kind = m.get_text() + self._log(DEBUG, 'Received global request "{}"'.format(kind)) + want_reply = m.get_boolean() + if not self.server_mode: + self._log( + DEBUG, + 'Rejecting "{}" global request from server.'.format(kind), + ) + ok = False + elif kind == "tcpip-forward": + address = m.get_text() + port = m.get_int() + ok = self.server_object.check_port_forward_request(address, port) + if ok: + ok = (ok,) + elif kind == "cancel-tcpip-forward": + address = m.get_text() + port = m.get_int() + self.server_object.cancel_port_forward_request(address, port) + ok = True + else: + ok = self.server_object.check_global_request(kind, m) + extra = () + if type(ok) is tuple: + extra = ok + ok = True + if want_reply: + msg = Message() + if ok: + msg.add_byte(cMSG_REQUEST_SUCCESS) + msg.add(*extra) + else: + msg.add_byte(cMSG_REQUEST_FAILURE) + self._send_message(msg) + + def _parse_request_success(self, m): + self._log(DEBUG, "Global request successful.") + self.global_response = m + if self.completion_event is not None: + self.completion_event.set() + + def _parse_request_failure(self, m): + self._log(DEBUG, "Global request denied.") + self.global_response = None + if self.completion_event is not None: + self.completion_event.set() + + def _parse_channel_open_success(self, m): + chanid = m.get_int() + server_chanid = m.get_int() + server_window_size = m.get_int() + server_max_packet_size = m.get_int() + chan = self._channels.get(chanid) + if chan is None: + self._log(WARNING, "Success for unrequested channel! [??]") + return + self.lock.acquire() + try: + chan._set_remote_channel( + server_chanid, server_window_size, server_max_packet_size + ) + self._log(DEBUG, "Secsh channel {:d} opened.".format(chanid)) + if chanid in self.channel_events: + self.channel_events[chanid].set() + del self.channel_events[chanid] + finally: + self.lock.release() + return + + def _parse_channel_open_failure(self, m): + chanid = m.get_int() + reason = m.get_int() + reason_str = m.get_text() + m.get_text() # ignored language + reason_text = CONNECTION_FAILED_CODE.get(reason, "(unknown code)") + self._log( + ERROR, + "Secsh channel {:d} open FAILED: {}: {}".format( + chanid, reason_str, reason_text + ), + ) + self.lock.acquire() + try: + self.saved_exception = ChannelException(reason, reason_text) + if chanid in self.channel_events: + self._channels.delete(chanid) + if chanid in self.channel_events: + self.channel_events[chanid].set() + del self.channel_events[chanid] + finally: + self.lock.release() + return + + def _parse_channel_open(self, m): + kind = m.get_text() + chanid = m.get_int() + initial_window_size = m.get_int() + max_packet_size = m.get_int() + reject = False + if ( + kind == "auth-agent@openssh.com" + and self._forward_agent_handler is not None + ): + self._log(DEBUG, "Incoming forward agent connection") + self.lock.acquire() + try: + my_chanid = self._next_channel() + finally: + self.lock.release() + elif (kind == "x11") and (self._x11_handler is not None): + origin_addr = m.get_text() + origin_port = m.get_int() + self._log( + DEBUG, + "Incoming x11 connection from {}:{:d}".format( + origin_addr, origin_port + ), + ) + self.lock.acquire() + try: + my_chanid = self._next_channel() + finally: + self.lock.release() + elif (kind == "forwarded-tcpip") and (self._tcp_handler is not None): + server_addr = m.get_text() + server_port = m.get_int() + origin_addr = m.get_text() + origin_port = m.get_int() + self._log( + DEBUG, + "Incoming tcp forwarded connection from {}:{:d}".format( + origin_addr, origin_port + ), + ) + self.lock.acquire() + try: + my_chanid = self._next_channel() + finally: + self.lock.release() + elif not self.server_mode: + self._log( + DEBUG, + 'Rejecting "{}" channel request from server.'.format(kind), + ) + reject = True + reason = OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED + else: + self.lock.acquire() + try: + my_chanid = self._next_channel() + finally: + self.lock.release() + if kind == "direct-tcpip": + # handle direct-tcpip requests coming from the client + dest_addr = m.get_text() + dest_port = m.get_int() + origin_addr = m.get_text() + origin_port = m.get_int() + reason = self.server_object.check_channel_direct_tcpip_request( + my_chanid, + (origin_addr, origin_port), + (dest_addr, dest_port), + ) + else: + reason = self.server_object.check_channel_request( + kind, my_chanid + ) + if reason != OPEN_SUCCEEDED: + self._log( + DEBUG, + 'Rejecting "{}" channel request from client.'.format(kind), + ) + reject = True + if reject: + msg = Message() + msg.add_byte(cMSG_CHANNEL_OPEN_FAILURE) + msg.add_int(chanid) + msg.add_int(reason) + msg.add_string("") + msg.add_string("en") + self._send_message(msg) + return + + chan = Channel(my_chanid) + self.lock.acquire() + try: + self._channels.put(my_chanid, chan) + self.channels_seen[my_chanid] = True + chan._set_transport(self) + chan._set_window( + self.default_window_size, self.default_max_packet_size + ) + chan._set_remote_channel( + chanid, initial_window_size, max_packet_size + ) + finally: + self.lock.release() + m = Message() + m.add_byte(cMSG_CHANNEL_OPEN_SUCCESS) + m.add_int(chanid) + m.add_int(my_chanid) + m.add_int(self.default_window_size) + m.add_int(self.default_max_packet_size) + self._send_message(m) + self._log( + DEBUG, "Secsh channel {:d} ({}) opened.".format(my_chanid, kind) + ) + if kind == "auth-agent@openssh.com": + self._forward_agent_handler(chan) + elif kind == "x11": + self._x11_handler(chan, (origin_addr, origin_port)) + elif kind == "forwarded-tcpip": + chan.origin_addr = (origin_addr, origin_port) + self._tcp_handler( + chan, (origin_addr, origin_port), (server_addr, server_port) + ) + else: + self._queue_incoming_channel(chan) + + def _parse_debug(self, m): + m.get_boolean() # always_display + msg = m.get_string() + m.get_string() # language + self._log(DEBUG, "Debug msg: {}".format(util.safe_string(msg))) + + def _get_subsystem_handler(self, name): + try: + self.lock.acquire() + if name not in self.subsystem_table: + return None, [], {} + return self.subsystem_table[name] + finally: + self.lock.release() + + _channel_handler_table = { + MSG_CHANNEL_SUCCESS: Channel._request_success, + MSG_CHANNEL_FAILURE: Channel._request_failed, + MSG_CHANNEL_DATA: Channel._feed, + MSG_CHANNEL_EXTENDED_DATA: Channel._feed_extended, + MSG_CHANNEL_WINDOW_ADJUST: Channel._window_adjust, + MSG_CHANNEL_REQUEST: Channel._handle_request, + MSG_CHANNEL_EOF: Channel._handle_eof, + MSG_CHANNEL_CLOSE: Channel._handle_close, + } + + +# TODO 4.0: drop this, we barely use it ourselves, it badly replicates the +# Transport-internal algorithm management, AND does so in a way which doesn't +# honor newer things like disabled_algorithms! +class SecurityOptions: + """ + Simple object containing the security preferences of an ssh transport. + These are tuples of acceptable ciphers, digests, key types, and key + exchange algorithms, listed in order of preference. + + Changing the contents and/or order of these fields affects the underlying + `.Transport` (but only if you change them before starting the session). + If you try to add an algorithm that paramiko doesn't recognize, + ``ValueError`` will be raised. If you try to assign something besides a + tuple to one of the fields, ``TypeError`` will be raised. + """ + + __slots__ = "_transport" + + def __init__(self, transport): + self._transport = transport + + def __repr__(self): + """ + Returns a string representation of this object, for debugging. + """ + return "".format(self._transport) + + def _set(self, name, orig, x): + if type(x) is list: + x = tuple(x) + if type(x) is not tuple: + raise TypeError("expected tuple or list") + possible = list(getattr(self._transport, orig).keys()) + forbidden = [n for n in x if n not in possible] + if len(forbidden) > 0: + raise ValueError("unknown cipher") + setattr(self._transport, name, x) + + @property + def ciphers(self): + """Symmetric encryption ciphers""" + return self._transport._preferred_ciphers + + @ciphers.setter + def ciphers(self, x): + self._set("_preferred_ciphers", "_cipher_info", x) + + @property + def digests(self): + """Digest (one-way hash) algorithms""" + return self._transport._preferred_macs + + @digests.setter + def digests(self, x): + self._set("_preferred_macs", "_mac_info", x) + + @property + def key_types(self): + """Public-key algorithms""" + return self._transport._preferred_keys + + @key_types.setter + def key_types(self, x): + self._set("_preferred_keys", "_key_info", x) + + @property + def kex(self): + """Key exchange algorithms""" + return self._transport._preferred_kex + + @kex.setter + def kex(self, x): + self._set("_preferred_kex", "_kex_info", x) + + @property + def compression(self): + """Compression algorithms""" + return self._transport._preferred_compression + + @compression.setter + def compression(self, x): + self._set("_preferred_compression", "_compression_info", x) + + +class ChannelMap: + def __init__(self): + # (id -> Channel) + self._map = weakref.WeakValueDictionary() + self._lock = threading.Lock() + + def put(self, chanid, chan): + self._lock.acquire() + try: + self._map[chanid] = chan + finally: + self._lock.release() + + def get(self, chanid): + self._lock.acquire() + try: + return self._map.get(chanid, None) + finally: + self._lock.release() + + def delete(self, chanid): + self._lock.acquire() + try: + try: + del self._map[chanid] + except KeyError: + pass + finally: + self._lock.release() + + def values(self): + self._lock.acquire() + try: + return list(self._map.values()) + finally: + self._lock.release() + + def __len__(self): + self._lock.acquire() + try: + return len(self._map) + finally: + self._lock.release() + + +class ServiceRequestingTransport(Transport): + """ + Transport, but also handling service requests, like it oughtta! + + .. versionadded:: 3.2 + """ + + # NOTE: this purposefully duplicates some of the parent class in order to + # modernize, refactor, etc. The intent is that eventually we will collapse + # this one onto the parent in a backwards incompatible release. + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._service_userauth_accepted = False + self._handler_table[MSG_SERVICE_ACCEPT] = self._parse_service_accept + + def _parse_service_accept(self, m): + service = m.get_text() + # Short-circuit for any service name not ssh-userauth. + # NOTE: it's technically possible for 'service name' in + # SERVICE_REQUEST/ACCEPT messages to be "ssh-connection" -- + # but I don't see evidence of Paramiko ever initiating or expecting to + # receive one of these. We /do/ see the 'service name' field in + # MSG_USERAUTH_REQUEST/ACCEPT/FAILURE set to this string, but that is a + # different set of handlers, so...! + if service != "ssh-userauth": + # TODO 4.0: consider erroring here (with an ability to opt out?) + # instead as it probably means something went Very Wrong. + self._log( + DEBUG, 'Service request "{}" accepted (?)'.format(service) + ) + return + # Record that we saw a service-userauth acceptance, meaning we are free + # to submit auth requests. + self._service_userauth_accepted = True + self._log(DEBUG, "MSG_SERVICE_ACCEPT received; auth may begin") + + def ensure_session(self): + # Make sure we're not trying to auth on a not-yet-open or + # already-closed transport session; that's our responsibility, not that + # of AuthHandler. + if (not self.active) or (not self.initial_kex_done): + # TODO: better error message? this can happen in many places, eg + # user error (authing before connecting) or developer error (some + # improperly handled pre/mid auth shutdown didn't become fatal + # enough). The latter is much more common & should ideally be fixed + # by terminating things harder? + raise SSHException("No existing session") + # Also make sure we've actually been told we are allowed to auth. + if self._service_userauth_accepted: + return + # Or request to do so, otherwise. + m = Message() + m.add_byte(cMSG_SERVICE_REQUEST) + m.add_string("ssh-userauth") + self._log(DEBUG, "Sending MSG_SERVICE_REQUEST: ssh-userauth") + self._send_message(m) + # Now we wait to hear back; the user is expecting a blocking-style auth + # request so there's no point giving control back anywhere. + while not self._service_userauth_accepted: + # TODO: feels like we're missing an AuthHandler Event like + # 'self.auth_event' which is set when AuthHandler shuts down in + # ways good AND bad. Transport only seems to have completion_event + # which is unclear re: intent, eg it's set by newkeys which always + # happens on connection, so it'll always be set by the time we get + # here. + # NOTE: this copies the timing of event.wait() in + # AuthHandler.wait_for_response, re: 1/10 of a second. Could + # presumably be smaller, but seems unlikely this period is going to + # be "too long" for any code doing ssh networking... + time.sleep(0.1) + self.auth_handler = self.get_auth_handler() + + def get_auth_handler(self): + # NOTE: using new sibling subclass instead of classic AuthHandler + return AuthOnlyHandler(self) + + def auth_none(self, username): + # TODO 4.0: merge to parent, preserving (most of) docstring + self.ensure_session() + return self.auth_handler.auth_none(username) + + def auth_password(self, username, password, fallback=True): + # TODO 4.0: merge to parent, preserving (most of) docstring + self.ensure_session() + try: + return self.auth_handler.auth_password(username, password) + except BadAuthenticationType as e: + # if password auth isn't allowed, but keyboard-interactive *is*, + # try to fudge it + if not fallback or ("keyboard-interactive" not in e.allowed_types): + raise + try: + + def handler(title, instructions, fields): + if len(fields) > 1: + raise SSHException("Fallback authentication failed.") + if len(fields) == 0: + # for some reason, at least on os x, a 2nd request will + # be made with zero fields requested. maybe it's just + # to try to fake out automated scripting of the exact + # type we're doing here. *shrug* :) + return [] + return [password] + + return self.auth_interactive(username, handler) + except SSHException: + # attempt to fudge failed; just raise the original exception + raise e + + def auth_publickey(self, username, key): + # TODO 4.0: merge to parent, preserving (most of) docstring + self.ensure_session() + return self.auth_handler.auth_publickey(username, key) + + def auth_interactive(self, username, handler, submethods=""): + # TODO 4.0: merge to parent, preserving (most of) docstring + self.ensure_session() + return self.auth_handler.auth_interactive( + username, handler, submethods + ) + + def auth_interactive_dumb(self, username, handler=None, submethods=""): + # TODO 4.0: merge to parent, preserving (most of) docstring + # NOTE: legacy impl omitted equiv of ensure_session since it just wraps + # another call to an auth method. however we reinstate it for + # consistency reasons. + self.ensure_session() + if not handler: + + def handler(title, instructions, prompt_list): + answers = [] + if title: + print(title.strip()) + if instructions: + print(instructions.strip()) + for prompt, show_input in prompt_list: + print(prompt.strip(), end=" ") + answers.append(input()) + return answers + + return self.auth_interactive(username, handler, submethods) + + def auth_gssapi_with_mic(self, username, gss_host, gss_deleg_creds): + # TODO 4.0: merge to parent, preserving (most of) docstring + self.ensure_session() + self.auth_handler = self.get_auth_handler() + return self.auth_handler.auth_gssapi_with_mic( + username, gss_host, gss_deleg_creds + ) + + def auth_gssapi_keyex(self, username): + # TODO 4.0: merge to parent, preserving (most of) docstring + self.ensure_session() + self.auth_handler = self.get_auth_handler() + return self.auth_handler.auth_gssapi_keyex(username) diff --git a/venv/lib/python3.11/site-packages/paramiko/util.py b/venv/lib/python3.11/site-packages/paramiko/util.py new file mode 100644 index 0000000..f1e33a5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/util.py @@ -0,0 +1,337 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Useful functions used by the rest of paramiko. +""" + + +import sys +import struct +import traceback +import threading +import logging + +from paramiko.common import ( + DEBUG, + zero_byte, + xffffffff, + max_byte, + byte_ord, + byte_chr, +) +from paramiko.config import SSHConfig + + +def inflate_long(s, always_positive=False): + """turns a normalized byte string into a long-int + (adapted from Crypto.Util.number)""" + out = 0 + negative = 0 + if not always_positive and (len(s) > 0) and (byte_ord(s[0]) >= 0x80): + negative = 1 + if len(s) % 4: + filler = zero_byte + if negative: + filler = max_byte + # never convert this to ``s +=`` because this is a string, not a number + # noinspection PyAugmentAssignment + s = filler * (4 - len(s) % 4) + s + for i in range(0, len(s), 4): + out = (out << 32) + struct.unpack(">I", s[i : i + 4])[0] + if negative: + out -= 1 << (8 * len(s)) + return out + + +def deflate_long(n, add_sign_padding=True): + """turns a long-int into a normalized byte string + (adapted from Crypto.Util.number)""" + # after much testing, this algorithm was deemed to be the fastest + s = bytes() + n = int(n) + while (n != 0) and (n != -1): + s = struct.pack(">I", n & xffffffff) + s + n >>= 32 + # strip off leading zeros, FFs + for i in enumerate(s): + if (n == 0) and (i[1] != 0): + break + if (n == -1) and (i[1] != 0xFF): + break + else: + # degenerate case, n was either 0 or -1 + i = (0,) + if n == 0: + s = zero_byte + else: + s = max_byte + s = s[i[0] :] + if add_sign_padding: + if (n == 0) and (byte_ord(s[0]) >= 0x80): + s = zero_byte + s + if (n == -1) and (byte_ord(s[0]) < 0x80): + s = max_byte + s + return s + + +def format_binary(data, prefix=""): + x = 0 + out = [] + while len(data) > x + 16: + out.append(format_binary_line(data[x : x + 16])) + x += 16 + if x < len(data): + out.append(format_binary_line(data[x:])) + return [prefix + line for line in out] + + +def format_binary_line(data): + left = " ".join(["{:02X}".format(byte_ord(c)) for c in data]) + right = "".join( + [".{:c}..".format(byte_ord(c))[(byte_ord(c) + 63) // 95] for c in data] + ) + return "{:50s} {}".format(left, right) + + +def safe_string(s): + out = b"" + for c in s: + i = byte_ord(c) + if 32 <= i <= 127: + out += byte_chr(i) + else: + out += b("%{:02X}".format(i)) + return out + + +def bit_length(n): + try: + return n.bit_length() + except AttributeError: + norm = deflate_long(n, False) + hbyte = byte_ord(norm[0]) + if hbyte == 0: + return 1 + bitlen = len(norm) * 8 + while not (hbyte & 0x80): + hbyte <<= 1 + bitlen -= 1 + return bitlen + + +def tb_strings(): + return "".join(traceback.format_exception(*sys.exc_info())).split("\n") + + +def generate_key_bytes(hash_alg, salt, key, nbytes): + """ + Given a password, passphrase, or other human-source key, scramble it + through a secure hash into some keyworthy bytes. This specific algorithm + is used for encrypting/decrypting private key files. + + :param function hash_alg: A function which creates a new hash object, such + as ``hashlib.sha256``. + :param salt: data to salt the hash with. + :type bytes salt: Hash salt bytes. + :param str key: human-entered password or passphrase. + :param int nbytes: number of bytes to generate. + :return: Key data, as `bytes`. + """ + keydata = bytes() + digest = bytes() + if len(salt) > 8: + salt = salt[:8] + while nbytes > 0: + hash_obj = hash_alg() + if len(digest) > 0: + hash_obj.update(digest) + hash_obj.update(b(key)) + hash_obj.update(salt) + digest = hash_obj.digest() + size = min(nbytes, len(digest)) + keydata += digest[:size] + nbytes -= size + return keydata + + +def load_host_keys(filename): + """ + Read a file of known SSH host keys, in the format used by openssh, and + return a compound dict of ``hostname -> keytype ->`` `PKey + `. The hostname may be an IP address or DNS name. The + keytype will be either ``"ssh-rsa"`` or ``"ssh-dss"``. + + This type of file unfortunately doesn't exist on Windows, but on posix, + it will usually be stored in ``os.path.expanduser("~/.ssh/known_hosts")``. + + Since 1.5.3, this is just a wrapper around `.HostKeys`. + + :param str filename: name of the file to read host keys from + :return: + nested dict of `.PKey` objects, indexed by hostname and then keytype + """ + from paramiko.hostkeys import HostKeys + + return HostKeys(filename) + + +def parse_ssh_config(file_obj): + """ + Provided only as a backward-compatible wrapper around `.SSHConfig`. + + .. deprecated:: 2.7 + Use `SSHConfig.from_file` instead. + """ + config = SSHConfig() + config.parse(file_obj) + return config + + +def lookup_ssh_host_config(hostname, config): + """ + Provided only as a backward-compatible wrapper around `.SSHConfig`. + """ + return config.lookup(hostname) + + +def mod_inverse(x, m): + # it's crazy how small Python can make this function. + u1, u2, u3 = 1, 0, m + v1, v2, v3 = 0, 1, x + + while v3 > 0: + q = u3 // v3 + u1, v1 = v1, u1 - v1 * q + u2, v2 = v2, u2 - v2 * q + u3, v3 = v3, u3 - v3 * q + if u2 < 0: + u2 += m + return u2 + + +_g_thread_data = threading.local() +_g_thread_counter = 0 +_g_thread_lock = threading.Lock() + + +def get_thread_id(): + global _g_thread_data, _g_thread_counter, _g_thread_lock + try: + return _g_thread_data.id + except AttributeError: + with _g_thread_lock: + _g_thread_counter += 1 + _g_thread_data.id = _g_thread_counter + return _g_thread_data.id + + +def log_to_file(filename, level=DEBUG): + """send paramiko logs to a logfile, + if they're not already going somewhere""" + logger = logging.getLogger("paramiko") + if len(logger.handlers) > 0: + return + logger.setLevel(level) + f = open(filename, "a") + handler = logging.StreamHandler(f) + frm = "%(levelname)-.3s [%(asctime)s.%(msecs)03d] thr=%(_threadid)-3d" + frm += " %(name)s: %(message)s" + handler.setFormatter(logging.Formatter(frm, "%Y%m%d-%H:%M:%S")) + logger.addHandler(handler) + + +# make only one filter object, so it doesn't get applied more than once +class PFilter: + def filter(self, record): + record._threadid = get_thread_id() + return True + + +_pfilter = PFilter() + + +def get_logger(name): + logger = logging.getLogger(name) + logger.addFilter(_pfilter) + return logger + + +def constant_time_bytes_eq(a, b): + if len(a) != len(b): + return False + res = 0 + # noinspection PyUnresolvedReferences + for i in range(len(a)): # noqa: F821 + res |= byte_ord(a[i]) ^ byte_ord(b[i]) + return res == 0 + + +class ClosingContextManager: + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.close() + + +def clamp_value(minimum, val, maximum): + return max(minimum, min(val, maximum)) + + +def asbytes(s): + """ + Coerce to bytes if possible or return unchanged. + """ + try: + # Attempt to run through our version of b(), which does the Right Thing + # for unicode strings vs bytestrings, and raises TypeError if it's not + # one of those types. + return b(s) + except TypeError: + try: + # If it wasn't a string/byte/buffer-ish object, try calling an + # asbytes() method, which many of our internal classes implement. + return s.asbytes() + except AttributeError: + # Finally, just do nothing & assume this object is sufficiently + # byte-y or buffer-y that everything will work out (or that callers + # are capable of handling whatever it is.) + return s + + +# TODO: clean this up / force callers to assume bytes OR unicode +def b(s, encoding="utf8"): + """cast unicode or bytes to bytes""" + if isinstance(s, bytes): + return s + elif isinstance(s, str): + return s.encode(encoding) + else: + raise TypeError(f"Expected unicode or bytes, got {type(s)}") + + +# TODO: clean this up / force callers to assume bytes OR unicode +def u(s, encoding="utf8"): + """cast bytes or unicode to unicode""" + if isinstance(s, bytes): + return s.decode(encoding) + elif isinstance(s, str): + return s + else: + raise TypeError(f"Expected unicode or bytes, got {type(s)}") diff --git a/venv/lib/python3.11/site-packages/paramiko/win_openssh.py b/venv/lib/python3.11/site-packages/paramiko/win_openssh.py new file mode 100644 index 0000000..614b589 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/win_openssh.py @@ -0,0 +1,56 @@ +# Copyright (C) 2021 Lew Gordon +# Copyright (C) 2022 Patrick Spendrin +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import os.path +import time + +PIPE_NAME = r"\\.\pipe\openssh-ssh-agent" + + +def can_talk_to_agent(): + # use os.listdir() instead of os.path.exists(), because os.path.exists() + # uses CreateFileW() API and the pipe cannot be reopen unless the server + # calls DisconnectNamedPipe(). + dir_, name = os.path.split(PIPE_NAME) + name = name.lower() + return any(name == n.lower() for n in os.listdir(dir_)) + + +class OpenSSHAgentConnection: + def __init__(self): + while True: + try: + self._pipe = os.open(PIPE_NAME, os.O_RDWR | os.O_BINARY) + except OSError as e: + # retry when errno 22 which means that the server has not + # called DisconnectNamedPipe() yet. + if e.errno != 22: + raise + else: + break + time.sleep(0.1) + + def send(self, data): + return os.write(self._pipe, data) + + def recv(self, n): + return os.read(self._pipe, n) + + def close(self): + return os.close(self._pipe) diff --git a/venv/lib/python3.11/site-packages/paramiko/win_pageant.py b/venv/lib/python3.11/site-packages/paramiko/win_pageant.py new file mode 100644 index 0000000..c927de6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/paramiko/win_pageant.py @@ -0,0 +1,138 @@ +# Copyright (C) 2005 John Arbash-Meinel +# Modified up by: Todd Whiteman +# +# This file is part of paramiko. +# +# Paramiko 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. +# +# Paramiko 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 Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Functions for communicating with Pageant, the basic windows ssh agent program. +""" + +import array +import ctypes.wintypes +import platform +import struct +from paramiko.common import zero_byte +from paramiko.util import b + +import _thread as thread + +from . import _winapi + + +_AGENT_COPYDATA_ID = 0x804E50BA +_AGENT_MAX_MSGLEN = 8192 +# Note: The WM_COPYDATA value is pulled from win32con, as a workaround +# so we do not have to import this huge library just for this one variable. +win32con_WM_COPYDATA = 74 + + +def _get_pageant_window_object(): + return ctypes.windll.user32.FindWindowA(b"Pageant", b"Pageant") + + +def can_talk_to_agent(): + """ + Check to see if there is a "Pageant" agent we can talk to. + + This checks both if we have the required libraries (win32all or ctypes) + and if there is a Pageant currently running. + """ + return bool(_get_pageant_window_object()) + + +if platform.architecture()[0] == "64bit": + ULONG_PTR = ctypes.c_uint64 +else: + ULONG_PTR = ctypes.c_uint32 + + +class COPYDATASTRUCT(ctypes.Structure): + """ + ctypes implementation of + http://msdn.microsoft.com/en-us/library/windows/desktop/ms649010%28v=vs.85%29.aspx + """ + + _fields_ = [ + ("num_data", ULONG_PTR), + ("data_size", ctypes.wintypes.DWORD), + ("data_loc", ctypes.c_void_p), + ] + + +def _query_pageant(msg): + """ + Communication with the Pageant process is done through a shared + memory-mapped file. + """ + hwnd = _get_pageant_window_object() + if not hwnd: + # Raise a failure to connect exception, pageant isn't running anymore! + return None + + # create a name for the mmap + map_name = f"PageantRequest{thread.get_ident():08x}" + + pymap = _winapi.MemoryMap( + map_name, _AGENT_MAX_MSGLEN, _winapi.get_security_attributes_for_user() + ) + with pymap: + pymap.write(msg) + # Create an array buffer containing the mapped filename + char_buffer = array.array("b", b(map_name) + zero_byte) # noqa + char_buffer_address, char_buffer_size = char_buffer.buffer_info() + # Create a string to use for the SendMessage function call + cds = COPYDATASTRUCT( + _AGENT_COPYDATA_ID, char_buffer_size, char_buffer_address + ) + + response = ctypes.windll.user32.SendMessageA( + hwnd, win32con_WM_COPYDATA, ctypes.sizeof(cds), ctypes.byref(cds) + ) + + if response > 0: + pymap.seek(0) + datalen = pymap.read(4) + retlen = struct.unpack(">I", datalen)[0] + return datalen + pymap.read(retlen) + return None + + +class PageantConnection: + """ + Mock "connection" to an agent which roughly approximates the behavior of + a unix local-domain socket (as used by Agent). Requests are sent to the + pageant daemon via special Windows magick, and responses are buffered back + for subsequent reads. + """ + + def __init__(self): + self._response = None + + def send(self, data): + self._response = _query_pageant(data) + + def recv(self, n): + if self._response is None: + return "" + ret = self._response[:n] + self._response = self._response[n:] + if self._response == "": + self._response = None + return ret + + def close(self): + pass diff --git a/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/LICENSE b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/LICENSE new file mode 100644 index 0000000..3fd7ced --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Kyan + +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.11/site-packages/ping3-4.0.8.dist-info/METADATA b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/METADATA new file mode 100644 index 0000000..2a98fc8 --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/METADATA @@ -0,0 +1,341 @@ +Metadata-Version: 2.1 +Name: ping3 +Version: 4.0.8 +Summary: A pure python3 version of ICMP ping implementation using raw socket. +Author-email: Kyan +License: The MIT License (MIT) + + Copyright (c) 2016 Kyan + + 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. + +Project-URL: Homepage, https://github.com/kyan001/ping3 +Project-URL: Changelog, https://github.com/kyan001/ping3/blob/master/CHANGELOG.md +Project-URL: Issue Tracker, https://github.com/kyan001/ping3/issues +Project-URL: Source Code, https://github.com/kyan001/ping3 +Keywords: python3,ping,icmp,socket,tool +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: End Users/Desktop +Classifier: Topic :: System :: Networking +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Requires-Python: >=3.5 +Description-Content-Type: text/markdown +License-File: LICENSE +Provides-Extra: dev +Requires-Dist: build ; extra == 'dev' +Requires-Dist: twine ; extra == 'dev' + +# Ping3 +[![Build Status](https://travis-ci.org/kyan001/ping3.svg?branch=master)](https://travis-ci.org/kyan001/ping3) +![GitHub release](https://img.shields.io/github/release/kyan001/ping3.svg) +[![GitHub license](https://img.shields.io/github/license/kyan001/ping3.svg)](https://github.com/kyan001/ping3/blob/master/LICENSE) +![PyPI - Downloads](https://img.shields.io/pypi/dm/ping3.svg) + +Ping3 is a pure python3 version of ICMP ping implementation using raw socket.\ +(Note that on some platforms, ICMP messages can only be sent from processes running as root.) + +> The Python2 version originally from [here](http://github.com/samuel/python-ping).\ +> This version maintained at [this github repo](https://github.com/kyan001/ping3). + +[CHANGELOG](CHANGELOG.md) + +## Get Started + +* If you met "permission denied", you may need to run this as root. Alternatively see [this](./TROUBLESHOOTING.md#permission-denied-on-linux) for troubleshooting on linux. + +```sh +pip install ping3 # install ping +``` + +```python +>>> from ping3 import ping, verbose_ping +>>> ping('example.com') # Returns delay in seconds. +0.215697261510079666 + +>>> verbose_ping('example.com') # Ping 4 times in a row. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms +``` + +```sh +$ ping3 example.com # Verbose ping. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms +``` + +## Installation + +```sh +pip install ping3 # install ping3 +pip install --upgrade ping3 # upgrade ping3 +pip uninstall ping3 # uninstall ping3 +``` + +## Functions + +```python +>>> from ping3 import ping, verbose_ping + +>>> ping('example.com') # Returns delay in seconds. +0.215697261510079666 # `0.0` returned means the delay is lower than the precision of `time.time()`. + +>>> ping('not.exist.com') # If host unknown (cannot resolve), returns False. +False + +>>> ping("224.0.0.0") # If timed out (no reply), returns None. +None + +>>> ping('example.com', timeout=10) # Set timeout to 10 seconds. Default timeout is 4 for 4 seconds. +0.215697261510079666 + +>>> ping('example.com', unit='ms') # Returns delay in milliseconds. Default unit is 's' for seconds. +215.9627876281738 + +>>> ping('example.com', src_addr='192.168.1.15') # Set source ip address for multiple interfaces. Default src_addr is None for no binding. +0.215697261510079666 + +>>> ping('example.com', interface='eth0') # LINUX ONLY. Set source interface for multiple network interfaces. Default interface is None for no binding. +0.215697261510079666 + +>>> ping('example.com', ttl=5) # Set packet Time-To-Live to 5. The packet is discarded if it does not reach the target host after 5 jumps. Default ttl is 64. +None + +>>> ping('example.com', size=56) # Set ICMP packet payload to 56 bytes. The total ICMP packet size is 8 (header) + 56 (payload) = 64 bytes. Default size is 56. +0.215697261510079666 + +>>> verbose_ping('example.com') # Ping 4 times in a row. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms + +>>> verbose_ping('example.com', timeout=10) # Set timeout to 10 seconds. Default timeout is 4 for 4 seconds. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms + +>>> verbose_ping('example.com', count=6) # Ping 6 times. Default count is 4. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms + +>>> verbose_ping('example.com', count=0) # Ping endlessly (0 means infinite loops). Using `ctrl + c` to stop manully. +ping 'example.com' ... 215ms +... + +>>> verbose_ping('example.com', src_addr='192.168.1.15') # Ping from source IP address for multiple interfaces. Default src_addr is None. +ping 'example.com' from '192.168.1.15' ... 215ms +ping 'example.com' from '192.168.1.15' ... 216ms +ping 'example.com' from '192.168.1.15' ... 219ms +ping 'example.com' from '192.168.1.15' ... 217ms + +>>> verbose_ping('example.com', interface='wifi0') # LINUX ONLY. Ping from network interface 'wifi0'. Default interface is None. +ping 'example.com' from '192.168.1.15' ... 215ms +ping 'example.com' from '192.168.1.15' ... 216ms +ping 'example.com' from '192.168.1.15' ... 219ms +ping 'example.com' from '192.168.1.15' ... 217ms + +>>> verbose_ping('example.com', unit='s') # Displays delay in seconds. Default unit is "ms" for milliseconds. +ping 'example.com' ... 1s +ping 'example.com' ... 2s +ping 'example.com' ... 1s +ping 'example.com' ... 1s + +>>> verbose_ping('example.com', ttl=5) # Set TTL to 5. Default is 64. +ping 'example.com' ... Timeout +ping 'example.com' ... Timeout +ping 'example.com' ... Timeout +ping 'example.com' ... Timeout + +>>> verbose_ping('example.com', interval=5) # Wait 5 seconds between each packet. Default is 0. +ping 'example.com' ... 215ms # wait 5 secs +ping 'example.com' ... 216ms # wait 5 secs +ping 'example.com' ... 219ms # wait 5 secs +ping 'example.com' ... 217ms + +>>> verbose_ping('example.com', size=56) # Set ICMP payload to 56 bytes. Default size is 56. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms +``` + +### DEBUG mode + +Show more info for developers. + +```python +>>> import ping3 +>>> ping3.DEBUG = True # Default is False. + +>>> ping3.ping("example.com") # "ping()" prints received IP header and ICMP header. +[DEBUG] IP HEADER: {'version': 69, 'tos': 0, 'len': 14336, 'id': 8620, 'flags': 0, 'ttl': 51, 'protocol': 1, 'checksum': *, 'src_addr': *, 'dest_addr': *} +[DEBUG] ICMP HEADER: {'type': 0, 'code': 0, 'checksum': 8890, 'id': 21952, 'seq': 0} +0.215697261510079666 + +>>> ping3.ping("example.com", timeout=0.0001) +[DEBUG] Request timeout for ICMP packet. (Timeout = 0.0001s) +None + +>>> ping3.ping("not.exist.com") +[DEBUG] Cannot resolve: Unknown host. (Host = not.exist.com) +False + +>>> ping3.ping("example.com", ttl=1) +[DEBUG] Time exceeded: Time To Live expired. +None +``` + +### EXCEPTIONS mode + +Raise exceptions when there are errors instead of return None + +```python +>>> import ping3 +>>> ping3.EXCEPTIONS = True # Default is False. + +>>> ping3.ping("example.com", timeout=0.0001) +[... Traceback ...] +ping3.errors.Timeout: Request timeout for ICMP packet. (Timeout = 0.0001s) + +>>> ping3.ping("not.exist.com") +[... Traceback ...] +ping3.errors.HostUnknown: Cannot resolve: Unknown host. (Host = not.exist.com) + +>>> ping3.ping("example.com", ttl=1) # Linux need root privilege to receive TTL expired. Windows cannot get TTL expired. +[... Traceback ...] +ping3.errors.TimeToLiveExpired: Time exceeded: Time To Live expired. + +>>> try: +>>> ping3.ping("example.com", ttl=1) +>>> except ping3.errors.TimeToLiveExpired as err: +>>> print(err.ip_header["src_addr"]) # TimeToLiveExpired, DestinationUnreachable and DestinationHostUnreachable have ip_header and icmp_header attached. +1.2.3.4 # IP address where the TTL happened. + +>>> help(ping3.errors) # More info about exceptions. +``` + +```python +import ping3 +ping3.EXCEPTIONS = True + +try: + ping3.ping("not.exist.com") +except ping3.errors.HostUnknown: # Specific error is catched. + print("Host unknown error raised.") +except ping3.errors.PingError: # All ping3 errors are subclasses of `PingError`. + print("A ping error raised.") +``` + +## Command Line Execution + +Execute ping3 from command-line. +Note: On some platforms, `ping3` needs root privilege to send/receive packets. You may want to use `sudo ping3`. + +```sh +$ ping3 --help # -h/--help. Command-line help message. +$ python -m ping3 --help # Same as `ping3`. `ping3` is an alias for `python -m ping3`. + +$ ping3 --version # -v/--version. Show ping3 version number. +3.0.0 + +$ ping3 example.com # Verbose ping. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms + +$ ping3 example.com 8.8.8.8 # Verbose ping all the addresses. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms +ping '8.8.8.8' ... 5ms +ping '8.8.8.8' ... 2ms +ping '8.8.8.8' ... 6ms +ping '8.8.8.8' ... 5ms + +$ ping3 --count 1 example.com # -c/--count. How many pings should be sent. Default is 4. +ping 'example.com' ... 215ms + +$ ping3 --count 0 example.com # Ping endlessly (0 means infinite loops). Using `ctrl + c` to stop manully. +ping 'example.com' ... 215ms +... + +$ ping3 --timeout 10 example.com # -t/--timeout. Set timeout to 10 seconds. Default is 4. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms + +$ ping3 --ttl 5 example.com # -T/--ttl. # Set TTL to 5. Default is 64. +ping 'example.com' ... Timeout +ping 'example.com' ... Timeout +ping 'example.com' ... Timeout +ping 'example.com' ... Timeout + +$ ping3 --size 56 example.com # -s/--size. Set ICMP packet payload to 56 bytes. Default is 56. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms + +$ ping3 --interval 5 example.com # -i/--interval. Wait 5 seconds between each packet. Default is 0. +ping 'example.com' ... 215ms # wait 5 secs +ping 'example.com' ... 216ms # wait 5 secs +ping 'example.com' ... 219ms # wait 5 secs +ping 'example.com' ... 217ms + +$ ping3 --interface eth0 example.com # -I/--interface. LINUX ONLY. The gateway network interface to ping from. Default is None. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms + +$ ping3 --src 192.168.1.15 example.com # -S/--src. Ping from source IP address for multiple network interfaces. Default is None. +ping 'example.com' ... 215ms +ping 'example.com' ... 216ms +ping 'example.com' ... 219ms +ping 'example.com' ... 217ms + +$ ping3 --exceptions --timeout 0.001 example.com # -E/--exceptions. EXCPETIONS mode is on when this shows up. +[... Traceback ...] +ping3.errors.Timeout: Request timeout for ICMP packet. (Timeout = 0.0001s) + +$ ping3 --debug --timeout 0.001 example.com # -D/--debug. DEBUG mode is on when this shows up. +[DEBUG] Request timeout for ICMP packet. (Timeout = 0.001s) +ping 'example.com' ... Timeout > 0.001s +[DEBUG] Request timeout for ICMP packet. (Timeout = 0.001s) +ping 'example.com' ... Timeout > 0.001s +[DEBUG] Request timeout for ICMP packet. (Timeout = 0.001s) +ping 'example.com' ... Timeout > 0.001s +[DEBUG] Request timeout for ICMP packet. (Timeout = 0.001s) +ping 'example.com' ... Timeout > 0.001s +``` diff --git a/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/RECORD b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/RECORD new file mode 100644 index 0000000..b09ca33 --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/RECORD @@ -0,0 +1,19 @@ +../../../bin/ping3,sha256=xid0-q_m65O0kTRijYz2hdT3hJcUkCshOBS8rqe_14U,246 +ping3-4.0.8.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +ping3-4.0.8.dist-info/LICENSE,sha256=9M6lC6BtRPvpCHAkKWh75mogY_DO5Ae3S8h5TWpv_jE,1092 +ping3-4.0.8.dist-info/METADATA,sha256=tdcA0Bt09iS_x3CZB6_9EIsBWDQ7qmN9cHFauZICczM,13113 +ping3-4.0.8.dist-info/RECORD,, +ping3-4.0.8.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +ping3-4.0.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92 +ping3-4.0.8.dist-info/entry_points.txt,sha256=dM4R5WglnQffV_U5l9GD2bd0__1Ekiy5y2QWQ3hZ4oo,50 +ping3-4.0.8.dist-info/top_level.txt,sha256=EWSUBnYT3tayn2baoui0MH7q7CGcS5quLYhkz5Nrr_s,6 +ping3/__init__.py,sha256=eD76EHZuAXZpM25LtOxRKv0Z8mCvPBUtuQMZEQEkfF8,18068 +ping3/__main__.py,sha256=qKsKQGgW1OKe6LOvNvUjxVGgkjPbW0k_JzNHgu4Kyaw,83 +ping3/__pycache__/__init__.cpython-311.pyc,, +ping3/__pycache__/__main__.cpython-311.pyc,, +ping3/__pycache__/command_line.cpython-311.pyc,, +ping3/__pycache__/enums.cpython-311.pyc,, +ping3/__pycache__/errors.cpython-311.pyc,, +ping3/command_line.py,sha256=Li_GkrMv886oPZPQh9hKgq7gMJw-io4x24BVONiCVh0,2590 +ping3/enums.py,sha256=tGZf2AwjKPjROIDGf0rrAjZ5yJTDAUxrJ4Lz3kg7Bq0,1342 +ping3/errors.py,sha256=9lFnlsMgbngH-2g5QwYe4x1jLy27L4sC82dbytYo00k,1786 diff --git a/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/REQUESTED b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/WHEEL b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/WHEEL new file mode 100644 index 0000000..bab98d6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.43.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/entry_points.txt b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/entry_points.txt new file mode 100644 index 0000000..b60586d --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +ping3 = ping3.command_line:main diff --git a/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/top_level.txt new file mode 100644 index 0000000..c0e2b8d --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3-4.0.8.dist-info/top_level.txt @@ -0,0 +1 @@ +ping3 diff --git a/venv/lib/python3.11/site-packages/ping3/__init__.py b/venv/lib/python3.11/site-packages/ping3/__init__.py new file mode 100644 index 0000000..8ecff29 --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3/__init__.py @@ -0,0 +1,359 @@ +#!/usr/bin/env python + +import os +import socket +import struct +import select +import time +import platform +import zlib +import threading +import logging +import functools +import errno + +from . import errors +from .enums import ICMP_DEFAULT_CODE, IcmpType, IcmpTimeExceededCode, IcmpDestinationUnreachableCode + +__version__ = "4.0.8" +DEBUG = False # DEBUG: Show debug info for developers. (default False) +EXCEPTIONS = False # EXCEPTIONS: Raise exception when delay is not available. +LOGGER = None # LOGGER: Record logs into console or file. Logger object should have .debug() method. + +IP_HEADER_FORMAT = "!BBHHHBBHII" +ICMP_HEADER_FORMAT = "!BBHHH" # According to netinet/ip_icmp.h. !=network byte order(big-endian), B=unsigned char, H=unsigned short +ICMP_TIME_FORMAT = "!d" # d=double +SOCKET_SO_BINDTODEVICE = 25 # socket.SO_BINDTODEVICE + + +def _debug(*args) -> None: + """Print debug info to stdout if `ping3.DEBUG` is True. + + Args: + *args (any): Usually are strings or objects that can be converted to str. + """ + def get_logger(): + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + formatter = logging.Formatter('[%(levelname)s] %(message)s') + cout_handler = logging.StreamHandler() + cout_handler.setLevel(logging.DEBUG) + cout_handler.setFormatter(formatter) + logger.addHandler(cout_handler) + logger.debug("Ping3 Version: {}".format(__version__)) + logger.debug("LOGGER: {}".format(logger)) + return logger + + if not DEBUG: + return None + global LOGGER + LOGGER = LOGGER or get_logger() + message = " ".join(str(item) for item in args) + LOGGER.debug(message) + + +def _raise(err: Exception) -> None: + """Raise exception if `ping3.EXCEPTIONS` is True. + + Args: + err (Exception): Exception to be raised. + + Raise: + Exception: Exception passed in args will be raised if `ping3.EXCEPTIONS` is True. + """ + if EXCEPTIONS: + raise err + + +def _func_logger(func): + """Decorator that log function calls for debug + + Args: + func (callable): Function to be decorated. + + Returns: + callable: Decorated function. + """ + @functools.wraps(func) + def wrapper(*args, **kwargs): + pargs = ", ".join(str(arg) for arg in args) + kargs = str(kwargs) if kwargs else "" + all_args = ", ".join((pargs, kargs)) if (pargs and kargs) else (pargs or kargs) + _debug("Function called:", "{func.__name__}({})".format(all_args, func=func)) + func_return = func(*args, **kwargs) + _debug("Function returned:", "{func.__name__} -> {rtrn}".format(func=func, rtrn=func_return)) + return func_return + + return wrapper + + +def checksum(source: bytes) -> int: + """Calculates the checksum of the input bytes. + + RFC1071: https://tools.ietf.org/html/rfc1071 + RFC792: https://tools.ietf.org/html/rfc792 + + Args: + source (Bytes): The input to be calculated. + + Returns: + int: Calculated checksum. + """ + BITS = 16 # 16-bit long + carry = 1 << BITS # 0x10000 + result = sum(source[::2]) + (sum(source[1::2]) << (BITS // 2)) # Even bytes (odd indexes) shift 1 byte to the left. + while result >= carry: # Ones' complement sum. + result = sum(divmod(result, carry)) # Each carry add to right most bit. + return ~result & ((1 << BITS) - 1) # Ensure 16-bit + + +def read_icmp_header(raw: bytes) -> dict: + """Get information from raw ICMP header data. + + Args: + raw (Bytes): Raw data of ICMP header. + + Returns: + dict: A map contains the infos from the raw header. + """ + icmp_header_keys = ('type', 'code', 'checksum', 'id', 'seq') + return dict(zip(icmp_header_keys, struct.unpack(ICMP_HEADER_FORMAT, raw))) + + +def read_ip_header(raw: bytes) -> dict: + """Get information from raw IP header data. + + Args: + raw (Bytes): Raw data of IP header. + + Returns: + dict: A map contains the infos from the raw header. + """ + def stringify_ip(ip: int) -> str: + return ".".join(str(ip >> offset & 0xff) for offset in (24, 16, 8, 0)) # str(ipaddress.ip_address(ip)) + + ip_header_keys = ('version', 'tos', 'len', 'id', 'flags', 'ttl', 'protocol', 'checksum', 'src_addr', 'dest_addr') + ip_header = dict(zip(ip_header_keys, struct.unpack(IP_HEADER_FORMAT, raw))) + ip_header['src_addr'] = stringify_ip(ip_header['src_addr']) + ip_header['dest_addr'] = stringify_ip(ip_header['dest_addr']) + return ip_header + + +@_func_logger +def send_one_ping(sock: socket.socket, dest_addr: str, icmp_id: int, seq: int, size: int) -> None: + """Sends one ping to the given destination. + + ICMP Header (bits): type (8), code (8), checksum (16), id (16), sequence (16) + ICMP Payload: time (double), data + ICMP Wikipedia: https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol + + Args: + sock (socket.socket): Socket. + dest_addr (str): The destination address, can be an IP address or a domain name. Ex. "192.168.1.1"/"example.com" + icmp_id (int): ICMP packet id. Calculated from Process ID and Thread ID. + seq (int): ICMP packet sequence, usually increases from 0 in the same process. + size (int): The ICMP packet payload size in bytes. Note this is only for the payload part. + + Raises: + HostUnkown: If destination address is a domain name and cannot resolved. + """ + _debug("Destination address: '{}'".format(dest_addr)) + try: + dest_addr = socket.gethostbyname(dest_addr) # Domain name will translated into IP address, and IP address leaves unchanged. + except socket.gaierror as err: + raise errors.HostUnknown(dest_addr=dest_addr) from err + _debug("Destination IP address:", dest_addr) + pseudo_checksum = 0 # Pseudo checksum is used to calculate the real checksum. + icmp_header = struct.pack(ICMP_HEADER_FORMAT, IcmpType.ECHO_REQUEST, ICMP_DEFAULT_CODE, pseudo_checksum, icmp_id, seq) + padding = (size - struct.calcsize(ICMP_TIME_FORMAT)) * "Q" # Using double to store current time. + icmp_payload = struct.pack(ICMP_TIME_FORMAT, time.time()) + padding.encode() + real_checksum = checksum(icmp_header + icmp_payload) # Calculates the checksum on the dummy header and the icmp_payload. + # Don't know why I need socket.htons() on real_checksum since ICMP_HEADER_FORMAT already in Network Bytes Order (big-endian) + icmp_header = struct.pack(ICMP_HEADER_FORMAT, IcmpType.ECHO_REQUEST, ICMP_DEFAULT_CODE, socket.htons(real_checksum), icmp_id, seq) # Put real checksum into ICMP header. + _debug("Sent ICMP header:", read_icmp_header(icmp_header)) + _debug("Sent ICMP payload:", icmp_payload) + packet = icmp_header + icmp_payload + sock.sendto(packet, (dest_addr, 0)) # addr = (ip, port). Port is 0 respectively the OS default behavior will be used. + + +@_func_logger +def receive_one_ping(sock: socket.socket, icmp_id: int, seq: int, timeout: int): + """Receives the ping from the socket. + + IP Header (bits): version (8), type of service (8), length (16), id (16), flags (16), time to live (8), protocol (8), checksum (16), source ip (32), destination ip (32). + ICMP Packet (bytes): IP Header (20), ICMP Header (8), ICMP Payload (*). + Ping Wikipedia: https://en.wikipedia.org/wiki/Ping_(networking_utility) + ToS (Type of Service) in IP header for ICMP is 0. Protocol in IP header for ICMP is 1. + + Args: + sock (socket.socket): The same socket used for send the ping. + icmp_id (int): ICMP packet id. Sent packet id should be identical with received packet id. + seq (int): ICMP packet sequence. Sent packet sequence should be identical with received packet sequence. + timeout (int): Timeout in seconds. + + Returns: + float | None: The delay in seconds or None on timeout. + + Raises: + TimeToLiveExpired: If the Time-To-Live in IP Header is not large enough for destination. + TimeExceeded: If time exceeded but Time-To-Live does not expired. + DestinationHostUnreachable: If the destination host is unreachable. + DestinationUnreachable: If the destination is unreachable. + """ + has_ip_header = (os.name != 'posix') or (platform.system() == 'Darwin') or (sock.type == socket.SOCK_RAW) # No IP Header when unprivileged on Linux. + if has_ip_header: + ip_header_slice = slice(0, struct.calcsize(IP_HEADER_FORMAT)) # [0:20] + icmp_header_slice = slice(ip_header_slice.stop, ip_header_slice.stop + struct.calcsize(ICMP_HEADER_FORMAT)) # [20:28] + else: + _debug("Unprivileged on Linux") + icmp_header_slice = slice(0, struct.calcsize(ICMP_HEADER_FORMAT)) # [0:8] + timeout_time = time.time() + timeout # Exactly time when timeout. + _debug("Timeout time: {} ({})".format(time.ctime(timeout_time), timeout_time)) + while True: + timeout_left = timeout_time - time.time() # How many seconds left until timeout. + timeout_left = timeout_left if timeout_left > 0 else 0 # Timeout must be non-negative + _debug("Timeout left: {:.2f}s".format(timeout_left)) + selected = select.select([sock, ], [], [], timeout_left) # Wait until sock is ready to read or time is out. + if selected[0] == []: # Timeout + raise errors.Timeout(timeout=timeout) + time_recv = time.time() + _debug("Received time: {} ({}))".format(time.ctime(time_recv), time_recv)) + recv_data, addr = sock.recvfrom(1500) # Single packet size limit is 65535 bytes, but usually the network packet limit is 1500 bytes. + if has_ip_header: + ip_header_raw = recv_data[ip_header_slice] + ip_header = read_ip_header(ip_header_raw) + _debug("Received IP header:", ip_header) + else: + ip_header = None + icmp_header_raw, icmp_payload_raw = recv_data[icmp_header_slice], recv_data[icmp_header_slice.stop:] + icmp_header = read_icmp_header(icmp_header_raw) + _debug("Received ICMP header:", icmp_header) + _debug("Received ICMP payload:", icmp_payload_raw) + if not has_ip_header: # When unprivileged on Linux, ICMP ID is rewrited by kernel. + icmp_id = sock.getsockname()[1] # According to https://stackoverflow.com/a/14023878/4528364 + if icmp_header['type'] == IcmpType.TIME_EXCEEDED: # TIME_EXCEEDED has no icmp_id and icmp_seq. Usually they are 0. + if icmp_header['code'] == IcmpTimeExceededCode.TTL_EXPIRED: # Windows raw socket cannot get TTL_EXPIRED. See https://stackoverflow.com/questions/43239862/socket-sock-raw-ipproto-icmp-cant-read-ttl-response. + raise errors.TimeToLiveExpired(ip_header=ip_header, icmp_header=icmp_header) # Some router does not report TTL expired and then timeout shows. + raise errors.TimeExceeded() + if icmp_header['type'] == IcmpType.DESTINATION_UNREACHABLE: # DESTINATION_UNREACHABLE has no icmp_id and icmp_seq. Usually they are 0. + if icmp_header['code'] == IcmpDestinationUnreachableCode.DESTINATION_HOST_UNREACHABLE: + raise errors.DestinationHostUnreachable(ip_header=ip_header, icmp_header=icmp_header) + raise errors.DestinationUnreachable(ip_header=ip_header, icmp_header=icmp_header) + if icmp_header['id']: + if icmp_header['type'] == IcmpType.ECHO_REQUEST: # filters out the ECHO_REQUEST itself. + _debug("ECHO_REQUEST received. Packet filtered out.") + continue + if icmp_header['id'] != icmp_id: # ECHO_REPLY should match the ICMP ID field. + _debug("ICMP ID dismatch. Packet filtered out.") + continue + if icmp_header['seq'] != seq: # ECHO_REPLY should match the ICMP SEQ field. + _debug("IMCP SEQ dismatch. Packet filtered out.") + continue + if icmp_header['type'] == IcmpType.ECHO_REPLY: + time_sent = struct.unpack(ICMP_TIME_FORMAT, icmp_payload_raw[0:struct.calcsize(ICMP_TIME_FORMAT)])[0] + _debug("Received sent time: {} ({})".format(time.ctime(time_sent), time_sent)) + return time_recv - time_sent + _debug("Uncatched ICMP packet:", icmp_header) + + +@_func_logger +def ping(dest_addr: str, timeout: int = 4, unit: str = "s", src_addr: str = "", ttl= None, seq: int = 0, size: int = 56, interface: str = ""): + """ + Send one ping to destination address with the given timeout. + + Args: + dest_addr (str): The destination address, can be an IP address or a domain name. Ex. "192.168.1.1"/"example.com" + timeout (int): Time to wait for a response, in seconds. Default is 4s, same as Windows CMD. (default 4) + unit (str): The unit of returned value. "s" for seconds, "ms" for milliseconds. (default "s") + src_addr (str): The IP address to ping from. This is for multiple network interfaces. Ex. "192.168.1.20". (default "") + interface (str): LINUX ONLY. The gateway network interface to ping from. Ex. "wlan0". (default "") + ttl (int | None): The Time-To-Live of the outgoing packet. Default is None, which means using OS default ttl -- 64 onLinux and macOS, and 128 on Windows. (default None) + seq (int): ICMP packet sequence, usually increases from 0 in the same process. (default 0) + size (int): The ICMP packet payload size in bytes. If the input of this is less than the bytes of a double format (usually 8), the size of ICMP packet payload is 8 bytes to hold a time. The max should be the router_MTU(Usually 1480) - IP_Header(20) - ICMP_Header(8). Default is 56, same as in macOS. (default 56) + + Returns: + float | None | False: The delay in seconds/milliseconds, False on error and None on timeout. + + Raises: + PingError: Any PingError will raise again if `ping3.EXCEPTIONS` is True. + """ + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) + except PermissionError as err: + if err.errno == errno.EPERM: # [Errno 1] Operation not permitted + _debug("`{}` when create socket.SOCK_RAW, using socket.SOCK_DGRAM instead.".format(err)) + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_ICMP) + else: + raise err + with sock: + if ttl: + try: # IPPROTO_IP is for Windows and BSD Linux. + if sock.getsockopt(socket.IPPROTO_IP, socket.IP_TTL): + sock.setsockopt(socket.IPPROTO_IP, socket.IP_TTL, ttl) + except OSError as err: + _debug("Set Socket Option `IP_TTL` in `IPPROTO_IP` Failed: {}".format(err)) + try: + if sock.getsockopt(socket.SOL_IP, socket.IP_TTL): + sock.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl) + except OSError as err: + _debug("Set Socket Option `IP_TTL` in `SOL_IP` Failed: {}".format(err)) + if interface: + sock.setsockopt(socket.SOL_SOCKET, SOCKET_SO_BINDTODEVICE, interface.encode()) # packets will be sent from specified interface. + _debug("Socket Interface Binded:", interface) + if src_addr: + sock.bind((src_addr, 0)) # only packets send to src_addr are received. + _debug("Socket Source Address Binded:", src_addr) + thread_id = threading.get_native_id() if hasattr(threading, 'get_native_id') else threading.currentThread().ident # threading.get_native_id() is supported >= python3.8. + process_id = os.getpid() # If ping() run under different process, thread_id may be identical. + icmp_id = zlib.crc32("{}{}".format(process_id, thread_id).encode()) & 0xffff # to avoid icmp_id collision. + try: + send_one_ping(sock=sock, dest_addr=dest_addr, icmp_id=icmp_id, seq=seq, size=size) + delay = receive_one_ping(sock=sock, icmp_id=icmp_id, seq=seq, timeout=timeout) # in seconds + except errors.Timeout as err: + _debug(err) + _raise(err) + return None + except errors.PingError as err: + _debug(err) + _raise(err) + return False + if delay is None: + return None + if unit == "ms": + delay *= 1000 # in milliseconds + return delay + + +@_func_logger +def verbose_ping(dest_addr: str, count: int = 4, interval: float = 0, *args, **kwargs): + """ + Send pings to destination address with the given timeout and display the result. + + Args: + dest_addr (str): The destination address. Ex. "192.168.1.1"/"example.com" + count (int): How many pings should be sent. 0 means infinite loops until manually stopped. Default is 4, same as Windows CMD. (default 4) + interval (float): How many seconds between two packets. Default is 0, which means send the next packet as soon as the previous one responsed. (default 0) + *args and **kwargs (any): And all the other arguments available in ping() except `seq`. + + Output: + Formatted ping results printed. + """ + timeout = kwargs.get("timeout") + src = kwargs.get("src_addr") + unit = kwargs.setdefault("unit", "ms") + i = 0 + while i < count or count == 0: + if interval > 0 and i > 0: + time.sleep(interval) + output_text = "ping '{}'".format(dest_addr) + output_text += " from '{}'".format(src) if src else "" + output_text += " ... " + delay = ping(dest_addr, seq=i, *args, **kwargs) + print(output_text, end="") + if delay is None: + print("Timeout > {}s".format(timeout) if timeout else "Timeout") + elif delay is False: + print("Error") + else: + print("{value}{unit}".format(value=int(delay), unit=unit)) + i += 1 diff --git a/venv/lib/python3.11/site-packages/ping3/__main__.py b/venv/lib/python3.11/site-packages/ping3/__main__.py new file mode 100644 index 0000000..2951f78 --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3/__main__.py @@ -0,0 +1,4 @@ +from . import command_line + +if __name__ == "__main__": + command_line.main() diff --git a/venv/lib/python3.11/site-packages/ping3/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/ping3/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a81e2ef02bec5a99222baf3d210e17c464577b04 GIT binary patch literal 23531 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/ping3/__pycache__/__main__.cpython-311.pyc b/venv/lib/python3.11/site-packages/ping3/__pycache__/__main__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebed57bed462d623c217f58da64e5e9062be8d88 GIT binary patch literal 348 zcmZ3^%ge<81ZjIdrUwJ*#~=<2FhLog9e|AK3@HpLj5!Rsj8Tk?45>^hOxa-hB0(mG zRK_f3n5Jbw#%dUcfsrAFIT(yJSza;%g*6#(@g(Qx<|gK)#OGw@rQYI*kIzla%!`lr z(`32DPy{juB$k($n;IW~iv=XNlHoJRz+VCS8Tq-X`dKOZ1x5K;smUe9`uVwK@kxov z*`)>gWvO{(`Z<|N`URCG8Tom}dWMGj#hE3kx&=V_#Prl+{esNAbYp#(eR>6zzc_4i z^HWN5QtgVkffj(=SL_HRJ}@&fGTva2x`2uvFmrcQU1FBJz$|%#MYO@^3XAAP7V#@A T;um1(12Y4Q6i~W|6KDzmQJGqb literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/ping3/__pycache__/command_line.cpython-311.pyc b/venv/lib/python3.11/site-packages/ping3/__pycache__/command_line.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c456255cfbc01532ba918ef1c392fd3400b264a GIT binary patch literal 3831 zcmb7HO>7&-72aJgC5n{fKgEiF>W=HQHf@uP;(y0UEsInmSD_t|`n4T)wKJktTJF-j zL(1CPr~)`Z4m}!(k2w^o3+bRkf%?#cF9C8$0LD-dVSxe$dh$(y+e=P;Z}^|qX}l}G zeLM5M_cw3etp4276PDnb`}=qKL%{tLU+Pz&#=J-Z^QlB7Dx1u&%Cx%v#+)>7IO7{!G|!(I;5pV<+!ujxVTnem%4b{95B(mR_o*i-u{0cGI5q z-qj#r;8(qV1ha$gq`T;DF7jKIrh91L`fID5paFjWSHoV~PhY3|cz0b^l0d`$SI}^P z9;82`huSp!oRU}2aG3sr9-(j0U(#Q#A6K*eaBCg_`O z85^K)y@I!==xKU}o^8``j-G!74HxJ|`Zm2p-&ue6C$IFc>1DtS(kuTH(^%=|DoWB_ zX%%XEtx?zal)K78s4mf3ueq-JC`dGFsZ9cRj<`UgQ7cL5*5JJWZ?V46(~t{*WN+h5 zS=iCS?`+|BweY)J_&qIrU!7kcT7?MK8d1p7AFt44MvA7qXJG=@bn^)-P*|>+922dn#px+!Xz2U=$(>7-ptC#|FT`kXC$P_5D%w;mmhzszl`$fmr zK?3HTl4YSP4OrXe@o2zTVK(naD06kkD55#PgB1~+OrH4pvH8WUCg4oyc% z2P@C-0xZvIlsbM_GL^~Z29wD#Up^jHya>CaVJLA}IIr`3T-@HxYNlOoSk?Ft3l5$X z{)6if#mIG18zr_wG(zoyW?0113b0bCJ8?2_;jQ?<+4J#%_&}n?N<13$RdmSjEHJK> zHOCKHSPXt=ZEbyZo|#1mPWL)vG2Jd%+z-|sL)XUB+2`2ry_4_RO9YB-S*(al+oCgO#B6m838CkaIDGTpYQ`vaq(*zm%!7#5jR)=WRt4!II>b%g78P#NcvNj>vn`JqFBprtj_!wmR4Xo&85 z=Z#}kwUiBR?52(EJZx$B!|WDdcN$QY|Ls_NiqRPeKZ{m5H~oMh+3e`^%b3-3Xb>|S z%i6I~qs(v*a~OkF&f93Zn%uSk&z{DNx?TqaVtC9~t28q*lX`w0wVn}Sh)y7u29zwD zwnhmGVlm7vbJp(XnX{-fiRDb$Y$@-DU2Z!p$DI=MgJQ_rlZCG-=nW*9x-$M7Qm`rH zIpE-NQB8KOR8wAeEXMBWOtb>m4>x)5^}3GK)KKbrcH~+*Q&ZIGV83?=l71vdknBTp z0LdXB>F8^I2zH|AwtnxRlP_V16D{BIyJ5Fu(-vb6em(h-T&~t}aydT$#p4I(AQRjV z3l*ZpJ4aD6D1vg1As=o!=issDcY~5y+hsYdhM(YPRP}q>juF2@*mHbU^br;Nl8Ze8 z51j9_iFv!g5(_i|jdX$O+)dbpa&8tDuT)HwnN?1h#%!Y2?&AXk3D@8(hNXcmJ0VVm zMD1Y9iG!`U?5o)A94rX@m~#IH+jvF#cc0X|ceCe>M@P3M>9Rbmz~h=S8GuLcRNy;7 z|0U?k@Rl0>R_%YP_CHh~E^b6WAKy$(RMh^j)yYkDvZ78l=WlGBc#^4%nV^NsV*wBX zO~Fh6Gy#QCpiOD@q46mHcGB6k4Kb!5Vho)E+KO1*=z4PDo6J;YR)@(& zS+7H=fKUOUZ4h%~|C5<-CT>*N96&62u?{f>#1s&-4N`zOeqXuyA;{0k#k%}$A%9!Q z-)@u7Kf3xPT**#={D*R>E?*Y%Wg%bwfqd%mna|xiVzQ2y5{M~*m}*1JKbm+v@zs&a z_Pa_8(-ugOnVl#4LCAqbG?}OtXr|$oDtN*}*KYX0pRQsOo?0e9=Ey+Pl1=3H{ ze}sBAL;D||{*3?0+u(n_^F`m62P-#!w|SFQihQ$p51hWLq|w)_iU?0v^7y7JMRdLE zwgQC$6o!CSM`|?CwDSV$SMo!-99DEL7nRdd#lio}($MCk@D!U}lsZb`0iVnLMRG3S z)HxvEhb}?4Dw*tE=N)*(4`O#3$aX-MT$H!q==B(?h!?`dFP aC9rQx4Xq?U8oocgBJS;gr0$1dVfsHS3fy7< literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/ping3/__pycache__/enums.cpython-311.pyc b/venv/lib/python3.11/site-packages/ping3/__pycache__/enums.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7db4881574b6274bfbabadb4088bf681e6f4d51c GIT binary patch literal 2271 zcmbVN%}?V-6nBUT;UhpG-DUYSuv^GhOG@dXst}TKCX1KE&N>d;wJMFW8SfHGKI#No zRz2jfhaP(09(t&%s#Vp0p?`#rmQR&>$_)gkJ@q|1KmshPYR5m%%zN`@=H>T${yh>I z;NW`s*U77mUXJ?*JLeblz3cQ1yxww*V}X6nfVUCo;U06W=MBe#Cb!qq_TzpFa@?Qr z_?Hp%ym;{Hy~T_7yh7mBcZ*jq3*@+XxP_sWVtWPe6=-)(KZnL!&V=2;4trR@2(li7 zXF;Qv@kWUC8htEegjt`_&%(w4>o*43fHA}djR+fp*bz4@7t1yMsAj&NA(ex&@Um(N z*cD0@L6$OEVaqHq(^|3cz%4vy3sckzBlII+E?a{LLkJOsVE`pQ?1m|=6v`&0?f|9b zDm&Q6_7J6C9~Ac6mOe^ZwTLc6+ES@TvgzmU-6YBBvLfoTs?fZm5mDL_H`Bx&)ksp- zh@{gD$>qey#2so+dzyzSZcJ12I?ZOMHs0Q}JE3=-cl`5~+5+ezN&5RGD zV@=t)GtpG>wr0+Q-^?Qo%>S21#xRQ*BW&0hWg|wEjT&PtYK*fn;Mcf2i~LHO^+u^u zXq2jze8n;g#ofY-eN(D3^EJ6(9d@s{z1+Q2=+Ya}Ns9pQ+k*7d@vt z9k$e*-ev7NLRM3CRZ`Pk9$oXZs@6UKPD&FWBcXj=Xyj=gw2*Yib823b2=!P_Q=*)P z!Ku!zT<&#SQJ*R9M5nR6Pu~)2$MObc5R9lpu*LHLVlpEua!%J^3p*tJoWe1-nbBIBsehAR1Mb+k2=R;8BqO*A4<^^YI+2-%J z+cUE^Kj};GMKT}4t@US0LYX3fLON<4Iv`{?792DeDU`0B0(g7NTv`8Jc-{Y0ZCD%Nf>ovd3&3$O z5C}NjVAH$*j(uQr(c{oy;NCHJ9lme;@ZAZHpIsWKqk#v<+;#X_|Mklg96!4>E(Ze- VkGbpcHlyFd5zbP{M&zidx8Itcj#6}N?(o%(Okc}zrdgJ|R-(F97Kg$P-LpVP(# zj){PUsL+Oq9FqVGQ?U&TajXNdNMM}AF&VHZmDt1BSB^QTf;CR2hIdKeuKEt9*#xCE&U z*AC*`W9Aq70<55*GpaS-MUz6C>$#|Kb<9-I2h7|lp334f-G;N`ul_BFAB4xGB$kNk zqNEf8&D~;B5a$?;i`KFYZP}C+h-;zm~}6(Sc>@QSav4gUeD??%zD}4yfI~%RS#m9z{0f z{&l(k$)O*QSLDH}JXm(WeE(x1)(1gSsnsy!n-2woFiaZ571Vl~3(V474lYArN5N`g zQa*Fmi7aI(kWKZ=AYei6XG@gALtA7I!XYKb+ZXQ+U!#_-8yQo(6ldZbUDkLGt4_i!+-kVy9spc+_f8 z$$0@{gJ5YZHZh6yd)5)`@$(6j&~}s_@+H*UYov^I3xu!Y{6nRwB=gl|zH%l1`lUr= z2?)PSWr+jCP@IBa@azoX*|`VdlqHO}FX~0`p~EcN4dp93Uxe%{wqsDB=qsOJ{qm-Q zPq6gA%Dnr%%5XCUmme%zF(6^2nSobQ@I3D5ZWQcmM)l|y18-{#1k%rWXxjw(eNY}a z#}B$2< None: + """ + Parse and execute the call from command-line. + + Args: + assigned_args (list[str] | None): List of strings to parse. The default is taken from sys.argv. + + Returns: + Formatted ping results printed. + """ + parser = argparse.ArgumentParser(prog="ping3", description="A pure python3 version of ICMP ping implementation using raw socket.", epilog="!!Note: ICMP messages can only be sent from processes running as root.") + parser.add_argument("-v", "--version", action="version", version=ping3.__version__) + parser.add_argument(dest="dest_addr", metavar="DEST_ADDR", nargs="*", default=("example.com", "8.8.8.8"), help="The destination address, can be an IP address or a domain name. Ex. 192.168.1.1/example.com.") + parser.add_argument("-c", "--count", dest="count", metavar="COUNT", type=int, default=4, help="How many pings should be sent. Default is 4.") + parser.add_argument("-t", "--timeout", dest="timeout", metavar="TIMEOUT", type=float, default=4, help="Time to wait for a response, in seconds. Default is 4.") + parser.add_argument("-i", "--interval", dest="interval", metavar="INTERVAL", type=float, default=0, help="Time to wait between each packet, in seconds. Default is 0.") + parser.add_argument("-I", "--interface", dest="interface", metavar="INTERFACE", default="", help="LINUX ONLY. The gateway network interface to ping from. Default is None.") + parser.add_argument("-S", "--src", dest="src_addr", metavar="SRC_ADDR", default="", help="The IP address to ping from. This is for multiple network interfaces. Default is None") + parser.add_argument("-T", "--ttl", dest="ttl", metavar="TTL", type=int, default=64, help="The Time-To-Live of the outgoing packet. Default is 64.") + parser.add_argument("-s", "--size", dest="size", metavar="SIZE", type=int, default=56, help="The ICMP packet payload size in bytes. Default is 56.") + parser.add_argument("-D", "--debug", action="store_true", dest="debug", help="Turn on DEBUG mode.") + parser.add_argument("-E", "--exceptions", action="store_true", dest="exceptions", help="Turn on EXCEPTIONS mode.") + args = parser.parse_args(assigned_args) + ping3.DEBUG = args.debug + ping3.EXCEPTIONS = args.exceptions + + for addr in args.dest_addr: + ping3.verbose_ping(addr, count=args.count, ttl=args.ttl, timeout=args.timeout, size=args.size, interval=args.interval, interface=args.interface, src_addr=args.src_addr) + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.11/site-packages/ping3/enums.py b/venv/lib/python3.11/site-packages/ping3/enums.py new file mode 100644 index 0000000..2102e48 --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3/enums.py @@ -0,0 +1,43 @@ +import enum + +ICMP_DEFAULT_CODE = 0 # the code for ECHO_REPLY and ECHO_REQUEST + + +class IcmpType(enum.IntEnum): + """Enum for Type in ICMP Header.""" + ECHO_REPLY = 0 + DESTINATION_UNREACHABLE = 3 + REDIRECT_MESSAGE = 5 + ECHO_REQUEST = 8 + ROUTER_ADVERTISEMENT = 9 + ROUTER_SOLICITATION = 10 + TIME_EXCEEDED = 11 + BAD_IP_HEADER = 12 + TIMESTAMP = 13 + TIMESTAMP_REPLY = 14 + + +class IcmpDestinationUnreachableCode(enum.IntEnum): + """Enum for Code in ICMP Header when type is DESTINATION_UNREACHABLE (3)""" + DESTINATION_NETWORK_UNREACHABLE = 0 + DESTINATION_HOST_UNREACHABLE = 1 + DESTINATION_PROTOCOL_UNREACHABLE = 2 + DESTINATION_PORT_UNREACHABLE = 3 + FRAGMENTATION_REQUIRED = 4 + SOURCE_ROUTE_FAILED = 5 + DESTINATION_NETWORK_UNKNOWN = 6 + DESTINATION_HOST_UNKNOWN = 7 + SOURCE_HOST_ISOLATED = 8 + NETWORK_ADMINISTRATIVELY_PROHIBITED = 9 + HOST_ADMINISTRATIVELY_PROHIBITED = 10 + NETWORK_UNREACHABLE_FOR_TOS = 11 + HOST_UNREACHABLE_FOR_TOS = 12 + COMMUNICATION_ADMINISTRATIVELY_PROHIBITED = 13 + HOST_PRECEDENCE_VIOLATION = 14 + PRECEDENCE_CUTOFF_IN_EFFECT = 15 + + +class IcmpTimeExceededCode(enum.IntEnum): + """Enum for Code in ICMP Header when type is TIME_EXCEEDED (11)""" + TTL_EXPIRED = 0 + FRAGMENT_REASSEMBLY_TIME_EXCEEDED = 1 diff --git a/venv/lib/python3.11/site-packages/ping3/errors.py b/venv/lib/python3.11/site-packages/ping3/errors.py new file mode 100644 index 0000000..18a122d --- /dev/null +++ b/venv/lib/python3.11/site-packages/ping3/errors.py @@ -0,0 +1,44 @@ +class PingError(Exception): + pass + + +class TimeExceeded(PingError): + pass + + +class TimeToLiveExpired(TimeExceeded): + def __init__(self, message="Time exceeded: Time To Live expired.", ip_header=None, icmp_header=None): + self.ip_header = ip_header + self.icmp_header = icmp_header + self.message = message + super().__init__(self.message) + + +class DestinationUnreachable(PingError): + def __init__(self, message="Destination unreachable.", ip_header=None, icmp_header=None): + self.ip_header = ip_header + self.icmp_header = icmp_header + self.message = message if self.ip_header is None else message + " (Host='{}')".format(self.ip_header.get("src_addr")) + super().__init__(self.message) + + +class DestinationHostUnreachable(DestinationUnreachable): + def __init__(self, message="Destination unreachable: Host unreachable.", ip_header=None, icmp_header=None): + self.ip_header = ip_header + self.icmp_header = icmp_header + self.message = message if self.ip_header is None else message + " (Host='{}')".format(self.ip_header.get("src_addr")) + super().__init__(self.message) + + +class HostUnknown(PingError): + def __init__(self, message="Cannot resolve: Unknown host.", dest_addr=None): + self.dest_addr = dest_addr + self.message = message if self.dest_addr is None else message + " (Host='{}')".format(self.dest_addr) + super().__init__(self.message) + + +class Timeout(PingError): + def __init__(self, message="Request timeout for ICMP packet.", timeout=None): + self.timeout = timeout + self.message = message if self.timeout is None else message + " (Timeout={}s)".format(self.timeout) + super().__init__(self.message) diff --git a/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/INSTALLER b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/LICENSE.txt b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/LICENSE.txt new file mode 100644 index 0000000..8e7b65e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2008-present The pip developers (see AUTHORS.txt file) + +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.11/site-packages/pip-23.0.1.dist-info/METADATA b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/METADATA new file mode 100644 index 0000000..984f9ad --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/METADATA @@ -0,0 +1,88 @@ +Metadata-Version: 2.1 +Name: pip +Version: 23.0.1 +Summary: The PyPA recommended tool for installing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: distutils-sig@python.org +License: MIT +Project-URL: Documentation, https://pip.pypa.io +Project-URL: Source, https://github.com/pypa/pip +Project-URL: Changelog, https://pip.pypa.io/en/stable/news/ +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 :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Requires-Python: >=3.7 +License-File: LICENSE.txt + +pip - The Python Package Installer +================================== + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.org/project/pip/ + +.. image:: https://readthedocs.org/projects/pip/badge/?version=latest + :target: https://pip.pypa.io/en/latest + +pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes. + +Please take a look at our documentation for how to install and use pip: + +* `Installation`_ +* `Usage`_ + +We release updates regularly, with a new version every 3 months. Find more details in our documentation: + +* `Release notes`_ +* `Release process`_ + +In pip 20.3, we've `made a big improvement to the heart of pip`_; `learn more`_. We want your input, so `sign up for our user experience research studies`_ to help us do it right. + +**Note**: pip 21.0, in January 2021, removed Python 2 support, per pip's `Python 2 support policy`_. Please migrate to Python 3. + +If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms: + +* `Issue tracking`_ +* `Discourse channel`_ +* `User IRC`_ + +If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms: + +* `GitHub page`_ +* `Development documentation`_ +* `Development IRC`_ + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. + +.. _package installer: https://packaging.python.org/guides/tool-recommendations/ +.. _Python Package Index: https://pypi.org +.. _Installation: https://pip.pypa.io/en/stable/installation/ +.. _Usage: https://pip.pypa.io/en/stable/ +.. _Release notes: https://pip.pypa.io/en/stable/news.html +.. _Release process: https://pip.pypa.io/en/latest/development/release-process/ +.. _GitHub page: https://github.com/pypa/pip +.. _Development documentation: https://pip.pypa.io/en/latest/development +.. _made a big improvement to the heart of pip: https://pyfound.blogspot.com/2020/11/pip-20-3-new-resolver.html +.. _learn more: https://pip.pypa.io/en/latest/user_guide/#changes-to-the-pip-dependency-resolver-in-20-3-2020 +.. _sign up for our user experience research studies: https://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html +.. _Python 2 support policy: https://pip.pypa.io/en/latest/development/release-process/#python-2-support +.. _Issue tracking: https://github.com/pypa/pip/issues +.. _Discourse channel: https://discuss.python.org/c/packaging +.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa +.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev +.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md diff --git a/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/RECORD b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/RECORD new file mode 100644 index 0000000..287c58a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/RECORD @@ -0,0 +1,996 @@ +../../../bin/pip,sha256=wJD3x18tAuYRLFLOj-ozTuIptd85MuC8I55OuwB1hcE,250 +../../../bin/pip3,sha256=wJD3x18tAuYRLFLOj-ozTuIptd85MuC8I55OuwB1hcE,250 +../../../bin/pip3.11,sha256=wJD3x18tAuYRLFLOj-ozTuIptd85MuC8I55OuwB1hcE,250 +pip-23.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip-23.0.1.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093 +pip-23.0.1.dist-info/METADATA,sha256=POh89utz-H1e0K-xDY9CL9gs-x0MjH-AWxbhJG3aaVE,4072 +pip-23.0.1.dist-info/RECORD,, +pip-23.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip-23.0.1.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 +pip-23.0.1.dist-info/entry_points.txt,sha256=xg35gOct0aY8S3ftLtweJ0uw3KBAIVyW4k-0Jx1rkNE,125 +pip-23.0.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip/__init__.py,sha256=5yroedzc2dKKbcynDrHX8vBoLxqU27KmFvvHmdqQN9w,357 +pip/__main__.py,sha256=mXwWDftNLMKfwVqKFWGE_uuBZvGSIiUELhLkeysIuZc,1198 +pip/__pip-runner__.py,sha256=EnrfKmKMzWAdqg_JicLCOP9Y95Ux7zHh4ObvqLtQcjo,1444 +pip/__pycache__/__init__.cpython-311.pyc,, +pip/__pycache__/__main__.cpython-311.pyc,, +pip/__pycache__/__pip-runner__.cpython-311.pyc,, +pip/_internal/__init__.py,sha256=nnFCuxrPMgALrIDxSoy-H6Zj4W4UY60D-uL1aJyq0pc,573 +pip/_internal/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/__pycache__/build_env.cpython-311.pyc,, +pip/_internal/__pycache__/cache.cpython-311.pyc,, +pip/_internal/__pycache__/configuration.cpython-311.pyc,, +pip/_internal/__pycache__/exceptions.cpython-311.pyc,, +pip/_internal/__pycache__/main.cpython-311.pyc,, +pip/_internal/__pycache__/pyproject.cpython-311.pyc,, +pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc,, +pip/_internal/__pycache__/wheel_builder.cpython-311.pyc,, +pip/_internal/build_env.py,sha256=1ESpqw0iupS_K7phZK5zshVE5Czy9BtGLFU4W6Enva8,10243 +pip/_internal/cache.py,sha256=C3n78VnBga9rjPXZqht_4A4d-T25poC7K0qBM7FHDhU,10734 +pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132 +pip/_internal/cli/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc,, +pip/_internal/cli/__pycache__/base_command.cpython-311.pyc,, +pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc,, +pip/_internal/cli/__pycache__/command_context.cpython-311.pyc,, +pip/_internal/cli/__pycache__/main.cpython-311.pyc,, +pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc,, +pip/_internal/cli/__pycache__/parser.cpython-311.pyc,, +pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc,, +pip/_internal/cli/__pycache__/req_command.cpython-311.pyc,, +pip/_internal/cli/__pycache__/spinners.cpython-311.pyc,, +pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc,, +pip/_internal/cli/autocompletion.py,sha256=wY2JPZY2Eji1vhR7bVo-yCBPJ9LCy6P80iOAhZD1Vi8,6676 +pip/_internal/cli/base_command.py,sha256=t1D5x40Hfn9HnPnMt-iSxvqL14nht2olBCacW74pc-k,7842 +pip/_internal/cli/cmdoptions.py,sha256=0AFz3vHEZeUUOpE4Ze0sBKmsS1OOd3aaWX3Fr2ov9BU,29496 +pip/_internal/cli/command_context.py,sha256=RHgIPwtObh5KhMrd3YZTkl8zbVG-6Okml7YbFX4Ehg0,774 +pip/_internal/cli/main.py,sha256=ioJ8IVlb2K1qLOxR-tXkee9lURhYV89CDM71MKag7YY,2472 +pip/_internal/cli/main_parser.py,sha256=laDpsuBDl6kyfywp9eMMA9s84jfH2TJJn-vmL0GG90w,4338 +pip/_internal/cli/parser.py,sha256=tWP-K1uSxnJyXu3WE0kkH3niAYRBeuUaxeydhzOdhL4,10817 +pip/_internal/cli/progress_bars.py,sha256=So4mPoSjXkXiSHiTzzquH3VVyVD_njXlHJSExYPXAow,1968 +pip/_internal/cli/req_command.py,sha256=ypTutLv4j_efxC2f6C6aCQufxre-zaJdi5m_tWlLeBk,18172 +pip/_internal/cli/spinners.py,sha256=hIJ83GerdFgFCdobIA23Jggetegl_uC4Sp586nzFbPE,5118 +pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116 +pip/_internal/commands/__init__.py,sha256=5oRO9O3dM2vGuh0bFw4HOVletryrz5HHMmmPWwJrH9U,3882 +pip/_internal/commands/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/commands/__pycache__/cache.cpython-311.pyc,, +pip/_internal/commands/__pycache__/check.cpython-311.pyc,, +pip/_internal/commands/__pycache__/completion.cpython-311.pyc,, +pip/_internal/commands/__pycache__/configuration.cpython-311.pyc,, +pip/_internal/commands/__pycache__/debug.cpython-311.pyc,, +pip/_internal/commands/__pycache__/download.cpython-311.pyc,, +pip/_internal/commands/__pycache__/freeze.cpython-311.pyc,, +pip/_internal/commands/__pycache__/hash.cpython-311.pyc,, +pip/_internal/commands/__pycache__/help.cpython-311.pyc,, +pip/_internal/commands/__pycache__/index.cpython-311.pyc,, +pip/_internal/commands/__pycache__/inspect.cpython-311.pyc,, +pip/_internal/commands/__pycache__/install.cpython-311.pyc,, +pip/_internal/commands/__pycache__/list.cpython-311.pyc,, +pip/_internal/commands/__pycache__/search.cpython-311.pyc,, +pip/_internal/commands/__pycache__/show.cpython-311.pyc,, +pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc,, +pip/_internal/commands/__pycache__/wheel.cpython-311.pyc,, +pip/_internal/commands/cache.py,sha256=muaT0mbL-ZUpn6AaushVAipzTiMwE4nV2BLbJBwt_KQ,7582 +pip/_internal/commands/check.py,sha256=0gjXR7j36xJT5cs2heYU_dfOfpnFfzX8OoPNNoKhqdM,1685 +pip/_internal/commands/completion.py,sha256=H0TJvGrdsoleuIyQKzJbicLFppYx2OZA0BLNpQDeFjI,4129 +pip/_internal/commands/configuration.py,sha256=NB5uf8HIX8-li95YLoZO09nALIWlLCHDF5aifSKcBn8,9815 +pip/_internal/commands/debug.py,sha256=AesEID-4gPFDWTwPiPaGZuD4twdT-imaGuMR5ZfSn8s,6591 +pip/_internal/commands/download.py,sha256=LwKEyYMG2L67nQRyGo8hQdNEeMU2bmGWqJfcB8JDXas,5289 +pip/_internal/commands/freeze.py,sha256=PaJJB9mT_3vHeZ3mbFL_m1fzTYL-_Or3kDtXwTdZZ-A,2968 +pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703 +pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132 +pip/_internal/commands/index.py,sha256=cGQVSA5dAs7caQ9sz4kllYvaI4ZpGiq1WhCgaImXNSA,4793 +pip/_internal/commands/inspect.py,sha256=2wSPt9yfr3r6g-s2S5L6PvRtaHNVyb4TuodMStJ39cw,3188 +pip/_internal/commands/install.py,sha256=3vT9tnHOV-p6dPMaKDqzivqmcq_kPAI-jVkxOEwN5C4,32389 +pip/_internal/commands/list.py,sha256=gI4BWR-6IVMFY3Ucwf9YGwxvCwXyTV5kVTDzJdKWqu0,12440 +pip/_internal/commands/search.py,sha256=sbBZiARRc050QquOKcCvOr2K3XLsoYebLKZGRi__iUI,5697 +pip/_internal/commands/show.py,sha256=t5jia4zcYJRJZy4U_Von7zMl03hJmmcofj6oDNTnj7Y,6419 +pip/_internal/commands/uninstall.py,sha256=OIqO9tqadY8kM4HwhFf1Q62fUIp7v8KDrTRo8yWMz7Y,3886 +pip/_internal/commands/wheel.py,sha256=mbFJd4dmUfrVFJkQbK8n2zHyRcD3AI91f7EUo9l3KYg,7396 +pip/_internal/configuration.py,sha256=uBKTus43pDIO6IzT2mLWQeROmHhtnoabhniKNjPYvD0,13529 +pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858 +pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/distributions/__pycache__/base.cpython-311.pyc,, +pip/_internal/distributions/__pycache__/installed.cpython-311.pyc,, +pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc,, +pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc,, +pip/_internal/distributions/base.py,sha256=jrF1Vi7eGyqFqMHrieh1PIOrGU7KeCxhYPZnbvtmvGY,1221 +pip/_internal/distributions/installed.py,sha256=NI2OgsgH9iBq9l5vB-56vOg5YsybOy-AU4VE5CSCO2I,729 +pip/_internal/distributions/sdist.py,sha256=SQBdkatXSigKGG_SaD0U0p1Jwdfrg26UCNcHgkXZfdA,6494 +pip/_internal/distributions/wheel.py,sha256=m-J4XO-gvFerlYsFzzSXYDvrx8tLZlJFTCgDxctn8ig,1164 +pip/_internal/exceptions.py,sha256=cU4dz7x-1uFGrf2A1_Np9tKcy599bRJKRJkikgARxW4,24244 +pip/_internal/index/__init__.py,sha256=vpt-JeTZefh8a-FC22ZeBSXFVbuBcXSGiILhQZJaNpQ,30 +pip/_internal/index/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/index/__pycache__/collector.cpython-311.pyc,, +pip/_internal/index/__pycache__/package_finder.cpython-311.pyc,, +pip/_internal/index/__pycache__/sources.cpython-311.pyc,, +pip/_internal/index/collector.py,sha256=3OmYZ3tCoRPGOrELSgQWG-03M-bQHa2-VCA3R_nJAaU,16504 +pip/_internal/index/package_finder.py,sha256=rrUw4vj7QE_eMt022jw--wQiKznMaUgVBkJ1UCrVUxo,37873 +pip/_internal/index/sources.py,sha256=SVyPitv08-Qalh2_Bk5diAJ9GAA_d-a93koouQodAG0,6557 +pip/_internal/locations/__init__.py,sha256=Dh8LJWG8LRlDK4JIj9sfRF96TREzE--N_AIlx7Tqoe4,15365 +pip/_internal/locations/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc,, +pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc,, +pip/_internal/locations/__pycache__/base.cpython-311.pyc,, +pip/_internal/locations/_distutils.py,sha256=cmi6h63xYNXhQe7KEWEMaANjHFy5yQOPt_1_RCWyXMY,6100 +pip/_internal/locations/_sysconfig.py,sha256=jyNVtUfMIf0mtyY-Xp1m9yQ8iwECozSVVFmjkN9a2yw,7680 +pip/_internal/locations/base.py,sha256=RQiPi1d4FVM2Bxk04dQhXZ2PqkeljEL2fZZ9SYqIQ78,2556 +pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340 +pip/_internal/metadata/__init__.py,sha256=84j1dPJaIoz5Q2ZTPi0uB1iaDAHiUNfKtYSGQCfFKpo,4280 +pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/metadata/__pycache__/_json.cpython-311.pyc,, +pip/_internal/metadata/__pycache__/base.cpython-311.pyc,, +pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc,, +pip/_internal/metadata/_json.py,sha256=BTkWfFDrWFwuSodImjtbAh8wCL3isecbnjTb5E6UUDI,2595 +pip/_internal/metadata/base.py,sha256=vIwIo1BtoqegehWMAXhNrpLGYBq245rcaCNkBMPnTU8,25277 +pip/_internal/metadata/importlib/__init__.py,sha256=9ZVO8BoE7NEZPmoHp5Ap_NJo0HgNIezXXg-TFTtt3Z4,107 +pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc,, +pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc,, +pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc,, +pip/_internal/metadata/importlib/_compat.py,sha256=GAe_prIfCE4iUylrnr_2dJRlkkBVRUbOidEoID7LPoE,1882 +pip/_internal/metadata/importlib/_dists.py,sha256=BUV8y6D0PePZrEN3vfJL-m1FDqZ6YPRgAiBeBinHhNg,8181 +pip/_internal/metadata/importlib/_envs.py,sha256=7BxanCh3T7arusys__O2ZHJdnmDhQXFmfU7x1-jB5xI,7457 +pip/_internal/metadata/pkg_resources.py,sha256=WjwiNdRsvxqxL4MA5Tb5a_q3Q3sUhdpbZF8wGLtPMI0,9773 +pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63 +pip/_internal/models/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/models/__pycache__/candidate.cpython-311.pyc,, +pip/_internal/models/__pycache__/direct_url.cpython-311.pyc,, +pip/_internal/models/__pycache__/format_control.cpython-311.pyc,, +pip/_internal/models/__pycache__/index.cpython-311.pyc,, +pip/_internal/models/__pycache__/installation_report.cpython-311.pyc,, +pip/_internal/models/__pycache__/link.cpython-311.pyc,, +pip/_internal/models/__pycache__/scheme.cpython-311.pyc,, +pip/_internal/models/__pycache__/search_scope.cpython-311.pyc,, +pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc,, +pip/_internal/models/__pycache__/target_python.cpython-311.pyc,, +pip/_internal/models/__pycache__/wheel.cpython-311.pyc,, +pip/_internal/models/candidate.py,sha256=6pcABsaR7CfIHlbJbr2_kMkVJFL_yrYjTx6SVWUnCPQ,990 +pip/_internal/models/direct_url.py,sha256=f3WiKUwWPdBkT1xm7DlolS32ZAMYh3jbkkVH-BUON5A,6626 +pip/_internal/models/format_control.py,sha256=DJpMYjxeYKKQdwNcML2_F0vtAh-qnKTYe-CpTxQe-4g,2520 +pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030 +pip/_internal/models/installation_report.py,sha256=Hymmzv9-e3WhtewYm2NIOeMyAB6lXp736mpYqb9scZ0,2617 +pip/_internal/models/link.py,sha256=nfybVSpXgVHeU0MkC8hMkN2IgMup8Pdaudg74_sQEC8,18602 +pip/_internal/models/scheme.py,sha256=3EFQp_ICu_shH1-TBqhl0QAusKCPDFOlgHFeN4XowWs,738 +pip/_internal/models/search_scope.py,sha256=iGPQQ6a4Lau8oGQ_FWj8aRLik8A21o03SMO5KnSt-Cg,4644 +pip/_internal/models/selection_prefs.py,sha256=KZdi66gsR-_RUXUr9uejssk3rmTHrQVJWeNA2sV-VSY,1907 +pip/_internal/models/target_python.py,sha256=qKpZox7J8NAaPmDs5C_aniwfPDxzvpkrCKqfwndG87k,3858 +pip/_internal/models/wheel.py,sha256=YqazoIZyma_Q1ejFa1C7NHKQRRWlvWkdK96VRKmDBeI,3600 +pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50 +pip/_internal/network/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/network/__pycache__/auth.cpython-311.pyc,, +pip/_internal/network/__pycache__/cache.cpython-311.pyc,, +pip/_internal/network/__pycache__/download.cpython-311.pyc,, +pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc,, +pip/_internal/network/__pycache__/session.cpython-311.pyc,, +pip/_internal/network/__pycache__/utils.cpython-311.pyc,, +pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc,, +pip/_internal/network/auth.py,sha256=MQVP0k4hUXk8ReYEfsGQ5t7_TS7cNHQuaHJuBlJLHxU,16507 +pip/_internal/network/cache.py,sha256=hgXftU-eau4MWxHSLquTMzepYq5BPC2zhCkhN3glBy8,2145 +pip/_internal/network/download.py,sha256=HvDDq9bVqaN3jcS3DyVJHP7uTqFzbShdkf7NFSoHfkw,6096 +pip/_internal/network/lazy_wheel.py,sha256=PbPyuleNhtEq6b2S7rufoGXZWMD15FAGL4XeiAQ8FxA,7638 +pip/_internal/network/session.py,sha256=BpDOJ7_Xw5VkgPYWsePzcaqOfcyRZcB2AW7W0HGBST0,18443 +pip/_internal/network/utils.py,sha256=6A5SrUJEEUHxbGtbscwU2NpCyz-3ztiDlGWHpRRhsJ8,4073 +pip/_internal/network/xmlrpc.py,sha256=AzQgG4GgS152_cqmGr_Oz2MIXsCal-xfsis7fA7nmU0,1791 +pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/operations/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/operations/__pycache__/check.cpython-311.pyc,, +pip/_internal/operations/__pycache__/freeze.cpython-311.pyc,, +pip/_internal/operations/__pycache__/prepare.cpython-311.pyc,, +pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc,, +pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc,, +pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc,, +pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc,, +pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc,, +pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc,, +pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc,, +pip/_internal/operations/build/build_tracker.py,sha256=vf81EwomN3xe9G8qRJED0VGqNikmRQRQoobNsxi5Xrs,4133 +pip/_internal/operations/build/metadata.py,sha256=9S0CUD8U3QqZeXp-Zyt8HxwU90lE4QrnYDgrqZDzBnc,1422 +pip/_internal/operations/build/metadata_editable.py,sha256=VLL7LvntKE8qxdhUdEJhcotFzUsOSI8NNS043xULKew,1474 +pip/_internal/operations/build/metadata_legacy.py,sha256=o-eU21As175hDC7dluM1fJJ_FqokTIShyWpjKaIpHZw,2198 +pip/_internal/operations/build/wheel.py,sha256=sT12FBLAxDC6wyrDorh8kvcZ1jG5qInCRWzzP-UkJiQ,1075 +pip/_internal/operations/build/wheel_editable.py,sha256=yOtoH6zpAkoKYEUtr8FhzrYnkNHQaQBjWQ2HYae1MQg,1417 +pip/_internal/operations/build/wheel_legacy.py,sha256=C9j6rukgQI1n_JeQLoZGuDdfUwzCXShyIdPTp6edbMQ,3064 +pip/_internal/operations/check.py,sha256=WsN7z0_QSgJjw0JsWWcqOHj4wWTaFv0J7mxgUByDCOg,5122 +pip/_internal/operations/freeze.py,sha256=mwTZ2uML8aQgo3k8MR79a7SZmmmvdAJqdyaknKbavmg,9784 +pip/_internal/operations/install/__init__.py,sha256=mX7hyD2GNBO2mFGokDQ30r_GXv7Y_PLdtxcUv144e-s,51 +pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc,, +pip/_internal/operations/install/__pycache__/legacy.cpython-311.pyc,, +pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc,, +pip/_internal/operations/install/editable_legacy.py,sha256=ee4kfJHNuzTdKItbfAsNOSEwq_vD7DRPGkBdK48yBhU,1354 +pip/_internal/operations/install/legacy.py,sha256=cHdcHebyzf8w7OaOLwcsTNSMSSV8WBoAPFLay_9CjE8,4105 +pip/_internal/operations/install/wheel.py,sha256=CxzEg2wTPX4SxNTPIx0ozTqF1X7LhpCyP3iM2FjcKUE,27407 +pip/_internal/operations/prepare.py,sha256=BeYXrLFpRoV5XBnRXQHxRA2plyC36kK9Pms5D9wjCo4,25091 +pip/_internal/pyproject.py,sha256=QqSZR5AGwtf3HTa8NdbDq2yj9T2r9S2h9gnU4aX2Kvg,6987 +pip/_internal/req/__init__.py,sha256=rUQ9d_Sh3E5kNYqX9pkN0D06YL-LrtcbJQ-LiIonq08,2807 +pip/_internal/req/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/req/__pycache__/constructors.cpython-311.pyc,, +pip/_internal/req/__pycache__/req_file.cpython-311.pyc,, +pip/_internal/req/__pycache__/req_install.cpython-311.pyc,, +pip/_internal/req/__pycache__/req_set.cpython-311.pyc,, +pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc,, +pip/_internal/req/constructors.py,sha256=ypjtq1mOQ3d2mFkFPMf_6Mr8SLKeHQk3tUKHA1ddG0U,16611 +pip/_internal/req/req_file.py,sha256=N6lPO3c0to_G73YyGAnk7VUYmed5jV4Qxgmt1xtlXVg,17646 +pip/_internal/req/req_install.py,sha256=X4WNQlTtvkeATwWdSiJcNLihwbYI_EnGDgE99p-Aa00,35763 +pip/_internal/req/req_set.py,sha256=j3esG0s6SzoVReX9rWn4rpYNtyET_fwxbwJPRimvRxo,2858 +pip/_internal/req/req_uninstall.py,sha256=ZFQfgSNz6H1BMsgl87nQNr2iaQCcbFcmXpW8rKVQcic,24045 +pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/resolution/__pycache__/base.cpython-311.pyc,, +pip/_internal/resolution/base.py,sha256=qlmh325SBVfvG6Me9gc5Nsh5sdwHBwzHBq6aEXtKsLA,583 +pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc,, +pip/_internal/resolution/legacy/resolver.py,sha256=9em8D5TcSsEN4xZM1WreaRShOnyM4LlvhMSHpUPsocE,24129 +pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc,, +pip/_internal/resolution/resolvelib/base.py,sha256=u1O4fkvCO4mhmu5i32xrDv9AX5NgUci_eYVyBDQhTIM,5220 +pip/_internal/resolution/resolvelib/candidates.py,sha256=6kQZeMzwibnL4lO6bW0hUQQjNEvXfADdFphRRkRvOtc,18963 +pip/_internal/resolution/resolvelib/factory.py,sha256=OnjkLIgyk5Tol7uOOqapA1D4qiRHWmPU18DF1yN5N8o,27878 +pip/_internal/resolution/resolvelib/found_candidates.py,sha256=hvL3Hoa9VaYo-qEOZkBi2Iqw251UDxPz-uMHVaWmLpE,5705 +pip/_internal/resolution/resolvelib/provider.py,sha256=Vd4jW_NnyifB-HMkPYtZIO70M3_RM0MbL5YV6XyBM-w,9914 +pip/_internal/resolution/resolvelib/reporter.py,sha256=3ZVVYrs5PqvLFJkGLcuXoMK5mTInFzl31xjUpDBpZZk,2526 +pip/_internal/resolution/resolvelib/requirements.py,sha256=B1ndvKPSuyyyTEXt9sKhbwminViSWnBrJa7qO2ln4Z0,5455 +pip/_internal/resolution/resolvelib/resolver.py,sha256=nYZ9bTFXj5c1ILKnkSgU7tUCTYyo5V5J-J0sKoA7Wzg,11533 +pip/_internal/self_outdated_check.py,sha256=pnqBuKKZQ8OxKP0MaUUiDHl3AtyoMJHHG4rMQ7YcYXY,8167 +pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/utils/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/utils/__pycache__/_log.cpython-311.pyc,, +pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc,, +pip/_internal/utils/__pycache__/compat.cpython-311.pyc,, +pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc,, +pip/_internal/utils/__pycache__/datetime.cpython-311.pyc,, +pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc,, +pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc,, +pip/_internal/utils/__pycache__/distutils_args.cpython-311.pyc,, +pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc,, +pip/_internal/utils/__pycache__/encoding.cpython-311.pyc,, +pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc,, +pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc,, +pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc,, +pip/_internal/utils/__pycache__/glibc.cpython-311.pyc,, +pip/_internal/utils/__pycache__/hashes.cpython-311.pyc,, +pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc,, +pip/_internal/utils/__pycache__/logging.cpython-311.pyc,, +pip/_internal/utils/__pycache__/misc.cpython-311.pyc,, +pip/_internal/utils/__pycache__/models.cpython-311.pyc,, +pip/_internal/utils/__pycache__/packaging.cpython-311.pyc,, +pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc,, +pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc,, +pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc,, +pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc,, +pip/_internal/utils/__pycache__/urls.cpython-311.pyc,, +pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc,, +pip/_internal/utils/__pycache__/wheel.cpython-311.pyc,, +pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015 +pip/_internal/utils/appdirs.py,sha256=swgcTKOm3daLeXTW6v5BUS2Ti2RvEnGRQYH_yDXklAo,1665 +pip/_internal/utils/compat.py,sha256=ACyBfLgj3_XG-iA5omEDrXqDM0cQKzi8h8HRBInzG6Q,1884 +pip/_internal/utils/compatibility_tags.py,sha256=ydin8QG8BHqYRsPY4OL6cmb44CbqXl1T0xxS97VhHkk,5377 +pip/_internal/utils/datetime.py,sha256=m21Y3wAtQc-ji6Veb6k_M5g6A0ZyFI4egchTdnwh-pQ,242 +pip/_internal/utils/deprecation.py,sha256=OLc7GzDwPob9y8jscDYCKUNBV-9CWwqFplBOJPLOpBM,5764 +pip/_internal/utils/direct_url_helpers.py,sha256=6F1tc2rcKaCZmgfVwsE6ObIe_Pux23mUVYA-2D9wCFc,3206 +pip/_internal/utils/distutils_args.py,sha256=bYUt4wfFJRaeGO4VHia6FNaA8HlYXMcKuEq1zYijY5g,1115 +pip/_internal/utils/egg_link.py,sha256=ZryCchR_yQSCsdsMkCpxQjjLbQxObA5GDtLG0RR5mGc,2118 +pip/_internal/utils/encoding.py,sha256=qqsXDtiwMIjXMEiIVSaOjwH5YmirCaK-dIzb6-XJsL0,1169 +pip/_internal/utils/entrypoints.py,sha256=YlhLTRl2oHBAuqhc-zmL7USS67TPWVHImjeAQHreZTQ,3064 +pip/_internal/utils/filesystem.py,sha256=RhMIXUaNVMGjc3rhsDahWQ4MavvEQDdqXqgq-F6fpw8,5122 +pip/_internal/utils/filetypes.py,sha256=i8XAQ0eFCog26Fw9yV0Yb1ygAqKYB1w9Cz9n0fj8gZU,716 +pip/_internal/utils/glibc.py,sha256=tDfwVYnJCOC0BNVpItpy8CGLP9BjkxFHdl0mTS0J7fc,3110 +pip/_internal/utils/hashes.py,sha256=1WhkVNIHNfuYLafBHThIjVKGplxFJXSlQtuG2mXNlJI,4831 +pip/_internal/utils/inject_securetransport.py,sha256=o-QRVMGiENrTJxw3fAhA7uxpdEdw6M41TjHYtSVRrcg,795 +pip/_internal/utils/logging.py,sha256=U2q0i1n8hPS2gQh8qcocAg5dovGAa_bR24akmXMzrk4,11632 +pip/_internal/utils/misc.py,sha256=lX22zJrsk-Q00ghAHB81yHpc_8q7Hp5Vto4k7QDzLfg,23220 +pip/_internal/utils/models.py,sha256=5GoYU586SrxURMvDn_jBMJInitviJg4O5-iOU-6I0WY,1193 +pip/_internal/utils/packaging.py,sha256=5Wm6_x7lKrlqVjPI5MBN_RurcRHwVYoQ7Ksrs84de7s,2108 +pip/_internal/utils/setuptools_build.py,sha256=4i3CuS34yNrkePnZ73rR47pyDzpZBo-SX9V5PNDSSHY,5662 +pip/_internal/utils/subprocess.py,sha256=0EMhgfPGFk8FZn6Qq7Hp9PN6YHuQNWiVby4DXcTCON4,9200 +pip/_internal/utils/temp_dir.py,sha256=aCX489gRa4Nu0dMKRFyGhV6maJr60uEynu5uCbKR4Qg,7702 +pip/_internal/utils/unpacking.py,sha256=SBb2iV1crb89MDRTEKY86R4A_UOWApTQn9VQVcMDOlE,8821 +pip/_internal/utils/urls.py,sha256=AhaesUGl-9it6uvG6fsFPOr9ynFpGaTMk4t5XTX7Z_Q,1759 +pip/_internal/utils/virtualenv.py,sha256=S6f7csYorRpiD6cvn3jISZYc3I8PJC43H5iMFpRAEDU,3456 +pip/_internal/utils/wheel.py,sha256=lXOgZyTlOm5HmK8tw5iw0A3_5A6wRzsXHOaQkIvvloU,4549 +pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596 +pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc,, +pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc,, +pip/_internal/vcs/__pycache__/git.cpython-311.pyc,, +pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc,, +pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc,, +pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc,, +pip/_internal/vcs/bazaar.py,sha256=j0oin0fpGRHcCFCxEcpPCQoFEvA-DMLULKdGP8Nv76o,3519 +pip/_internal/vcs/git.py,sha256=mjhwudCx9WlLNkxZ6_kOKmueF0rLoU2i1xeASKF6yiQ,18116 +pip/_internal/vcs/mercurial.py,sha256=Bzbd518Jsx-EJI0IhIobiQqiRsUv5TWYnrmRIFWE0Gw,5238 +pip/_internal/vcs/subversion.py,sha256=vhZs8L-TNggXqM1bbhl-FpbxE3TrIB6Tgnx8fh3S2HE,11729 +pip/_internal/vcs/versioncontrol.py,sha256=KUOc-hN51em9jrqxKwUR3JnkgSE-xSOqMiiJcSaL6B8,22811 +pip/_internal/wheel_builder.py,sha256=8cObBCu4mIsMJqZM7xXI9DO3vldiAnRNa1Gt6izPPTs,13079 +pip/_vendor/__init__.py,sha256=fNxOSVD0auElsD8fN9tuq5psfgMQ-RFBtD4X5gjlRkg,4966 +pip/_vendor/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/__pycache__/six.cpython-311.pyc,, +pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc,, +pip/_vendor/cachecontrol/__init__.py,sha256=hrxlv3q7upsfyMw8k3gQ9vagBax1pYHSGGqYlZ0Zk0M,465 +pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc,, +pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc,, +pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc,, +pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc,, +pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc,, +pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc,, +pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc,, +pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc,, +pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc,, +pip/_vendor/cachecontrol/_cmd.py,sha256=lxUXqfNTVx84zf6tcWbkLZHA6WVBRtJRpfeA9ZqhaAY,1379 +pip/_vendor/cachecontrol/adapter.py,sha256=ew9OYEQHEOjvGl06ZsuX8W3DAvHWsQKHwWAxISyGug8,5033 +pip/_vendor/cachecontrol/cache.py,sha256=Tty45fOjH40fColTGkqKQvQQmbYsMpk-nCyfLcv2vG4,1535 +pip/_vendor/cachecontrol/caches/__init__.py,sha256=h-1cUmOz6mhLsjTjOrJ8iPejpGdLCyG4lzTftfGZvLg,242 +pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc,, +pip/_vendor/cachecontrol/caches/file_cache.py,sha256=GpexcE29LoY4MaZwPUTcUBZaDdcsjqyLxZFznk8Hbr4,5271 +pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=mp-QWonP40I3xJGK3XVO-Gs9a3UjzlqqEmp9iLJH9F4,1033 +pip/_vendor/cachecontrol/compat.py,sha256=LNx7vqBndYdHU8YuJt53ab_8rzMGTXVrvMb7CZJkxG0,778 +pip/_vendor/cachecontrol/controller.py,sha256=bAYrt7x_VH4toNpI066LQxbHpYGpY1MxxmZAhspplvw,16416 +pip/_vendor/cachecontrol/filewrapper.py,sha256=X4BAQOO26GNOR7nH_fhTzAfeuct2rBQcx_15MyFBpcs,3946 +pip/_vendor/cachecontrol/heuristics.py,sha256=8kAyuZLSCyEIgQr6vbUwfhpqg9ows4mM0IV6DWazevI,4154 +pip/_vendor/cachecontrol/serialize.py,sha256=_U1NU_C-SDgFzkbAxAsPDgMTHeTWZZaHCQnZN_jh0U8,7105 +pip/_vendor/cachecontrol/wrapper.py,sha256=X3-KMZ20Ho3VtqyVaXclpeQpFzokR5NE8tZSfvKVaB8,774 +pip/_vendor/certifi/__init__.py,sha256=bK_nm9bLJzNvWZc2oZdiTwg2KWD4HSPBWGaM0zUDvMw,94 +pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255 +pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc,, +pip/_vendor/certifi/__pycache__/core.cpython-311.pyc,, +pip/_vendor/certifi/cacert.pem,sha256=LBHDzgj_xA05AxnHK8ENT5COnGNElNZe0svFUHMf1SQ,275233 +pip/_vendor/certifi/core.py,sha256=DNTl8b_B6C4vO3Vc9_q2uvwHpNnBQoy5onDC4McImxc,4531 +pip/_vendor/chardet/__init__.py,sha256=57R-HSxj0PWmILMN0GFmUNqEMfrEVSamXyjD-W6_fbs,4797 +pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/cp949prober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/enums.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/gb2312freq.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/gb2312prober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/macromanprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/resultdict.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc,, +pip/_vendor/chardet/__pycache__/version.cpython-311.pyc,, +pip/_vendor/chardet/big5freq.py,sha256=ltcfP-3PjlNHCoo5e4a7C4z-2DhBTXRfY6jbMbB7P30,31274 +pip/_vendor/chardet/big5prober.py,sha256=lPMfwCX6v2AaPgvFh_cSWZcgLDbWiFCHLZ_p9RQ9uxE,1763 +pip/_vendor/chardet/chardistribution.py,sha256=13B8XUG4oXDuLdXvfbIWwLFeR-ZU21AqTS1zcdON8bU,10032 +pip/_vendor/chardet/charsetgroupprober.py,sha256=UKK3SaIZB2PCdKSIS0gnvMtLR9JJX62M-fZJu3OlWyg,3915 +pip/_vendor/chardet/charsetprober.py,sha256=L3t8_wIOov8em-vZWOcbkdsrwe43N6_gqNh5pH7WPd4,5420 +pip/_vendor/chardet/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-311.pyc,, +pip/_vendor/chardet/cli/chardetect.py,sha256=zibMVg5RpKb-ME9_7EYG4ZM2Sf07NHcQzZ12U-rYJho,3242 +pip/_vendor/chardet/codingstatemachine.py,sha256=K7k69sw3jY5DmTXoSJQVsUtFIQKYPQVOSJJhBuGv_yE,3732 +pip/_vendor/chardet/codingstatemachinedict.py,sha256=0GY3Hi2qIZvDrOOJ3AtqppM1RsYxr_66ER4EHjuMiMc,542 +pip/_vendor/chardet/cp949prober.py,sha256=0jKRV7fECuWI16rNnks0ZECKA1iZYCIEaP8A1ZvjUSI,1860 +pip/_vendor/chardet/enums.py,sha256=TzECiZoCKNMqgwU76cPCeKWFBqaWvAdLMev5_bCkhY8,1683 +pip/_vendor/chardet/escprober.py,sha256=Kho48X65xE0scFylIdeJjM2bcbvRvv0h0WUbMWrJD3A,4006 +pip/_vendor/chardet/escsm.py,sha256=AqyXpA2FQFD7k-buBty_7itGEYkhmVa8X09NLRul3QM,12176 +pip/_vendor/chardet/eucjpprober.py,sha256=5KYaM9fsxkRYzw1b5k0fL-j_-ezIw-ij9r97a9MHxLY,3934 +pip/_vendor/chardet/euckrfreq.py,sha256=3mHuRvXfsq_QcQysDQFb8qSudvTiol71C6Ic2w57tKM,13566 +pip/_vendor/chardet/euckrprober.py,sha256=hiFT6wM174GIwRvqDsIcuOc-dDsq2uPKMKbyV8-1Xnc,1753 +pip/_vendor/chardet/euctwfreq.py,sha256=2alILE1Lh5eqiFJZjzRkMQXolNJRHY5oBQd-vmZYFFM,36913 +pip/_vendor/chardet/euctwprober.py,sha256=NxbpNdBtU0VFI0bKfGfDkpP7S2_8_6FlO87dVH0ogws,1753 +pip/_vendor/chardet/gb2312freq.py,sha256=49OrdXzD-HXqwavkqjo8Z7gvs58hONNzDhAyMENNkvY,20735 +pip/_vendor/chardet/gb2312prober.py,sha256=KPEBueaSLSvBpFeINMu0D6TgHcR90e5PaQawifzF4o0,1759 +pip/_vendor/chardet/hebrewprober.py,sha256=96T_Lj_OmW-fK7JrSHojYjyG3fsGgbzkoTNleZ3kfYE,14537 +pip/_vendor/chardet/jisfreq.py,sha256=mm8tfrwqhpOd3wzZKS4NJqkYBQVcDfTM2JiQ5aW932E,25796 +pip/_vendor/chardet/johabfreq.py,sha256=dBpOYG34GRX6SL8k_LbS9rxZPMjLjoMlgZ03Pz5Hmqc,42498 +pip/_vendor/chardet/johabprober.py,sha256=O1Qw9nVzRnun7vZp4UZM7wvJSv9W941mEU9uDMnY3DU,1752 +pip/_vendor/chardet/jpcntx.py,sha256=uhHrYWkLxE_rF5OkHKInm0HUsrjgKHHVQvtt3UcvotA,27055 +pip/_vendor/chardet/langbulgarianmodel.py,sha256=vmbvYFP8SZkSxoBvLkFqKiH1sjma5ihk3PTpdy71Rr4,104562 +pip/_vendor/chardet/langgreekmodel.py,sha256=JfB7bupjjJH2w3X_mYnQr9cJA_7EuITC2cRW13fUjeI,98484 +pip/_vendor/chardet/langhebrewmodel.py,sha256=3HXHaLQPNAGcXnJjkIJfozNZLTvTJmf4W5Awi6zRRKc,98196 +pip/_vendor/chardet/langhungarianmodel.py,sha256=WxbeQIxkv8YtApiNqxQcvj-tMycsoI4Xy-fwkDHpP_Y,101363 +pip/_vendor/chardet/langrussianmodel.py,sha256=s395bTZ87ESTrZCOdgXbEjZ9P1iGPwCl_8xSsac_DLY,128035 +pip/_vendor/chardet/langthaimodel.py,sha256=7bJlQitRpTnVGABmbSznHnJwOHDy3InkTvtFUx13WQI,102774 +pip/_vendor/chardet/langturkishmodel.py,sha256=XY0eGdTIy4eQ9Xg1LVPZacb-UBhHBR-cq0IpPVHowKc,95372 +pip/_vendor/chardet/latin1prober.py,sha256=p15EEmFbmQUwbKLC7lOJVGHEZwcG45ubEZYTGu01J5g,5380 +pip/_vendor/chardet/macromanprober.py,sha256=9anfzmY6TBfUPDyBDOdY07kqmTHpZ1tK0jL-p1JWcOY,6077 +pip/_vendor/chardet/mbcharsetprober.py,sha256=Wr04WNI4F3X_VxEverNG-H25g7u-MDDKlNt-JGj-_uU,3715 +pip/_vendor/chardet/mbcsgroupprober.py,sha256=iRpaNBjV0DNwYPu_z6TiHgRpwYahiM7ztI_4kZ4Uz9A,2131 +pip/_vendor/chardet/mbcssm.py,sha256=hUtPvDYgWDaA2dWdgLsshbwRfm3Q5YRlRogdmeRUNQw,30391 +pip/_vendor/chardet/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc,, +pip/_vendor/chardet/metadata/languages.py,sha256=FhvBIdZFxRQ-dTwkb_0madRKgVBCaUMQz9I5xqjE5iQ,13560 +pip/_vendor/chardet/resultdict.py,sha256=ez4FRvN5KaSosJeJ2WzUyKdDdg35HDy_SSLPXKCdt5M,402 +pip/_vendor/chardet/sbcharsetprober.py,sha256=-nd3F90i7GpXLjehLVHqVBE0KlWzGvQUPETLBNn4o6U,6400 +pip/_vendor/chardet/sbcsgroupprober.py,sha256=gcgI0fOfgw_3YTClpbra_MNxwyEyJ3eUXraoLHYb59E,4137 +pip/_vendor/chardet/sjisprober.py,sha256=aqQufMzRw46ZpFlzmYaYeT2-nzmKb-hmcrApppJ862k,4007 +pip/_vendor/chardet/universaldetector.py,sha256=xYBrg4x0dd9WnT8qclfADVD9ondrUNkqPmvte1pa520,14848 +pip/_vendor/chardet/utf1632prober.py,sha256=pw1epGdMj1hDGiCu1AHqqzOEfjX8MVdiW7O1BlT8-eQ,8505 +pip/_vendor/chardet/utf8prober.py,sha256=8m08Ub5490H4jQ6LYXvFysGtgKoKsHUd2zH_i8_TnVw,2812 +pip/_vendor/chardet/version.py,sha256=lGtJcxGM44Qz4Cbk4rbbmrKxnNr1-97U25TameLehZw,244 +pip/_vendor/colorama/__init__.py,sha256=wePQA4U20tKgYARySLEC047ucNX-g8pRLpYBuiHlLb8,266 +pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc,, +pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc,, +pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc,, +pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc,, +pip/_vendor/colorama/__pycache__/winterm.cpython-311.pyc,, +pip/_vendor/colorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522 +pip/_vendor/colorama/ansitowin32.py,sha256=vPNYa3OZbxjbuFyaVo0Tmhmy1FZ1lKMWCnT7odXpItk,11128 +pip/_vendor/colorama/initialise.py,sha256=-hIny86ClXo39ixh5iSCfUIa2f_h_bgKRDW7gqs-KLU,3325 +pip/_vendor/colorama/tests/__init__.py,sha256=MkgPAEzGQd-Rq0w0PZXSX2LadRWhUECcisJY8lSrm4Q,75 +pip/_vendor/colorama/tests/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-311.pyc,, +pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-311.pyc,, +pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-311.pyc,, +pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-311.pyc,, +pip/_vendor/colorama/tests/__pycache__/utils.cpython-311.pyc,, +pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-311.pyc,, +pip/_vendor/colorama/tests/ansi_test.py,sha256=FeViDrUINIZcr505PAxvU4AjXz1asEiALs9GXMhwRaE,2839 +pip/_vendor/colorama/tests/ansitowin32_test.py,sha256=RN7AIhMJ5EqDsYaCjVo-o4u8JzDD4ukJbmevWKS70rY,10678 +pip/_vendor/colorama/tests/initialise_test.py,sha256=BbPy-XfyHwJ6zKozuQOvNvQZzsx9vdb_0bYXn7hsBTc,6741 +pip/_vendor/colorama/tests/isatty_test.py,sha256=Pg26LRpv0yQDB5Ac-sxgVXG7hsA1NYvapFgApZfYzZg,1866 +pip/_vendor/colorama/tests/utils.py,sha256=1IIRylG39z5-dzq09R_ngufxyPZxgldNbrxKxUGwGKE,1079 +pip/_vendor/colorama/tests/winterm_test.py,sha256=qoWFPEjym5gm2RuMwpf3pOis3a5r_PJZFCzK254JL8A,3709 +pip/_vendor/colorama/win32.py,sha256=YQOKwMTwtGBbsY4dL5HYTvwTeP9wIQra5MvPNddpxZs,6181 +pip/_vendor/colorama/winterm.py,sha256=XCQFDHjPi6AHYNdZwy0tA02H-Jh48Jp-HvCjeLeLp3U,7134 +pip/_vendor/distlib/__init__.py,sha256=acgfseOC55dNrVAzaBKpUiH3Z6V7Q1CaxsiQ3K7pC-E,581 +pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/database.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/index.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/util.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/version.cpython-311.pyc,, +pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc,, +pip/_vendor/distlib/compat.py,sha256=tfoMrj6tujk7G4UC2owL6ArgDuCKabgBxuJRGZSmpko,41259 +pip/_vendor/distlib/database.py,sha256=o_mw0fAr93NDAHHHfqG54Y1Hi9Rkfrp2BX15XWZYK50,51697 +pip/_vendor/distlib/index.py,sha256=HFiDG7LMoaBs829WuotrfIwcErOOExUOR_AeBtw_TCU,20834 +pip/_vendor/distlib/locators.py,sha256=wNzG-zERzS_XGls-nBPVVyLRHa2skUlkn0-5n0trMWA,51991 +pip/_vendor/distlib/manifest.py,sha256=nQEhYmgoreaBZzyFzwYsXxJARu3fo4EkunU163U16iE,14811 +pip/_vendor/distlib/markers.py,sha256=TpHHHLgkzyT7YHbwj-2i6weRaq-Ivy2-MUnrDkjau-U,5058 +pip/_vendor/distlib/metadata.py,sha256=g_DIiu8nBXRzA-mWPRpatHGbmFZqaFoss7z9TG7QSUU,39801 +pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820 +pip/_vendor/distlib/scripts.py,sha256=BmkTKmiTk4m2cj-iueliatwz3ut_9SsABBW51vnQnZU,18102 +pip/_vendor/distlib/util.py,sha256=31dPXn3Rfat0xZLeVoFpuniyhe6vsbl9_QN-qd9Lhlk,66262 +pip/_vendor/distlib/version.py,sha256=WG__LyAa2GwmA6qSoEJtvJE8REA1LZpbSizy8WvhJLk,23513 +pip/_vendor/distlib/wheel.py,sha256=Rgqs658VsJ3R2845qwnZD8XQryV2CzWw2mghwLvxxsI,43898 +pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981 +pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64 +pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc,, +pip/_vendor/distro/__pycache__/distro.cpython-311.pyc,, +pip/_vendor/distro/distro.py,sha256=UZO1LjIhtFCMdlbiz39gj3raV-Amf3SBwzGzfApiMHw,49330 +pip/_vendor/idna/__init__.py,sha256=KJQN1eQBr8iIK5SKrJ47lXvxG0BJ7Lm38W4zT0v_8lk,849 +pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/idna/__pycache__/codec.cpython-311.pyc,, +pip/_vendor/idna/__pycache__/compat.cpython-311.pyc,, +pip/_vendor/idna/__pycache__/core.cpython-311.pyc,, +pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc,, +pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc,, +pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc,, +pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc,, +pip/_vendor/idna/codec.py,sha256=6ly5odKfqrytKT9_7UrlGklHnf1DSK2r9C6cSM4sa28,3374 +pip/_vendor/idna/compat.py,sha256=0_sOEUMT4CVw9doD3vyRhX80X19PwqFoUBs7gWsFME4,321 +pip/_vendor/idna/core.py,sha256=1JxchwKzkxBSn7R_oCE12oBu3eVux0VzdxolmIad24M,12950 +pip/_vendor/idna/idnadata.py,sha256=xUjqKqiJV8Ho_XzBpAtv5JFoVPSupK-SUXvtjygUHqw,44375 +pip/_vendor/idna/intranges.py,sha256=YBr4fRYuWH7kTKS2tXlFjM24ZF1Pdvcir-aywniInqg,1881 +pip/_vendor/idna/package_data.py,sha256=C_jHJzmX8PI4xq0jpzmcTMxpb5lDsq4o5VyxQzlVrZE,21 +pip/_vendor/idna/uts46data.py,sha256=zvjZU24s58_uAS850Mcd0NnD0X7_gCMAMjzWNIeUJdc,206539 +pip/_vendor/msgpack/__init__.py,sha256=NryGaKLDk_Egd58ZxXpnuI7OWO27AXz7S6CBFRM3sAY,1132 +pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc,, +pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc,, +pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc,, +pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081 +pip/_vendor/msgpack/ext.py,sha256=TuldJPkYu8Wo_Xh0tFGL2l06-gY88NSR8tOje9fo2Wg,6080 +pip/_vendor/msgpack/fallback.py,sha256=OORDn86-fHBPlu-rPlMdM10KzkH6S_Rx9CHN1b7o4cg,34557 +pip/_vendor/packaging/__about__.py,sha256=ugASIO2w1oUyH8_COqQ2X_s0rDhjbhQC3yJocD03h2c,661 +pip/_vendor/packaging/__init__.py,sha256=b9Kk5MF7KxhhLgcDmiUWukN-LatWFxPdNug0joPhHSk,497 +pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc,, +pip/_vendor/packaging/__pycache__/version.cpython-311.pyc,, +pip/_vendor/packaging/_manylinux.py,sha256=XcbiXB-qcjv3bcohp6N98TMpOP4_j3m-iOA8ptK2GWY,11488 +pip/_vendor/packaging/_musllinux.py,sha256=_KGgY_qc7vhMGpoqss25n2hiLCNKRtvz9mCrS7gkqyc,4378 +pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431 +pip/_vendor/packaging/markers.py,sha256=AJBOcY8Oq0kYc570KuuPTkvuqjAlhufaE2c9sCUbm64,8487 +pip/_vendor/packaging/requirements.py,sha256=NtDlPBtojpn1IUC85iMjPNsUmufjpSlwnNA-Xb4m5NA,4676 +pip/_vendor/packaging/specifiers.py,sha256=LRQ0kFsHrl5qfcFNEEJrIFYsnIHQUJXY9fIsakTrrqE,30110 +pip/_vendor/packaging/tags.py,sha256=lmsnGNiJ8C4D_Pf9PbM0qgbZvD9kmB9lpZBQUZa3R_Y,15699 +pip/_vendor/packaging/utils.py,sha256=dJjeat3BS-TYn1RrUFVwufUMasbtzLfYRoy_HXENeFQ,4200 +pip/_vendor/packaging/version.py,sha256=_fLRNrFrxYcHVfyo8vk9j8s6JM8N_xsSxVFr6RJyco8,14665 +pip/_vendor/pkg_resources/__init__.py,sha256=NnpQ3g6BCHzpMgOR_OLBmYtniY4oOzdKpwqghfq_6ug,108287 +pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-311.pyc,, +pip/_vendor/pkg_resources/py31compat.py,sha256=CRk8fkiPRDLsbi5pZcKsHI__Pbmh_94L8mr9Qy9Ab2U,562 +pip/_vendor/platformdirs/__init__.py,sha256=9iY4Z8iJDZB0djln6zHHwrPVWpB54TCygcnh--MujU0,12936 +pip/_vendor/platformdirs/__main__.py,sha256=ZmsnTxEOxtTvwa-Y_Vfab_JN3X4XCVeN8X0yyy9-qnc,1176 +pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc,, +pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc,, +pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc,, +pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc,, +pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc,, +pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc,, +pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc,, +pip/_vendor/platformdirs/android.py,sha256=GKizhyS7ESRiU67u8UnBJLm46goau9937EchXWbPBlk,4068 +pip/_vendor/platformdirs/api.py,sha256=MXKHXOL3eh_-trSok-JUTjAR_zjmmKF3rjREVABjP8s,4910 +pip/_vendor/platformdirs/macos.py,sha256=-3UXQewbT0yMhMdkzRXfXGAntmLIH7Qt4a9Hlf8I5_Y,2655 +pip/_vendor/platformdirs/unix.py,sha256=P-WQjSSieE38DXjMDa1t4XHnKJQ5idEaKT0PyXwm8KQ,6911 +pip/_vendor/platformdirs/version.py,sha256=qaN-fw_htIgKUVXoAuAEVgKxQu3tZ9qE2eiKkWIS7LA,160 +pip/_vendor/platformdirs/windows.py,sha256=LOrXLgI0CjQldDo2zhOZYGYZ6g4e_cJOCB_pF9aMRWQ,6596 +pip/_vendor/pygments/__init__.py,sha256=5oLcMLXD0cTG8YcHBPITtK1fS0JBASILEvEnWkTezgE,2999 +pip/_vendor/pygments/__main__.py,sha256=p0_rz3JZmNZMNZBOqDojaEx1cr9wmA9FQZX_TYl74lQ,353 +pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/console.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/style.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/token.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc,, +pip/_vendor/pygments/__pycache__/util.cpython-311.pyc,, +pip/_vendor/pygments/cmdline.py,sha256=rc0fah4eknRqFgn1wKNEwkq0yWnSqYOGaA4PaIeOxVY,23685 +pip/_vendor/pygments/console.py,sha256=hQfqCFuOlGk7DW2lPQYepsw-wkOH1iNt9ylNA1eRymM,1697 +pip/_vendor/pygments/filter.py,sha256=NglMmMPTRRv-zuRSE_QbWid7JXd2J4AvwjCW2yWALXU,1938 +pip/_vendor/pygments/filters/__init__.py,sha256=b5YuXB9rampSy2-cMtKxGQoMDfrG4_DcvVwZrzTlB6w,40386 +pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pygments/formatter.py,sha256=6-TS2Y8pUMeWIUolWwr1O8ruC-U6HydWDwOdbAiJgJQ,2917 +pip/_vendor/pygments/formatters/__init__.py,sha256=YTqGeHS17fNXCLMZpf7oCxBCKLB9YLsZ8IAsjGhawyg,4810 +pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc,, +pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc,, +pip/_vendor/pygments/formatters/_mapping.py,sha256=fCZgvsM6UEuZUG7J6lr47eVss5owKd_JyaNbDfxeqmQ,4104 +pip/_vendor/pygments/formatters/bbcode.py,sha256=JrL4ITjN-KzPcuQpPMBf1pm33eW2sDUNr8WzSoAJsJA,3314 +pip/_vendor/pygments/formatters/groff.py,sha256=xrOFoLbafSA9uHsSLRogy79_Zc4GWJ8tMK2hCdTJRsw,5086 +pip/_vendor/pygments/formatters/html.py,sha256=QNt9prPgxmbKx2M-nfDwoR1bIg06-sNouQuWnE434Wc,35441 +pip/_vendor/pygments/formatters/img.py,sha256=h75Y7IRZLZxDEIwyoOsdRLTwm7kLVPbODKkgEiJ0iKI,21938 +pip/_vendor/pygments/formatters/irc.py,sha256=iwk5tDJOxbCV64SCmOFyvk__x6RD60ay0nUn7ko9n7U,5871 +pip/_vendor/pygments/formatters/latex.py,sha256=thPbytJCIs2AUXsO3NZwqKtXJ-upOlcXP4CXsx94G4w,19351 +pip/_vendor/pygments/formatters/other.py,sha256=PczqK1Rms43lz6iucOLPeBMxIncPKOGBt-195w1ynII,5073 +pip/_vendor/pygments/formatters/pangomarkup.py,sha256=ZZzMsKJKXrsDniFeMTkIpe7aQ4VZYRHu0idWmSiUJ2U,2212 +pip/_vendor/pygments/formatters/rtf.py,sha256=abrKlWjipBkQvhIICxtjYTUNv6WME0iJJObFvqVuudE,5014 +pip/_vendor/pygments/formatters/svg.py,sha256=6MM9YyO8NhU42RTQfTWBiagWMnsf9iG5gwhqSriHORE,7335 +pip/_vendor/pygments/formatters/terminal.py,sha256=NpEGvwkC6LgMLQTjVzGrJXji3XcET1sb5JCunSCzoRo,4674 +pip/_vendor/pygments/formatters/terminal256.py,sha256=4v4OVizvsxtwWBpIy_Po30zeOzE5oJg_mOc1-rCjMDk,11753 +pip/_vendor/pygments/lexer.py,sha256=ZPB_TGn_qzrXodRFwEdPzzJk6LZBo9BlfSy3lacc6zg,32005 +pip/_vendor/pygments/lexers/__init__.py,sha256=8d80-XfL5UKDCC1wRD1a_ZBZDkZ2HOe7Zul8SsnNYFE,11174 +pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc,, +pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc,, +pip/_vendor/pygments/lexers/_mapping.py,sha256=zEiCV5FPiBioMJQJjw9kk7IJ5Y9GwknS4VJPYlcNchs,70232 +pip/_vendor/pygments/lexers/python.py,sha256=gZROs9iNSOA18YyVghP1cUCD0OwYZ04a6PCwgSOCeSA,53376 +pip/_vendor/pygments/modeline.py,sha256=gIbMSYrjSWPk0oATz7W9vMBYkUyTK2OcdVyKjioDRvA,986 +pip/_vendor/pygments/plugin.py,sha256=5rPxEoB_89qQMpOs0nI4KyLOzAHNlbQiwEMOKxqNmv8,2591 +pip/_vendor/pygments/regexopt.py,sha256=c6xcXGpGgvCET_3VWawJJqAnOp0QttFpQEdOPNY2Py0,3072 +pip/_vendor/pygments/scanner.py,sha256=F2T2G6cpkj-yZtzGQr-sOBw5w5-96UrJWveZN6va2aM,3092 +pip/_vendor/pygments/sphinxext.py,sha256=F8L0211sPnXaiWutN0lkSUajWBwlgDMIEFFAbMWOvZY,4630 +pip/_vendor/pygments/style.py,sha256=RRnussX1YiK9Z7HipIvKorImxu3-HnkdpPCO4u925T0,6257 +pip/_vendor/pygments/styles/__init__.py,sha256=iZDZ7PBKb55SpGlE1--cx9cbmWx5lVTH4bXO87t2Vok,3419 +pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pygments/token.py,sha256=vA2yNHGJBHfq4jNQSah7C9DmIOp34MmYHPA8P-cYAHI,6184 +pip/_vendor/pygments/unistring.py,sha256=gP3gK-6C4oAFjjo9HvoahsqzuV4Qz0jl0E0OxfDerHI,63187 +pip/_vendor/pygments/util.py,sha256=KgwpWWC3By5AiNwxGTI7oI9aXupH2TyZWukafBJe0Mg,9110 +pip/_vendor/pyparsing/__init__.py,sha256=ZPdI7pPo4IYXcABw-51AcqOzsxVvDtqnQbyn_qYWZvo,9171 +pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc,, +pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc,, +pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc,, +pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc,, +pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc,, +pip/_vendor/pyparsing/__pycache__/results.cpython-311.pyc,, +pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc,, +pip/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc,, +pip/_vendor/pyparsing/__pycache__/util.cpython-311.pyc,, +pip/_vendor/pyparsing/actions.py,sha256=wU9i32e0y1ymxKE3OUwSHO-SFIrt1h_wv6Ws0GQjpNU,6426 +pip/_vendor/pyparsing/common.py,sha256=lFL97ooIeR75CmW5hjURZqwDCTgruqltcTCZ-ulLO2Q,12936 +pip/_vendor/pyparsing/core.py,sha256=AzTm1KFT1FIhiw2zvXZJmrpQoAwB0wOmeDCiR6SYytw,213344 +pip/_vendor/pyparsing/diagram/__init__.py,sha256=KW0PV_TvWKnL7jysz0pQbZ24nzWWu2ZfNaeyUIIywIg,23685 +pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pyparsing/exceptions.py,sha256=3LbSafD32NYb1Tzt85GHNkhEAU1eZkTtNSk24cPMemo,9023 +pip/_vendor/pyparsing/helpers.py,sha256=QpUOjW0-psvueMwWb9bQpU2noqKCv98_wnw1VSzSdVo,39129 +pip/_vendor/pyparsing/results.py,sha256=HgNvWVXBdQP-Q6PtJfoCEeOJk2nwEvG-2KVKC5sGA30,25341 +pip/_vendor/pyparsing/testing.py,sha256=7tu4Abp4uSeJV0N_yEPRmmNUhpd18ZQP3CrX41DM814,13402 +pip/_vendor/pyparsing/unicode.py,sha256=fwuhMj30SQ165Cv7HJpu-rSxGbRm93kN9L4Ei7VGc1Y,10787 +pip/_vendor/pyparsing/util.py,sha256=kq772O5YSeXOSdP-M31EWpbH_ayj7BMHImBYo9xPD5M,6805 +pip/_vendor/pyproject_hooks/__init__.py,sha256=kCehmy0UaBa9oVMD7ZIZrnswfnP3LXZ5lvnNJAL5JBM,491 +pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-311.pyc,, +pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-311.pyc,, +pip/_vendor/pyproject_hooks/_compat.py,sha256=by6evrYnqkisiM-MQcvOKs5bgDMzlOSgZqRHNqf04zE,138 +pip/_vendor/pyproject_hooks/_impl.py,sha256=61GJxzQip0IInhuO69ZI5GbNQ82XEDUB_1Gg5_KtUoc,11920 +pip/_vendor/pyproject_hooks/_in_process/__init__.py,sha256=9gQATptbFkelkIy0OfWFEACzqxXJMQDWCH9rBOAZVwQ,546 +pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-311.pyc,, +pip/_vendor/pyproject_hooks/_in_process/_in_process.py,sha256=m2b34c917IW5o-Q_6TYIHlsK9lSUlNiyrITTUH_zwew,10927 +pip/_vendor/requests/__init__.py,sha256=64HgJ8cke-XyNrj1ErwNq0F9SqyAThUTh5lV6m7-YkI,5178 +pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/api.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/auth.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/certs.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/compat.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/help.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/models.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/packages.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/structures.cpython-311.pyc,, +pip/_vendor/requests/__pycache__/utils.cpython-311.pyc,, +pip/_vendor/requests/__version__.py,sha256=h48zn-oFukaXrYHocdadp_hIszWyd_PGrS8Eiii6aoc,435 +pip/_vendor/requests/_internal_utils.py,sha256=aSPlF4uDhtfKxEayZJJ7KkAxtormeTfpwKSBSwtmAUw,1397 +pip/_vendor/requests/adapters.py,sha256=GFEz5koZaMZD86v0SHXKVB5SE9MgslEjkCQzldkNwVM,21443 +pip/_vendor/requests/api.py,sha256=dyvkDd5itC9z2g0wHl_YfD1yf6YwpGWLO7__8e21nks,6377 +pip/_vendor/requests/auth.py,sha256=h-HLlVx9j8rKV5hfSAycP2ApOSglTz77R0tz7qCbbEE,10187 +pip/_vendor/requests/certs.py,sha256=PVPooB0jP5hkZEULSCwC074532UFbR2Ptgu0I5zwmCs,575 +pip/_vendor/requests/compat.py,sha256=IhK9quyX0RRuWTNcg6d2JGSAOUbM6mym2p_2XjLTwf4,1286 +pip/_vendor/requests/cookies.py,sha256=kD3kNEcCj-mxbtf5fJsSaT86eGoEYpD3X0CSgpzl7BM,18560 +pip/_vendor/requests/exceptions.py,sha256=FA-_kVwBZ2jhXauRctN_ewHVK25b-fj0Azyz1THQ0Kk,3823 +pip/_vendor/requests/help.py,sha256=FnAAklv8MGm_qb2UilDQgS6l0cUttiCFKUjx0zn2XNA,3879 +pip/_vendor/requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733 +pip/_vendor/requests/models.py,sha256=dDZ-iThotky-Noq9yy97cUEJhr3wnY6mv-xR_ePg_lk,35288 +pip/_vendor/requests/packages.py,sha256=njJmVifY4aSctuW3PP5EFRCxjEwMRDO6J_feG2dKWsI,695 +pip/_vendor/requests/sessions.py,sha256=KUqJcRRLovNefUs7ScOXSUVCcfSayTFWtbiJ7gOSlTI,30180 +pip/_vendor/requests/status_codes.py,sha256=FvHmT5uH-_uimtRz5hH9VCbt7VV-Nei2J9upbej6j8g,4235 +pip/_vendor/requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912 +pip/_vendor/requests/utils.py,sha256=0gzSOcx9Ya4liAbHnHuwt4jM78lzCZZoDFgkmsInNUg,33240 +pip/_vendor/resolvelib/__init__.py,sha256=UL-B2BDI0_TRIqkfGwLHKLxY-LjBlomz7941wDqzB1I,537 +pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc,, +pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc,, +pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc,, +pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc,, +pip/_vendor/resolvelib/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc,, +pip/_vendor/resolvelib/compat/collections_abc.py,sha256=uy8xUZ-NDEw916tugUXm8HgwCGiMO0f-RcdnpkfXfOs,156 +pip/_vendor/resolvelib/providers.py,sha256=roVmFBItQJ0TkhNua65h8LdNny7rmeqVEXZu90QiP4o,5872 +pip/_vendor/resolvelib/reporters.py,sha256=fW91NKf-lK8XN7i6Yd_rczL5QeOT3sc6AKhpaTEnP3E,1583 +pip/_vendor/resolvelib/resolvers.py,sha256=2wYzVGBGerbmcIpH8cFmgSKgLSETz8jmwBMGjCBMHG4,17592 +pip/_vendor/resolvelib/structs.py,sha256=IVIYof6sA_N4ZEiE1C1UhzTX495brCNnyCdgq6CYq28,4794 +pip/_vendor/rich/__init__.py,sha256=dRxjIL-SbFVY0q3IjSMrfgBTHrm1LZDgLOygVBwiYZc,6090 +pip/_vendor/rich/__main__.py,sha256=TT8sb9PTnsnKhhrGuHkLN0jdN0dtKhtPkEr9CidDbPM,8478 +pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/abc.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/align.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/bar.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/box.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/cells.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/color.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/columns.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/console.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/containers.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/control.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/errors.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/json.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/layout.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/live.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/logging.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/markup.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/measure.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/padding.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/pager.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/palette.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/panel.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/progress.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/region.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/repr.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/rule.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/scope.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/screen.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/segment.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/status.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/style.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/styled.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/table.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/text.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/theme.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/themes.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc,, +pip/_vendor/rich/__pycache__/tree.cpython-311.pyc,, +pip/_vendor/rich/_cell_widths.py,sha256=2n4EiJi3X9sqIq0O16kUZ_zy6UYMd3xFfChlKfnW1Hc,10096 +pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235 +pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064 +pip/_vendor/rich/_export_format.py,sha256=nHArqOljIlYn6NruhWsAsh-fHo7oJC3y9BDJyAa-QYQ,2114 +pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265 +pip/_vendor/rich/_inspect.py,sha256=oZJGw31e64dwXSCmrDnvZbwVb1ZKhWfU8wI3VWohjJk,9695 +pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225 +pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236 +pip/_vendor/rich/_null_file.py,sha256=cTaTCU_xuDXGGa9iqK-kZ0uddZCSvM-RgM2aGMuMiHs,1643 +pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063 +pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423 +pip/_vendor/rich/_ratio.py,sha256=2lLSliL025Y-YMfdfGbutkQDevhcyDqc-DtUYW9mU70,5472 +pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919 +pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351 +pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417 +pip/_vendor/rich/_win32_console.py,sha256=P0vxI2fcndym1UU1S37XAzQzQnkyY7YqAKmxm24_gug,22820 +pip/_vendor/rich/_windows.py,sha256=dvNl9TmfPzNVxiKk5WDFihErZ5796g2UC9-KGGyfXmk,1926 +pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783 +pip/_vendor/rich/_wrap.py,sha256=xfV_9t0Sg6rzimmrDru8fCVmUlalYAcHLDfrJZnbbwQ,1840 +pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890 +pip/_vendor/rich/align.py,sha256=FV6_GS-8uhIyViMng3hkIWSFaTgMohK1Oqyjl8I8mGE,10368 +pip/_vendor/rich/ansi.py,sha256=THex7-qjc82-ZRtmDPAYlVEObYOEE_ARB1692Fk-JHs,6819 +pip/_vendor/rich/bar.py,sha256=a7UD303BccRCrEhGjfMElpv5RFYIinaAhAuqYqhUvmw,3264 +pip/_vendor/rich/box.py,sha256=FJ6nI3jD7h2XNFU138bJUt2HYmWOlRbltoCEuIAZhew,9842 +pip/_vendor/rich/cells.py,sha256=zMjFI15wCpgjLR14lHdfFMVC6qMDi5OsKIB0PYZBBMk,4503 +pip/_vendor/rich/color.py,sha256=GTITgffj47On3YK1v_I5T2CPZJGSnyWipPID_YkYXqw,18015 +pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054 +pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131 +pip/_vendor/rich/console.py,sha256=w3tJfrILZpS359wrNqaldGmyk3PEhEmV8Pg2g2GjXWI,97992 +pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288 +pip/_vendor/rich/containers.py,sha256=aKgm5UDHn5Nmui6IJaKdsZhbHClh_X7D-_Wg8Ehrr7s,5497 +pip/_vendor/rich/control.py,sha256=DSkHTUQLorfSERAKE_oTAEUFefZnZp4bQb4q8rHbKws,6630 +pip/_vendor/rich/default_styles.py,sha256=WqVh-RPNEsx0Wxf3fhS_fCn-wVqgJ6Qfo-Zg7CoCsLE,7954 +pip/_vendor/rich/diagnose.py,sha256=an6uouwhKPAlvQhYpNNpGq9EJysfMIOvvCbO3oSoR24,972 +pip/_vendor/rich/emoji.py,sha256=omTF9asaAnsM4yLY94eR_9dgRRSm1lHUszX20D1yYCQ,2501 +pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642 +pip/_vendor/rich/file_proxy.py,sha256=4gCbGRXg0rW35Plaf0UVvj3dfENHuzc_n8I_dBqxI7o,1616 +pip/_vendor/rich/filesize.py,sha256=9fTLAPCAwHmBXdRv7KZU194jSgNrRb6Wx7RIoBgqeKY,2508 +pip/_vendor/rich/highlighter.py,sha256=3WW6PACGlq0e3YDjfqiMBQ0dYZwu7pcoFYUgJy01nb0,9585 +pip/_vendor/rich/json.py,sha256=TmeFm96Utaov-Ff5miavBPNo51HRooM8S78HEwrYEjA,5053 +pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252 +pip/_vendor/rich/layout.py,sha256=RFYL6HdCFsHf9WRpcvi3w-fpj-8O5dMZ8W96VdKNdbI,14007 +pip/_vendor/rich/live.py,sha256=emVaLUua-FKSYqZXmtJJjBIstO99CqMOuA6vMAKVkO0,14172 +pip/_vendor/rich/live_render.py,sha256=zElm3PrfSIvjOce28zETHMIUf9pFYSUA5o0AflgUP64,3667 +pip/_vendor/rich/logging.py,sha256=uB-cB-3Q4bmXDLLpbOWkmFviw-Fde39zyMV6tKJ2WHQ,11903 +pip/_vendor/rich/markup.py,sha256=xzF4uAafiEeEYDJYt_vUnJOGoTU8RrH-PH7WcWYXjCg,8198 +pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305 +pip/_vendor/rich/padding.py,sha256=kTFGsdGe0os7tXLnHKpwTI90CXEvrceeZGCshmJy5zw,4970 +pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828 +pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396 +pip/_vendor/rich/panel.py,sha256=wGMe40J8KCGgQoM0LyjRErmGIkv2bsYA71RCXThD0xE,10574 +pip/_vendor/rich/pretty.py,sha256=dAbLqSF3jJnyfBLJ7QjQ3B2J-WGyBnAdGXeuBVIyMyA,37414 +pip/_vendor/rich/progress.py,sha256=eg-OURdfZW3n3bib1-zP3SZl6cIm2VZup1pr_96CyLk,59836 +pip/_vendor/rich/progress_bar.py,sha256=cEoBfkc3lLwqba4XKsUpy4vSQKDh2QQ5J2J94-ACFoo,8165 +pip/_vendor/rich/prompt.py,sha256=x0mW-pIPodJM4ry6grgmmLrl8VZp99kqcmdnBe70YYA,11303 +pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391 +pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166 +pip/_vendor/rich/repr.py,sha256=eJObQe6_c5pUjRM85sZ2rrW47_iF9HT3Z8DrgVjvOl8,4436 +pip/_vendor/rich/rule.py,sha256=V6AWI0wCb6DB0rvN967FRMlQrdlG7HoZdfEAHyeG8CM,4773 +pip/_vendor/rich/scope.py,sha256=TMUU8qo17thyqQCPqjDLYpg_UU1k5qVd-WwiJvnJVas,2843 +pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591 +pip/_vendor/rich/segment.py,sha256=6XdX0MfL18tUCaUWDWncIqx0wpq3GiaqzhYP779JvRA,24224 +pip/_vendor/rich/spinner.py,sha256=7b8MCleS4fa46HX0AzF98zfu6ZM6fAL0UgYzPOoakF4,4374 +pip/_vendor/rich/status.py,sha256=gJsIXIZeSo3urOyxRUjs6VrhX5CZrA0NxIQ-dxhCnwo,4425 +pip/_vendor/rich/style.py,sha256=odBbAlrgdEbAj7pmtPbQtWJNS8upyNhhy--Ks6KwAKk,26332 +pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258 +pip/_vendor/rich/syntax.py,sha256=W1xtdBA1-EVP-weYofKXusUlV5zghCOv1nWMHHfNmiY,34995 +pip/_vendor/rich/table.py,sha256=-WzesL-VJKsaiDU3uyczpJMHy6VCaSewBYJwx8RudI8,39684 +pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370 +pip/_vendor/rich/text.py,sha256=andXaxWW_wBveMiZZpd5viQwucWo7SPopcM3ZCQeO0c,45686 +pip/_vendor/rich/theme.py,sha256=GKNtQhDBZKAzDaY0vQVQQFzbc0uWfFe6CJXA-syT7zQ,3627 +pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102 +pip/_vendor/rich/traceback.py,sha256=6LkGguCEAxKv8v8xmKfMeYPPJ1UXUEHDv4726To6FiQ,26070 +pip/_vendor/rich/tree.py,sha256=BMbUYNjS9uodNPfvtY_odmU09GA5QzcMbQ5cJZhllQI,9169 +pip/_vendor/six.py,sha256=TOOfQi7nFGfMrIvtdr6wX4wyHH8M7aknmuLfo2cBBrM,34549 +pip/_vendor/tenacity/__init__.py,sha256=rjcWJVq5PcNJNC42rt-TAGGskM-RUEkZbDKu1ra7IPo,18364 +pip/_vendor/tenacity/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/_asyncio.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/after.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-311.pyc,, +pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc,, +pip/_vendor/tenacity/_asyncio.py,sha256=HEb0BVJEeBJE9P-m9XBxh1KcaF96BwoeqkJCL5sbVcQ,3314 +pip/_vendor/tenacity/_utils.py,sha256=-y68scDcyoqvTJuJJ0GTfjdSCljEYlbCYvgk7nM4NdM,1944 +pip/_vendor/tenacity/after.py,sha256=dlmyxxFy2uqpLXDr838DiEd7jgv2AGthsWHGYcGYsaI,1496 +pip/_vendor/tenacity/before.py,sha256=7XtvRmO0dRWUp8SVn24OvIiGFj8-4OP5muQRUiWgLh0,1376 +pip/_vendor/tenacity/before_sleep.py,sha256=ThyDvqKU5yle_IvYQz_b6Tp6UjUS0PhVp6zgqYl9U6Y,1908 +pip/_vendor/tenacity/nap.py,sha256=fRWvnz1aIzbIq9Ap3gAkAZgDH6oo5zxMrU6ZOVByq0I,1383 +pip/_vendor/tenacity/retry.py,sha256=Cy504Ss3UrRV7lnYgvymF66WD1wJ2dbM869kDcjuDes,7550 +pip/_vendor/tenacity/stop.py,sha256=sKHmHaoSaW6sKu3dTxUVKr1-stVkY7lw4Y9yjZU30zQ,2790 +pip/_vendor/tenacity/tornadoweb.py,sha256=E8lWO2nwe6dJgoB-N2HhQprYLDLB_UdSgFnv-EN6wKE,2145 +pip/_vendor/tenacity/wait.py,sha256=tdLTESRm5E237VHG0SxCDXRa0DHKPKVq285kslHVURc,8011 +pip/_vendor/tomli/__init__.py,sha256=JhUwV66DB1g4Hvt1UQCVMdfCu-IgAV8FXmvDU9onxd4,396 +pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc,, +pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc,, +pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc,, +pip/_vendor/tomli/_parser.py,sha256=g9-ENaALS-B8dokYpCuzUFalWlog7T-SIYMjLZSWrtM,22633 +pip/_vendor/tomli/_re.py,sha256=dbjg5ChZT23Ka9z9DHOXfdtSpPwUfdgMXnj8NOoly-w,2943 +pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254 +pip/_vendor/typing_extensions.py,sha256=VKZ_nHsuzDbKOVUY2CTdavwBgfZ2EXRyluZHRzUYAbg,80114 +pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333 +pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc,, +pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc,, +pip/_vendor/urllib3/_collections.py,sha256=Rp1mVyBgc_UlAcp6M3at1skJBXR5J43NawRTvW2g_XY,10811 +pip/_vendor/urllib3/_version.py,sha256=JWE--BUVy7--9FsXILONIpQ43irftKGjT9j2H_fdF2M,64 +pip/_vendor/urllib3/connection.py,sha256=8976wL6sGeVMW0JnXvx5mD00yXu87uQjxtB9_VL8dx8,20070 +pip/_vendor/urllib3/connectionpool.py,sha256=vS4UaHLoR9_5aGLXSQ776y_jTxgqqjx0YsjkYksWGOo,39095 +pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957 +pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632 +pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922 +pip/_vendor/urllib3/contrib/appengine.py,sha256=VR68eAVE137lxTgjBDwCna5UiBZTOKa01Aj_-5BaCz4,11036 +pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528 +pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=hDJh4MhyY_p-oKlFcYcQaVQRDv6GMmBGuW9yjxyeejM,17081 +pip/_vendor/urllib3/contrib/securetransport.py,sha256=yhZdmVjY6PI6EeFbp7qYOp6-vp1Rkv2NMuOGaEj7pmc,34448 +pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097 +pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217 +pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579 +pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440 +pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc,, +pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc,, +pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417 +pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665 +pip/_vendor/urllib3/poolmanager.py,sha256=0KOOJECoeLYVjUHvv-0h4Oq3FFQQ2yb-Fnjkbj8gJO0,19786 +pip/_vendor/urllib3/request.py,sha256=ZFSIqX0C6WizixecChZ3_okyu7BEv0lZu1VT0s6h4SM,5985 +pip/_vendor/urllib3/response.py,sha256=fmDJAFkG71uFTn-sVSTh2Iw0WmcXQYqkbRjihvwBjU8,30641 +pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155 +pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc,, +pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc,, +pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901 +pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605 +pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498 +pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997 +pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510 +pip/_vendor/urllib3/util/retry.py,sha256=4laWh0HpwGijLiBmdBIYtbhYekQnNzzhx2W9uys0RHA,22003 +pip/_vendor/urllib3/util/ssl_.py,sha256=X4-AqW91aYPhPx6-xbf66yHFQKbqqfC_5Zt4WkLX1Hc,17177 +pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758 +pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895 +pip/_vendor/urllib3/util/timeout.py,sha256=QSbBUNOB9yh6AnDn61SrLQ0hg5oz0I9-uXEG91AJuIg,10003 +pip/_vendor/urllib3/util/url.py,sha256=HLCLEKt8D-QMioTNbneZSzGTGyUkns4w_lSJP1UzE2E,14298 +pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403 +pip/_vendor/vendor.txt,sha256=3i3Zr7_kRDD9UEva0I8YOMroCZ8xuZ9OWd_Q4jmazqE,476 +pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579 +pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc,, +pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc,, +pip/_vendor/webencodings/__pycache__/mklabels.cpython-311.pyc,, +pip/_vendor/webencodings/__pycache__/tests.cpython-311.pyc,, +pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-311.pyc,, +pip/_vendor/webencodings/labels.py,sha256=4AO_KxTddqGtrL9ns7kAPjb0CcN6xsCIxbK37HY9r3E,8979 +pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305 +pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563 +pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307 +pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286 diff --git a/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/REQUESTED b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/WHEEL b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/WHEEL new file mode 100644 index 0000000..57e3d84 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.38.4) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/entry_points.txt b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/entry_points.txt new file mode 100644 index 0000000..bcf704d --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/entry_points.txt @@ -0,0 +1,4 @@ +[console_scripts] +pip = pip._internal.cli.main:main +pip3 = pip._internal.cli.main:main +pip3.11 = pip._internal.cli.main:main diff --git a/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/top_level.txt b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/top_level.txt new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip-23.0.1.dist-info/top_level.txt @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.11/site-packages/pip/__init__.py b/venv/lib/python3.11/site-packages/pip/__init__.py new file mode 100644 index 0000000..42f6c45 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/__init__.py @@ -0,0 +1,13 @@ +from typing import List, Optional + +__version__ = "23.0.1" + + +def main(args: Optional[List[str]] = None) -> int: + """This is an internal API only meant for use by pip's own console scripts. + + For additional details, see https://github.com/pypa/pip/issues/7498. + """ + from pip._internal.utils.entrypoints import _wrapper + + return _wrapper(args) diff --git a/venv/lib/python3.11/site-packages/pip/__main__.py b/venv/lib/python3.11/site-packages/pip/__main__.py new file mode 100644 index 0000000..fe34a7b --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/__main__.py @@ -0,0 +1,31 @@ +import os +import sys +import warnings + +# Remove '' and current working directory from the first entry +# of sys.path, if present to avoid using current directory +# in pip commands check, freeze, install, list and show, +# when invoked as python -m pip +if sys.path[0] in ("", os.getcwd()): + sys.path.pop(0) + +# 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) + +if __name__ == "__main__": + # Work around the error reported in #9540, pending a proper fix. + # Note: It is essential the warning filter is set *before* importing + # pip, as the deprecation happens at import time, not runtime. + warnings.filterwarnings( + "ignore", category=DeprecationWarning, module=".*packaging\\.version" + ) + from pip._internal.cli.main import main as _main + + sys.exit(_main()) diff --git a/venv/lib/python3.11/site-packages/pip/__pip-runner__.py b/venv/lib/python3.11/site-packages/pip/__pip-runner__.py new file mode 100644 index 0000000..49a148a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/__pip-runner__.py @@ -0,0 +1,50 @@ +"""Execute exactly this copy of pip, within a different environment. + +This file is named as it is, to ensure that this module can't be imported via +an import statement. +""" + +# /!\ This version compatibility check section must be Python 2 compatible. /!\ + +import sys + +# Copied from setup.py +PYTHON_REQUIRES = (3, 7) + + +def version_str(version): # type: ignore + return ".".join(str(v) for v in version) + + +if sys.version_info[:2] < PYTHON_REQUIRES: + raise SystemExit( + "This version of pip does not support python {} (requires >={}).".format( + version_str(sys.version_info[:2]), version_str(PYTHON_REQUIRES) + ) + ) + +# From here on, we can use Python 3 features, but the syntax must remain +# Python 2 compatible. + +import runpy # noqa: E402 +from importlib.machinery import PathFinder # noqa: E402 +from os.path import dirname # noqa: E402 + +PIP_SOURCES_ROOT = dirname(dirname(__file__)) + + +class PipImportRedirectingFinder: + @classmethod + def find_spec(self, fullname, path=None, target=None): # type: ignore + if fullname != "pip": + return None + + spec = PathFinder.find_spec(fullname, [PIP_SOURCES_ROOT], target) + assert spec, (PIP_SOURCES_ROOT, fullname) + return spec + + +sys.meta_path.insert(0, PipImportRedirectingFinder()) + +assert __name__ == "__main__", "Cannot run __pip-runner__.py as a non-main module" +runpy.run_module("pip", run_name="__main__", alter_sys=True) diff --git a/venv/lib/python3.11/site-packages/pip/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67e2ccb4eb425d35c25ecf9f0f275a0f1aa19dc5 GIT binary patch literal 776 zcmZ`%O=}cE5bd6sovgb?K|zQIZAFj;oi;`=5eW!E5F`rmvka^drjKF0`s z^TClceme(C;OroV7%otWySNOx0Y)t7hHQ#OJm8o|Ge=qIkH;Fku^O@XWuqIja0PXm z-#w}m)X_s>UEO@7olr6>HsYIe$&F-oxsEc^w{>i|tBlNn(XoW!`Ezgu46wm0@N8aS zi~_WYH_%>9ZsEqxlYy`VG?PR~#|`u%_Z~kWN){th@=Q9istlx&R_xJ(DC1Hi#d%blq@ zb|Woh-}rTz2u$5h(;+t&mYt?`Xq~A;m}%1FBQhsF&i{vp&AX*yRlyg{83_F{?Nc!0 u5M%rmUE2GX?w>lh)gH%F`1}}w*?zto?XJ8%@#Xa8N&F$7JpOAY-G2f*cg>jq literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/__pycache__/__main__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/__pycache__/__main__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc63f8000fc203b6ea236f338223bf78defa189e GIT binary patch literal 1085 zcma)4&r2IY6rSCkY}O@K@&Z1j>! zplK1Bg3wY5^^~@x^e^Ziv5_3YoP?fwi`bK=&g^D`x%JKLn|W{E_uls&`*nCY1c==G zb(Q-G0r*V~Ujn_$b%O!m15kj%6hOv1nGECFY=%Wlp7S9JnDVbcVOfAco@Di;L5`+x zfL*o(%<0?MbH83chF%mvt2fE#2?G$Xu=^~v%ng#iU;8}R3mG{6BSILgFlc4C0ggih z$$N$Z5Z54#nl3BqBrHP;*JC+P=D_B|K2m`wq6B{M4Z^(HXV1{N1`ET*kxY~U1i|D- zeFU+hgVP)2NU+Rv_e%(WC}O)etJU{@_r7q4m-GHvRiFT^uKUTkFcla8+NXzp03R&XJ0Rn=>f_w!r7x*Zsc*}z*g`wD&F j2_uzf)wSAIZR^eU>2?cFw&A4X@9rG{r%3^GnhfI~oYe;C literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/__pycache__/__pip-runner__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/__pycache__/__pip-runner__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..916fb9492c8f14b5afc7b9df197b69812855c786 GIT binary patch literal 2513 zcmaJ?%TF6e7@yf)Ki6OflR#e0R!P%1@}nd~jVel_q$D9oK!8-Lt7^6Jj$y&xb#~Vj zgON}~B~(?aE42zo4i%+J4n6kJL;nODZ4_%yk*Z4NW<*Y$`pqtO?V@&O_M6u?-)nyJ z?N41@K?LQU-}YyJ^dR&Hoit0}XmIcnBlH}}D2-$+GdY~bGMi>(ZXKmrg6FyB0hy6K zUooefQ$&~rXRHr1h<76;6 zLyu&Y91);br96=Z$q*D1rg6d4fZHhQ1SCtQD?YEuMc~dz>ieef1dinknr_0eMMVlq z>d{;EF zjvwOWG5Oa)-oYS{F@!-!8GR95#b%ooW!x$0Q}i5T^i8jfKqelKVVgBfJ;vBf@&g+$ z8uSVU;czB3r{zg%UQQKsZJuOIBcegGUqh)dU9YOWhf>| z6kuPPB}NMFC?$$O6M9iqi7txCLg_FtG)q*nRM3Z)-&rKOp=hcI+LJ>$EhFWO;bd!{ z;?TGPzl5~t^3f|qHzl-AGi2;m5b|Lz_&-kvwX|J){(FyL<+J-0B4#h z7{vkwj^M^dSXmXW=;Ucp(P4l1MU{z8jg=LhLNo)?TZKZ0mV?Vc zo+E-FaiKIrSeXUL;7+)tIT^!+a`u@?r7-FscZz^ixH(0gbrp?gC?cB$@}-MT69#}B z$TSO%N}ZwDXvffe3r}Tiw#k^qWw!GLuX1J1IPnm*bCq$H=`{8kE^}ZkGj6khkQl4e zykG~i5Dw8Okc=If9Gw)WCmv7T9hnxVCMITL9-A{rE^GU<#axbt%H|3XLECFe`YbVF z7tR^fCxI5{zV&{XE?@fZfFxTQ-vdr#6v!HS!$&K{UH)8^KUa_TRR;eIpSHpmw;sGo z-Kr*U|9-g^9<{=w8(cjct@;O`y*hPy$6q};Q1cI1&I0Ug@D5zS#c?p*FN)M;QM7}i z=%yJMheYvdQF5Gt8K22XhLI=mo@B@HpOGWN_2eX&rc-i>8hXt!bPbH9weE>D7_X&g;y#Zd#^NMN`PrKLAeFja=i~E%s|5M z!x_gfJ0Rsuc;ZIMh(&FmD9Ty}JYr#PhbKRqc`z|9PK`WzJUTTp?L0d>)O?7Fn$_&! zbjg5}Ih%BZ zM9L08FeTANiJ}@rH}wmYH%RS1^5r7srVrZ*^PzvpT_4tIN~NebWS|WeW87dk%ry`t z5rp}*Agv8Aik@BzH@p}p8mLA5i1S%&v~s8NsB*_*`!-X%Y^=)0>cQTPt9AeAYyae~ zf3hCx+Zfwqt^O-JJv;C2^jQ7zS}0+K5<4q9E5F{VrN*q(*gneyf^QL!eU{_BZxIl% z!sBi9Al$VUqP32$Ry$iAovn7ZH_zH1-K?FBTW2A?C9G(oiXsiK9|L%flYP4O z_MeSY2y^RQuTk$V>a9Gg_Fscm>mRiG2W#ktg>F>QjW@n<<)dBS`KsG4Ox1knEoWRu cku{HnB9)U{XMQoOXsCvUEHnfIw>h`)H-QCkSpWb4 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/__init__.py new file mode 100644 index 0000000..6afb5c6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/__init__.py @@ -0,0 +1,19 @@ +from typing import List, Optional + +import pip._internal.utils.inject_securetransport # noqa +from pip._internal.utils import _log + +# init_logging() must be called before any call to logging.getLogger() +# which happens at import of most modules. +_log.init_logging() + + +def main(args: (Optional[List[str]]) = None) -> int: + """This is preserved for old console scripts that may still be referencing + it. + + For additional details, see https://github.com/pypa/pip/issues/7498. + """ + from pip._internal.utils.entrypoints import _wrapper + + return _wrapper(args) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02fdcf7e1bf53604ebb40d3692afb4de3b0b73f3 GIT binary patch literal 959 zcmZ`%zi-qq6t(ZAWz55PA z->flNjo;u{0eFW}l;RBKxPx=2<6vt$ncMMTce6(BcYKT-#Qcq!NrF89`x65}#7ycj zhhY{hPEY@!w83WAz0`l*=rmL332F!5tykNryhmJ{DtIgn7e$<{wQ=P|ndntsta`fg z6*HwO5F zk)$O@x|QoyNJvo^+2K5RACHVGjo&uCxdjBcb zcpf!YM&9z@ax~Z4Ufy}|X7%mr$Xh%HKe*jmd#>`$P(mA(eLv-as;-}QOV;5t5h^~xIlOwb=n#du#Hu_h_0mA3DyaROhD{38})(Ex6et<8I5vZMD_xx`1 Se(~VU)!P2-*4uwo&GaV-Fa-zz literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/build_env.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/build_env.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe07b1d39b90e922e9f71c7b7518e40b8defae1b GIT binary patch literal 16079 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�bf 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 E03@%0JOBUy literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/configuration.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d487bdd6892d79fa3c4c0dffd05ea5bdad20470a GIT binary patch literal 19235 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 S#F9H79&6YB_$?@mPyZjO%QgrA literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/exceptions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..544429d2b8607c2ffd705c70963693718b73f0b4 GIT binary patch literal 38364 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%0AWW$5&kmBoBC4|}$j8N+- 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 nBT#eNy%Q6S*6Y)a*8JP`)5LyUD|5lI;7)CyN z&YgYDl1kE#-km*j=RVH8bMJZI`ON2Y6G*#%@$~wC?;+&B@S&1C<;=5j3n6!iNJK78 zV#b||aqQU=v#`50W@UFi#AQv%Dw0CnLlJmiMOjW_n}2EbmMAW%^_NEbmVbWCmk{EFVbk%j}Qs&xB)P z_S}>{kU1DTm^lR@kwh)P5JX~2g>By%XA)mwFNU@`0t283E zNh9;T7<`A1y<{O5h}ixP5j#GGwf!9a<(9`JH>>M}x{$f&64oI|KLb7VNQ362_=zCCuBLy>(;Z`72SD0kxnP( z(vr?kq>_s6d^NA6a@j;0THEpoDodETKyyoZ$k-)0naE=ie?@v*fxB-ymA!F3mrhGb zB}cK~aw2&nab229Wkm@KI<8AfT$JV$OKBx8WpAcvE}N0E*tvBgB`Y*Fw}eA}N1`&^ zptx;TLUizOnM(5#m9j}mhI04iRDM>H%dH%5ygW1U>Kn6Ri!R_0bCRsYQ`wujWCFX! z=W{f!ETrUkK9$$|et(MdgspF_DDH#g$AxKA(bRX-Y0g$s6%}LRpCCma`Jo z9aPGvp%u5hejypT@K>2`S`apcH|?pl!E7E{+@VZ&C6q^G;!h2nE7iX`iNHj$BJ97+&`Z<5i4 zTt&NHoxU3`c=|O@|CgS~BTuB@8P+_*>k~y!VExiF=t7bRD#>2XJo_`q+#wP{ zNefbzldPgev;w#Dz*oFv6D^W;-XhxG;mr#hvx|1gvFNBEgmzBJTF1A%=l~2Z5lS0d z0)D&bf?Bs|1-^Cbe&B@p^GJZR_|m#7nSjMWa-&@^z)Z4A1Mq}H;&wb+07|<FX%iGqs$TG)~ zw+IJ6qef|~;3hVlI_sq-^jRpUX>GonMr50MogIs5@Srouo8Jb@z7? z=_Sd?J1@p!Q*bob=H?LYZ&;ujYS`zN*ilTWRd ze*bd@N6M?Rtugj5w3akmv3$L4t^58_i~~4nAUsj z_QZ#mN>(Uml?*(^X3r7S%3hfJ`s=S>SjQ^9e$v+caqOQu)z%{=V)enhRDqo|2XFJY z`H};Q5K#bLlfA2a3>M^9?)GzSnD=v-53qb&$GNEW ziwFnMB=3>dkt?1d+uk7xz)Gs|!7QOYPznmoDzC`8JrCM1^>&z}qfja%3W4n-BazjX zhAjlidjTSuu17f@T!vu2^)vaWG!)>U}NoduOy z7T@C6_%+K7Cen;~n?|gY%D~9B)lnvCh19&TEC~yVo05g_qKJf>hKV8|LrS8M zNK+{xu0&>ZH<(n4p{I0jekGrZmz$>6$6SD#B46oFRA;yYx)aPEu(KfNicg%qG8vzG z<%;f8a!Mi{m!)JbE6UIbx1Hji>Oolo6&e>4D>86!r3pQQb)Dr7aXAHcQoJ@3*#_01 zn+1bvbSo&&ZBzqgXQ7$=BLM501T--4+nkwz;Cse{q% zYd{;@XcmNWy_xiXQge0GZ&owrC*TYmrA{IKe~iMJ)a;sNvuaaR76R`|Q|-w-OH|q) zS#MdD)>?~2lnyMdF?;4dZ&uj1c%`G#f~ooHgBdp{Xxo}?(_5{s%dGL6zPiV1*36q` ze9WiYL3w9AJF9LmCU#X3lQr97)wHPRaI@^FDtw{Vb0@VPw#}5yUB+OH{;q^A-*AV% z;l@BXyW|{I;vjBi-7QPtBPGD|k;Bb&2=G$0AZP>u+M~JyY&B-4qBUXYc4Yo}WPW-c z%Z^|(o4Az8%QVRH%M?switk5pGiWb@5ddMkArroZ1xzs5n5Nfx1-vnxo0pL_7|U09 zUfzM{q3k=*PQJ?YJn+00=tHJ&EqYrvrht{3gr8VGaeNl|ao_>34Nnw=Nlln61g5mW zR9!nKakc)l!Qe>@Ruj&F&HbuwnbEi8Qsnw|aNr-pIpmtAPuJzy&REVS|6-+kIEj_8cwv zMl|0Dj@$Q;D|&tJUwHSz?TI^=KDhLwS3Z2D;O*7Cy{fktYzG&63j=`d;OYb0p}vga zXaI)Uu)USt?rMgW@U`7O`{C5x39V#ab0iCA3CHSpNmv@x+UQL;fP z;FbGfk-r$tX)2_eB~KDL{M?(e~6ulK$h;|qYx@iA}4WmY4ww$7PVhcJ{8z_DMA zUY&!5y>|5~l|c4fyE+FB%r&sAQc0;=gbl8hpH{=dSpjxIpb!X3$dZtoM?6AG77{lT zDHg996QHqpZMCJ`M;JOST)j>uDSK_zQNhzGT*(Pbd9=F@33Mq7oytwxg;W+~XF4qm z4J{cofJ1~`v<23WqEARsZ&KU|ikq){=7C7!nFNK12EB&Ge~JJ#D(DL|)^rD;h$l0m zZa3a;oBKsm$pvt~+D&8!-j`91F$eiy0IU;;T!4e(I@SduyNr@ z`>{g%ajpIM#)Zet=QiwHfwnDg(+{WKn}VC>?J2f~fJ>XFI0F_tdp>fab5$)EIsUVY z^#w+|r&g;E+&2JUIf<{ihUgqabdKBV5;i;jHu_N%`&J6E?>Vm4_o>g_lFz_Q*-I~8~-Nf+7?2O^(AOkKNuze+&*>|(9 zrqTj!Co_ZG;?N#j;&N{AsJL42?grSf1Oo}y)t@u}Ll%}7BxOOO0?bHQPRJEX1&?EH z1&P${MiqYrVw=bjOEOfz5(-LA5K}UQCRYUL4rI?Hn*c#N8RD^sHCy4LR92WzBo&6I z%m)T`@H-U=nAQl(37JF|y3#{}yp&uJU@BsEUdUyIDM`%HM1=L9fu#e+u~I+0hu(w{ zI+#W^tgE{!1JJOAO4x?SdKurl;+nL{lc$%1E0^Ng`z-fczofL}7YX}i~UfA=F{ROLt6_UaDVh#BjS9E)wsCI=X0 zDBI@$gp7HcYwqhB!OgpGF-tj+*;NUQ+C{X2ISsE>@2=KM^*Vf(HS2v_LtAiGH+h)E zwj?&l?V8+2BYfR(M(Rv%Fo&yh-%Nx+W{w%KWoZTm(VOL^Jj57eIiAhI>Wk9bQ()eD zK`7>y<12~m4N264#uLCeG%d?x8JhXi5crQLE0KRa0O2PiXpar&WqKWk2sN~vLYjR^ztYG@iMuNnfY)Ib&E^wpj> zKs^9!ZPQj~pb1Evs=)*%)&+QD-JZ@}2i*d$uQa!Gop~*~kDWMH$eSqu-8%;sV6_N! zHIoYY8@f3}IAF;NWxd9^XRQH?9^fr_LjoL3k|D$d(jb69eazr zqUx?_Vb@`8*J0J!RrKsqJp)_bmiMRMomNA~3f@u8JF0p|Sx~I#^u6zT*QK`fZ>9^* zqnh)m>OA@+*sJ!vWXO^AnJwP^SJQtntu`OJmo4z8H2##zpQwCA6NPDC*9Ep zwnFzYt^1hDcUGH3)x(noeoEt~RDP=H*#lOct&IsKi2S?S@A@A(2cgV01wMF4^A6sN zXa^=Ac_&LYV(SLc=G=`vUg5R^JwIvPyjIwIRNH%0J#k45Ocw&vT3}jrPCxbpHb$68 zGpS&-pqUE(55u*pv!~4RXJ<>RQQF*sqfOv1INpRPQJsRWSH)m~RaGqs90{|nCiDD&hpURWo&S|SyYb9 z!tT|7H=^utJTD}&W#>%5C*aD6VcJfoGAXcU!HAuw()X6&C~XB@Kz76?qn(?BNVfnH z5D3&uHzL9;9(SQFEJGv?3|T3~?B`UL8K{T{jNKH(^WozI1p+E?8ZE$pU4 zw$4hDFeibz#ukuuyuuD2-%f&no6m&<%qph~uvttt8L=QdB&25n==LQgnawTJWqfeW zFJ<8?j$B#>M>au~6dZ7%fkba%tz$VsvoImuHTiZ@VwN;ThZSD4YM1H$npj06U-y^2 z5U>d`z#=1Q*92)h3gYdul)jJS!C(Fz0I?Pi3JGm7)vehEo8`Tbut1YJrEvK}WQ(K|ETIj%+p~H_thYO*jTIgu8 zYrobtytQY)wr6;&Df*z};XXLK6!7d)@RwYUF85Oc;5mW~f2oOhyUOx;=G_^!JMzF^ z@Sf4UXVl77vJ&qgH2M082O?P(+sPW(a{Ax*zw1{!UM)B;YtGB6^D-8B-}S1&0}rlj zcni)k%{ivlT@XUFox~6#h9EvWd+OYN^2PqM8Hy(H}xJ-HqS~0NsHq z6}QL$2eS0Ve#m2bxC8%8#OUq<;=T@2qc#q#c2CEIF5!m`|^FY^yFuQc&9J!ELn|(Kg~P z#tbUohD4a70=Ubc92pKqFYDjXrtHPScRb8PV15UZTm*Q-_|PPhk(2~3hvB?-?_3!{ z3xwhcgWliJ0zR8b%aKOc2i=_V!c|AgO3HGM-hj63115@JH|SkvbnqP%U`qn0Bor2h z()aAt0AvSU$-@T&ifqKFFj}SW-l-{mCS&;Y>}v!NDaeWv$M|=WJ7SEImEcRA)51zbKD4WpQflm zQQ^x6ffOOE#BoIuSZBW?X;Ld!k@(lyuSh)W>{nM(ZC`EUUT41|*{hnbA{kcy(Dj&n zOEq6bazHg-JCzKo#B@C-qpJBTl5y3170H-tzKZ0eYQBnOQZ-*iGNPKVB8jNxt7Nfq z7KkDKLEt3Zo19ACc+piPQPq4s_6qARFbmz?8y%Xf>+bP_t6y{VuiHy@E7x=vjtStl zY1~-84tOtd9Gsc#44<;{=k>MUwGfM^WC?N*#oG>^V%c*9a28?lyc0574m-HxcatRo zw@s1V8bMo#+gJ2;l&pB~J@5%cG$Hrc=G#cVbFE~9e2JLB@jYDAV^B9XxWl`*c55wt zB?mq@N!z}X3v+G~+Pm4Z`R2XkC)d=yN3_nPB@dQ+;hbb6quF{&K71r*Fu`?lCpW)c XB5-@y`3o?;A@kcS?Dj&y%;^6GCq9A$ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..acf0120124435b8f5813435bf1c1b56c2b46cda4 GIT binary patch literal 15999 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/build_env.py b/venv/lib/python3.11/site-packages/pip/_internal/build_env.py new file mode 100644 index 0000000..4f704a3 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/build_env.py @@ -0,0 +1,311 @@ +"""Build Environment used for isolation during sdist building +""" + +import logging +import os +import pathlib +import site +import sys +import textwrap +from collections import OrderedDict +from types import TracebackType +from typing import TYPE_CHECKING, Iterable, List, Optional, Set, Tuple, Type, Union + +from pip._vendor.certifi import where +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.version import Version + +from pip import __file__ as pip_location +from pip._internal.cli.spinners import open_spinner +from pip._internal.locations import get_platlib, get_purelib, get_scheme +from pip._internal.metadata import get_default_environment, get_environment +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds + +if TYPE_CHECKING: + from pip._internal.index.package_finder import PackageFinder + +logger = logging.getLogger(__name__) + + +def _dedup(a: str, b: str) -> Union[Tuple[str], Tuple[str, str]]: + return (a, b) if a != b else (a,) + + +class _Prefix: + def __init__(self, path: str) -> None: + self.path = path + self.setup = False + scheme = get_scheme("", prefix=path) + self.bin_dir = scheme.scripts + self.lib_dirs = _dedup(scheme.purelib, scheme.platlib) + + +def get_runnable_pip() -> str: + """Get a file to pass to a Python executable, to run the currently-running pip. + + This is used to run a pip subprocess, for installing requirements into the build + environment. + """ + source = pathlib.Path(pip_location).resolve().parent + + if not source.is_dir(): + # This would happen if someone is using pip from inside a zip file. In that + # case, we can use that directly. + return str(source) + + return os.fsdecode(source / "__pip-runner__.py") + + +def _get_system_sitepackages() -> Set[str]: + """Get system site packages + + Usually from site.getsitepackages, + but fallback on `get_purelib()/get_platlib()` if unavailable + (e.g. in a virtualenv created by virtualenv<20) + + Returns normalized set of strings. + """ + if hasattr(site, "getsitepackages"): + system_sites = site.getsitepackages() + else: + # virtualenv < 20 overwrites site.py without getsitepackages + # fallback on get_purelib/get_platlib. + # this is known to miss things, but shouldn't in the cases + # where getsitepackages() has been removed (inside a virtualenv) + system_sites = [get_purelib(), get_platlib()] + return {os.path.normcase(path) for path in system_sites} + + +class BuildEnvironment: + """Creates and manages an isolated environment to install build deps""" + + def __init__(self) -> None: + temp_dir = TempDirectory(kind=tempdir_kinds.BUILD_ENV, globally_managed=True) + + self._prefixes = OrderedDict( + (name, _Prefix(os.path.join(temp_dir.path, name))) + for name in ("normal", "overlay") + ) + + self._bin_dirs: List[str] = [] + self._lib_dirs: List[str] = [] + for prefix in reversed(list(self._prefixes.values())): + self._bin_dirs.append(prefix.bin_dir) + self._lib_dirs.extend(prefix.lib_dirs) + + # Customize site to: + # - ensure .pth files are honored + # - prevent access to system site packages + system_sites = _get_system_sitepackages() + + self._site_dir = os.path.join(temp_dir.path, "site") + if not os.path.exists(self._site_dir): + os.mkdir(self._site_dir) + with open( + os.path.join(self._site_dir, "sitecustomize.py"), "w", encoding="utf-8" + ) as fp: + fp.write( + textwrap.dedent( + """ + import os, site, sys + + # First, drop system-sites related paths. + original_sys_path = sys.path[:] + known_paths = set() + for path in {system_sites!r}: + site.addsitedir(path, known_paths=known_paths) + system_paths = set( + os.path.normcase(path) + for path in sys.path[len(original_sys_path):] + ) + original_sys_path = [ + path for path in original_sys_path + if os.path.normcase(path) not in system_paths + ] + sys.path = original_sys_path + + # Second, add lib directories. + # ensuring .pth file are processed. + for path in {lib_dirs!r}: + assert not path in sys.path + site.addsitedir(path) + """ + ).format(system_sites=system_sites, lib_dirs=self._lib_dirs) + ) + + def __enter__(self) -> None: + self._save_env = { + name: os.environ.get(name, None) + for name in ("PATH", "PYTHONNOUSERSITE", "PYTHONPATH") + } + + path = self._bin_dirs[:] + old_path = self._save_env["PATH"] + if old_path: + path.extend(old_path.split(os.pathsep)) + + pythonpath = [self._site_dir] + + os.environ.update( + { + "PATH": os.pathsep.join(path), + "PYTHONNOUSERSITE": "1", + "PYTHONPATH": os.pathsep.join(pythonpath), + } + ) + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + for varname, old_value in self._save_env.items(): + if old_value is None: + os.environ.pop(varname, None) + else: + os.environ[varname] = old_value + + def check_requirements( + self, reqs: Iterable[str] + ) -> Tuple[Set[Tuple[str, str]], Set[str]]: + """Return 2 sets: + - conflicting requirements: set of (installed, wanted) reqs tuples + - missing requirements: set of reqs + """ + missing = set() + conflicting = set() + if reqs: + env = ( + get_environment(self._lib_dirs) + if hasattr(self, "_lib_dirs") + else get_default_environment() + ) + for req_str in reqs: + req = Requirement(req_str) + # We're explicitly evaluating with an empty extra value, since build + # environments are not provided any mechanism to select specific extras. + if req.marker is not None and not req.marker.evaluate({"extra": ""}): + continue + dist = env.get_distribution(req.name) + if not dist: + missing.add(req_str) + continue + if isinstance(dist.version, Version): + installed_req_str = f"{req.name}=={dist.version}" + else: + installed_req_str = f"{req.name}==={dist.version}" + if not req.specifier.contains(dist.version, prereleases=True): + conflicting.add((installed_req_str, req_str)) + # FIXME: Consider direct URL? + return conflicting, missing + + def install_requirements( + self, + finder: "PackageFinder", + requirements: Iterable[str], + prefix_as_string: str, + *, + kind: str, + ) -> None: + prefix = self._prefixes[prefix_as_string] + assert not prefix.setup + prefix.setup = True + if not requirements: + return + self._install_requirements( + get_runnable_pip(), + finder, + requirements, + prefix, + kind=kind, + ) + + @staticmethod + def _install_requirements( + pip_runnable: str, + finder: "PackageFinder", + requirements: Iterable[str], + prefix: _Prefix, + *, + kind: str, + ) -> None: + args: List[str] = [ + sys.executable, + pip_runnable, + "install", + "--ignore-installed", + "--no-user", + "--prefix", + prefix.path, + "--no-warn-script-location", + ] + if logger.getEffectiveLevel() <= logging.DEBUG: + args.append("-v") + for format_control in ("no_binary", "only_binary"): + formats = getattr(finder.format_control, format_control) + args.extend( + ( + "--" + format_control.replace("_", "-"), + ",".join(sorted(formats or {":none:"})), + ) + ) + + index_urls = finder.index_urls + if index_urls: + args.extend(["-i", index_urls[0]]) + for extra_index in index_urls[1:]: + args.extend(["--extra-index-url", extra_index]) + else: + args.append("--no-index") + for link in finder.find_links: + args.extend(["--find-links", link]) + + for host in finder.trusted_hosts: + args.extend(["--trusted-host", host]) + if finder.allow_all_prereleases: + args.append("--pre") + if finder.prefer_binary: + args.append("--prefer-binary") + args.append("--") + args.extend(requirements) + extra_environ = {"_PIP_STANDALONE_CERT": where()} + with open_spinner(f"Installing {kind}") as spinner: + call_subprocess( + args, + command_desc=f"pip subprocess to install {kind}", + spinner=spinner, + extra_environ=extra_environ, + ) + + +class NoOpBuildEnvironment(BuildEnvironment): + """A no-op drop-in replacement for BuildEnvironment""" + + def __init__(self) -> None: + pass + + def __enter__(self) -> None: + pass + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + pass + + def cleanup(self) -> None: + pass + + def install_requirements( + self, + finder: "PackageFinder", + requirements: Iterable[str], + prefix_as_string: str, + *, + kind: str, + ) -> None: + raise NotImplementedError() diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cache.py b/venv/lib/python3.11/site-packages/pip/_internal/cache.py new file mode 100644 index 0000000..c53b7f0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cache.py @@ -0,0 +1,293 @@ +"""Cache Management +""" + +import hashlib +import json +import logging +import os +from pathlib import Path +from typing import Any, Dict, List, Optional, Set + +from pip._vendor.packaging.tags import Tag, interpreter_name, interpreter_version +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import InvalidWheelFilename +from pip._internal.models.direct_url import DirectUrl +from pip._internal.models.format_control import FormatControl +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds +from pip._internal.utils.urls import path_to_url + +logger = logging.getLogger(__name__) + +ORIGIN_JSON_NAME = "origin.json" + + +def _hash_dict(d: Dict[str, str]) -> str: + """Return a stable sha224 of a dictionary.""" + s = json.dumps(d, sort_keys=True, separators=(",", ":"), ensure_ascii=True) + return hashlib.sha224(s.encode("ascii")).hexdigest() + + +class Cache: + """An abstract class - provides cache directories for data from links + + + :param cache_dir: The root of the cache. + :param format_control: An object of FormatControl class 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: str, format_control: FormatControl, allowed_formats: Set[str] + ) -> None: + super().__init__() + assert not cache_dir or os.path.isabs(cache_dir) + self.cache_dir = cache_dir or 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: Link) -> List[str]: + """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 = {"url": link.url_without_fragment} + if link.hash_name is not None and link.hash is not None: + key_parts[link.hash_name] = link.hash + if link.subdirectory_fragment: + key_parts["subdirectory"] = link.subdirectory_fragment + + # Include interpreter name, major and minor version in cache key + # to cope with ill-behaved sdists that build a different wheel + # depending on the python version their setup.py is being run on, + # and don't encode the difference in compatibility tags. + # https://github.com/pypa/pip/issues/7296 + key_parts["interpreter_name"] = interpreter_name() + key_parts["interpreter_version"] = interpreter_version() + + # 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 = _hash_dict(key_parts) + + # 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: Link, canonical_package_name: str) -> List[Any]: + can_not_cache = not self.cache_dir or not canonical_package_name or not link + if can_not_cache: + return [] + + formats = self.format_control.get_allowed_formats(canonical_package_name) + if not self.allowed_formats.intersection(formats): + return [] + + candidates = [] + path = self.get_path_for_link(link) + if os.path.isdir(path): + for candidate in os.listdir(path): + candidates.append((candidate, path)) + return candidates + + def get_path_for_link(self, link: Link) -> str: + """Return a directory to store cached items in for link.""" + raise NotImplementedError() + + def get( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Link: + """Returns a link to a cached item if it exists, otherwise returns the + passed link. + """ + raise NotImplementedError() + + +class SimpleWheelCache(Cache): + """A cache of wheels for future installs.""" + + def __init__(self, cache_dir: str, format_control: FormatControl) -> None: + super().__init__(cache_dir, format_control, {"binary"}) + + def get_path_for_link(self, link: Link) -> str: + """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) + assert self.cache_dir + # Store wheels within the root cache_dir + return os.path.join(self.cache_dir, "wheels", *parts) + + def get( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Link: + candidates = [] + + if not package_name: + return link + + canonical_package_name = canonicalize_name(package_name) + for wheel_name, wheel_dir in self._get_candidates(link, canonical_package_name): + try: + wheel = Wheel(wheel_name) + except InvalidWheelFilename: + continue + if canonicalize_name(wheel.name) != canonical_package_name: + logger.debug( + "Ignoring cached wheel %s for %s as it " + "does not match the expected distribution name %s.", + wheel_name, + link, + package_name, + ) + continue + if not wheel.supported(supported_tags): + # Built for a different python/arch/etc + continue + candidates.append( + ( + wheel.support_index_min(supported_tags), + wheel_name, + wheel_dir, + ) + ) + + if not candidates: + return link + + _, wheel_name, wheel_dir = min(candidates) + return Link(path_to_url(os.path.join(wheel_dir, wheel_name))) + + +class EphemWheelCache(SimpleWheelCache): + """A SimpleWheelCache that creates it's own temporary cache directory""" + + def __init__(self, format_control: FormatControl) -> None: + self._temp_dir = TempDirectory( + kind=tempdir_kinds.EPHEM_WHEEL_CACHE, + globally_managed=True, + ) + + super().__init__(self._temp_dir.path, format_control) + + +class CacheEntry: + def __init__( + self, + link: Link, + persistent: bool, + ): + self.link = link + self.persistent = persistent + self.origin: Optional[DirectUrl] = None + origin_direct_url_path = Path(self.link.file_path).parent / ORIGIN_JSON_NAME + if origin_direct_url_path.exists(): + self.origin = DirectUrl.from_json(origin_direct_url_path.read_text()) + + +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: str, format_control: Optional[FormatControl] = None + ) -> None: + if format_control is None: + format_control = FormatControl() + super().__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: Link) -> str: + return self._wheel_cache.get_path_for_link(link) + + def get_ephem_path_for_link(self, link: Link) -> str: + return self._ephem_cache.get_path_for_link(link) + + def get( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Link: + cache_entry = self.get_cache_entry(link, package_name, supported_tags) + if cache_entry is None: + return link + return cache_entry.link + + def get_cache_entry( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Optional[CacheEntry]: + """Returns a CacheEntry with a link to a cached item if it exists or + None. The cache entry indicates if the item was found in the persistent + or ephemeral cache. + """ + retval = self._wheel_cache.get( + link=link, + package_name=package_name, + supported_tags=supported_tags, + ) + if retval is not link: + return CacheEntry(retval, persistent=True) + + retval = self._ephem_cache.get( + link=link, + package_name=package_name, + supported_tags=supported_tags, + ) + if retval is not link: + return CacheEntry(retval, persistent=False) + + return None + + @staticmethod + def record_download_origin(cache_dir: str, download_info: DirectUrl) -> None: + origin_path = Path(cache_dir) / ORIGIN_JSON_NAME + if origin_path.is_file(): + origin = DirectUrl.from_json(origin_path.read_text()) + # TODO: use DirectUrl.equivalent when https://github.com/pypa/pip/pull/10564 + # is merged. + if origin.url != download_info.url: + logger.warning( + "Origin URL %s in cache entry %s does not match download URL %s. " + "This is likely a pip bug or a cache corruption issue.", + origin.url, + cache_dir, + download_info.url, + ) + origin_path.write_text(download_info.to_json(), encoding="utf-8") diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/__init__.py new file mode 100644 index 0000000..e589bb9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/__init__.py @@ -0,0 +1,4 @@ +"""Subpackage containing all of pip's command line interface related code +""" + +# This file intentionally does not import submodules diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e92623f8525a07f3b254f896a5cc2dd52b6f7af0 GIT binary patch literal 294 zcmY+9zfJ=&491gE0jksoU_seX2WnNUh?R|{8$yb5iF-}SKjm^Km6>1S1= z&@mKcgAKJ%&WX4Z$)>A@=H9DdgtGyK4F&T`X%rcqDrm?yIC+@yuQMr4)KY%1-N4&F z!8&?`je(To26bs5`c77aYZG)BI&ijvv@PoxZsv;xG`8UN@tg*T4)VYY%7JzkBuQJO koTu&n{MJX)I=suL1RFkVE-3XUob!If`M78QQXZ503uauGk5Nsd+xdCoO{o?XZWMpY#`vO|N6&i*FJ*yAN)|b^!dumO{hE}C}NzTNJy-5q7-9<&vECSOVR02(96yQSnqsviAIb!u)s!x(Yg6B&4!{8 zZz#gBfpD0nypzk`iHZ5pytnjrVxq(F1LkkoM+)lTOdu5TsRU(TWLeM+vNQ@zhG{`{ zDa5dXZe$+Q3xomF5kz!=rTue&@1GAKhDJVxUUCH!9A&=SNw_r0on)%QH0Ly|4Snk5Sl zizHHDne6_SQkEp1RuuY_-#>?kFN+P7ic6$@Mxu06(3m+(IazP>E-7AN$? z{i+y2sqTQSmarbUBaUW*)fMOxL<@ni{b?S!uM-i~5^-C3ome7SV+ljfXPjisrFX2Q zRIlJbF-^pklp?OWUv-|iX^5+1>X>4YK&qHJt|EyDxoV85l8TR1F%_k~B}xdnSbK@y zY+)_IEabFF;=VgAuE7$vRHJlqOcN1R0)71=5!b{tD9TosdQ{9y3p7oox22jK??H8< zDp5V9pbU3)F>Sg`7Ns7P@tH}^$9Y0dC9aF<(4m+PBx8^3*}78Sm|otKBvu{&4^mNs zRLqjphhXPt!>_E4cl5VP(={T5!q1nL0HszMvoi+aBUjXIKSr7uFZ0Dy*>bm0PLn2cCpyiiAB>7gJWgiz^ducxT`J9ebk07hcV~OXhQ! z@t5MPF?QS#>H4=BoY{#)frah7WrmBG_a&~`V&O5ks#+-X-jGV14^s1!H_7vWL zmDCsNF{d0a?)s%W3TltJKt{e_VT+EK;{UQnQ9g>*HzG%N=-ai6ZtGbYW$ zigF!Lo^)B?f?Nnfw8t8-M@6Ol<<#U)B=Jl4C^3rIcc;5Q!lGsGXfzaIy;D(C79n_} zQ(o-mz2Mlr%)(^en|q^TG{AHS_R+ynf8YC8NBrkT-W$Etf3<&DFyN~H+Q^mjV?SUo zm~S|TTLeN-&Cucb*JL}y3@T<+l#2v;%KO|`P!LFzFOo&_tM+n?hl<7e(YZzcWFUBJVZL(_LZQxZXtHyDnVpG7j&*c(buuBAZl8zufoYoQgrKd{ z54xcd#9y7kaHvxr(TnF%Kg~$== z8cPYhaCx%MYTkKp%h|Q*?AmDJoF{naiJTT==?HfX?`mCN+z4z;ZcIMAlX0DflG74) zH*agsX$W_>)btXF6IUVVGl--6qml5kpv`MpP|XL}8JVutfG+C#JXG?UuEUy6!}HFI zBINp|$kK)gx~s>!driKDu+PMyEi)euv0o?>FTO%vK$Xo9TZ1@5Oyn_{pQHH(uo5TZiWqrc z30A0&kuk-T0_I>DBfcQe8-VOniF_mMVg+(h(9a`!(GM$-$(xvW<=4z)1jsOL06_T} z#|5c;GL`x;-MG>9d@ysYA4;+>`C;;;R0p_oIz@$D1WLu})R(4{hW4FT<-+`GUva_> zW72fLAQ4t(e%1nc3t?sjZEyi0I4%69IbQ|}47Pf4&I1_-E}u}TK-#`x|7-1^YoAYZ zT^IN+kj6lM>LLm}?wop2lQ^cy>rsPkl_EsVX~Fv7I07#v^+{%jnlTT*-tcbVZnXeF zTUE!TlD?W!r2@(2VuQ$}IOGp_ggc7%c60zLG7H3EiD-eCTApvcd^ZKVGvw6(%f=|} z@_xK;z+NaVp3rZY!xRk2;O;O7Yp+z&jY)FNTznK~@S60>I4&C58R%OyvYNg3h5Ho& z;#bu%66UloKPS`ybbQLvazaNiXIL<>QU97n#Nd8-abkn2z9^McV59M`hyQ%|`4V?@ zfIm6_ttqnjR-B>FD=4Cjpv@nD5#9_0CG72jVK73`xBC%_B7~2Gf(nZr;d7UuWR@90 zMc)pw;?h9)Kq#og_`omJf~!E_9rDL~IDA8|(BuL>tuump9%156>@fV;J3v~1hBG@m z!ytTU6ExEKU9gtv+7Af>ge^tTL92)$n8)599lg>&Hs-(Be`!=O_`}i2w73ZgMn8CQ z#7YmE!2CQNp#*g#fTkJ2gU|eUxWeGTm7iUnrv-Ca zN$H1K2upl5kez1Qi*iFa z)D=9t;9@QqarJ`NFGfIu5{4DW_Jh0yYhJd+>8V8-3mS#N zuq+*+DN$~sAtJmm5k7yS!vGk(4SILG-iAxGR>4#j34p+$gBAB&hCS*PT;Sd{gl_+5 zO`pDz(H@49)majnZL@WCJZ0j|2e!;@o8~so+|HZZ*8}U5>yx~>YvsbW$@*BaW=Qq& zwnLoB$D4dB{W*nF?an$pDRG)mGR78QclBcO^8KOJp~TROmbR^ylbbCkHyEy^ zhi~c0czb|oqv0DX+^&)afPJJPqpJf-rp6p$*4J)3e4L|=ceEwWW$m6Pb&u*EHmo%y z-pMIsu~Au+RNJss+q+rY`<*IN+soCy$Jf4>Qv>pkIGXwigT!FYLfC3xG;?jX_5eu9 z?iE4u{I;tm)$(v?Z72zU+cxK#E@gjcTr(z(APl=_%ht4MYf2yEY^}VlHDiKuaed_Z z^5)@-IVGWQ1SC@n(A9gkJ#Fg)8y|3SKXp?y(sz2JS*(*QWf0Ph$`XuscgG;4BzDP&Dmys3^i zwg0G9?Kk{H07zIt+@}3GLZLst4I!#_qk(hv@vgo^e^zvx>+gfNcgk{#NZ37I~iDA#!_rdeUR>ZdOeNS$uxR;bDi3(JDRCGnzhxW#yFcd zsoyr)lRnN=%bRL5V#ygXMF(Mf3%pu-k#FsRJ7?|Xt-WB-I@8C-2gc+D-gS`Eweq^w zjIMRNrk<}kyndCdIm*`@O<1x<$Cj~f(^!`Za>gd!*pwr5`YU9%8q7ywK2J(8smwa7 z)=vHYHs5e!(|ID}Jdt%Zq>p`iX5-vnM!4p4oaVs?+UqH-}GP2CpVV9v2x9$eDf$*f0?hpoHTx~Gbe%{&penZx-O`sdjN3N z7kPk|LEbXR>E7ja?`CxGZmYC+FD5R3G<0`pMf_uMp6J^~V_!S*ZM&(jSNUxZ2~gVI zaP*1%0D^e4FI?E+;pdm@aGZMrnForzCB9?oA=3g+^2}*kd{+sm3g^!#DCHP|&(1g3 znFctL%XXxN9X-w%0M)!`%i$eKj62JmL_>6*F0ESFk4PD40ydmf#+)3#UCR+daCASW=L(*XVke>k0>cmtd`fb5Br$-Yd@k&Np|PFZLy zy)MBq#%sWuLlYH$m4iHW_8`>cW!DAMS@R zB@C9}$B0&3jI-EN89G1PcJR zV0Ehq63VR6vU=+AZN9pF)7YLdwr5SQZM!Qu_RzEDc~bwVKCR^JExa9^vsw>*03`ad z;8N&R;9-cjdbg|xH?0TL3}z$#%c> zb=y|=&}R40cjvh7QNDXrl;w|Dz&~LCwN_kf#gUV}75r{(!_%IO>tK0#gm&s`3>s+9(3@rbjP)WPSYN}cb}gY{4-c|=^I*}hyN5e zNp%1#c5n*3NyRY^JXDB*X32qJZv~&wMbCBEi;w4CI4OG(J-rYPATLH@M0bFb<*?I2 zrZ_UzsvcbgJb$zkE6 zFZNNBbio(Xl*~OA|3yGNj_>ZdWR9!kvGZ=+CwF~)UhEQ30OpLt0GU+q=YvjYubkPi z%(3B>EjqRps5~Z%uI&_j=Pt8|QXIF(9z@D*F1_n6vm;e>JVxfN;xq+Oj*lFM6yzxw zS8|}bNEFQl1Mt5NI5I0wA_+RIdHh*`!6OwjNz?Ff=in}xmtDN*9{`sb2k@%sM(rB# z19nZ;V*L|(wzSoGcC+*BHze2j4&V9CR_A-0o$q}&!*yQcJFkID06d*uyo;T71Jb@f z1!Eu_p!lw4V3NT~7BqoikY*s`bj3e1gd%_}XtA|}_7Kj43z`rkh7;-#18qKi z$(soJf{K>~Q{K$Q{Ewi=J;Wr8Ku$^ST8~$oAGf0@kY(@=0-jsEr2GbY2bx6iF-91K zWttbz&kkaL-P6`TwEs){x|Z8_gx`0BQ&q1FCT?##-D__?Is52r`ZVWk=bh~RY*(Q-MG$WQfUjr^1}G zjd!+*k_Ojn*MRG_YgPuq?^>#JgkIetf&{s3v8_&j9DWc^^{(4FOB-)#ODMNpRcixV zu9i(#%V$?Uz4pf&|9WG?_xv(<;4FXOEa!TgcfFm^^T z(zas7e_2AmBK~Cw!;1KqCH80JB}*L1{Jrvm=*`GWmUug}TgejL8F|TRXp*$$h#hcL z=_YMilP&379n6XK`bO#Q>)L33Rwve9sNvv#_hwEFxH&=&j?|JJX$WTFw!w(E=eNI8 NejOL9dje6O{|iiXBDeqm literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f070ff1e52150c0fcad61832cc148cce026b7ae GIT binary patch literal 11082 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc3c555ec0174b3be242159acb1b161fa0355aa5 GIT binary patch literal 32981 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 Z=P$tcPcHObho{P5=7J*fvyWYp{|mYWjK=@~ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99523a5ffc809a197f693e9097f44baeebdb738a GIT binary patch literal 2116 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 Im&WP;7wV)FB>(^b literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/parser.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15489695372841d4fac376af0da832f10a7fb000 GIT binary patch literal 17031 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..475e031d840a098278b22162dfd3c18c770247e0 GIT binary patch literal 3178 zcmcguO>7(25q`_%?(%0vO4P3{%UU@`UA8hAK?$q`NsBs4ltfJ&Na|0v2#6K;ky>ki zh_{cnrBJX@x3=YVIF)B%*RMaI%gu4y(1=P zMbwDJtGpFeqn4lwmZ*xBq)Hsq^JdJ7t8pu#Cak2Iv}9Gb2Gjv7rKYU3nzjbjL2F1I zvNCEWu#cL<)`&X7AsoR`JbEl#0V;D?=wr*lCzJzT| zH0ls9_67xx3ENyCyHKHqV{4`-tW_%}&L+J0d5yf{m{rU6Qj5-I+jKNN?7wE1c-7d( zoqp^c;*<$?T`v`K9nHXM#js)GPB*cJuh0%Zv}RcNRa2|DIP^QrL@U_R4BN2F9lPN* zqSNt$$`359J6wrU_#m4Ei-CVJB*@)gu38O#@H$oPMh2 z>8t78eeAK_4?WFaN!*Fj;jXq8)#G}?;Qqkv2sL3p$n&nY&FM)x-j((5T$i^&wGF3T z;|~V<&v-|y3D3h_*U%z*??*dQP5LGJn1jBsFL(WQxtd5PdwNp;o(@v|-Z^yr$8m-u z@OxaNqg4pEIpjt!N3QViqRTMryRZ_5BapG_x4npCZ=YS;FkHpmaH^)RIJUW^tYf7L z`JouLLN~CY013nK^Z+W&$H=`X$XS;%v$j zN&pL#uxKGEMp#6W3?qY#uwWtV4hahY!cN(XX}Vru%OmXCJ+WHRHHtmn#CA4DMws0w zBV&x5VkS~Cz#-R*g?sfR=AdBco>1JV+M6!RXQk5~Y55Ju!ugAO9_%mTB6ahQb*Zqf z6*sGu{3UE(%A3Y|zOqF(9D6=DHf=9a$mg5#`9t~GjURl@*X7xUJlm9K59Q+x`9xDbaVSqWC zb0|+W2VprOg{6RD{`na3X-z{HXe$wc%y=p_AYRXeb9{mAn7##gOg9ayV zjMvi(cUFMFbM5t3YV04W>AR`veg4l^8)p`pXBNJkYn*whp}hR{FY2l3Mryg4TE4c_ ziVyjS7hVWRYjny-kvMdK?7rH{jPEY9UrQeOYdSB>Vdj@p&>6c<%N3i z_yQZlhh73#-!Z4(A9?Q1@g(ly!-r22cV#XM(Z8O{Eza}b%tsf`N#DH40nKtj)D=M) zG#2>`w;8fMSOWr80=_5ORf3%8tp*p5>Hv*`VW-ugsvJaa!uZ=q=(vig80rzret!Gv z5~hk~E6zHLR!DV?Dn;mr=}#SnV5oJZjRKu&tc1~*OC(t6uLNbzRWumeF8i}>S5(`? zAhwmTL@MC$)McVoPUV7;gndoiigfcX8};I)s$HaxW4fMH(Fip(Gl+06%Dj*~jBwfc zC<>W{mv@pCWWBSrZeq084Fl%E=tVY&r3qw43dIKZp1UiJ*QN2p^h7hQ{C#Hr%Z6FWC9RY?3 z>su7N-bDDF^iBsBR)R~z#N%BG1Y8717@Wl|M4n^Qvcr26dkG-DYT}=em!Zo-$*lqP zd5+^+Xs{kWEwo(!Umic2%{5()lc3E_XFN6kN(=Hd>&VK+kD-Hkv literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fae1c78adf52b6a3f1f091ca2eafc604022decc5 GIT binary patch literal 20143 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 WYfwwhFV>)uoSv;gWuL(bGyDOG8EWAG literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py new file mode 100644 index 0000000..226fe84 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py @@ -0,0 +1,171 @@ +"""Logic that powers autocompletion installed by ``pip completion``. +""" + +import optparse +import os +import sys +from itertools import chain +from typing import Any, Iterable, List, Optional + +from pip._internal.cli.main_parser import create_main_parser +from pip._internal.commands import commands_dict, create_command +from pip._internal.metadata import get_default_environment + + +def autocomplete() -> None: + """Entry Point for completion of main and subcommand options.""" + # 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 = "" + + parser = create_main_parser() + subcommands = list(commands_dict) + options = [] + + # subcommand + subcommand_name: Optional[str] = None + for word in cwords: + if word in subcommands: + subcommand_name = word + break + # subcommand options + if subcommand_name is not None: + # 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 = not current.startswith("-") and subcommand_name in [ + "show", + "uninstall", + ] + if should_list_installed: + env = get_default_environment() + lc = current.lower() + installed = [ + dist.canonical_name + for dist in env.iter_installed_distributions(local_only=True) + if dist.canonical_name.startswith(lc) + and dist.canonical_name not in cwords[1:] + ] + # if there are no dists installed, fall back to option completion + if installed: + for dist in installed: + print(dist) + sys.exit(1) + + should_list_installables = ( + not current.startswith("-") and subcommand_name == "install" + ) + if should_list_installables: + for path in auto_complete_paths(current, "path"): + print(path) + sys.exit(1) + + subcommand = create_command(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)] + # get completion type given cwords and available subcommand options + completion_type = get_path_completion_type( + cwords, + cword, + subcommand.parser.option_list_all, + ) + # get completion files and directories if ``completion_type`` is + # ````, ``

    `` or ```` + if completion_type: + paths = auto_complete_paths(current, completion_type) + options = [(path, 0) for path in paths] + 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 + + opts = [i.option_list for i in parser.option_groups] + opts.append(parser.option_list) + flattened_opts = chain.from_iterable(opts) + if current.startswith("-"): + for opt in flattened_opts: + if opt.help != optparse.SUPPRESS_HELP: + subcommands += opt._long_opts + opt._short_opts + else: + # get completion type given cwords and all available options + completion_type = get_path_completion_type(cwords, cword, flattened_opts) + if completion_type: + subcommands = list(auto_complete_paths(current, completion_type)) + + print(" ".join([x for x in subcommands if x.startswith(current)])) + sys.exit(1) + + +def get_path_completion_type( + cwords: List[str], cword: int, opts: Iterable[Any] +) -> Optional[str]: + """Get the type of path completion (``file``, ``dir``, ``path`` or None) + + :param cwords: same as the environmental variable ``COMP_WORDS`` + :param cword: same as the environmental variable ``COMP_CWORD`` + :param opts: The available options to check + :return: path completion type (``file``, ``dir``, ``path`` or None) + """ + if cword < 2 or not cwords[cword - 2].startswith("-"): + return None + for opt in opts: + if opt.help == optparse.SUPPRESS_HELP: + continue + for o in str(opt).split("/"): + if cwords[cword - 2].split("=")[0] == o: + if not opt.metavar or any( + x in ("path", "file", "dir") for x in opt.metavar.split("/") + ): + return opt.metavar + return None + + +def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]: + """If ``completion_type`` is ``file`` or ``path``, list all regular files + and directories starting with ``current``; otherwise only list directories + starting with ``current``. + + :param current: The word to be completed + :param completion_type: path completion type(``file``, ``path`` or ``dir``) + :return: A generator of regular files and/or directories + """ + directory, filename = os.path.split(current) + current_path = os.path.abspath(directory) + # Don't complete paths if they can't be accessed + if not os.access(current_path, os.R_OK): + return + filename = os.path.normcase(filename) + # list all files that start with ``filename`` + file_list = ( + x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename) + ) + for f in file_list: + opt = os.path.join(current_path, f) + comp_file = os.path.normcase(os.path.join(directory, f)) + # complete regular files when there is not ```` after option + # complete directories when there is ````, ```` or + # ````after option + if completion_type != "dir" and os.path.isfile(opt): + yield comp_file + elif os.path.isdir(opt): + yield os.path.join(comp_file, "") diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/base_command.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/base_command.py new file mode 100644 index 0000000..5bd7e67 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/base_command.py @@ -0,0 +1,216 @@ +"""Base Command class, and related routines""" + +import functools +import logging +import logging.config +import optparse +import os +import sys +import traceback +from optparse import Values +from typing import Any, Callable, List, Optional, Tuple + +from pip._vendor.rich import traceback as rich_traceback + +from pip._internal.cli import cmdoptions +from pip._internal.cli.command_context import CommandContextMixIn +from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip._internal.cli.status_codes import ( + ERROR, + PREVIOUS_BUILD_DIR_ERROR, + UNKNOWN_ERROR, + VIRTUALENV_NOT_FOUND, +) +from pip._internal.exceptions import ( + BadCommand, + CommandError, + DiagnosticPipError, + InstallationError, + NetworkConnectionError, + PreviousBuildDirError, + UninstallationError, +) +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging +from pip._internal.utils.misc import get_prog, normalize_path +from pip._internal.utils.temp_dir import TempDirectoryTypeRegistry as TempDirRegistry +from pip._internal.utils.temp_dir import global_tempdir_manager, tempdir_registry +from pip._internal.utils.virtualenv import running_under_virtualenv + +__all__ = ["Command"] + +logger = logging.getLogger(__name__) + + +class Command(CommandContextMixIn): + usage: str = "" + ignore_require_venv: bool = False + + def __init__(self, name: str, summary: str, isolated: bool = False) -> None: + super().__init__() + + self.name = name + self.summary = summary + self.parser = ConfigOptionParser( + usage=self.usage, + prog=f"{get_prog()} {name}", + formatter=UpdatingDefaultsHelpFormatter(), + add_help_option=False, + name=name, + description=self.__doc__, + isolated=isolated, + ) + + self.tempdir_registry: Optional[TempDirRegistry] = None + + # Commands should add options to this option group + optgroup_name = f"{self.name.capitalize()} Options" + 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) + + self.add_options() + + def add_options(self) -> None: + pass + + def handle_pip_version_check(self, options: Values) -> None: + """ + This is a no-op so that commands by default do not do the pip version + check. + """ + # Make sure we do the pip version check if the index_group options + # are present. + assert not hasattr(options, "no_index") + + def run(self, options: Values, args: List[str]) -> int: + raise NotImplementedError + + def parse_args(self, args: List[str]) -> Tuple[Values, List[str]]: + # factored out for testability + return self.parser.parse_args(args) + + def main(self, args: List[str]) -> int: + try: + with self.main_context(): + return self._main(args) + finally: + logging.shutdown() + + def _main(self, args: List[str]) -> int: + # We must initialize this before the tempdir manager, otherwise the + # configuration would not be accessible by the time we clean up the + # tempdir manager. + self.tempdir_registry = self.enter_context(tempdir_registry()) + # Intentionally set as early as possible so globally-managed temporary + # directories are available to the rest of the code. + self.enter_context(global_tempdir_manager()) + + options, args = self.parse_args(args) + + # Set verbosity so that it can be used elsewhere. + self.verbosity = options.verbose - options.quiet + + level_number = setup_logging( + verbosity=self.verbosity, + no_color=options.no_color, + user_log_file=options.log, + ) + + # TODO: Try to get these passing down from the command? + # without resorting to os.environ to hold these. + # This also affects isolated builds and it should. + + 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) + + if options.cache_dir: + options.cache_dir = normalize_path(options.cache_dir) + if not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "or is not writable by the current user. The cache " + "has been disabled. Check the permissions and owner of " + "that directory. If executing pip with sudo, you should " + "use sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + def intercepts_unhandled_exc( + run_func: Callable[..., int] + ) -> Callable[..., int]: + @functools.wraps(run_func) + def exc_logging_wrapper(*args: Any) -> int: + try: + status = run_func(*args) + assert isinstance(status, int) + return status + except DiagnosticPipError as exc: + logger.error("[present-rich] %s", exc) + logger.debug("Exception information:", exc_info=True) + + return ERROR + except PreviousBuildDirError as exc: + logger.critical(str(exc)) + logger.debug("Exception information:", exc_info=True) + + return PREVIOUS_BUILD_DIR_ERROR + except ( + InstallationError, + UninstallationError, + BadCommand, + NetworkConnectionError, + ) as exc: + logger.critical(str(exc)) + logger.debug("Exception information:", exc_info=True) + + return ERROR + except CommandError as exc: + logger.critical("%s", exc) + logger.debug("Exception information:", exc_info=True) + + return ERROR + except BrokenStdoutLoggingError: + # Bypass our logger and write any remaining messages to + # stderr because stdout no longer works. + print("ERROR: Pipe to stdout was broken", file=sys.stderr) + if level_number <= logging.DEBUG: + traceback.print_exc(file=sys.stderr) + + return ERROR + except KeyboardInterrupt: + logger.critical("Operation cancelled by user") + logger.debug("Exception information:", exc_info=True) + + return ERROR + except BaseException: + logger.critical("Exception:", exc_info=True) + + return UNKNOWN_ERROR + + return exc_logging_wrapper + + try: + if not options.debug_mode: + run = intercepts_unhandled_exc(self.run) + else: + run = self.run + rich_traceback.install(show_locals=True) + return run(options, args) + finally: + self.handle_pip_version_check(options) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py new file mode 100644 index 0000000..7b510b1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py @@ -0,0 +1,1055 @@ +""" +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. +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import importlib.util +import logging +import os +import textwrap +from functools import partial +from optparse import SUPPRESS_HELP, Option, OptionGroup, OptionParser, Values +from textwrap import dedent +from typing import Any, Callable, Dict, Optional, Tuple + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.parser import ConfigOptionParser +from pip._internal.exceptions import CommandError +from pip._internal.locations import USER_CACHE_DIR, get_src_prefix +from pip._internal.models.format_control import FormatControl +from pip._internal.models.index import PyPI +from pip._internal.models.target_python import TargetPython +from pip._internal.utils.hashes import STRONG_HASHES +from pip._internal.utils.misc import strtobool + +logger = logging.getLogger(__name__) + + +def raise_option_error(parser: OptionParser, option: Option, msg: str) -> None: + """ + Raise an option parsing error using parser.error(). + + Args: + parser: an OptionParser instance. + option: an Option instance. + msg: the error text. + """ + msg = f"{option} error: {msg}" + msg = textwrap.fill(" ".join(msg.split())) + parser.error(msg) + + +def make_option_group(group: Dict[str, Any], parser: ConfigOptionParser) -> OptionGroup: + """ + 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_dist_restriction(options: Values, check_target: bool = False) -> None: + """Function for determining if custom platform options are allowed. + + :param options: The OptionParser options. + :param check_target: Whether or not to check if --target is being used. + """ + dist_restriction_set = any( + [ + options.python_version, + options.platforms, + options.abis, + options.implementation, + ] + ) + + binary_only = FormatControl(set(), {":all:"}) + sdist_dependencies_allowed = ( + options.format_control != binary_only and not options.ignore_dependencies + ) + + # Installations or downloads using dist restrictions must not combine + # source distributions and dist-specific wheels, as they are not + # guaranteed to be locally compatible. + if dist_restriction_set and sdist_dependencies_allowed: + 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:)." + ) + + if check_target: + if dist_restriction_set and not options.target_dir: + raise CommandError( + "Can not use any platform or abi specific options unless " + "installing via '--target'" + ) + + +def _path_option_check(option: Option, opt: str, value: str) -> str: + return os.path.expanduser(value) + + +def _package_name_option_check(option: Option, opt: str, value: str) -> str: + return canonicalize_name(value) + + +class PipOption(Option): + TYPES = Option.TYPES + ("path", "package_name") + TYPE_CHECKER = Option.TYPE_CHECKER.copy() + TYPE_CHECKER["package_name"] = _package_name_option_check + TYPE_CHECKER["path"] = _path_option_check + + +########### +# options # +########### + +help_: Callable[..., Option] = partial( + Option, + "-h", + "--help", + dest="help", + action="help", + help="Show help.", +) + +debug_mode: Callable[..., Option] = partial( + Option, + "--debug", + dest="debug_mode", + action="store_true", + default=False, + help=( + "Let unhandled exceptions propagate outside the main subroutine, " + "instead of logging them to stderr." + ), +) + +isolated_mode: Callable[..., Option] = 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: Callable[..., Option] = partial( + Option, + "--require-virtualenv", + "--require-venv", + dest="require_venv", + action="store_true", + default=False, + help=( + "Allow pip to only run in a virtual environment; " + "exit with an error otherwise." + ), +) + +override_externally_managed: Callable[..., Option] = partial( + Option, + "--break-system-packages", + dest="override_externally_managed", + action="store_true", + help="Allow pip to modify an EXTERNALLY-MANAGED Python installation", +) + +python: Callable[..., Option] = partial( + Option, + "--python", + dest="python", + help="Run pip with the specified Python interpreter.", +) + +verbose: Callable[..., Option] = 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: Callable[..., Option] = partial( + Option, + "--no-color", + dest="no_color", + action="store_true", + default=False, + help="Suppress colored output.", +) + +version: Callable[..., Option] = partial( + Option, + "-V", + "--version", + dest="version", + action="store_true", + help="Show version and exit.", +) + +quiet: Callable[..., Option] = 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)." + ), +) + +progress_bar: Callable[..., Option] = partial( + Option, + "--progress-bar", + dest="progress_bar", + type="choice", + choices=["on", "off"], + default="on", + help="Specify whether the progress bar should be used [on, off] (default: on)", +) + +log: Callable[..., Option] = partial( + PipOption, + "--log", + "--log-file", + "--local-log", + dest="log", + metavar="path", + type="path", + help="Path to a verbose appending log.", +) + +no_input: Callable[..., Option] = partial( + Option, + # Don't ask for input + "--no-input", + dest="no_input", + action="store_true", + default=False, + help="Disable prompting for input.", +) + +proxy: Callable[..., Option] = partial( + Option, + "--proxy", + dest="proxy", + type="str", + default="", + help="Specify a proxy in the form scheme://[user:passwd@]proxy.server:port.", +) + +retries: Callable[..., Option] = partial( + Option, + "--retries", + dest="retries", + type="int", + default=5, + help="Maximum number of retries each connection should attempt " + "(default %default times).", +) + +timeout: Callable[..., Option] = partial( + Option, + "--timeout", + "--default-timeout", + metavar="sec", + dest="timeout", + type="float", + default=15, + help="Set the socket timeout (default %default seconds).", +) + + +def exists_action() -> Option: + 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: Callable[..., Option] = partial( + PipOption, + "--cert", + dest="cert", + type="path", + metavar="path", + help=( + "Path to PEM-encoded CA certificate bundle. " + "If provided, overrides the default. " + "See 'SSL Certificate Verification' in pip documentation " + "for more information." + ), +) + +client_cert: Callable[..., Option] = partial( + PipOption, + "--client-cert", + dest="client_cert", + type="path", + default=None, + metavar="path", + help="Path to SSL client certificate, a single file containing the " + "private key and the certificate in PEM format.", +) + +index_url: Callable[..., Option] = partial( + Option, + "-i", + "--index-url", + "--pypi-url", + dest="index_url", + metavar="URL", + default=PyPI.simple_url, + help="Base URL of the 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.", +) + + +def extra_index_url() -> Option: + 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: Callable[..., Option] = partial( + Option, + "--no-index", + dest="no_index", + action="store_true", + default=False, + help="Ignore package index (only looking at --find-links URLs instead).", +) + + +def find_links() -> Option: + 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 such as sdist (.tar.gz) or wheel (.whl) files. " + "If a local path or file:// URL that's a directory, " + "then look for archives in the directory listing. " + "Links to VCS project URLs are not supported.", + ) + + +def trusted_host() -> Option: + return Option( + "--trusted-host", + dest="trusted_hosts", + action="append", + metavar="HOSTNAME", + default=[], + help="Mark this host or host:port pair as trusted, even though it " + "does not have valid or any HTTPS.", + ) + + +def constraints() -> Option: + 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() -> Option: + 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() -> Option: + 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.' + ), + ) + + +def _handle_src(option: Option, opt_str: str, value: str, parser: OptionParser) -> None: + value = os.path.abspath(value) + setattr(parser.values, option.dest, value) + + +src: Callable[..., Option] = partial( + PipOption, + "--src", + "--source", + "--source-dir", + "--source-directory", + dest="src_dir", + type="path", + metavar="dir", + default=get_src_prefix(), + action="callback", + callback=_handle_src, + help="Directory to check out editable projects into. " + 'The default in a virtualenv is "/src". ' + 'The default for global installs is "/src".', +) + + +def _get_format_control(values: Values, option: Option) -> Any: + """Get a format_control object.""" + return getattr(values, option.dest) + + +def _handle_no_binary( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + existing = _get_format_control(parser.values, option) + FormatControl.handle_mutual_excludes( + value, + existing.no_binary, + existing.only_binary, + ) + + +def _handle_only_binary( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + existing = _get_format_control(parser.values, option) + FormatControl.handle_mutual_excludes( + value, + existing.only_binary, + existing.no_binary, + ) + + +def no_binary() -> Option: + format_control = FormatControl(set(), set()) + return Option( + "--no-binary", + dest="format_control", + action="callback", + callback=_handle_no_binary, + type="str", + default=format_control, + 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 (notice ' + "the colons), or one or more package names with commas between " + "them (no colons). Note that some packages are tricky to compile " + "and may fail to install when this option is used on them.", + ) + + +def only_binary() -> Option: + format_control = FormatControl(set(), set()) + return Option( + "--only-binary", + dest="format_control", + action="callback", + callback=_handle_only_binary, + type="str", + default=format_control, + 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.", + ) + + +platforms: Callable[..., Option] = partial( + Option, + "--platform", + dest="platforms", + metavar="platform", + action="append", + default=None, + help=( + "Only use wheels compatible with . Defaults to the " + "platform of the running system. Use this option multiple times to " + "specify multiple platforms supported by the target interpreter." + ), +) + + +# This was made a separate function for unit-testing purposes. +def _convert_python_version(value: str) -> Tuple[Tuple[int, ...], Optional[str]]: + """ + Convert a version string like "3", "37", or "3.7.3" into a tuple of ints. + + :return: A 2-tuple (version_info, error_msg), where `error_msg` is + non-None if and only if there was a parsing error. + """ + if not value: + # The empty string is the same as not providing a value. + return (None, None) + + parts = value.split(".") + if len(parts) > 3: + return ((), "at most three version parts are allowed") + + if len(parts) == 1: + # Then we are in the case of "3" or "37". + value = parts[0] + if len(value) > 1: + parts = [value[0], value[1:]] + + try: + version_info = tuple(int(part) for part in parts) + except ValueError: + return ((), "each version part must be an integer") + + return (version_info, None) + + +def _handle_python_version( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + """ + Handle a provided --python-version value. + """ + version_info, error_msg = _convert_python_version(value) + if error_msg is not None: + msg = "invalid --python-version value: {!r}: {}".format( + value, + error_msg, + ) + raise_option_error(parser, option=option, msg=msg) + + parser.values.python_version = version_info + + +python_version: Callable[..., Option] = partial( + Option, + "--python-version", + dest="python_version", + metavar="python_version", + action="callback", + callback=_handle_python_version, + type="str", + default=None, + help=dedent( + """\ + The Python interpreter version to use for wheel and "Requires-Python" + compatibility checks. Defaults to a version derived from the running + interpreter. The version can be specified using up to three dot-separated + integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor + version can also be given as a string without dots (e.g. "37" for 3.7.0). + """ + ), +) + + +implementation: Callable[..., Option] = partial( + Option, + "--implementation", + dest="implementation", + metavar="implementation", + default=None, + help=( + "Only use 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." + ), +) + + +abis: Callable[..., Option] = partial( + Option, + "--abi", + dest="abis", + metavar="abi", + action="append", + default=None, + help=( + "Only use wheels compatible with Python abi , e.g. 'pypy_41'. " + "If not specified, then the current interpreter abi tag is used. " + "Use this option multiple times to specify multiple abis supported " + "by the target interpreter. Generally you will need to specify " + "--implementation, --platform, and --python-version when using this " + "option." + ), +) + + +def add_target_python_options(cmd_opts: OptionGroup) -> None: + cmd_opts.add_option(platforms()) + cmd_opts.add_option(python_version()) + cmd_opts.add_option(implementation()) + cmd_opts.add_option(abis()) + + +def make_target_python(options: Values) -> TargetPython: + target_python = TargetPython( + platforms=options.platforms, + py_version_info=options.python_version, + abis=options.abis, + implementation=options.implementation, + ) + + return target_python + + +def prefer_binary() -> Option: + return Option( + "--prefer-binary", + dest="prefer_binary", + action="store_true", + default=False, + help="Prefer older binary packages over newer source packages.", + ) + + +cache_dir: Callable[..., Option] = partial( + PipOption, + "--cache-dir", + dest="cache_dir", + default=USER_CACHE_DIR, + metavar="dir", + type="path", + help="Store the cache data in .", +) + + +def _handle_no_cache_dir( + option: Option, opt: str, value: str, parser: OptionParser +) -> None: + """ + Process a value provided for the --no-cache-dir option. + + This is an optparse.Option callback for the --no-cache-dir option. + """ + # The value argument will be None if --no-cache-dir is passed via the + # command-line, since the option doesn't accept arguments. However, + # the value can be non-None if the option is triggered e.g. by an + # environment variable, like PIP_NO_CACHE_DIR=true. + if value is not None: + # Then parse the string value to get argument error-checking. + try: + strtobool(value) + except ValueError as exc: + raise_option_error(parser, option=option, msg=str(exc)) + + # Originally, setting PIP_NO_CACHE_DIR to a value that strtobool() + # converted to 0 (like "false" or "no") caused cache_dir to be disabled + # rather than enabled (logic would say the latter). Thus, we disable + # the cache directory not just on values that parse to True, but (for + # backwards compatibility reasons) also on values that parse to False. + # In other words, always set it to False if the option is provided in + # some (valid) form. + parser.values.cache_dir = False + + +no_cache: Callable[..., Option] = partial( + Option, + "--no-cache-dir", + dest="cache_dir", + action="callback", + callback=_handle_no_cache_dir, + help="Disable the cache.", +) + +no_deps: Callable[..., Option] = partial( + Option, + "--no-deps", + "--no-dependencies", + dest="ignore_dependencies", + action="store_true", + default=False, + help="Don't install package dependencies.", +) + +ignore_requires_python: Callable[..., Option] = partial( + Option, + "--ignore-requires-python", + dest="ignore_requires_python", + action="store_true", + help="Ignore the Requires-Python information.", +) + +no_build_isolation: Callable[..., Option] = 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.", +) + +check_build_deps: Callable[..., Option] = partial( + Option, + "--check-build-dependencies", + dest="check_build_deps", + action="store_true", + default=False, + help="Check the build dependencies when PEP517 is used.", +) + + +def _handle_no_use_pep517( + option: Option, opt: str, value: str, parser: OptionParser +) -> None: + """ + Process a value provided for the --no-use-pep517 option. + + This is an optparse.Option callback for the no_use_pep517 option. + """ + # Since --no-use-pep517 doesn't accept arguments, the value argument + # will be None if --no-use-pep517 is passed via the command-line. + # However, the value can be non-None if the option is triggered e.g. + # by an environment variable, for example "PIP_NO_USE_PEP517=true". + if value is not None: + msg = """A value was passed for --no-use-pep517, + probably using either the PIP_NO_USE_PEP517 environment variable + or the "no-use-pep517" config file option. Use an appropriate value + of the PIP_USE_PEP517 environment variable or the "use-pep517" + config file option instead. + """ + raise_option_error(parser, option=option, msg=msg) + + # If user doesn't wish to use pep517, we check if setuptools is installed + # and raise error if it is not. + if not importlib.util.find_spec("setuptools"): + msg = "It is not possible to use --no-use-pep517 without setuptools installed." + raise_option_error(parser, option=option, msg=msg) + + # Otherwise, --no-use-pep517 was passed via the command-line. + parser.values.use_pep517 = False + + +use_pep517: Any = partial( + Option, + "--use-pep517", + dest="use_pep517", + action="store_true", + default=None, + help="Use PEP 517 for building source distributions " + "(use --no-use-pep517 to force legacy behaviour).", +) + +no_use_pep517: Any = partial( + Option, + "--no-use-pep517", + dest="use_pep517", + action="callback", + callback=_handle_no_use_pep517, + default=None, + help=SUPPRESS_HELP, +) + + +def _handle_config_settings( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + key, sep, val = value.partition("=") + if sep != "=": + parser.error(f"Arguments to {opt_str} must be of the form KEY=VAL") # noqa + dest = getattr(parser.values, option.dest) + if dest is None: + dest = {} + setattr(parser.values, option.dest, dest) + dest[key] = val + + +config_settings: Callable[..., Option] = partial( + Option, + "--config-settings", + dest="config_settings", + type=str, + action="callback", + callback=_handle_config_settings, + metavar="settings", + help="Configuration settings to be passed to the PEP 517 build backend. " + "Settings take the form KEY=VALUE. Use multiple --config-settings options " + "to pass multiple keys to the backend.", +) + +install_options: Callable[..., Option] = partial( + Option, + "--install-option", + dest="install_options", + action="append", + metavar="options", + help="This option is deprecated. Using this option with location-changing " + "options may cause unexpected behavior. " + "Use pip-level options like --user, --prefix, --root, and --target.", +) + +build_options: Callable[..., Option] = partial( + Option, + "--build-option", + dest="build_options", + metavar="options", + action="append", + help="Extra arguments to be supplied to 'setup.py bdist_wheel'.", +) + +global_options: Callable[..., Option] = 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 or bdist_wheel command.", +) + +no_clean: Callable[..., Option] = partial( + Option, + "--no-clean", + action="store_true", + default=False, + help="Don't clean up build directories.", +) + +pre: Callable[..., Option] = partial( + Option, + "--pre", + action="store_true", + default=False, + help="Include pre-release and development versions. By default, " + "pip only finds stable versions.", +) + +disable_pip_version_check: Callable[..., Option] = partial( + Option, + "--disable-pip-version-check", + dest="disable_pip_version_check", + action="store_true", + default=True, + help="Don't periodically check PyPI to determine whether a new version " + "of pip is available for download. Implied with --no-index.", +) + +root_user_action: Callable[..., Option] = partial( + Option, + "--root-user-action", + dest="root_user_action", + default="warn", + choices=["warn", "ignore"], + help="Action if pip is run as a root user. By default, a warning message is shown.", +) + + +def _handle_merge_hash( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + """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 {} must be a hash name " # noqa + "followed by a value, like --hash=sha256:" + "abcde...".format(opt_str) + ) + if algo not in STRONG_HASHES: + parser.error( + "Allowed hash algorithms for {} are {}.".format( # noqa + opt_str, ", ".join(STRONG_HASHES) + ) + ) + parser.values.hashes.setdefault(algo, []).append(digest) + + +hash: Callable[..., Option] = partial( + Option, + "--hash", + # Hash values eventually end up in InstallRequirement.hashes due to + # __dict__ copying in process_line(). + dest="hashes", + action="callback", + callback=_handle_merge_hash, + type="string", + help="Verify that the package's archive matches this " + "hash before installing. Example: --hash=sha256:abcdef...", +) + + +require_hashes: Callable[..., Option] = 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.", +) + + +list_path: Callable[..., Option] = partial( + PipOption, + "--path", + dest="path", + type="path", + action="append", + help="Restrict to the specified installation path for listing " + "packages (can be used multiple times).", +) + + +def check_list_path_option(options: Values) -> None: + if options.path and (options.user or options.local): + raise CommandError("Cannot combine '--path' with '--user' or '--local'") + + +list_exclude: Callable[..., Option] = partial( + PipOption, + "--exclude", + dest="excludes", + action="append", + metavar="package", + type="package_name", + help="Exclude specified package from the output", +) + + +no_python_version_warning: Callable[..., Option] = partial( + Option, + "--no-python-version-warning", + dest="no_python_version_warning", + action="store_true", + default=False, + help="Silence deprecation warnings for upcoming unsupported Pythons.", +) + + +use_new_feature: Callable[..., Option] = partial( + Option, + "--use-feature", + dest="features_enabled", + metavar="feature", + action="append", + default=[], + choices=[ + "fast-deps", + "truststore", + "no-binary-enable-wheel-cache", + ], + help="Enable new functionality, that may be backward incompatible.", +) + +use_deprecated_feature: Callable[..., Option] = partial( + Option, + "--use-deprecated", + dest="deprecated_features_enabled", + metavar="feature", + action="append", + default=[], + choices=[ + "legacy-resolver", + ], + help=("Enable deprecated functionality, that will be removed in the future."), +) + + +########## +# groups # +########## + +general_group: Dict[str, Any] = { + "name": "General Options", + "options": [ + help_, + debug_mode, + isolated_mode, + require_virtualenv, + python, + verbose, + version, + quiet, + log, + no_input, + proxy, + retries, + timeout, + exists_action, + trusted_host, + cert, + client_cert, + cache_dir, + no_cache, + disable_pip_version_check, + no_color, + no_python_version_warning, + use_new_feature, + use_deprecated_feature, + ], +} + +index_group: Dict[str, Any] = { + "name": "Package Index Options", + "options": [ + index_url, + extra_index_url, + no_index, + find_links, + ], +} diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/command_context.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/command_context.py new file mode 100644 index 0000000..139995a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/command_context.py @@ -0,0 +1,27 @@ +from contextlib import ExitStack, contextmanager +from typing import ContextManager, Generator, TypeVar + +_T = TypeVar("_T", covariant=True) + + +class CommandContextMixIn: + def __init__(self) -> None: + super().__init__() + self._in_main_context = False + self._main_context = ExitStack() + + @contextmanager + def main_context(self) -> Generator[None, None, None]: + assert not self._in_main_context + + self._in_main_context = True + try: + with self._main_context: + yield + finally: + self._in_main_context = False + + def enter_context(self, context_provider: ContextManager[_T]) -> _T: + assert self._in_main_context + + return self._main_context.enter_context(context_provider) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/main.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/main.py new file mode 100644 index 0000000..0e31221 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/main.py @@ -0,0 +1,70 @@ +"""Primary application entrypoint. +""" +import locale +import logging +import os +import sys +from typing import List, Optional + +from pip._internal.cli.autocompletion import autocomplete +from pip._internal.cli.main_parser import parse_command +from pip._internal.commands import create_command +from pip._internal.exceptions import PipError +from pip._internal.utils import deprecation + +logger = logging.getLogger(__name__) + + +# Do not import and use main() directly! Using it directly is actively +# discouraged by pip's maintainers. The name, location and behavior of +# this function is subject to change, so calling it directly is not +# portable across different pip versions. + +# In addition, running pip in-process is unsupported and unsafe. This is +# elaborated in detail at +# https://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program. +# That document also provides suggestions that should work for nearly +# all users that are considering importing and using main() directly. + +# However, we know that certain users will still want to invoke pip +# in-process. If you understand and accept the implications of using pip +# in an unsupported manner, the best approach is to use runpy to avoid +# depending on the exact location of this entry point. + +# The following example shows how to use runpy to invoke pip in that +# case: +# +# sys.argv = ["pip", your, args, here] +# runpy.run_module("pip", run_name="__main__") +# +# Note that this will exit the process after running, unlike a direct +# call to main. As it is not safe to do any processing after calling +# main, this should not be an issue in practice. + + +def main(args: Optional[List[str]] = None) -> int: + 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 = parse_command(args) + except PipError as exc: + sys.stderr.write(f"ERROR: {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 = create_command(cmd_name, isolated=("--isolated" in cmd_args)) + + return command.main(cmd_args) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/main_parser.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/main_parser.py new file mode 100644 index 0000000..5ade356 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/main_parser.py @@ -0,0 +1,134 @@ +"""A single place for constructing and exposing the main parser +""" + +import os +import subprocess +import sys +from typing import List, Optional, Tuple + +from pip._internal.build_env import get_runnable_pip +from pip._internal.cli import cmdoptions +from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip._internal.commands import commands_dict, get_similar_commands +from pip._internal.exceptions import CommandError +from pip._internal.utils.misc import get_pip_version, get_prog + +__all__ = ["create_main_parser", "parse_command"] + + +def create_main_parser() -> ConfigOptionParser: + """Creates and returns the main parser for pip's CLI""" + + parser = ConfigOptionParser( + usage="\n%prog [options]", + add_help_option=False, + formatter=UpdatingDefaultsHelpFormatter(), + name="global", + prog=get_prog(), + ) + parser.disable_interspersed_args() + + parser.version = get_pip_version() + + # add the general options + gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) + parser.add_option_group(gen_opts) + + # so the help formatter knows + parser.main = True # type: ignore + + # create command listing for description + description = [""] + [ + f"{name:27} {command_info.summary}" + for name, command_info in commands_dict.items() + ] + parser.description = "\n".join(description) + + return parser + + +def identify_python_interpreter(python: str) -> Optional[str]: + # If the named file exists, use it. + # If it's a directory, assume it's a virtual environment and + # look for the environment's Python executable. + if os.path.exists(python): + if os.path.isdir(python): + # bin/python for Unix, Scripts/python.exe for Windows + # Try both in case of odd cases like cygwin. + for exe in ("bin/python", "Scripts/python.exe"): + py = os.path.join(python, exe) + if os.path.exists(py): + return py + else: + return python + + # Could not find the interpreter specified + return None + + +def parse_command(args: List[str]) -> Tuple[str, List[str]]: + 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) + + # --python + if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ: + # Re-invoke pip using the specified Python interpreter + interpreter = identify_python_interpreter(general_options.python) + if interpreter is None: + raise CommandError( + f"Could not locate Python interpreter {general_options.python}" + ) + + pip_cmd = [ + interpreter, + get_runnable_pip(), + ] + pip_cmd.extend(args) + + # Set a flag so the child doesn't re-invoke itself, causing + # an infinite loop. + os.environ["_PIP_RUNNING_IN_SUBPROCESS"] = "1" + returncode = 0 + try: + proc = subprocess.run(pip_cmd) + returncode = proc.returncode + except (subprocess.SubprocessError, OSError) as exc: + raise CommandError(f"Failed to run pip under {interpreter}: {exc}") + sys.exit(returncode) + + # --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 = [f'unknown command "{cmd_name}"'] + if guess: + msg.append(f'maybe you meant "{guess}"') + + raise CommandError(" - ".join(msg)) + + # all the args without the subcommand + cmd_args = args[:] + cmd_args.remove(cmd_name) + + return cmd_name, cmd_args diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/parser.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/parser.py new file mode 100644 index 0000000..c762cf2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/parser.py @@ -0,0 +1,294 @@ +"""Base option parser setup""" + +import logging +import optparse +import shutil +import sys +import textwrap +from contextlib import suppress +from typing import Any, Dict, Generator, List, Tuple + +from pip._internal.cli.status_codes import UNKNOWN_ERROR +from pip._internal.configuration import Configuration, ConfigurationError +from pip._internal.utils.misc import redact_auth_from_url, strtobool + +logger = logging.getLogger(__name__) + + +class PrettyHelpFormatter(optparse.IndentedHelpFormatter): + """A prettier/less verbose help formatter for optparse.""" + + def __init__(self, *args: Any, **kwargs: Any) -> None: + # help position must be aligned with __init__.parseopts.description + kwargs["max_help_position"] = 30 + kwargs["indent_increment"] = 1 + kwargs["width"] = shutil.get_terminal_size()[0] - 2 + super().__init__(*args, **kwargs) + + def format_option_strings(self, option: optparse.Option) -> str: + return self._format_option_strings(option) + + def _format_option_strings( + self, option: optparse.Option, mvarfmt: str = " <{}>", optsep: str = ", " + ) -> str: + """ + 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 + :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(): + assert option.dest is not None + metavar = option.metavar or option.dest.lower() + opts.append(mvarfmt.format(metavar.lower())) + + return "".join(opts) + + def format_heading(self, heading: str) -> str: + if heading == "Options": + return "" + return heading + ":\n" + + def format_usage(self, usage: str) -> str: + """ + Ensure there is only one newline between usage and the first heading + if there is no description. + """ + msg = "\nUsage: {}\n".format(self.indent_lines(textwrap.dedent(usage), " ")) + return msg + + def format_description(self, description: str) -> str: + # 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 = f"{label}:\n{description}\n" + return description + else: + return "" + + def format_epilog(self, epilog: str) -> str: + # leave full control over epilog to us + if epilog: + return epilog + else: + return "" + + def indent_lines(self, text: str, indent: str) -> str: + 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. + + Also redact auth from url type options + """ + + def expand_default(self, option: optparse.Option) -> str: + default_values = None + if self.parser is not None: + assert isinstance(self.parser, ConfigOptionParser) + self.parser._update_defaults(self.parser.defaults) + assert option.dest is not None + default_values = self.parser.defaults.get(option.dest) + help_text = super().expand_default(option) + + if default_values and option.metavar == "URL": + if isinstance(default_values, str): + default_values = [default_values] + + # If its not a list, we should abort and just return the help text + if not isinstance(default_values, list): + default_values = [] + + for val in default_values: + help_text = help_text.replace(val, redact_auth_from_url(val)) + + return help_text + + +class CustomOptionParser(optparse.OptionParser): + def insert_option_group( + self, idx: int, *args: Any, **kwargs: Any + ) -> optparse.OptionGroup: + """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) -> List[optparse.Option]: + """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: Any, + name: str, + isolated: bool = False, + **kwargs: Any, + ) -> None: + self.name = name + self.config = Configuration(isolated) + + assert self.name + super().__init__(*args, **kwargs) + + def check_default(self, option: optparse.Option, key: str, val: Any) -> Any: + try: + return option.check_value(key, val) + except optparse.OptionValueError as exc: + print(f"An error occurred during configuration: {exc}") + sys.exit(3) + + def _get_ordered_configuration_items( + self, + ) -> Generator[Tuple[str, Any], None, None]: + # Configuration gives keys in an unordered manner. Order them. + override_order = ["global", self.name, ":env:"] + + # Pool the options into different groups + section_items: Dict[str, List[Tuple[str, Any]]] = { + 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: Dict[str, Any]) -> Dict[str, Any]: + """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 + + assert option.dest is not None + + if option.action in ("store_true", "store_false"): + try: + val = strtobool(val) + except ValueError: + self.error( + "{} is not a valid value for {} option, " # noqa + "please specify a boolean value like yes/no, " + "true/false or 1/0 instead.".format(val, key) + ) + elif option.action == "count": + with suppress(ValueError): + val = strtobool(val) + with suppress(ValueError): + val = int(val) + if not isinstance(val, int) or val < 0: + self.error( + "{} is not a valid value for {} option, " # noqa + "please instead specify either a non-negative integer " + "or a boolean value like yes/no or false/true " + "which is equivalent to 1/0.".format(val, key) + ) + elif option.action == "append": + val = val.split() + val = [self.check_default(option, key, v) for v in val] + elif option.action == "callback": + assert option.callback is not None + 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) -> optparse.Values: + """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(UNKNOWN_ERROR, str(err)) + + defaults = self._update_defaults(self.defaults.copy()) # ours + for option in self._get_all_options(): + assert option.dest is not None + default = defaults.get(option.dest) + if isinstance(default, str): + opt_str = option.get_opt_string() + defaults[option.dest] = option.check_value(opt_str, default) + return optparse.Values(defaults) + + def error(self, msg: str) -> None: + self.print_usage(sys.stderr) + self.exit(UNKNOWN_ERROR, f"{msg}\n") diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/progress_bars.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/progress_bars.py new file mode 100644 index 0000000..0ad1403 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/progress_bars.py @@ -0,0 +1,68 @@ +import functools +from typing import Callable, Generator, Iterable, Iterator, Optional, Tuple + +from pip._vendor.rich.progress import ( + BarColumn, + DownloadColumn, + FileSizeColumn, + Progress, + ProgressColumn, + SpinnerColumn, + TextColumn, + TimeElapsedColumn, + TimeRemainingColumn, + TransferSpeedColumn, +) + +from pip._internal.utils.logging import get_indentation + +DownloadProgressRenderer = Callable[[Iterable[bytes]], Iterator[bytes]] + + +def _rich_progress_bar( + iterable: Iterable[bytes], + *, + bar_type: str, + size: int, +) -> Generator[bytes, None, None]: + assert bar_type == "on", "This should only be used in the default mode." + + if not size: + total = float("inf") + columns: Tuple[ProgressColumn, ...] = ( + TextColumn("[progress.description]{task.description}"), + SpinnerColumn("line", speed=1.5), + FileSizeColumn(), + TransferSpeedColumn(), + TimeElapsedColumn(), + ) + else: + total = size + columns = ( + TextColumn("[progress.description]{task.description}"), + BarColumn(), + DownloadColumn(), + TransferSpeedColumn(), + TextColumn("eta"), + TimeRemainingColumn(), + ) + + progress = Progress(*columns, refresh_per_second=30) + task_id = progress.add_task(" " * (get_indentation() + 2), total=total) + with progress: + for chunk in iterable: + yield chunk + progress.update(task_id, advance=len(chunk)) + + +def get_download_progress_renderer( + *, bar_type: str, size: Optional[int] = None +) -> DownloadProgressRenderer: + """Get an object that can be used to render the download progress. + + Returns a callable, that takes an iterable to "wrap". + """ + if bar_type == "on": + return functools.partial(_rich_progress_bar, bar_type=bar_type, size=size) + else: + return iter # no-op, when passed an iterator diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/req_command.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/req_command.py new file mode 100644 index 0000000..1044809 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/req_command.py @@ -0,0 +1,502 @@ +"""Contains the Command base classes that depend on PipSession. + +The classes in this module are in a separate module so the commands not +needing download / PackageFinder capability don't unnecessarily import the +PackageFinder machinery and all its vendored dependencies, etc. +""" + +import logging +import os +import sys +from functools import partial +from optparse import Values +from typing import TYPE_CHECKING, Any, List, Optional, Tuple + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.command_context import CommandContextMixIn +from pip._internal.exceptions import CommandError, PreviousBuildDirError +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.network.session import PipSession +from pip._internal.operations.build.build_tracker import BuildTracker +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, + install_req_from_parsed_requirement, + install_req_from_req_string, +) +from pip._internal.req.req_file import parse_requirements +from pip._internal.req.req_install import InstallRequirement +from pip._internal.resolution.base import BaseResolver +from pip._internal.self_outdated_check import pip_self_version_check +from pip._internal.utils.temp_dir import ( + TempDirectory, + TempDirectoryTypeRegistry, + tempdir_kinds, +) +from pip._internal.utils.virtualenv import running_under_virtualenv + +if TYPE_CHECKING: + from ssl import SSLContext + +logger = logging.getLogger(__name__) + + +def _create_truststore_ssl_context() -> Optional["SSLContext"]: + if sys.version_info < (3, 10): + raise CommandError("The truststore feature is only available for Python 3.10+") + + try: + import ssl + except ImportError: + logger.warning("Disabling truststore since ssl support is missing") + return None + + try: + import truststore + except ImportError: + raise CommandError( + "To use the truststore feature, 'truststore' must be installed into " + "pip's current environment." + ) + + return truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + + +class SessionCommandMixin(CommandContextMixIn): + + """ + A class mixin for command classes needing _build_session(). + """ + + def __init__(self) -> None: + super().__init__() + self._session: Optional[PipSession] = None + + @classmethod + def _get_index_urls(cls, options: Values) -> Optional[List[str]]: + """Return a list of index urls from user-provided options.""" + index_urls = [] + if not getattr(options, "no_index", False): + url = getattr(options, "index_url", None) + if url: + index_urls.append(url) + urls = getattr(options, "extra_index_urls", None) + if urls: + index_urls.extend(urls) + # Return None rather than an empty list + return index_urls or None + + def get_default_session(self, options: Values) -> PipSession: + """Get a default-managed session.""" + if self._session is None: + self._session = self.enter_context(self._build_session(options)) + # there's no type annotation on requests.Session, so it's + # automatically ContextManager[Any] and self._session becomes Any, + # then https://github.com/python/mypy/issues/7696 kicks in + assert self._session is not None + return self._session + + def _build_session( + self, + options: Values, + retries: Optional[int] = None, + timeout: Optional[int] = None, + fallback_to_certifi: bool = False, + ) -> PipSession: + cache_dir = options.cache_dir + assert not cache_dir or os.path.isabs(cache_dir) + + if "truststore" in options.features_enabled: + try: + ssl_context = _create_truststore_ssl_context() + except Exception: + if not fallback_to_certifi: + raise + ssl_context = None + else: + ssl_context = None + + session = PipSession( + cache=os.path.join(cache_dir, "http") if cache_dir else None, + retries=retries if retries is not None else options.retries, + trusted_hosts=options.trusted_hosts, + index_urls=self._get_index_urls(options), + ssl_context=ssl_context, + ) + + # 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 + + +class IndexGroupCommand(Command, SessionCommandMixin): + + """ + Abstract base class for commands with the index_group options. + + This also corresponds to the commands that permit the pip version check. + """ + + def handle_pip_version_check(self, options: Values) -> None: + """ + Do the pip version check if not disabled. + + This overrides the default behavior of not doing the check. + """ + # Make sure the index_group options are present. + assert hasattr(options, "no_index") + + if options.disable_pip_version_check or options.no_index: + return + + # Otherwise, check if we're using the latest version of pip available. + session = self._build_session( + options, + retries=0, + timeout=min(5, options.timeout), + # This is set to ensure the function does not fail when truststore is + # specified in use-feature but cannot be loaded. This usually raises a + # CommandError and shows a nice user-facing error, but this function is not + # called in that try-except block. + fallback_to_certifi=True, + ) + with session: + pip_self_version_check(session, options) + + +KEEPABLE_TEMPDIR_TYPES = [ + tempdir_kinds.BUILD_ENV, + tempdir_kinds.EPHEM_WHEEL_CACHE, + tempdir_kinds.REQ_BUILD, +] + + +def warn_if_run_as_root() -> None: + """Output a warning for sudo users on Unix. + + In a virtual environment, sudo pip still writes to virtualenv. + On Windows, users may run pip as Administrator without issues. + This warning only applies to Unix root users outside of virtualenv. + """ + if running_under_virtualenv(): + return + if not hasattr(os, "getuid"): + return + # On Windows, there are no "system managed" Python packages. Installing as + # Administrator via pip is the correct way of updating system environments. + # + # We choose sys.platform over utils.compat.WINDOWS here to enable Mypy platform + # checks: https://mypy.readthedocs.io/en/stable/common_issues.html + if sys.platform == "win32" or sys.platform == "cygwin": + return + + if os.getuid() != 0: + return + + logger.warning( + "Running pip as the 'root' user can result in broken permissions and " + "conflicting behaviour with the system package manager. " + "It is recommended to use a virtual environment instead: " + "https://pip.pypa.io/warnings/venv" + ) + + +def with_cleanup(func: Any) -> Any: + """Decorator for common logic related to managing temporary + directories. + """ + + def configure_tempdir_registry(registry: TempDirectoryTypeRegistry) -> None: + for t in KEEPABLE_TEMPDIR_TYPES: + registry.set_delete(t, False) + + def wrapper( + self: RequirementCommand, options: Values, args: List[Any] + ) -> Optional[int]: + assert self.tempdir_registry is not None + if options.no_clean: + configure_tempdir_registry(self.tempdir_registry) + + try: + return func(self, options, args) + except PreviousBuildDirError: + # This kind of conflict can occur when the user passes an explicit + # build directory with a pre-existing folder. In that case we do + # not want to accidentally remove it. + configure_tempdir_registry(self.tempdir_registry) + raise + + return wrapper + + +class RequirementCommand(IndexGroupCommand): + def __init__(self, *args: Any, **kw: Any) -> None: + super().__init__(*args, **kw) + + self.cmd_opts.add_option(cmdoptions.no_clean()) + + @staticmethod + def determine_resolver_variant(options: Values) -> str: + """Determines which resolver should be used, based on the given options.""" + if "legacy-resolver" in options.deprecated_features_enabled: + return "legacy" + + return "2020-resolver" + + @classmethod + def make_requirement_preparer( + cls, + temp_build_dir: TempDirectory, + options: Values, + build_tracker: BuildTracker, + session: PipSession, + finder: PackageFinder, + use_user_site: bool, + download_dir: Optional[str] = None, + verbosity: int = 0, + ) -> RequirementPreparer: + """ + Create a RequirementPreparer instance for the given parameters. + """ + temp_build_dir_path = temp_build_dir.path + assert temp_build_dir_path is not None + + resolver_variant = cls.determine_resolver_variant(options) + if resolver_variant == "2020-resolver": + lazy_wheel = "fast-deps" in options.features_enabled + if lazy_wheel: + logger.warning( + "pip is using lazily downloaded wheels using HTTP " + "range requests to obtain dependency information. " + "This experimental feature is enabled through " + "--use-feature=fast-deps and it is not ready for " + "production." + ) + else: + lazy_wheel = False + if "fast-deps" in options.features_enabled: + logger.warning( + "fast-deps has no effect when used with the legacy resolver." + ) + + return RequirementPreparer( + build_dir=temp_build_dir_path, + src_dir=options.src_dir, + download_dir=download_dir, + build_isolation=options.build_isolation, + check_build_deps=options.check_build_deps, + build_tracker=build_tracker, + session=session, + progress_bar=options.progress_bar, + finder=finder, + require_hashes=options.require_hashes, + use_user_site=use_user_site, + lazy_wheel=lazy_wheel, + verbosity=verbosity, + ) + + @classmethod + def make_resolver( + cls, + preparer: RequirementPreparer, + finder: PackageFinder, + options: Values, + wheel_cache: Optional[WheelCache] = None, + use_user_site: bool = False, + ignore_installed: bool = True, + ignore_requires_python: bool = False, + force_reinstall: bool = False, + upgrade_strategy: str = "to-satisfy-only", + use_pep517: Optional[bool] = None, + py_version_info: Optional[Tuple[int, ...]] = None, + ) -> BaseResolver: + """ + Create a Resolver instance for the given parameters. + """ + make_install_req = partial( + install_req_from_req_string, + isolated=options.isolated_mode, + use_pep517=use_pep517, + config_settings=getattr(options, "config_settings", None), + ) + resolver_variant = cls.determine_resolver_variant(options) + # The long import name and duplicated invocation is needed to convince + # Mypy into correctly typechecking. Otherwise it would complain the + # "Resolver" class being redefined. + if resolver_variant == "2020-resolver": + import pip._internal.resolution.resolvelib.resolver + + return pip._internal.resolution.resolvelib.resolver.Resolver( + preparer=preparer, + finder=finder, + wheel_cache=wheel_cache, + make_install_req=make_install_req, + use_user_site=use_user_site, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + force_reinstall=force_reinstall, + upgrade_strategy=upgrade_strategy, + py_version_info=py_version_info, + ) + import pip._internal.resolution.legacy.resolver + + return pip._internal.resolution.legacy.resolver.Resolver( + preparer=preparer, + finder=finder, + wheel_cache=wheel_cache, + make_install_req=make_install_req, + use_user_site=use_user_site, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + force_reinstall=force_reinstall, + upgrade_strategy=upgrade_strategy, + py_version_info=py_version_info, + ) + + def get_requirements( + self, + args: List[str], + options: Values, + finder: PackageFinder, + session: PipSession, + ) -> List[InstallRequirement]: + """ + Parse command-line arguments into the corresponding requirements. + """ + requirements: List[InstallRequirement] = [] + for filename in options.constraints: + for parsed_req in parse_requirements( + filename, + constraint=True, + finder=finder, + options=options, + session=session, + ): + req_to_add = install_req_from_parsed_requirement( + parsed_req, + isolated=options.isolated_mode, + user_supplied=False, + ) + requirements.append(req_to_add) + + for req in args: + req_to_add = install_req_from_line( + req, + None, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + user_supplied=True, + config_settings=getattr(options, "config_settings", None), + ) + requirements.append(req_to_add) + + for req in options.editables: + req_to_add = install_req_from_editable( + req, + user_supplied=True, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + config_settings=getattr(options, "config_settings", None), + ) + requirements.append(req_to_add) + + # NOTE: options.require_hashes may be set if --require-hashes is True + for filename in options.requirements: + for parsed_req in parse_requirements( + filename, finder=finder, options=options, session=session + ): + req_to_add = install_req_from_parsed_requirement( + parsed_req, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + user_supplied=True, + ) + requirements.append(req_to_add) + + # If any requirement has hash options, enable hash checking. + if any(req.has_hash_options for req in requirements): + options.require_hashes = True + + if not (args or options.editables or options.requirements): + opts = {"name": self.name} + if options.find_links: + raise CommandError( + "You must give at least one requirement to {name} " + '(maybe you meant "pip {name} {links}"?)'.format( + **dict(opts, links=" ".join(options.find_links)) + ) + ) + else: + raise CommandError( + "You must give at least one requirement to {name} " + '(see "pip help {name}")'.format(**opts) + ) + + return requirements + + @staticmethod + def trace_basic_info(finder: PackageFinder) -> None: + """ + Trace basic information about the provided objects. + """ + # Display where finder is looking for packages + search_scope = finder.search_scope + locations = search_scope.get_formatted_locations() + if locations: + logger.info(locations) + + def _build_package_finder( + self, + options: Values, + session: PipSession, + target_python: Optional[TargetPython] = None, + ignore_requires_python: Optional[bool] = None, + ) -> PackageFinder: + """ + Create a package finder appropriate to this requirement command. + + :param ignore_requires_python: Whether to ignore incompatible + "Requires-Python" values in links. Defaults to False. + """ + link_collector = LinkCollector.create(session, options=options) + selection_prefs = SelectionPreferences( + allow_yanked=True, + format_control=options.format_control, + allow_all_prereleases=options.pre, + prefer_binary=options.prefer_binary, + ignore_requires_python=ignore_requires_python, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + target_python=target_python, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/spinners.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/spinners.py new file mode 100644 index 0000000..cf2b976 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/spinners.py @@ -0,0 +1,159 @@ +import contextlib +import itertools +import logging +import sys +import time +from typing import IO, Generator, Optional + +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.logging import get_indentation + +logger = logging.getLogger(__name__) + + +class SpinnerInterface: + def spin(self) -> None: + raise NotImplementedError() + + def finish(self, final_status: str) -> None: + raise NotImplementedError() + + +class InteractiveSpinner(SpinnerInterface): + def __init__( + self, + message: str, + file: Optional[IO[str]] = None, + spin_chars: str = "-\\|/", + # Empirically, 8 updates/second looks nice + min_update_interval_seconds: float = 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: str) -> None: + 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) -> None: + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._write(next(self._spin_cycle)) + + def finish(self, final_status: str) -> None: + 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(SpinnerInterface): + def __init__(self, message: str, min_update_interval_seconds: float = 60.0) -> None: + self._message = message + self._finished = False + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._update("started") + + def _update(self, status: str) -> None: + assert not self._finished + self._rate_limiter.reset() + logger.info("%s: %s", self._message, status) + + def spin(self) -> None: + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._update("still running...") + + def finish(self, final_status: str) -> None: + if self._finished: + return + self._update(f"finished with status '{final_status}'") + self._finished = True + + +class RateLimiter: + def __init__(self, min_update_interval_seconds: float) -> None: + self._min_update_interval_seconds = min_update_interval_seconds + self._last_update: float = 0 + + def ready(self) -> bool: + now = time.time() + delta = now - self._last_update + return delta >= self._min_update_interval_seconds + + def reset(self) -> None: + self._last_update = time.time() + + +@contextlib.contextmanager +def open_spinner(message: str) -> Generator[SpinnerInterface, None, None]: + # 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: SpinnerInterface = 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") + + +HIDE_CURSOR = "\x1b[?25l" +SHOW_CURSOR = "\x1b[?25h" + + +@contextlib.contextmanager +def hidden_cursor(file: IO[str]) -> Generator[None, None, None]: + # 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) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/cli/status_codes.py b/venv/lib/python3.11/site-packages/pip/_internal/cli/status_codes.py new file mode 100644 index 0000000..5e29502 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/cli/status_codes.py @@ -0,0 +1,6 @@ +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.11/site-packages/pip/_internal/commands/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/__init__.py new file mode 100644 index 0000000..858a410 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/__init__.py @@ -0,0 +1,132 @@ +""" +Package containing all pip commands +""" + +import importlib +from collections import namedtuple +from typing import Any, Dict, Optional + +from pip._internal.cli.base_command import Command + +CommandInfo = namedtuple("CommandInfo", "module_path, class_name, summary") + +# This dictionary does a bunch of heavy lifting for help output: +# - Enables avoiding additional (costly) imports for presenting `--help`. +# - The ordering matters for help display. +# +# Even though the module path starts with the same "pip._internal.commands" +# prefix, the full path makes testing easier (specifically when modifying +# `commands_dict` in test setup / teardown). +commands_dict: Dict[str, CommandInfo] = { + "install": CommandInfo( + "pip._internal.commands.install", + "InstallCommand", + "Install packages.", + ), + "download": CommandInfo( + "pip._internal.commands.download", + "DownloadCommand", + "Download packages.", + ), + "uninstall": CommandInfo( + "pip._internal.commands.uninstall", + "UninstallCommand", + "Uninstall packages.", + ), + "freeze": CommandInfo( + "pip._internal.commands.freeze", + "FreezeCommand", + "Output installed packages in requirements format.", + ), + "inspect": CommandInfo( + "pip._internal.commands.inspect", + "InspectCommand", + "Inspect the python environment.", + ), + "list": CommandInfo( + "pip._internal.commands.list", + "ListCommand", + "List installed packages.", + ), + "show": CommandInfo( + "pip._internal.commands.show", + "ShowCommand", + "Show information about installed packages.", + ), + "check": CommandInfo( + "pip._internal.commands.check", + "CheckCommand", + "Verify installed packages have compatible dependencies.", + ), + "config": CommandInfo( + "pip._internal.commands.configuration", + "ConfigurationCommand", + "Manage local and global configuration.", + ), + "search": CommandInfo( + "pip._internal.commands.search", + "SearchCommand", + "Search PyPI for packages.", + ), + "cache": CommandInfo( + "pip._internal.commands.cache", + "CacheCommand", + "Inspect and manage pip's wheel cache.", + ), + "index": CommandInfo( + "pip._internal.commands.index", + "IndexCommand", + "Inspect information available from package indexes.", + ), + "wheel": CommandInfo( + "pip._internal.commands.wheel", + "WheelCommand", + "Build wheels from your requirements.", + ), + "hash": CommandInfo( + "pip._internal.commands.hash", + "HashCommand", + "Compute hashes of package archives.", + ), + "completion": CommandInfo( + "pip._internal.commands.completion", + "CompletionCommand", + "A helper command used for command completion.", + ), + "debug": CommandInfo( + "pip._internal.commands.debug", + "DebugCommand", + "Show information useful for debugging.", + ), + "help": CommandInfo( + "pip._internal.commands.help", + "HelpCommand", + "Show help for commands.", + ), +} + + +def create_command(name: str, **kwargs: Any) -> Command: + """ + Create an instance of the Command class with the given name. + """ + module_path, class_name, summary = commands_dict[name] + module = importlib.import_module(module_path) + command_class = getattr(module, class_name) + command = command_class(name=name, summary=summary, **kwargs) + + return command + + +def get_similar_commands(name: str) -> Optional[str]: + """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 None diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bafd3d1ffff05d63b17728a37934fce9e73d6f9 GIT binary patch literal 4462 zcmaJ^&2QVt6(3R(MO&8S&wM!_Okz7x5=(JDnl{NMb?nW?@y1R!P0~8M5NORvVoZ_R zA!V->84!x1P>Z5#U<<^D9(-7&TLcAi?4f^zT^J}qU;zU?^`;>0Wlw!G6cyQuN>Ib$ z{C@L$Z{EC_q5d3=b|bis|NU+5TpXc)u^0aeH!AObB_i|^Jw_NUAS_@}7ZwC~26V9y zSO^HLEvN?zp@mRET969ig)nam>2jfKp-Vs_A^|Mn@GH=H4L|Q%=++RH0qe$HxEn`a z1ptMgcYPz^9*#wE49DBBUXJzQemu~I4RUMjE~^qHtZs1X z>?A&gPq$$s92>=B_)HsimSYKg4xewsE^urdCvmC`yU4K#d(}bD*h3^)`tC< zV?V*y@r^d@CdWR)xA5&Y?57-?#CPyi8#c|ckMUjnNgH;LV>9?Zp52cvM2JLsNOx8| z>`y8pQT*vmc*74!51u0-JWsl^5`OsW;6jYI&66HMZzo2Av)w0q|?Sf*Jzzkh=! zURMbs<9WwI^C9n=47c~OPxd7Tnk_AwQkD`@Cgo!t1U=Y|-sLo3YGS@*7fZI%aEIWg zA~Y$Kd|A>cDGnN+`$|IeOakxaGvuU`4Q?0MQ@v#T0!Iq?MW>j5)6{zHNa}lbZcB3=cvWQAE`Hl(X z!EW>sr}^rKy;tSo>cbh9BF+3^fl?tDodd;C2o!txYNLLNFgIbhV1C2U&sfSzo)B=E zkwIC55Pj8AnWJvc3?uoh?TkuK9LG z?vykgd+x%TVX~`ciSAiSke_+g%6H692D*`ZQ2MH;p#sa4K)P6YVku^}=`5QwZJBx7 zodJ?gSSplHc1#$b;`T93kM5fppH%WhFB0l+)=J5OErCrdXtUj$r>fTp!h^|TDc3PP z9Cdr98OgUW*0#{VLbjxH8@xjf&I}eH@S}5p0E7TR>FXZkx~x;Hw-A(Q!*MH(*~t=Q zhlDFFt*A6-xe_IIi5eN9c>p3LK|KP$cfWz+C9+$f3VMI?eGXqjYvNj9Eoe8ti4c0; z{CcX0uR!&6Q+X|9``>GzSP4}Ed%w2UBoS34ELKn@h=o6i72#Xq55iiw5{8pCP`=x( zz%@mQ3Q3?E-cDj<2+IVvoi^g&orKDYX6Jcx4l=_~*qD=CAR*EVVBQTkPRYNZM3A0m zEnQlnXi{6(7Tu^WpwuHo1gETxxO77sm`t+ z*?9VW^uSJZWb@f}bYdquQN8>9;PA%X&HLMfshz=8^??%`t`)XolbeIzt-u5Bzm0j% z>La`0PM!rTq5L#v6jukEYVxQaznbgLa3Kl!6mY4B?4aRa5U!i_9x0>L4iD= z*ICy=CU0p4*p{h3T^5}JXcd0eQz)uvH<;Mkd+$c#Utj;-_21t7{mtt1?$FrQ(AcK^ z*DwA#e)}Kex3|Y9cg82ThwkhQ-Koy)hKK4X5E^vi$2QcRxUwZHyYYdVP1$#EqSpo9)UQ!UCobtQYX2wN0ok*91@DVq;>|5v82B^Ol)lAm&H@l%%f zURVN_P2G4ptr~_2tBc8lNtTypUSogu3dO#3_x+n_4 zI%*a&68g4KuXj7>)YjhHL1SB;?_G3hYwx`qJ5+nVact}C{q5N7PHeUssrNq-5~34~ z)?Um3)uWto0EK$j zhu4Q4`J5vkapYsb=x2<6seX_%6cmcqmTF6me8!OvI`R!*#2F(l)lYK9ITVVu`jKey z<2+|vL7_-(wl?d?qmDe}$ftl2Wg1bbew8zB?PFYNVch17djbme)SlIzIr5kzA8_PJ zpv0I+OsdZaobwrQ8qOvi`M4ur1di|QBaid>dyY4t(=D7YJWh7MtyGJxoX08d=X}({ z`O@Q*_j8ghoEIJk{yOdr&Ny)V;Cw9dam@jzZ~grGc}IpDChHn-2H4mKr24$a`2}$H z#D|UDkIyeX&fP_I=HD2vl@U`|oNkuTr literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/cache.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/cache.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31b895b5345371b09222625ec1a48e809ddabb94 GIT binary patch literal 10561 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 O-8^KwZ{EX-@Bc5KD_e;G literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/completion.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/completion.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e13af29b2155e4e2ef5e77f5bcddd6344feaaf7e GIT binary patch literal 5474 zcmbUlOKcm*bxAHiqDYCN{89W-C$egjPM3`A!ht^$Y|C=$R+1G-X%N~1yW);0%F87) zJCtoo0(3ACAABj0!Ydd+lE(gxJR59yLxJ_78Jy~zUYr<~Tm+eS&n6O9nXFC&}0DBVw#iw*Aex*|h{6nP<6l@rwT#$!GFpMPH<CTU#3-H*LiA-DT=6MN^3)rSMRpbw8Kq=7M5=tHArg)5rQNoA zt!^_kXIJl@+D&nlNI!e4MhopVnq0`}i*^5_sNg2;5Ta8sm3pVi+eie=i7}#PG_+`x z3=Hf|V)__~v^jfL=8MQn<8nsRiIgFdw2L>7lB#!_ZXN|K+MT+g4s`3fs4e;=Lw5N% z%V=q$=hX}+H;K6|T?W@_+Uv&9T!T5rY(0J&uDl?Vfk?7debE6TrEI?ZC1fCrL1uwO zBC}NI(iAG-YR$FJ-JF%@$L{21O^0L>B@!r@NLr4QUs$9lLtE13u%MUa)U84u+-+C- zn5LSXrP4J{vwQ4nbDtU?YxAaXw!*Pl zBpe*mmd}~dSCaDa4F7&2sMZMo|tee9_mrN)JuKuS=5S)b}V=l zAFTTo5o!*<(KBk53IJjLES|nZpo+*-hGhiK5S}CRloWKTkcC`hx|VbxF~nvK52L)m zw8<3YbL;T|gmupAt1$aeSQVD6rHy7hYgTb6PQ|5&3dsM=`xwspw0>T}@hVl4bN8Y63i@7X~ zFDY@T?v`kZ>+xK6If;>9$j6tdwj5V8^YQ#$zL?Wa$A*UDdWKUe59@N8>TxJY;>nE0 zDbr*%UJDc*fm-1m%ilFR8?x!eqodXuKp0oCrsZ*vO8*Zu>q6NVco5w2ku4u72lkZ% zp>i)Nhx^Js@P1ec3LWpi61*M$@35(uO-SenHb{EwBnM5B_&bn%k6jMccj-5GIn#ER zFbdYW<2$kCJMqNvJc_cfeYFuYYm>4qq?w4Q2?3@@yk8KfU9|4`tF zUwhhTkjJq4w2mUIxfI7ef!DwEV1Cv07(C#qm3^)VyC}p}$C4$%s%u$bUvdnB+OuTw zvdLm)sX89^&72gcJ(@T0WGxTxX-wJWdbUe$`zhAkythHg_ch@5`>eW~WqT&tWwY~k z2>d{U-;BWf8l$CP9p31wL(RS7Zoj|c+30S@tHZ0Jeebu8cFPs@7Nseup}9`@B5lch zxdn4Noq^yc)oayq0@z-JKUCpsJl#Vf4VTTFcMY!ARYwtKe(8MRgXHUgbS3>>h&l~t z>_dje(lH~!m)v3K-uN%5P%&T<7%4_u*ah=@P#*!Hj;bS@Bhai1rM}D6_sI_* z?b~qw`iM2bjsk)K5*Q+WkAeiA>PNjPMX_&ediwhGIr4d~K(Ym$lf10!WM$1?6bW3} z(U1|YeIH-DKAD^uoxV0TJ7b8q=v^HcS$ITEm@3H5=WRFU^eAKf8e~!yqtRy2+9&lrh77n?c$%#HCzDi+b20Kw$mY`~Xos zrWtf2X!f;qt+NxbrXw#bu4<|^T%f$-{JBmO_3Sr@+TIkwXi+3JaG_MF`AIeFhx zHWm8kGcS(+VdPIEpv}#`%iDdI?+44B;RnNyu9i9n;C;FO=vT>?p@E&y@vYGDjoZIn zdp^GzI=dY@yA!&&6}tHM#lJ57ZK)KxxEcCnJM_sbm-9f^cLFr`um0B~1jE0I?}Q^; z;mC8(i}csoQaG|19^Vd+Zw4l|0~4jd#LM18_b0y%bU*m%PTT!KfqM|S2fHfRzy|vc-=8$?A9XSev&m?u;Y%j*!zr0G z{K;fCrxa9#1IgqU1zD}Fc#}ybmxAfuOj^S#fzdAt8R+qTW9V@VGaWP=850SP=)@=PH7|`H7>;efZItiU8e{ zeNR%)-ZR1Hy4mg7RJX^Squp!>1^56O!w0uT^`b}N4G+JYhZ?=2W7fSKOR1R{ zR6AH6nKv%O~BSM z_KNG>6~8a&tAzalU*&)wpac7ReU(d&GY6a%0h*E!t}w?(j>8q9wRz-yg|pwaSu*YO EKh~UGt^fc4 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..262a1e28c9ed5d94cdcd6eea71126ef706640095 GIT binary patch literal 14903 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/debug.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/debug.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85e83a6e1175e010b1e377880801b3be3527cfb8 GIT binary patch literal 12011 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/download.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/download.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10f0de99f583e8408c3937c88b46f5d212acec0b GIT binary patch literal 7818 zcmcIpPiz~f$5 zpbyq^cXnpJKl9Buv)}w?`1@EaBEWU}ug4pI=o5thVTHyOsAs;Wkok?E2#QA)vd-I+ z^+4IHdJDd+&%^3`s=pA(26*1D1`DBVi01<;DulCPo)4;#LRYq{5Y0w;Ii$u4-PvxQ zM`}+Yo{jT-SnVw&vWY@6o8;w)+E?h$_7?`S1BJotAg}9EhYG{lVUOSyu&|YC7>!4s zdIaGaJkFIpLM|FYt0#zTWYlhrcTA?IJo>ju0d zxq_mVjJ#H4wTXiK0855UHn1U;c8pD}nDNrYf8bx1^8^=g(OA+71-You=)=6RDdkiw z7t1A(4Bh+b($bxK_aNKLgxAV>RgnxL=N@1JI!0IUhMe2EhmCUSlbw&97MC`0?!jG6 z!E`jovXaV~B%N_V`%=R)AC2ImUM5&l@`QF5HByk({9`PYWMdO-A$bE!TG=R-S)XF} zaiO#f2ImZo?Bwds;IB}<@bxNWeglqW!<_Xho~%#tX8lT734G?y25?Xb;*b);2#1GV zdBuk#>p=y5=6?!x&)oWKm*NLEM`+Ko_OPgGvQqbwyaK}%5#eeO#1c3}-oU!JPPD>& zgcB#lPj)`}v3LReDr&|iCSty*;72e{Vp-1@H$>9(zo?gRF2A0~M4ze)|7_`=SR&dM zbXP1B)vaIAaF*K$~&R~3VBy{L>X8$ z6^ppIohMq6O*2Mb!){AhaXKrHG#o05Io%xq7@9@#`x{+Q+lGrx>^HL4M~RL2w98C`1U?;7T+O-h z0cI(SfGj3_{l_4i^c7*tox1z2d~U7Lh>TFP_oJ7pNQ6;6VVz!5v{!^qBZfh zv??COtN0YZ5>SH1j~ZGb)&fFxE+zCFJ%w-infpC^gtn;M-{5SG=AALQO=6%SVYsmu zS{!WDf}Wv9{;3yQhR3;fJ*~9;CLU@qz*`AdJnd3^MQ}BKuT;xg)G4nB3{vCB&sDBfyCBj^iNl^rtnL$&XMr4KOz!t*R9@>=yAPuM&wCXh4f=F~4 zDr%B~OFHe|P_;E#ZGc-E2ErQji0sfVt*Gua3b7Kw>zFi(KAq&K59(-lU9Yq$>zf$b zVMvHzU6I-PU&G5U04l1!Dr{mtRjACENVN*&BkwGcC4lKyKj?1^Bb z=;yH`BpxF1cPT49Yo@PT>FXw%x6phQ&3BOJ%=EmKo;T4A3*D%q8y)1UX8M|yzGk8s z3(Zu~Ob2=1OfOjJ1ry!0(9J5k*+IT$re~Q2XwE`&RW#Q@{sGgjo9P=?`i6-XEVNKX z3vJTBJ#D5hTj|Rtx?-U#RdnUwptAnH(e58`%A%Qm&q}{%qT3d_T}8Lsnzqt2W_r#_ z&zb1Dg|1i8^$zkIyTzQDUbNDSCc0&zTUB(cL;8I)y=l%jRg?(YPJ$ zv!i2nblmP8v-^f$^bLIRW4rgATCWgJ9}D4dOTMIIN%!qAxQQjwTKXoecpA1&L5)l2c83%G%d5DS^w_yn{MBs`*42^ zvs0j<`c8-XVLPwqTo?~DcSC?+DS(3yPsJlK8GdaDP;$2gZA*x&1A;wpJaf5VadIJ| z0PvF>_#hH&11Fwmhow}(>|ul!l$=)W0ly}sRqZBIVg>~CGSs!|MpbE`==W< zt?x?gHH)MBW33#Ge5=k*na|&^M9Ep>c7vBeFD0_yGWtzQCE70C?gRK{mz%r*wYpaC zXZ++k)X|U*XaYbDjkT@uYjWLJ<50Tg^PQ%-ntZ9(l$pk3^5Ck9sSXl?S zLT(vh%QEeOb3@=}=EHKouEBxefP-=B2Uu8<9&Tc+>W@?R%DEi$biJ&qJ1vJz;<)~; zN6eh1@j4U&sA9;fiWM5hO5Tvy;DpNoe09|doTdU`0_c~|F=R^E2hMv!SeTr~P%;)NzVbcLMix3{Jwp1Ar+F{Kz0IKoPcKq6jb?KYIn2gW^`4N!U)6 zuxLfm^2a}4UHSO-G9Biatc6W-UHAdxjMeD?7{PUpAG;kS)$k>av%_2rcuUXcxMOJu zI?M&we5b)}ezr`bI$%y6PAC;=ZHM}caskspUEao$nlCftP%f2lQ6VhWQU8{f zFA^4{Gu`A}csWBm&vI;rkee*wW4;7A8iwgq$NGLys*?{{EoxXrdseo5&s|AH~7xqFH5+OG_#&W~2P{Kl)gYzy- zdNnqAuwhNTZ;mZlV@r(Z)C-jO)vT2So(mSbP(>GBCI*fY7Y`E`4`$88RV#6IFZ61N z6^5=_Ls$1=c5nYt@5Ev6gxxp7?$mkv>_zMB?OIq!Tsjs42|x^x>;-Gx!tm(P(8a@{ zi~pEdFeetRiA8hhmNj&1FZQZ0Z4aKd2G3WM=k4ARdo*1O`THZs0wmwCWG`Hc3h}<9 zo^yvi=l1U(%zpL3Up_Q@maU%UJ^u?dZby^9y8n-nIcwzhvCqq(4J0+5Afa#QD0%rX zdD$L0SGN%COb*+_qBT5er^f7o)E7m7MSWKQ7WIKFBzvefzy-$-ljC;(DB}ky-ZgG& z#y)k{I(4NM6Z(F1EQFXCBp{XmV045=57FqC>n0kv(0CP%zf7GuN?klmT|9XA@BV7) zqM5pDrS9(aycEyuMeO7mD>;3XoH;Y&Q(Te5o+R?k?q=e#|b`r=V_ zaKgFm_|Q@Oox}J$UnR}>H7kCt8oy@8Q%CXiVLZKm_O}Vy3a!BG5z zz}w-onXu)bCoHn+6-b`AznV7^KsA9SLxI>kPwv#Z#{=^mk2*E_nyX*-JemPSU z*!!UGAoqOO$$zCg@7DC#2O^*Srz6x#a13KMWlqzOs%>n*{|ICf$`k=)b#{lWUo>d! zlo*ZouNU@jQ||t4DyQb10DS7T`l;q$T26=^eVqk9eh91luPnmQCHE#h{W>GWeWR=c zFB}Z;&_pk_GifDE_$FJQ;%l0dHvakIF`IT60F6&E1L~^^57sf&|a1rz+h2zS|aNs_pm7aB6SR3a7rDGsEYs@VO_!TJSxuXRs!G ScUm2|aLh^Hd=CS6^uGYWi7X-j literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5969fe7aaac1f9df49e44a80e52dfa08208d08c GIT binary patch literal 4163 zcmbVP-ESMm5#J+^LJGVPKJ2SiUo7G=3nG}NO=-(e#@1+s?xA^Eku^#i}m%!Xb7-7XhWzj|)r4}hi z6v0QGXiY7vl2@HrEnbdGKISB9T3M5P+)36_<&@+TPP(R-b;)Z^rZ!R@QP2j$$v-RQ z(FnSPaOxw3(?r{gBD4>`;3X`HQQoz{b}pAuR%2nt9l<*UZNCDmy1!eVPHbKnZi3v_cq+sLG87sM|g@6ui5Zi*I|{wwt&WaA5Y!_<}MJ`f3c!#|M?jLgQ6+UkEzho34Ob>|(YU%{Gb2bTNXELc zMvNwd1gte3&u)Mw&#nQet|vN#1T<`_X!k`dc>jnwCTATi}W185@=~RE~-RLt?ub1)Fw|ujzL(4>jX~ zX88J;uh0A0MSo)6pUnA_b6qu(J<-jgk-1L;aKG9dryTxaRE_R<@jr8nBznT~em zP&+eZ`-Goe0Ci&Z+`n>1e!G6}>Yv{G!+W3JXfM3lS$MUbJJrdZ>Sp9Jnpg%%SCa98 zWqjT6v)>eEWzTezQaC1rfpjI&2ZV)9XWC0Eou!qwcDAFPJ=D%Vf_SDMY9}6OC+;iv zzkBfgw)SR6d-JgWK7r69p6Hciu3EIpDq*dGF@cY=>i!P)=PvTXT7!@mVj_C34&930 zR5rs=Hg_|+JE&8vDIYJy;pa6#-B32eNP1`qIIH3U9f<)-j@q%U=#4Bs~{pbw7SQoW=7ajpa zRUB!-=kxa7Iqn^MCIz)9dL^IW>4DP2QxdmL7vPd71tbP+OyCIPn$29tf?FD(0RSO2 zK-*I#m7m~IxSUcE0J;c-$D0ida`ao`L+c?73xFwC*&vncW(ZF`prK+*>7*b>1QGsn zRpM8szpPnv;jU+hktkgKcpUD2P|o1COaWi0*s6Sto`i-L1t|&gIuNcpcAYSBF2r5d zpx+jqQQEAxvcu>CT|b2}_75OC=(ExBPtLYS7dxYiw^e^M*BM>vA|?3^fS6xj{?+9_ zYHfX~qc0umOOMjyo%FmIJlPw(m*~vA($@1GJ%6a@Ki9@PTK@itwsyLsoj%k~e?B?q z&n$Lkmi_6YAK&tG3m-fF`0U5a{?w7q)JZ=(j={jze=LuXD{b>sF1JCQq3n znoURWx@mq01-UnpFiq@MpgY!NaKYzk$E}+1ZwRq!j4p#BDsqyFs~T*BM|l*WoW2F0 ze?@XV8C@z4sU+fLGY7~{_}7i7F|CUP(Ur{X&c#RLD?69F>gm`@7Y&mQWimE>@AWQ% z=KkdU%E7E;|HfqVLJ}AvY{+NnIcT^BSQV5wVLp$0+YPu51#V=aA{E1mRIE65a8{3g zslT`e|F@XEl10U(o_~c9+)}(I12MQc$z#bEhc&qkc^!j)8H+*HlgFRW4NEmW+hIjm z4ALOTE|E|{WG@R&?5>RVQ|)`fZl0s7&?mr_{S!zxswj$&Qakd`NArinuaBk=hu=r& rmBZoJN2d>m->=v6DE-4j`R-`l_^P5zchOhV-&}euN4|K$xODq}&`t|G literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/hash.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/hash.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9000ceb8fda840695ee93ed93e62df4252dc08e4 GIT binary patch literal 3364 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/index.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/index.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d19a8f718fb6ada2445bfbc8a2459330d9f7a964 GIT binary patch literal 7799 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..abbdc4f83e223dd195e5105faaa916314b69f750 GIT binary patch literal 4452 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%0DCQu|e217X*E^8$?f@Ol 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 N$34$&<1h;O{{y<&(_{bu literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/list.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/list.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19778e20764e39def6ebe4a7efe48ad230860523 GIT binary patch literal 17513 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 S5@a!RU>!C9*-rv0+x`y*09@q& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/show.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9b9a5593bcb24ddbe0a2e4f901d0e0391ab2bf0 GIT binary patch literal 11301 zcmb_CTWlNGl{4g!9FoI__>e?BX&iEYJp8%whMP~^mR(wK?MQks!WhYw|j zvSWh6%0SREfp@E>4lFEEEVnQcB{2|Vu|V^&SQOg^*pDqRV@zRU00G7>g6;k+XgCGD z`Py^t@HMjRc8k5dJaZrCzRo@O-gC~qpSoNQ3S8emJzVgIDC$2jQg>`E@Mwsps9O|I z@pPJsrsk6AR6$5&0SW51 zjps6%WR{PZG|S}KvuDm~wsWtIk58UE2PxiTNlBQ1I>prN64s-2EC~4oFU%*G()omt zy^<1h*^H3QLrvUOF_jk*xuyK#Qhu&Z4E$Pakw?cMa0_N3PV-dU#M5yzZ;CU#Id0({ zycI@n`Ia?D6s8xm;#3 zol0i&;Y>1>4qp2MmjBb=LWp)DzcbP5Z}xl46YMH91FE$yQ?{jkzSG7e(v~;IMNU zJ^_T3G)IyrA!Ix2Vp5a@QS-wT3Su4+AUUxh=9U(L^%zM=&r3+P@OKwumvR{)cA1aC zq+Ax}@=`39xssTL8DCnAT>+krrBk!9#cTOXx$J0kWF#g5+YZ+`BDR=Xj3rW8SX{7b zV!#BrI;5Bc>=j+Sra7Cvk_sIyY#43H=z^X|uK`%0DlB)yb)OC2W5X5BTj7G0w$6&b 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 BIg$VX literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..151f78a1dfacf7117e8fdf40d84fa949ce9ad25c GIT binary patch literal 9958 zcmcIqOKclSdTzd(FYzT&5+zGbTN;OwC5}9{B+Ifqwq(zG{925?F@`f6rp+!%l$&f$ zbyFTG(!$sb0v#M=lQl3tEp*s84(x-Edr0ot#zSWR()TU{w)~vaqtZN$BUIe4|3f9(nRBN)gxc~Y#jF`CvlQZ<}&8D zEn{P8d&UmmcG*#IW}G%!=8#Sd#n?FN^M{2xtTOWBC~uSL0xRERmRBtJw zvbW25S;}fy%-umaf8l%tc~7kTj9+qsuY4q6dc^Ek{AX~q zPk`q+eSb{3dd?%GpQ4%)Ozom-!ch;Fj~UOittH&D*jTK zZ}EemmQXIgoJV*;n4Fw^O^XTK)(Bjhm(lk%_+$b>KkGSFfWFsY8VhAC|8N6Y$%(Sn zg#H-5ug!dYhEdsRt1@w8`0?T5wVbv3!1U$eLsy)ye+R#dFS#vl&6?A@t@W&2$tKw) zhvd|pRu;Ertyz-msr!)|ei`sFAKQTd81MrYss6{ zmHLD|Z&X*y#&1+A+s~=8Z&a$^9RC}Z8h9&GgKtG@*ISVqdMi@HZ$)b4tw@c&DXEf2 z;sGo8B>&UEBUrPZSnJkLUYlZXN~gAUwEL|{?RisDr699j*VE7=*h!vPyU9{>9@RqH;6&sT!@wKg5_TJ9+ z5=WW9wN3lP-A(_*1j9}f6eD|Cl)+^Oq&KgaNR#EN6hvK3cf=zAXGQ;^<>IPoB+Nw;wb?BTNg3$)Y}s0Dw0c7m7+2Mm@&V+ zLA*sJTaWrwz~=~vLm6G%99>e1M>WAL67tI?el_tQ)nOeVz65>Y0k9%*i#f_*@F7Ux zAqX~I6B9rXHb1^p%*ka50SrPD7y*Y-0Ua{1ypCk0M0pPFM5X*^QaHcS80Rs8!cC

    EzT52|{^GGHenjvjq?WmH2Zo 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/cache.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/cache.py new file mode 100644 index 0000000..c5f0330 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/cache.py @@ -0,0 +1,223 @@ +import os +import textwrap +from optparse import Values +from typing import Any, List + +import pip._internal.utils.filesystem as filesystem +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.exceptions import CommandError, PipError +from pip._internal.utils.logging import getLogger + +logger = getLogger(__name__) + + +class CacheCommand(Command): + """ + Inspect and manage pip's wheel cache. + + Subcommands: + + - dir: Show the cache directory. + - info: Show information about the cache. + - list: List filenames of packages stored in the cache. + - remove: Remove one or more package from the cache. + - purge: Remove all items from the cache. + + ```` can be a glob expression or a package name. + """ + + ignore_require_venv = True + usage = """ + %prog dir + %prog info + %prog list [] [--format=[human, abspath]] + %prog remove + %prog purge + """ + + def add_options(self) -> None: + + self.cmd_opts.add_option( + "--format", + action="store", + dest="list_format", + default="human", + choices=("human", "abspath"), + help="Select the output format among: human (default) or abspath", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + handlers = { + "dir": self.get_cache_dir, + "info": self.get_cache_info, + "list": self.list_cache_items, + "remove": self.remove_cache_items, + "purge": self.purge_cache, + } + + if not options.cache_dir: + logger.error("pip cache commands can not function since cache is disabled.") + return ERROR + + # Determine action + if not args or args[0] not in handlers: + logger.error( + "Need an action (%s) to perform.", + ", ".join(sorted(handlers)), + ) + return ERROR + + action = args[0] + + # 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 get_cache_dir(self, options: Values, args: List[Any]) -> None: + if args: + raise CommandError("Too many arguments") + + logger.info(options.cache_dir) + + def get_cache_info(self, options: Values, args: List[Any]) -> None: + if args: + raise CommandError("Too many arguments") + + num_http_files = len(self._find_http_files(options)) + num_packages = len(self._find_wheels(options, "*")) + + http_cache_location = self._cache_dir(options, "http") + wheels_cache_location = self._cache_dir(options, "wheels") + http_cache_size = filesystem.format_directory_size(http_cache_location) + wheels_cache_size = filesystem.format_directory_size(wheels_cache_location) + + message = ( + textwrap.dedent( + """ + Package index page cache location: {http_cache_location} + Package index page cache size: {http_cache_size} + Number of HTTP files: {num_http_files} + Locally built wheels location: {wheels_cache_location} + Locally built wheels size: {wheels_cache_size} + Number of locally built wheels: {package_count} + """ + ) + .format( + http_cache_location=http_cache_location, + http_cache_size=http_cache_size, + num_http_files=num_http_files, + wheels_cache_location=wheels_cache_location, + package_count=num_packages, + wheels_cache_size=wheels_cache_size, + ) + .strip() + ) + + logger.info(message) + + def list_cache_items(self, options: Values, args: List[Any]) -> None: + if len(args) > 1: + raise CommandError("Too many arguments") + + if args: + pattern = args[0] + else: + pattern = "*" + + files = self._find_wheels(options, pattern) + if options.list_format == "human": + self.format_for_human(files) + else: + self.format_for_abspath(files) + + def format_for_human(self, files: List[str]) -> None: + if not files: + logger.info("No locally built wheels cached.") + return + + results = [] + for filename in files: + wheel = os.path.basename(filename) + size = filesystem.format_file_size(filename) + results.append(f" - {wheel} ({size})") + logger.info("Cache contents:\n") + logger.info("\n".join(sorted(results))) + + def format_for_abspath(self, files: List[str]) -> None: + if not files: + return + + results = [] + for filename in files: + results.append(filename) + + logger.info("\n".join(sorted(results))) + + def remove_cache_items(self, options: Values, args: List[Any]) -> None: + if len(args) > 1: + raise CommandError("Too many arguments") + + if not args: + raise CommandError("Please provide a pattern") + + files = self._find_wheels(options, args[0]) + + no_matching_msg = "No matching packages" + if args[0] == "*": + # Only fetch http files if no specific pattern given + files += self._find_http_files(options) + else: + # Add the pattern to the log message + no_matching_msg += ' for pattern "{}"'.format(args[0]) + + if not files: + logger.warning(no_matching_msg) + + for filename in files: + os.unlink(filename) + logger.verbose("Removed %s", filename) + logger.info("Files removed: %s", len(files)) + + def purge_cache(self, options: Values, args: List[Any]) -> None: + if args: + raise CommandError("Too many arguments") + + return self.remove_cache_items(options, ["*"]) + + def _cache_dir(self, options: Values, subdir: str) -> str: + return os.path.join(options.cache_dir, subdir) + + def _find_http_files(self, options: Values) -> List[str]: + http_dir = self._cache_dir(options, "http") + return filesystem.find_files(http_dir, "*") + + def _find_wheels(self, options: Values, pattern: str) -> List[str]: + wheel_dir = self._cache_dir(options, "wheels") + + # The wheel filename format, as specified in PEP 427, is: + # {distribution}-{version}(-{build})?-{python}-{abi}-{platform}.whl + # + # Additionally, non-alphanumeric values in the distribution are + # normalized to underscores (_), meaning hyphens can never occur + # before `-{version}`. + # + # Given that information: + # - If the pattern we're given contains a hyphen (-), the user is + # providing at least the version. Thus, we can just append `*.whl` + # to match the rest of it. + # - If the pattern we're given doesn't contain a hyphen (-), the + # user is only providing the name. Thus, we append `-*.whl` to + # match the hyphen before the version, followed by anything else. + # + # PEP 427: https://www.python.org/dev/peps/pep-0427/ + pattern = pattern + ("*.whl" if "-" in pattern else "-*.whl") + + return filesystem.find_files(wheel_dir, pattern) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/check.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/check.py new file mode 100644 index 0000000..3864220 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/check.py @@ -0,0 +1,53 @@ +import logging +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.operations.check import ( + check_package_set, + create_package_set_from_installed, +) +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class CheckCommand(Command): + """Verify installed packages have compatible dependencies.""" + + usage = """ + %prog [options]""" + + def run(self, options: Values, args: List[str]) -> int: + + package_set, parsing_probs = 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]: + write_output( + "%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]: + write_output( + "%s %s has requirement %s, but you have %s %s.", + project_name, + version, + req, + dep_name, + dep_version, + ) + + if missing or conflicting or parsing_probs: + return ERROR + else: + write_output("No broken requirements found.") + return SUCCESS diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/completion.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/completion.py new file mode 100644 index 0000000..deaa308 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/completion.py @@ -0,0 +1,126 @@ +import sys +import textwrap +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.utils.misc import get_prog + +BASE_COMPLETION = """ +# pip {shell} completion start{script}# pip {shell} completion end +""" + +COMPLETION_SCRIPTS = { + "bash": """ + _pip_completion() + {{ + COMPREPLY=( $( COMP_WORDS="${{COMP_WORDS[*]}}" \\ + COMP_CWORD=$COMP_CWORD \\ + PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) ) + }} + complete -o default -F _pip_completion {prog} + """, + "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] 2>/dev/null )) + }} + compctl -K _pip_completion {prog} + """, + "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} + """, + "powershell": """ + if ((Test-Path Function:\\TabExpansion) -and -not ` + (Test-Path Function:\\_pip_completeBackup)) {{ + Rename-Item Function:\\TabExpansion _pip_completeBackup + }} + function TabExpansion($line, $lastWord) {{ + $lastBlock = [regex]::Split($line, '[|;]')[-1].TrimStart() + if ($lastBlock.StartsWith("{prog} ")) {{ + $Env:COMP_WORDS=$lastBlock + $Env:COMP_CWORD=$lastBlock.Split().Length - 1 + $Env:PIP_AUTO_COMPLETE=1 + (& {prog}).Split() + Remove-Item Env:COMP_WORDS + Remove-Item Env:COMP_CWORD + Remove-Item Env:PIP_AUTO_COMPLETE + }} + elseif (Test-Path Function:\\_pip_completeBackup) {{ + # Fall back on existing tab expansion + _pip_completeBackup $line $lastWord + }} + }} + """, +} + + +class CompletionCommand(Command): + """A helper command to be used for command completion.""" + + ignore_require_venv = True + + def add_options(self) -> None: + self.cmd_opts.add_option( + "--bash", + "-b", + action="store_const", + const="bash", + dest="shell", + help="Emit completion code for bash", + ) + self.cmd_opts.add_option( + "--zsh", + "-z", + action="store_const", + const="zsh", + dest="shell", + help="Emit completion code for zsh", + ) + self.cmd_opts.add_option( + "--fish", + "-f", + action="store_const", + const="fish", + dest="shell", + help="Emit completion code for fish", + ) + self.cmd_opts.add_option( + "--powershell", + "-p", + action="store_const", + const="powershell", + dest="shell", + help="Emit completion code for powershell", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + """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, "").format(prog=get_prog()) + ) + print(BASE_COMPLETION.format(script=script, shell=options.shell)) + return SUCCESS + else: + sys.stderr.write( + "ERROR: You must pass {}\n".format(" or ".join(shell_options)) + ) + return SUCCESS diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/configuration.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/configuration.py new file mode 100644 index 0000000..84b134e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/configuration.py @@ -0,0 +1,282 @@ +import logging +import os +import subprocess +from optparse import Values +from typing import Any, List, Optional + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.configuration import ( + Configuration, + Kind, + get_configuration_files, + kinds, +) +from pip._internal.exceptions import PipError +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import get_prog, write_output + +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 command.option + - set: Set the command.option=value + - unset: Unset the value associated with command.option + - debug: List the configuration files and values defined under them + + Configuration keys should be dot separated command and option name, + with the special prefix "global" affecting any command. For example, + "pip config set global.index-url https://example.org/" would configure + the index url for all commands, but "pip config set download.timeout 10" + would configure a 10 second timeout only for "pip download" commands. + + If none of --user, --global and --site are passed, a virtual + environment configuration file is used if one is active and the file + exists. Otherwise, all modifications happen to the user file by + default. + """ + + ignore_require_venv = True + usage = """ + %prog [] list + %prog [] [--editor ] edit + + %prog [] get command.option + %prog [] set command.option value + %prog [] unset command.option + %prog [] debug + """ + + def add_options(self) -> 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( + "--site", + dest="site_file", + action="store_true", + default=False, + help="Use the current environment configuration file only", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + handlers = { + "list": self.list_values, + "edit": self.open_in_editor, + "get": self.get_name, + "set": self.set_name_value, + "unset": self.unset_name, + "debug": self.list_config_values, + } + + # Determine action + if not args or args[0] not in handlers: + logger.error( + "Need an action (%s) to perform.", + ", ".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: Values, need_value: bool) -> Optional[Kind]: + file_options = [ + key + for key, value in ( + (kinds.USER, options.user_file), + (kinds.GLOBAL, options.global_file), + (kinds.SITE, options.site_file), + ) + if value + ] + + if not file_options: + if not need_value: + return None + # Default to user, unless there's a site file. + elif any( + os.path.exists(site_config_file) + for site_config_file in get_configuration_files()[kinds.SITE] + ): + return kinds.SITE + else: + return kinds.USER + elif len(file_options) == 1: + return file_options[0] + + raise PipError( + "Need exactly one file to operate upon " + "(--user, --site, --global) to perform." + ) + + def list_values(self, options: Values, args: List[str]) -> None: + self._get_n_args(args, "list", n=0) + + for key, value in sorted(self.configuration.items()): + write_output("%s=%r", key, value) + + def get_name(self, options: Values, args: List[str]) -> None: + key = self._get_n_args(args, "get [name]", n=1) + value = self.configuration.get_value(key) + + write_output("%s", value) + + def set_name_value(self, options: Values, args: List[str]) -> None: + 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: Values, args: List[str]) -> None: + key = self._get_n_args(args, "unset [name]", n=1) + self.configuration.unset_value(key) + + self._save_configuration() + + def list_config_values(self, options: Values, args: List[str]) -> None: + """List config key-value pairs across different config files""" + self._get_n_args(args, "debug", n=0) + + self.print_env_var_values() + # Iterate over config files and print if they exist, and the + # key-value pairs present in them if they do + for variant, files in sorted(self.configuration.iter_config_files()): + write_output("%s:", variant) + for fname in files: + with indent_log(): + file_exists = os.path.exists(fname) + write_output("%s, exists: %r", fname, file_exists) + if file_exists: + self.print_config_file_values(variant) + + def print_config_file_values(self, variant: Kind) -> None: + """Get key-value pairs from the file of a variant""" + for name, value in self.configuration.get_values_in_config(variant).items(): + with indent_log(): + write_output("%s: %s", name, value) + + def print_env_var_values(self) -> None: + """Get key-values pairs present as environment variables""" + write_output("%s:", "env_var") + with indent_log(): + for key, value in sorted(self.configuration.get_environ_vars()): + env_var = f"PIP_{key.upper()}" + write_output("%s=%r", env_var, value) + + def open_in_editor(self, options: Values, args: List[str]) -> None: + editor = self._determine_editor(options) + + fname = self.configuration.get_file_to_edit() + if fname is None: + raise PipError("Could not determine appropriate file.") + elif '"' in fname: + # This shouldn't happen, unless we see a username like that. + # If that happens, we'd appreciate a pull request fixing this. + raise PipError( + f'Can not open an editor for a file name containing "\n{fname}' + ) + + try: + subprocess.check_call(f'{editor} "{fname}"', shell=True) + except FileNotFoundError as e: + if not e.filename: + e.filename = editor + raise + except subprocess.CalledProcessError as e: + raise PipError( + "Editor Subprocess exited with exit code {}".format(e.returncode) + ) + + def _get_n_args(self, args: List[str], example: str, n: int) -> Any: + """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) -> None: + # We successfully ran a modifying command. Need to save the + # configuration. + try: + self.configuration.save() + except Exception: + logger.exception( + "Unable to save configuration. Please report this as a bug." + ) + raise PipError("Internal Error.") + + def _determine_editor(self, options: Values) -> str: + 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.11/site-packages/pip/_internal/commands/debug.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/debug.py new file mode 100644 index 0000000..2a3e7d2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/debug.py @@ -0,0 +1,199 @@ +import importlib.resources +import locale +import logging +import os +import sys +from optparse import Values +from types import ModuleType +from typing import Any, Dict, List, Optional + +import pip._vendor +from pip._vendor.certifi import where +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.configuration import Configuration +from pip._internal.metadata import get_environment +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import get_pip_version + +logger = logging.getLogger(__name__) + + +def show_value(name: str, value: Any) -> None: + logger.info("%s: %s", name, value) + + +def show_sys_implementation() -> None: + logger.info("sys.implementation:") + implementation_name = sys.implementation.name + with indent_log(): + show_value("name", implementation_name) + + +def create_vendor_txt_map() -> Dict[str, str]: + with importlib.resources.open_text("pip._vendor", "vendor.txt") as f: + # Purge non version specifying lines. + # Also, remove any space prefix or suffixes (including comments). + lines = [ + line.strip().split(" ", 1)[0] for line in f.readlines() if "==" in line + ] + + # Transform into "module" -> version dict. + return dict(line.split("==", 1) for line in lines) + + +def get_module_from_module_name(module_name: str) -> ModuleType: + # Module name can be uppercase in vendor.txt for some reason... + module_name = module_name.lower().replace("-", "_") + # PATCH: setuptools is actually only pkg_resources. + if module_name == "setuptools": + module_name = "pkg_resources" + + __import__(f"pip._vendor.{module_name}", globals(), locals(), level=0) + return getattr(pip._vendor, module_name) + + +def get_vendor_version_from_module(module_name: str) -> Optional[str]: + module = get_module_from_module_name(module_name) + version = getattr(module, "__version__", None) + + if not version: + # Try to find version in debundled module info. + assert module.__file__ is not None + env = get_environment([os.path.dirname(module.__file__)]) + dist = env.get_distribution(module_name) + if dist: + version = str(dist.version) + + return version + + +def show_actual_vendor_versions(vendor_txt_versions: Dict[str, str]) -> None: + """Log the actual version and print extra info if there is + a conflict or if the actual version could not be imported. + """ + for module_name, expected_version in vendor_txt_versions.items(): + extra_message = "" + actual_version = get_vendor_version_from_module(module_name) + if not actual_version: + extra_message = ( + " (Unable to locate actual module version, using" + " vendor.txt specified version)" + ) + actual_version = expected_version + elif parse_version(actual_version) != parse_version(expected_version): + extra_message = ( + " (CONFLICT: vendor.txt suggests version should" + " be {})".format(expected_version) + ) + logger.info("%s==%s%s", module_name, actual_version, extra_message) + + +def show_vendor_versions() -> None: + logger.info("vendored library versions:") + + vendor_txt_versions = create_vendor_txt_map() + with indent_log(): + show_actual_vendor_versions(vendor_txt_versions) + + +def show_tags(options: Values) -> None: + tag_limit = 10 + + target_python = make_target_python(options) + tags = target_python.get_tags() + + # Display the target options that were explicitly provided. + formatted_target = target_python.format_given() + suffix = "" + if formatted_target: + suffix = f" (target: {formatted_target})" + + msg = "Compatible tags: {}{}".format(len(tags), suffix) + logger.info(msg) + + if options.verbose < 1 and len(tags) > tag_limit: + tags_limited = True + tags = tags[:tag_limit] + else: + tags_limited = False + + with indent_log(): + for tag in tags: + logger.info(str(tag)) + + if tags_limited: + msg = ( + "...\n[First {tag_limit} tags shown. Pass --verbose to show all.]" + ).format(tag_limit=tag_limit) + logger.info(msg) + + +def ca_bundle_info(config: Configuration) -> str: + levels = set() + for key, _ in config.items(): + levels.add(key.split(".")[0]) + + if not levels: + return "Not specified" + + levels_that_override_global = ["install", "wheel", "download"] + global_overriding_level = [ + level for level in levels if level in levels_that_override_global + ] + if not global_overriding_level: + return "global" + + if "global" in levels: + levels.remove("global") + return ", ".join(levels) + + +class DebugCommand(Command): + """ + Display debug information. + """ + + usage = """ + %prog """ + ignore_require_venv = True + + def add_options(self) -> None: + cmdoptions.add_target_python_options(self.cmd_opts) + self.parser.insert_option_group(0, self.cmd_opts) + self.parser.config.load() + + def run(self, options: Values, args: List[str]) -> int: + logger.warning( + "This command is only meant for debugging. " + "Do not use this with automation for parsing and getting these " + "details, since the output and options of this command may " + "change without notice." + ) + show_value("pip version", get_pip_version()) + show_value("sys.version", sys.version) + show_value("sys.executable", sys.executable) + show_value("sys.getdefaultencoding", sys.getdefaultencoding()) + show_value("sys.getfilesystemencoding", sys.getfilesystemencoding()) + show_value( + "locale.getpreferredencoding", + locale.getpreferredencoding(), + ) + show_value("sys.platform", sys.platform) + show_sys_implementation() + + show_value("'cert' config value", ca_bundle_info(self.parser.config)) + show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE")) + show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE")) + show_value("pip._vendor.certifi.where()", where()) + show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED) + + show_vendor_versions() + + show_tags(options) + + return SUCCESS diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/download.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/download.py new file mode 100644 index 0000000..4132e08 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/download.py @@ -0,0 +1,149 @@ +import logging +import os +from optparse import Values +from typing import List + +from pip._internal.cli import cmdoptions +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.req_command import RequirementCommand, with_cleanup +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.operations.build.build_tracker import get_build_tracker +from pip._internal.req.req_install import ( + LegacySetupPyOptionsCheckMode, + check_legacy_setup_py_options, +) +from pip._internal.utils.misc import ensure_dir, normalize_path, write_output +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. + """ + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] ... + %prog [options] ... + %prog [options] ...""" + + def add_options(self) -> None: + self.cmd_opts.add_option(cmdoptions.constraints()) + self.cmd_opts.add_option(cmdoptions.requirements()) + self.cmd_opts.add_option(cmdoptions.no_deps()) + self.cmd_opts.add_option(cmdoptions.global_options()) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + self.cmd_opts.add_option(cmdoptions.prefer_binary()) + self.cmd_opts.add_option(cmdoptions.src()) + self.cmd_opts.add_option(cmdoptions.pre()) + self.cmd_opts.add_option(cmdoptions.require_hashes()) + self.cmd_opts.add_option(cmdoptions.progress_bar()) + self.cmd_opts.add_option(cmdoptions.no_build_isolation()) + self.cmd_opts.add_option(cmdoptions.use_pep517()) + self.cmd_opts.add_option(cmdoptions.no_use_pep517()) + self.cmd_opts.add_option(cmdoptions.check_build_deps()) + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + + self.cmd_opts.add_option( + "-d", + "--dest", + "--destination-dir", + "--destination-directory", + dest="download_dir", + metavar="dir", + default=os.curdir, + help="Download packages into

    .", + ) + + cmdoptions.add_target_python_options(self.cmd_opts) + + 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, self.cmd_opts) + + @with_cleanup + def run(self, options: Values, args: List[str]) -> int: + + 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 = [] + + cmdoptions.check_dist_restriction(options) + + options.download_dir = normalize_path(options.download_dir) + ensure_dir(options.download_dir) + + session = self.get_default_session(options) + + target_python = make_target_python(options) + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + + build_tracker = self.enter_context(get_build_tracker()) + + directory = TempDirectory( + delete=not options.no_clean, + kind="download", + globally_managed=True, + ) + + reqs = self.get_requirements(args, options, finder, session) + check_legacy_setup_py_options( + options, reqs, LegacySetupPyOptionsCheckMode.DOWNLOAD + ) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + build_tracker=build_tracker, + session=session, + finder=finder, + download_dir=options.download_dir, + use_user_site=False, + verbosity=self.verbosity, + ) + + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + options=options, + ignore_requires_python=options.ignore_requires_python, + use_pep517=options.use_pep517, + py_version_info=options.python_version, + ) + + self.trace_basic_info(finder) + + requirement_set = resolver.resolve(reqs, check_supported_wheels=True) + + downloaded: List[str] = [] + for req in requirement_set.requirements.values(): + if req.satisfied_by is None: + assert req.name is not None + preparer.save_linked_requirement(req) + downloaded.append(req.name) + if downloaded: + write_output("Successfully downloaded %s", " ".join(downloaded)) + + return SUCCESS diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/freeze.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/freeze.py new file mode 100644 index 0000000..6e9cc76 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/freeze.py @@ -0,0 +1,97 @@ +import sys +from optparse import Values +from typing import List + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.operations.freeze import freeze +from pip._internal.utils.compat import stdlib_pkgs + +DEV_PKGS = {"pip", "setuptools", "distribute", "wheel", "pkg-resources"} + + +class FreezeCommand(Command): + """ + Output installed packages in requirements format. + + packages are listed in a case-insensitive sorted order. + """ + + usage = """ + %prog [options]""" + log_streams = ("ext://sys.stderr", "ext://sys.stderr") + + def add_options(self) -> None: + 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( + "-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(cmdoptions.list_path()) + self.cmd_opts.add_option( + "--all", + dest="freeze_all", + action="store_true", + help=( + "Do not skip these packages in the output:" + " {}".format(", ".join(DEV_PKGS)) + ), + ) + self.cmd_opts.add_option( + "--exclude-editable", + dest="exclude_editable", + action="store_true", + help="Exclude editable package from output.", + ) + self.cmd_opts.add_option(cmdoptions.list_exclude()) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + skip = set(stdlib_pkgs) + if not options.freeze_all: + skip.update(DEV_PKGS) + + if options.excludes: + skip.update(options.excludes) + + cmdoptions.check_list_path_option(options) + + for line in freeze( + requirement=options.requirements, + local_only=options.local, + user_only=options.user, + paths=options.path, + isolated=options.isolated_mode, + skip=skip, + exclude_editable=options.exclude_editable, + ): + sys.stdout.write(line + "\n") + return SUCCESS diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/hash.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/hash.py new file mode 100644 index 0000000..042dac8 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/hash.py @@ -0,0 +1,59 @@ +import hashlib +import logging +import sys +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES +from pip._internal.utils.misc import read_chunks, write_output + +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. + """ + + usage = "%prog [options] ..." + ignore_require_venv = True + + def add_options(self) -> None: + 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 {}".format( + ", ".join(STRONG_HASHES) + ), + ) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + if not args: + self.parser.print_usage(sys.stderr) + return ERROR + + algorithm = options.algorithm + for path in args: + write_output( + "%s:\n--hash=%s:%s", path, algorithm, _hash_of_file(path, algorithm) + ) + return SUCCESS + + +def _hash_of_file(path: str, algorithm: str) -> str: + """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.11/site-packages/pip/_internal/commands/help.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/help.py new file mode 100644 index 0000000..6206631 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/help.py @@ -0,0 +1,41 @@ +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError + + +class HelpCommand(Command): + """Show help for commands""" + + usage = """ + %prog """ + ignore_require_venv = True + + def run(self, options: Values, args: List[str]) -> int: + from pip._internal.commands import ( + commands_dict, + create_command, + 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 = [f'unknown command "{cmd_name}"'] + if guess: + msg.append(f'maybe you meant "{guess}"') + + raise CommandError(" - ".join(msg)) + + command = create_command(cmd_name) + command.parser.print_help() + + return SUCCESS diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/index.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/index.py new file mode 100644 index 0000000..7267eff --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/index.py @@ -0,0 +1,139 @@ +import logging +from optparse import Values +from typing import Any, Iterable, List, Optional, Union + +from pip._vendor.packaging.version import LegacyVersion, Version + +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import IndexGroupCommand +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.commands.search import print_dist_installation_info +from pip._internal.exceptions import CommandError, DistributionNotFound, PipError +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.network.session import PipSession +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class IndexCommand(IndexGroupCommand): + """ + Inspect information available from package indexes. + """ + + ignore_require_venv = True + usage = """ + %prog versions + """ + + def add_options(self) -> None: + cmdoptions.add_target_python_options(self.cmd_opts) + + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + self.cmd_opts.add_option(cmdoptions.pre()) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + + 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, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + handlers = { + "versions": self.get_available_package_versions, + } + + logger.warning( + "pip index is currently an experimental command. " + "It may be removed/changed in a future release " + "without prior warning." + ) + + # Determine action + if not args or args[0] not in handlers: + logger.error( + "Need an action (%s) to perform.", + ", ".join(sorted(handlers)), + ) + return ERROR + + action = args[0] + + # 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 _build_package_finder( + self, + options: Values, + session: PipSession, + target_python: Optional[TargetPython] = None, + ignore_requires_python: Optional[bool] = None, + ) -> PackageFinder: + """ + Create a package finder appropriate to the index command. + """ + link_collector = LinkCollector.create(session, options=options) + + # Pass allow_yanked=False to ignore yanked versions. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=options.pre, + ignore_requires_python=ignore_requires_python, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + target_python=target_python, + ) + + def get_available_package_versions(self, options: Values, args: List[Any]) -> None: + if len(args) != 1: + raise CommandError("You need to specify exactly one argument") + + target_python = cmdoptions.make_target_python(options) + query = args[0] + + with self._build_session(options) as session: + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + + versions: Iterable[Union[LegacyVersion, Version]] = ( + candidate.version for candidate in finder.find_all_candidates(query) + ) + + if not options.pre: + # Remove prereleases + versions = ( + version for version in versions if not version.is_prerelease + ) + versions = set(versions) + + if not versions: + raise DistributionNotFound( + "No matching distribution found for {}".format(query) + ) + + formatted_versions = [str(ver) for ver in sorted(versions, reverse=True)] + latest = formatted_versions[0] + + write_output("{} ({})".format(query, latest)) + write_output("Available versions: {}".format(", ".join(formatted_versions))) + print_dist_installation_info(query, latest) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/inspect.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/inspect.py new file mode 100644 index 0000000..27c8fa3 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/inspect.py @@ -0,0 +1,92 @@ +import logging +from optparse import Values +from typing import Any, Dict, List + +from pip._vendor.packaging.markers import default_environment +from pip._vendor.rich import print_json + +from pip import __version__ +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.metadata import BaseDistribution, get_environment +from pip._internal.utils.compat import stdlib_pkgs +from pip._internal.utils.urls import path_to_url + +logger = logging.getLogger(__name__) + + +class InspectCommand(Command): + """ + Inspect the content of a Python environment and produce a report in JSON format. + """ + + ignore_require_venv = True + usage = """ + %prog [options]""" + + def add_options(self) -> None: + self.cmd_opts.add_option( + "--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.", + ) + self.cmd_opts.add_option(cmdoptions.list_path()) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + cmdoptions.check_list_path_option(options) + dists = get_environment(options.path).iter_installed_distributions( + local_only=options.local, + user_only=options.user, + skip=set(stdlib_pkgs), + ) + output = { + "version": "1", + "pip_version": __version__, + "installed": [self._dist_to_dict(dist) for dist in dists], + "environment": default_environment(), + # TODO tags? scheme? + } + print_json(data=output) + return SUCCESS + + def _dist_to_dict(self, dist: BaseDistribution) -> Dict[str, Any]: + res: Dict[str, Any] = { + "metadata": dist.metadata_dict, + "metadata_location": dist.info_location, + } + # direct_url. Note that we don't have download_info (as in the installation + # report) since it is not recorded in installed metadata. + direct_url = dist.direct_url + if direct_url is not None: + res["direct_url"] = direct_url.to_dict() + else: + # Emulate direct_url for legacy editable installs. + editable_project_location = dist.editable_project_location + if editable_project_location is not None: + res["direct_url"] = { + "url": path_to_url(editable_project_location), + "dir_info": { + "editable": True, + }, + } + # installer + installer = dist.installer + if dist.installer: + res["installer"] = installer + # requested + if dist.installed_with_dist_info: + res["requested"] = dist.requested + return res diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/install.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/install.py new file mode 100644 index 0000000..b20aedd --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/install.py @@ -0,0 +1,873 @@ +import errno +import json +import operator +import os +import shutil +import site +from optparse import SUPPRESS_HELP, Values +from typing import Iterable, List, Optional + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.rich import print_json + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.req_command import ( + RequirementCommand, + warn_if_run_as_root, + with_cleanup, +) +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.exceptions import CommandError, InstallationError +from pip._internal.locations import get_scheme +from pip._internal.metadata import get_environment +from pip._internal.models.format_control import FormatControl +from pip._internal.models.installation_report import InstallationReport +from pip._internal.operations.build.build_tracker import get_build_tracker +from pip._internal.operations.check import ConflictDetails, check_install_conflicts +from pip._internal.req import install_given_reqs +from pip._internal.req.req_install import ( + InstallRequirement, + LegacySetupPyOptionsCheckMode, + check_legacy_setup_py_options, +) +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.deprecation import ( + LegacyInstallReasonFailedBdistWheel, + deprecated, +) +from pip._internal.utils.distutils_args import parse_distutils_args +from pip._internal.utils.filesystem import test_writable_dir +from pip._internal.utils.logging import getLogger +from pip._internal.utils.misc import ( + check_externally_managed, + ensure_dir, + get_pip_version, + protect_pip_from_modification_on_windows, + write_output, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.virtualenv import ( + running_under_virtualenv, + virtualenv_no_global, +) +from pip._internal.wheel_builder import ( + BdistWheelAllowedPredicate, + build, + should_build_for_install_command, +) + +logger = getLogger(__name__) + + +def get_check_bdist_wheel_allowed( + format_control: FormatControl, +) -> BdistWheelAllowedPredicate: + def check_binary_allowed(req: InstallRequirement) -> bool: + canonical_name = canonicalize_name(req.name or "") + allowed_formats = format_control.get_allowed_formats(canonical_name) + return "binary" in allowed_formats + + return check_binary_allowed + + +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. + """ + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + def add_options(self) -> None: + self.cmd_opts.add_option(cmdoptions.requirements()) + self.cmd_opts.add_option(cmdoptions.constraints()) + self.cmd_opts.add_option(cmdoptions.no_deps()) + self.cmd_opts.add_option(cmdoptions.pre()) + + self.cmd_opts.add_option(cmdoptions.editable()) + self.cmd_opts.add_option( + "--dry-run", + action="store_true", + dest="dry_run", + default=False, + help=( + "Don't actually install anything, just print what would be. " + "Can be used in combination with --ignore-installed " + "to 'resolve' the requirements." + ), + ) + self.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." + ), + ) + cmdoptions.add_target_python_options(self.cmd_opts) + + self.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.)" + ), + ) + self.cmd_opts.add_option( + "--no-user", + dest="use_user_site", + action="store_false", + help=SUPPRESS_HELP, + ) + self.cmd_opts.add_option( + "--root", + dest="root_path", + metavar="dir", + default=None, + help="Install everything relative to this alternate root directory.", + ) + self.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" + ), + ) + + self.cmd_opts.add_option(cmdoptions.src()) + + self.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." + ), + ) + + self.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)." + ), + ) + + self.cmd_opts.add_option( + "--force-reinstall", + dest="force_reinstall", + action="store_true", + help="Reinstall all packages even if they are already up-to-date.", + ) + + self.cmd_opts.add_option( + "-I", + "--ignore-installed", + dest="ignore_installed", + action="store_true", + help=( + "Ignore the installed packages, overwriting them. " + "This can break your system if the existing package " + "is of a different version or was installed " + "with a different package manager!" + ), + ) + + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + self.cmd_opts.add_option(cmdoptions.no_build_isolation()) + self.cmd_opts.add_option(cmdoptions.use_pep517()) + self.cmd_opts.add_option(cmdoptions.no_use_pep517()) + self.cmd_opts.add_option(cmdoptions.check_build_deps()) + self.cmd_opts.add_option(cmdoptions.override_externally_managed()) + + self.cmd_opts.add_option(cmdoptions.config_settings()) + self.cmd_opts.add_option(cmdoptions.install_options()) + self.cmd_opts.add_option(cmdoptions.global_options()) + + self.cmd_opts.add_option( + "--compile", + action="store_true", + dest="compile", + default=True, + help="Compile Python source files to bytecode", + ) + + self.cmd_opts.add_option( + "--no-compile", + action="store_false", + dest="compile", + help="Do not compile Python source files to bytecode", + ) + + self.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", + ) + self.cmd_opts.add_option( + "--no-warn-conflicts", + action="store_false", + dest="warn_about_conflicts", + default=True, + help="Do not warn about broken dependencies", + ) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + self.cmd_opts.add_option(cmdoptions.prefer_binary()) + self.cmd_opts.add_option(cmdoptions.require_hashes()) + self.cmd_opts.add_option(cmdoptions.progress_bar()) + self.cmd_opts.add_option(cmdoptions.root_user_action()) + + 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, self.cmd_opts) + + self.cmd_opts.add_option( + "--report", + dest="json_report_file", + metavar="file", + default=None, + help=( + "Generate a JSON file describing what pip did to install " + "the provided requirements. " + "Can be used in combination with --dry-run and --ignore-installed " + "to 'resolve' the requirements. " + "When - is used as file name it writes to stdout. " + "When writing to stdout, please combine with the --quiet option " + "to avoid mixing pip logging output with JSON output." + ), + ) + + @with_cleanup + def run(self, options: Values, args: List[str]) -> int: + if options.use_user_site and options.target_dir is not None: + raise CommandError("Can not combine '--user' and '--target'") + + # Check whether the environment we're installing into is externally + # managed, as specified in PEP 668. Specifying --root, --target, or + # --prefix disables the check, since there's no reliable way to locate + # the EXTERNALLY-MANAGED file for those cases. An exception is also + # made specifically for "--dry-run --report" for convenience. + installing_into_current_environment = ( + not (options.dry_run and options.json_report_file) + and options.root_path is None + and options.target_dir is None + and options.prefix_path is None + ) + if ( + installing_into_current_environment + and not options.override_externally_managed + ): + check_externally_managed() + + upgrade_strategy = "to-satisfy-only" + if options.upgrade: + upgrade_strategy = options.upgrade_strategy + + cmdoptions.check_dist_restriction(options, check_target=True) + + install_options = options.install_options or [] + + logger.verbose("Using %s", get_pip_version()) + options.use_user_site = decide_user_install( + options.use_user_site, + prefix_path=options.prefix_path, + target_dir=options.target_dir, + root_path=options.root_path, + isolated_mode=options.isolated_mode, + ) + + target_temp_dir: Optional[TempDirectory] = None + target_temp_dir_path: Optional[str] = None + if options.target_dir: + options.ignore_installed = True + options.target_dir = os.path.abspath(options.target_dir) + if ( + # fmt: off + os.path.exists(options.target_dir) and + not os.path.isdir(options.target_dir) + # fmt: on + ): + 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 = TempDirectory(kind="target") + target_temp_dir_path = target_temp_dir.path + self.enter_context(target_temp_dir) + + global_options = options.global_options or [] + + session = self.get_default_session(options) + + target_python = make_target_python(options) + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + build_tracker = self.enter_context(get_build_tracker()) + + directory = TempDirectory( + delete=not options.no_clean, + kind="install", + globally_managed=True, + ) + + try: + reqs = self.get_requirements(args, options, finder, session) + check_legacy_setup_py_options( + options, reqs, LegacySetupPyOptionsCheckMode.INSTALL + ) + + if "no-binary-enable-wheel-cache" in options.features_enabled: + # TODO: remove format_control from WheelCache when the deprecation cycle + # is over + wheel_cache = WheelCache(options.cache_dir) + else: + if options.format_control.no_binary: + deprecated( + reason=( + "--no-binary currently disables reading from " + "the cache of locally built wheels. In the future " + "--no-binary will not influence the wheel cache." + ), + replacement="to use the --no-cache-dir option", + feature_flag="no-binary-enable-wheel-cache", + issue=11453, + gone_in="23.1", + ) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + + # Only when installing is it permitted to use PEP 660. + # In other circumstances (pip wheel, pip download) we generate + # regular (i.e. non editable) metadata and wheels. + for req in reqs: + req.permit_editable_wheels = True + + reject_location_related_install_options(reqs, options.install_options) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + build_tracker=build_tracker, + session=session, + finder=finder, + use_user_site=options.use_user_site, + verbosity=self.verbosity, + ) + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + options=options, + wheel_cache=wheel_cache, + use_user_site=options.use_user_site, + ignore_installed=options.ignore_installed, + ignore_requires_python=options.ignore_requires_python, + force_reinstall=options.force_reinstall, + upgrade_strategy=upgrade_strategy, + use_pep517=options.use_pep517, + ) + + self.trace_basic_info(finder) + + requirement_set = resolver.resolve( + reqs, check_supported_wheels=not options.target_dir + ) + + if options.json_report_file: + report = InstallationReport(requirement_set.requirements_to_install) + if options.json_report_file == "-": + print_json(data=report.to_dict()) + else: + with open(options.json_report_file, "w", encoding="utf-8") as f: + json.dump(report.to_dict(), f, indent=2, ensure_ascii=False) + + if options.dry_run: + would_install_items = sorted( + (r.metadata["name"], r.metadata["version"]) + for r in requirement_set.requirements_to_install + ) + if would_install_items: + write_output( + "Would install %s", + " ".join("-".join(item) for item in would_install_items), + ) + return SUCCESS + + try: + pip_req = requirement_set.get_requirement("pip") + except KeyError: + modifying_pip = False + else: + # If we're not replacing an already installed pip, + # we're not modifying it. + modifying_pip = pip_req.satisfied_by is None + protect_pip_from_modification_on_windows(modifying_pip=modifying_pip) + + check_bdist_wheel_allowed = get_check_bdist_wheel_allowed( + finder.format_control + ) + + reqs_to_build = [ + r + for r in requirement_set.requirements.values() + if should_build_for_install_command(r, check_bdist_wheel_allowed) + ] + + _, build_failures = build( + reqs_to_build, + wheel_cache=wheel_cache, + verify=True, + build_options=[], + global_options=global_options, + ) + + # If we're using PEP 517, we cannot do a legacy setup.py install + # so we fail here. + pep517_build_failure_names: List[str] = [ + r.name for r in build_failures if r.use_pep517 # type: ignore + ] + if pep517_build_failure_names: + raise InstallationError( + "Could not build wheels for {}, which is required to " + "install pyproject.toml-based projects".format( + ", ".join(pep517_build_failure_names) + ) + ) + + # For now, we just warn about failures building legacy + # requirements, as we'll fall through to a setup.py install for + # those. + for r in build_failures: + if not r.use_pep517: + r.legacy_install_reason = LegacyInstallReasonFailedBdistWheel + + to_install = resolver.get_installation_order(requirement_set) + + # Check for conflicts in the package set we're installing. + conflicts: Optional[ConflictDetails] = None + should_warn_about_conflicts = ( + not options.ignore_dependencies and options.warn_about_conflicts + ) + if should_warn_about_conflicts: + conflicts = self._determine_conflicts(to_install) + + # Don't warn about script install locations if + # --target or --prefix has been specified + warn_script_location = options.warn_script_location + if options.target_dir or options.prefix_path: + 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, + warn_script_location=warn_script_location, + use_user_site=options.use_user_site, + pycompile=options.compile, + ) + + 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, + ) + env = get_environment(lib_locations) + + installed.sort(key=operator.attrgetter("name")) + items = [] + for result in installed: + item = result.name + try: + installed_dist = env.get_distribution(item) + if installed_dist is not None: + item = f"{item}-{installed_dist.version}" + except Exception: + pass + items.append(item) + + if conflicts is not None: + self._warn_about_conflicts( + conflicts, + resolver_variant=self.determine_resolver_variant(options), + ) + + installed_desc = " ".join(items) + if installed_desc: + write_output( + "Successfully installed %s", + installed_desc, + ) + except OSError as error: + show_traceback = self.verbosity >= 1 + + message = create_os_error_message( + error, + show_traceback, + options.use_user_site, + ) + logger.error(message, exc_info=show_traceback) # noqa + + return ERROR + + if options.target_dir: + assert target_temp_dir + self._handle_target_dir( + options.target_dir, target_temp_dir, options.upgrade + ) + if options.root_user_action == "warn": + warn_if_run_as_root() + return SUCCESS + + def _handle_target_dir( + self, target_dir: str, target_temp_dir: TempDirectory, upgrade: bool + ) -> None: + ensure_dir(target_dir) + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + lib_dir_list = [] + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + scheme = get_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 _determine_conflicts( + self, to_install: List[InstallRequirement] + ) -> Optional[ConflictDetails]: + try: + return check_install_conflicts(to_install) + except Exception: + logger.exception( + "Error while checking for conflicts. Please file an issue on " + "pip's issue tracker: https://github.com/pypa/pip/issues/new" + ) + return None + + def _warn_about_conflicts( + self, conflict_details: ConflictDetails, resolver_variant: str + ) -> None: + package_set, (missing, conflicting) = conflict_details + if not missing and not conflicting: + return + + parts: List[str] = [] + if resolver_variant == "legacy": + parts.append( + "pip's legacy dependency resolver does not consider dependency " + "conflicts when selecting packages. This behaviour is the " + "source of the following dependency conflicts." + ) + else: + assert resolver_variant == "2020-resolver" + parts.append( + "pip's dependency resolver does not currently take into account " + "all the packages that are installed. This behaviour is the " + "source of the following dependency conflicts." + ) + + # NOTE: There is some duplication here, with commands/check.py + for project_name in missing: + version = package_set[project_name][0] + for dependency in missing[project_name]: + message = ( + "{name} {version} requires {requirement}, " + "which is not installed." + ).format( + name=project_name, + version=version, + requirement=dependency[1], + ) + parts.append(message) + + for project_name in conflicting: + version = package_set[project_name][0] + for dep_name, dep_version, req in conflicting[project_name]: + message = ( + "{name} {version} requires {requirement}, but {you} have " + "{dep_name} {dep_version} which is incompatible." + ).format( + name=project_name, + version=version, + requirement=req, + dep_name=dep_name, + dep_version=dep_version, + you=("you" if resolver_variant == "2020-resolver" else "you'll"), + ) + parts.append(message) + + logger.critical("\n".join(parts)) + + +def get_lib_location_guesses( + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, +) -> List[str]: + scheme = get_scheme( + "", + user=user, + home=home, + root=root, + isolated=isolated, + prefix=prefix, + ) + return [scheme.purelib, scheme.platlib] + + +def site_packages_writable(root: Optional[str], isolated: bool) -> bool: + return all( + test_writable_dir(d) + for d in set(get_lib_location_guesses(root=root, isolated=isolated)) + ) + + +def decide_user_install( + use_user_site: Optional[bool], + prefix_path: Optional[str] = None, + target_dir: Optional[str] = None, + root_path: Optional[str] = None, + isolated_mode: bool = False, +) -> bool: + """Determine whether to do a user install based on the input options. + + If use_user_site is False, no additional checks are done. + If use_user_site is True, it is checked for compatibility with other + options. + If use_user_site is None, the default behaviour depends on the environment, + which is provided by the other arguments. + """ + # In some cases (config from tox), use_user_site can be set to an integer + # rather than a bool, which 'use_user_site is False' wouldn't catch. + if (use_user_site is not None) and (not use_user_site): + logger.debug("Non-user install by explicit request") + return False + + if use_user_site: + if 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." + ) + logger.debug("User install by explicit request") + return True + + # If we are here, user installs have not been explicitly requested/avoided + assert use_user_site is None + + # user install incompatible with --prefix/--target + if prefix_path or target_dir: + logger.debug("Non-user install due to --prefix or --target option") + return False + + # If user installs are not enabled, choose a non-user install + if not site.ENABLE_USER_SITE: + logger.debug("Non-user install because user site-packages disabled") + return False + + # If we have permission for a non-user install, do that, + # otherwise do a user install. + if site_packages_writable(root=root_path, isolated=isolated_mode): + logger.debug("Non-user install because site-packages writeable") + return False + + logger.info( + "Defaulting to user installation because normal site-packages " + "is not writeable" + ) + return True + + +def reject_location_related_install_options( + requirements: List[InstallRequirement], options: Optional[List[str]] +) -> None: + """If any location-changing --install-option arguments were passed for + requirements or on the command-line, then show a deprecation warning. + """ + + def format_options(option_names: Iterable[str]) -> List[str]: + return ["--{}".format(name.replace("_", "-")) for name in option_names] + + offenders = [] + + for requirement in requirements: + install_options = requirement.install_options + location_options = parse_distutils_args(install_options) + if location_options: + offenders.append( + "{!r} from {}".format( + format_options(location_options.keys()), requirement + ) + ) + + if options: + location_options = parse_distutils_args(options) + if location_options: + offenders.append( + "{!r} from command line".format(format_options(location_options.keys())) + ) + + if not offenders: + return + + raise CommandError( + "Location-changing options found in --install-option: {}." + " This is unsupported, use pip-level options like --user," + " --prefix, --root, and --target instead.".format("; ".join(offenders)) + ) + + +def create_os_error_message( + error: OSError, show_traceback: bool, using_user_site: bool +) -> str: + """Format an error message for an OSError + + 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 OSError") + 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 running_under_virtualenv() and not using_user_site: + parts.extend( + [ + user_option_part, + " or ", + permissions_part.lower(), + ] + ) + else: + parts.append(permissions_part) + parts.append(".\n") + + # Suggest the user to enable Long Paths if path length is + # more than 260 + if ( + WINDOWS + and error.errno == errno.ENOENT + and error.filename + and len(error.filename) > 260 + ): + parts.append( + "HINT: This error might have occurred since " + "this system does not have Windows Long Path " + "support enabled. You can find information on " + "how to enable this at " + "https://pip.pypa.io/warnings/enable-long-paths\n" + ) + + return "".join(parts).strip() + "\n" diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/list.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/list.py new file mode 100644 index 0000000..ba6459c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/list.py @@ -0,0 +1,367 @@ +import json +import logging +from optparse import Values +from typing import TYPE_CHECKING, Generator, List, Optional, Sequence, Tuple, cast + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import IndexGroupCommand +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution, get_environment +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.network.session import PipSession +from pip._internal.utils.compat import stdlib_pkgs +from pip._internal.utils.misc import tabulate, write_output + +if TYPE_CHECKING: + from pip._internal.metadata.base import DistributionVersion + + class _DistWithLatestInfo(BaseDistribution): + """Give the distribution object a couple of extra fields. + + These will be populated during ``get_outdated()``. This is dirty but + makes the rest of the code much cleaner. + """ + + latest_version: DistributionVersion + latest_filetype: str + + _ProcessedDists = Sequence[_DistWithLatestInfo] + + +from pip._vendor.packaging.version import parse + +logger = logging.getLogger(__name__) + + +class ListCommand(IndexGroupCommand): + """ + List installed packages, including editables. + + Packages are listed in a case-insensitive sorted order. + """ + + ignore_require_venv = True + usage = """ + %prog [options]""" + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-o", + "--outdated", + action="store_true", + default=False, + help="List outdated packages", + ) + self.cmd_opts.add_option( + "-u", + "--uptodate", + action="store_true", + default=False, + help="List uptodate packages", + ) + self.cmd_opts.add_option( + "-e", + "--editable", + action="store_true", + default=False, + help="List editable projects.", + ) + self.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.", + ) + self.cmd_opts.add_option(cmdoptions.list_path()) + self.cmd_opts.add_option( + "--pre", + action="store_true", + default=False, + help=( + "Include pre-release and development versions. By default, " + "pip only finds stable versions." + ), + ) + + self.cmd_opts.add_option( + "--format", + action="store", + dest="list_format", + default="columns", + choices=("columns", "freeze", "json"), + help="Select the output format among: columns (default), freeze, or json", + ) + + self.cmd_opts.add_option( + "--not-required", + action="store_true", + dest="not_required", + help="List packages that are not dependencies of installed packages.", + ) + + self.cmd_opts.add_option( + "--exclude-editable", + action="store_false", + dest="include_editable", + help="Exclude editable package from output.", + ) + self.cmd_opts.add_option( + "--include-editable", + action="store_true", + dest="include_editable", + help="Include editable package from output.", + default=True, + ) + self.cmd_opts.add_option(cmdoptions.list_exclude()) + 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, self.cmd_opts) + + def _build_package_finder( + self, options: Values, session: PipSession + ) -> PackageFinder: + """ + Create a package finder appropriate to this list command. + """ + link_collector = LinkCollector.create(session, options=options) + + # Pass allow_yanked=False to ignore yanked versions. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=options.pre, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + ) + + def run(self, options: Values, args: List[str]) -> int: + if options.outdated and options.uptodate: + raise CommandError("Options --outdated and --uptodate cannot be combined.") + + if options.outdated and options.list_format == "freeze": + raise CommandError( + "List format 'freeze' can not be used with the --outdated option." + ) + + cmdoptions.check_list_path_option(options) + + skip = set(stdlib_pkgs) + if options.excludes: + skip.update(canonicalize_name(n) for n in options.excludes) + + packages: "_ProcessedDists" = [ + cast("_DistWithLatestInfo", d) + for d in get_environment(options.path).iter_installed_distributions( + local_only=options.local, + user_only=options.user, + editables_only=options.editable, + include_editables=options.include_editable, + skip=skip, + ) + ] + + # get_not_required must be called firstly in order to find and + # filter out all dependencies correctly. Otherwise a package + # can't be identified as requirement because some parent packages + # could be filtered out before. + if options.not_required: + packages = self.get_not_required(packages, options) + + if options.outdated: + packages = self.get_outdated(packages, options) + elif options.uptodate: + packages = self.get_uptodate(packages, options) + + self.output_package_listing(packages, options) + return SUCCESS + + def get_outdated( + self, packages: "_ProcessedDists", options: Values + ) -> "_ProcessedDists": + return [ + dist + for dist in self.iter_packages_latest_infos(packages, options) + if parse(str(dist.latest_version)) > parse(str(dist.version)) + ] + + def get_uptodate( + self, packages: "_ProcessedDists", options: Values + ) -> "_ProcessedDists": + return [ + dist + for dist in self.iter_packages_latest_infos(packages, options) + if parse(str(dist.latest_version)) == parse(str(dist.version)) + ] + + def get_not_required( + self, packages: "_ProcessedDists", options: Values + ) -> "_ProcessedDists": + dep_keys = { + canonicalize_name(dep.name) + for dist in packages + for dep in (dist.iter_dependencies() or ()) + } + + # Create a set to remove duplicate packages, and cast it to a list + # to keep the return type consistent with get_outdated and + # get_uptodate + return list({pkg for pkg in packages if pkg.canonical_name not in dep_keys}) + + def iter_packages_latest_infos( + self, packages: "_ProcessedDists", options: Values + ) -> Generator["_DistWithLatestInfo", None, None]: + with self._build_session(options) as session: + finder = self._build_package_finder(options, session) + + def latest_info( + dist: "_DistWithLatestInfo", + ) -> Optional["_DistWithLatestInfo"]: + all_candidates = finder.find_all_candidates(dist.canonical_name) + if not options.pre: + # Remove prereleases + all_candidates = [ + candidate + for candidate in all_candidates + if not candidate.version.is_prerelease + ] + + evaluator = finder.make_candidate_evaluator( + project_name=dist.canonical_name, + ) + best_candidate = evaluator.sort_best_candidate(all_candidates) + if best_candidate is None: + return None + + remote_version = best_candidate.version + if best_candidate.link.is_wheel: + typ = "wheel" + else: + typ = "sdist" + dist.latest_version = remote_version + dist.latest_filetype = typ + return dist + + for dist in map(latest_info, packages): + if dist is not None: + yield dist + + def output_package_listing( + self, packages: "_ProcessedDists", options: Values + ) -> None: + packages = sorted( + packages, + key=lambda dist: dist.canonical_name, + ) + 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: + write_output( + "%s==%s (%s)", dist.raw_name, dist.version, dist.location + ) + else: + write_output("%s==%s", dist.raw_name, dist.version) + elif options.list_format == "json": + write_output(format_for_json(packages, options)) + + def output_package_listing_columns( + self, data: List[List[str]], header: List[str] + ) -> None: + # 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: + write_output(val) + + +def format_for_columns( + pkgs: "_ProcessedDists", options: Values +) -> Tuple[List[List[str]], List[str]]: + """ + Convert the package data into something usable + by output_package_listing_columns. + """ + header = ["Package", "Version"] + + running_outdated = options.outdated + if running_outdated: + header.extend(["Latest", "Type"]) + + has_editables = any(x.editable for x in pkgs) + if has_editables: + header.append("Editable project location") + + if options.verbose >= 1: + header.append("Location") + if options.verbose >= 1: + header.append("Installer") + + data = [] + for proj in pkgs: + # if we're working on the 'outdated' list, separate out the + # latest_version and type + row = [proj.raw_name, str(proj.version)] + + if running_outdated: + row.append(str(proj.latest_version)) + row.append(proj.latest_filetype) + + if has_editables: + row.append(proj.editable_project_location or "") + + if options.verbose >= 1: + row.append(proj.location or "") + if options.verbose >= 1: + row.append(proj.installer) + + data.append(row) + + return data, header + + +def format_for_json(packages: "_ProcessedDists", options: Values) -> str: + data = [] + for dist in packages: + info = { + "name": dist.raw_name, + "version": str(dist.version), + } + if options.verbose >= 1: + info["location"] = dist.location or "" + info["installer"] = dist.installer + if options.outdated: + info["latest_version"] = str(dist.latest_version) + info["latest_filetype"] = dist.latest_filetype + editable_project_location = dist.editable_project_location + if editable_project_location: + info["editable_project_location"] = editable_project_location + data.append(info) + return json.dumps(data) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/search.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/search.py new file mode 100644 index 0000000..03ed925 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/search.py @@ -0,0 +1,174 @@ +import logging +import shutil +import sys +import textwrap +import xmlrpc.client +from collections import OrderedDict +from optparse import Values +from typing import TYPE_CHECKING, Dict, List, Optional + +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.cli.base_command import Command +from pip._internal.cli.req_command import SessionCommandMixin +from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.metadata import get_default_environment +from pip._internal.models.index import PyPI +from pip._internal.network.xmlrpc import PipXmlrpcTransport +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import write_output + +if TYPE_CHECKING: + from typing import TypedDict + + class TransformedHit(TypedDict): + name: str + summary: str + versions: List[str] + + +logger = logging.getLogger(__name__) + + +class SearchCommand(Command, SessionCommandMixin): + """Search for PyPI packages whose name or summary contains .""" + + usage = """ + %prog [options] """ + ignore_require_venv = True + + def add_options(self) -> None: + 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: Values, args: List[str]) -> int: + 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 = shutil.get_terminal_size()[0] + + print_results(hits, terminal_width=terminal_width) + if pypi_hits: + return SUCCESS + return NO_MATCHES_FOUND + + def search(self, query: List[str], options: Values) -> List[Dict[str, str]]: + index_url = options.index + + session = self.get_default_session(options) + + transport = PipXmlrpcTransport(index_url, session) + pypi = xmlrpc.client.ServerProxy(index_url, transport) + try: + hits = pypi.search({"name": query, "summary": query}, "or") + except xmlrpc.client.Fault as fault: + message = "XMLRPC request failed [code: {code}]\n{string}".format( + code=fault.faultCode, + string=fault.faultString, + ) + raise CommandError(message) + assert isinstance(hits, list) + return hits + + +def transform_hits(hits: List[Dict[str, str]]) -> List["TransformedHit"]: + """ + 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: Dict[str, "TransformedHit"] = 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_dist_installation_info(name: str, latest: str) -> None: + env = get_default_environment() + dist = env.get_distribution(name) + if dist is not None: + with indent_log(): + if dist.version == latest: + write_output("INSTALLED: %s (latest)", dist.version) + else: + write_output("INSTALLED: %s", dist.version) + if parse_version(latest).pre: + write_output( + "LATEST: %s (pre-release; install" + " with `pip install --pre`)", + latest, + ) + else: + write_output("LATEST: %s", latest) + + +def print_results( + hits: List["TransformedHit"], + name_column_width: Optional[int] = None, + terminal_width: Optional[int] = None, +) -> 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 + ) + + 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_lines = textwrap.wrap(summary, target_width) + summary = ("\n" + " " * (name_column_width + 3)).join(summary_lines) + + name_latest = f"{name} ({latest})" + line = f"{name_latest:{name_column_width}} - {summary}" + try: + write_output(line) + print_dist_installation_info(name, latest) + except UnicodeEncodeError: + pass + + +def highest_version(versions: List[str]) -> str: + return max(versions, key=parse_version) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/show.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/show.py new file mode 100644 index 0000000..3f10701 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/show.py @@ -0,0 +1,189 @@ +import logging +from optparse import Values +from typing import Generator, Iterable, Iterator, List, NamedTuple, Optional + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.metadata import BaseDistribution, get_default_environment +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class ShowCommand(Command): + """ + Show information about one or more installed packages. + + The output is in RFC-compliant mail header format. + """ + + usage = """ + %prog [options] ...""" + ignore_require_venv = True + + def add_options(self) -> None: + 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: Values, args: List[str]) -> int: + 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 + + +class _PackageInfo(NamedTuple): + name: str + version: str + location: str + editable_project_location: Optional[str] + requires: List[str] + required_by: List[str] + installer: str + metadata_version: str + classifiers: List[str] + summary: str + homepage: str + project_urls: List[str] + author: str + author_email: str + license: str + entry_points: List[str] + files: Optional[List[str]] + + +def search_packages_info(query: List[str]) -> Generator[_PackageInfo, None, None]: + """ + 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. + """ + env = get_default_environment() + + installed = {dist.canonical_name: dist for dist in env.iter_all_distributions()} + query_names = [canonicalize_name(name) for name in query] + missing = sorted( + [name for name, pkg in zip(query, query_names) if pkg not in installed] + ) + if missing: + logger.warning("Package(s) not found: %s", ", ".join(missing)) + + def _get_requiring_packages(current_dist: BaseDistribution) -> Iterator[str]: + return ( + dist.metadata["Name"] or "UNKNOWN" + for dist in installed.values() + if current_dist.canonical_name + in {canonicalize_name(d.name) for d in dist.iter_dependencies()} + ) + + for query_name in query_names: + try: + dist = installed[query_name] + except KeyError: + continue + + requires = sorted((req.name for req in dist.iter_dependencies()), key=str.lower) + required_by = sorted(_get_requiring_packages(dist), key=str.lower) + + try: + entry_points_text = dist.read_text("entry_points.txt") + entry_points = entry_points_text.splitlines(keepends=False) + except FileNotFoundError: + entry_points = [] + + files_iter = dist.iter_declared_entries() + if files_iter is None: + files: Optional[List[str]] = None + else: + files = sorted(files_iter) + + metadata = dist.metadata + + yield _PackageInfo( + name=dist.raw_name, + version=str(dist.version), + location=dist.location or "", + editable_project_location=dist.editable_project_location, + requires=requires, + required_by=required_by, + installer=dist.installer, + metadata_version=dist.metadata_version or "", + classifiers=metadata.get_all("Classifier", []), + summary=metadata.get("Summary", ""), + homepage=metadata.get("Home-page", ""), + project_urls=metadata.get_all("Project-URL", []), + author=metadata.get("Author", ""), + author_email=metadata.get("Author-email", ""), + license=metadata.get("License", ""), + entry_points=entry_points, + files=files, + ) + + +def print_results( + distributions: Iterable[_PackageInfo], + list_files: bool, + verbose: bool, +) -> bool: + """ + Print the information from installed distributions found. + """ + results_printed = False + for i, dist in enumerate(distributions): + results_printed = True + if i > 0: + write_output("---") + + write_output("Name: %s", dist.name) + write_output("Version: %s", dist.version) + write_output("Summary: %s", dist.summary) + write_output("Home-page: %s", dist.homepage) + write_output("Author: %s", dist.author) + write_output("Author-email: %s", dist.author_email) + write_output("License: %s", dist.license) + write_output("Location: %s", dist.location) + if dist.editable_project_location is not None: + write_output( + "Editable project location: %s", dist.editable_project_location + ) + write_output("Requires: %s", ", ".join(dist.requires)) + write_output("Required-by: %s", ", ".join(dist.required_by)) + + if verbose: + write_output("Metadata-Version: %s", dist.metadata_version) + write_output("Installer: %s", dist.installer) + write_output("Classifiers:") + for classifier in dist.classifiers: + write_output(" %s", classifier) + write_output("Entry-points:") + for entry in dist.entry_points: + write_output(" %s", entry.strip()) + write_output("Project-URLs:") + for project_url in dist.project_urls: + write_output(" %s", project_url) + if list_files: + write_output("Files:") + if dist.files is None: + write_output("Cannot locate RECORD or installed-files.txt") + else: + for line in dist.files: + write_output(" %s", line.strip()) + return results_printed diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/uninstall.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/uninstall.py new file mode 100644 index 0000000..f198fc3 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/uninstall.py @@ -0,0 +1,113 @@ +import logging +from optparse import Values +from typing import List + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.req_command import SessionCommandMixin, warn_if_run_as_root +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import InstallationError +from pip._internal.req import parse_requirements +from pip._internal.req.constructors import ( + install_req_from_line, + install_req_from_parsed_requirement, +) +from pip._internal.utils.misc import ( + check_externally_managed, + protect_pip_from_modification_on_windows, +) + +logger = logging.getLogger(__name__) + + +class UninstallCommand(Command, SessionCommandMixin): + """ + 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``. + """ + + usage = """ + %prog [options] ... + %prog [options] -r ...""" + + def add_options(self) -> None: + 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.cmd_opts.add_option(cmdoptions.root_user_action()) + self.cmd_opts.add_option(cmdoptions.override_externally_managed()) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + session = self.get_default_session(options) + + reqs_to_uninstall = {} + for name in args: + req = install_req_from_line( + name, + isolated=options.isolated_mode, + ) + if req.name: + reqs_to_uninstall[canonicalize_name(req.name)] = req + else: + logger.warning( + "Invalid requirement: %r ignored -" + " the uninstall command expects named" + " requirements.", + name, + ) + for filename in options.requirements: + for parsed_req in parse_requirements( + filename, options=options, session=session + ): + req = install_req_from_parsed_requirement( + parsed_req, isolated=options.isolated_mode + ) + if req.name: + reqs_to_uninstall[canonicalize_name(req.name)] = req + if not reqs_to_uninstall: + raise InstallationError( + f"You must give at least one requirement to {self.name} (see " + f'"pip help {self.name}")' + ) + + if not options.override_externally_managed: + check_externally_managed() + + protect_pip_from_modification_on_windows( + modifying_pip="pip" in reqs_to_uninstall + ) + + 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() + if options.root_user_action == "warn": + warn_if_run_as_root() + return SUCCESS diff --git a/venv/lib/python3.11/site-packages/pip/_internal/commands/wheel.py b/venv/lib/python3.11/site-packages/pip/_internal/commands/wheel.py new file mode 100644 index 0000000..1afbd56 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/commands/wheel.py @@ -0,0 +1,203 @@ +import logging +import os +import shutil +from optparse import Values +from typing import List + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import RequirementCommand, with_cleanup +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.operations.build.build_tracker import get_build_tracker +from pip._internal.req.req_install import ( + InstallRequirement, + LegacySetupPyOptionsCheckMode, + check_legacy_setup_py_options, +) +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.misc import ensure_dir, normalize_path +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.wheel_builder import build, should_build_for_wheel_command + +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/ + + 'pip wheel' uses the build system interface as described here: + https://pip.pypa.io/en/stable/reference/build-system/ + + """ + + usage = """ + %prog [options] ... + %prog [options] -r ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + def add_options(self) -> None: + + self.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." + ), + ) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + self.cmd_opts.add_option(cmdoptions.prefer_binary()) + self.cmd_opts.add_option(cmdoptions.no_build_isolation()) + self.cmd_opts.add_option(cmdoptions.use_pep517()) + self.cmd_opts.add_option(cmdoptions.no_use_pep517()) + self.cmd_opts.add_option(cmdoptions.check_build_deps()) + self.cmd_opts.add_option(cmdoptions.constraints()) + self.cmd_opts.add_option(cmdoptions.editable()) + self.cmd_opts.add_option(cmdoptions.requirements()) + self.cmd_opts.add_option(cmdoptions.src()) + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + self.cmd_opts.add_option(cmdoptions.no_deps()) + self.cmd_opts.add_option(cmdoptions.progress_bar()) + + self.cmd_opts.add_option( + "--no-verify", + dest="no_verify", + action="store_true", + default=False, + help="Don't verify if built wheel is valid.", + ) + + self.cmd_opts.add_option(cmdoptions.config_settings()) + self.cmd_opts.add_option(cmdoptions.build_options()) + self.cmd_opts.add_option(cmdoptions.global_options()) + + self.cmd_opts.add_option( + "--pre", + action="store_true", + default=False, + help=( + "Include pre-release and development versions. By default, " + "pip only finds stable versions." + ), + ) + + self.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, self.cmd_opts) + + @with_cleanup + def run(self, options: Values, args: List[str]) -> int: + session = self.get_default_session(options) + + finder = self._build_package_finder(options, session) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + + options.wheel_dir = normalize_path(options.wheel_dir) + ensure_dir(options.wheel_dir) + + build_tracker = self.enter_context(get_build_tracker()) + + directory = TempDirectory( + delete=not options.no_clean, + kind="wheel", + globally_managed=True, + ) + + reqs = self.get_requirements(args, options, finder, session) + check_legacy_setup_py_options( + options, reqs, LegacySetupPyOptionsCheckMode.WHEEL + ) + + if "no-binary-enable-wheel-cache" in options.features_enabled: + # TODO: remove format_control from WheelCache when the deprecation cycle + # is over + wheel_cache = WheelCache(options.cache_dir) + else: + if options.format_control.no_binary: + deprecated( + reason=( + "--no-binary currently disables reading from " + "the cache of locally built wheels. In the future " + "--no-binary will not influence the wheel cache." + ), + replacement="to use the --no-cache-dir option", + feature_flag="no-binary-enable-wheel-cache", + issue=11453, + gone_in="23.1", + ) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + build_tracker=build_tracker, + session=session, + finder=finder, + download_dir=options.wheel_dir, + use_user_site=False, + verbosity=self.verbosity, + ) + + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + options=options, + wheel_cache=wheel_cache, + ignore_requires_python=options.ignore_requires_python, + use_pep517=options.use_pep517, + ) + + self.trace_basic_info(finder) + + requirement_set = resolver.resolve(reqs, check_supported_wheels=True) + + reqs_to_build: List[InstallRequirement] = [] + for req in requirement_set.requirements.values(): + if req.is_wheel: + preparer.save_linked_requirement(req) + elif should_build_for_wheel_command(req): + reqs_to_build.append(req) + + # build wheels + build_successes, build_failures = build( + reqs_to_build, + wheel_cache=wheel_cache, + verify=(not options.no_verify), + build_options=options.build_options or [], + global_options=options.global_options or [], + ) + for req in build_successes: + assert req.link and req.link.is_wheel + assert req.local_file_path + # copy from cache to target directory + try: + shutil.copy(req.local_file_path, options.wheel_dir) + except OSError as e: + logger.warning( + "Building wheel for %s failed: %s", + req.name, + e, + ) + build_failures.append(req) + if len(build_failures) != 0: + raise CommandError("Failed to build one or more wheels") + + return SUCCESS diff --git a/venv/lib/python3.11/site-packages/pip/_internal/configuration.py b/venv/lib/python3.11/site-packages/pip/_internal/configuration.py new file mode 100644 index 0000000..8fd46c9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/configuration.py @@ -0,0 +1,374 @@ +"""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 configparser +import locale +import os +import sys +from typing import Any, Dict, Iterable, List, NewType, Optional, Tuple + +from pip._internal.exceptions import ( + ConfigurationError, + ConfigurationFileCouldNotBeLoaded, +) +from pip._internal.utils import appdirs +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.logging import getLogger +from pip._internal.utils.misc import ensure_dir, enum + +RawConfigParser = configparser.RawConfigParser # Shorthand +Kind = NewType("Kind", str) + +CONFIG_BASENAME = "pip.ini" if WINDOWS else "pip.conf" +ENV_NAMES_IGNORED = "version", "help" + +# The kinds of configurations there are. +kinds = enum( + USER="user", # User Specific + GLOBAL="global", # System Wide + SITE="site", # [Virtual] Environment Specific + ENV="env", # from PIP_CONFIG_FILE + ENV_VAR="env-var", # from Environment Variables +) +OVERRIDE_ORDER = kinds.GLOBAL, kinds.USER, kinds.SITE, kinds.ENV, kinds.ENV_VAR +VALID_LOAD_ONLY = kinds.USER, kinds.GLOBAL, kinds.SITE + +logger = getLogger(__name__) + + +# NOTE: Maybe use the optionx attribute to normalize keynames. +def _normalize_name(name: 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: str) -> List[str]: + if "." not in name: + error_message = ( + "Key does not contain dot separated section and key. " + "Perhaps you wanted to use 'global.{}' instead?" + ).format(name) + raise ConfigurationError(error_message) + return name.split(".", 1) + + +def get_configuration_files() -> Dict[Kind, List[str]]: + global_config_files = [ + os.path.join(path, CONFIG_BASENAME) for path in appdirs.site_config_dirs("pip") + ] + + site_config_file = os.path.join(sys.prefix, CONFIG_BASENAME) + legacy_config_file = os.path.join( + os.path.expanduser("~"), + "pip" if WINDOWS else ".pip", + CONFIG_BASENAME, + ) + new_config_file = os.path.join(appdirs.user_config_dir("pip"), CONFIG_BASENAME) + return { + kinds.GLOBAL: global_config_files, + kinds.SITE: [site_config_file], + kinds.USER: [legacy_config_file, new_config_file], + } + + +class Configuration: + """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: bool, load_only: Optional[Kind] = None) -> None: + super().__init__() + + if load_only is not None and 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)) + ) + ) + self.isolated = isolated + self.load_only = load_only + + # Because we keep track of where we got the data from + self._parsers: Dict[Kind, List[Tuple[str, RawConfigParser]]] = { + variant: [] for variant in OVERRIDE_ORDER + } + self._config: Dict[Kind, Dict[str, Any]] = { + variant: {} for variant in OVERRIDE_ORDER + } + self._modified_parsers: List[Tuple[str, RawConfigParser]] = [] + + def load(self) -> 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) -> 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) -> Iterable[Tuple[str, Any]]: + """Returns key-value pairs like dict.items() representing the loaded + configuration + """ + return self._dictionary.items() + + def get_value(self, key: str) -> Any: + """Get a value from the configuration.""" + orig_key = key + key = _normalize_name(key) + try: + return self._dictionary[key] + except KeyError: + # disassembling triggers a more useful error message than simply + # "No such key" in the case that the key isn't in the form command.option + _disassemble_key(key) + raise ConfigurationError(f"No such key - {orig_key}") + + def set_value(self, key: str, value: Any) -> None: + """Modify a value in the configuration.""" + key = _normalize_name(key) + self._ensure_have_load_only() + + assert self.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: str) -> None: + """Unset a value in the configuration.""" + orig_key = key + key = _normalize_name(key) + self._ensure_have_load_only() + + assert self.load_only + if key not in self._config[self.load_only]: + raise ConfigurationError(f"No such key - {orig_key}") + + fname, parser = self._get_parser_to_modify() + + if parser is not None: + section, name = _disassemble_key(key) + if not ( + parser.has_section(section) and parser.remove_option(section, name) + ): + # The option was not removed. + raise ConfigurationError( + "Fatal Internal error [id=1]. Please report as a bug." + ) + + # The section may be empty after the option was removed. + if not parser.items(section): + parser.remove_section(section) + self._mark_as_modified(fname, parser) + + del self._config[self.load_only][key] + + def save(self) -> None: + """Save the current in-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) + + # + # Private routines + # + + def _ensure_have_load_only(self) -> 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) -> 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 OVERRIDE_ORDER: + retval.update(self._config[variant]) + + return retval + + def _load_config_files(self) -> 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: Kind, fname: str) -> RawConfigParser: + logger.verbose("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: 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): + locale_encoding = locale.getpreferredencoding(False) + try: + parser.read(fname, encoding=locale_encoding) + except UnicodeDecodeError: + # See https://github.com/pypa/pip/issues/4963 + raise ConfigurationFileCouldNotBeLoaded( + reason=f"contains invalid {locale_encoding} characters", + fname=fname, + ) + except configparser.Error as error: + # See https://github.com/pypa/pip/issues/4893 + raise ConfigurationFileCouldNotBeLoaded(error=error) + return parser + + def _load_environment_vars(self) -> 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: str, items: 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) -> Iterable[Tuple[str, str]]: + """Returns a generator with all environmental vars with prefix PIP_""" + for key, val in os.environ.items(): + if key.startswith("PIP_"): + name = key[4:].lower() + if name not in ENV_NAMES_IGNORED: + yield name, val + + # XXX: This is patched in the tests. + def iter_config_files(self) -> 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, [] + + config_files = get_configuration_files() + + # at the base we have any global configuration + yield kinds.GLOBAL, config_files[kinds.GLOBAL] + + # 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, config_files[kinds.USER] + + # finally virtualenv configuration first trumping others + yield kinds.SITE, config_files[kinds.SITE] + + def get_values_in_config(self, variant: Kind) -> Dict[str, Any]: + """Get values present in a config file""" + return self._config[variant] + + def _get_parser_to_modify(self) -> Tuple[str, RawConfigParser]: + # Determine which parser to modify + assert self.load_only + 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: str, parser: RawConfigParser) -> None: + file_parser_tuple = (fname, parser) + if file_parser_tuple not in self._modified_parsers: + self._modified_parsers.append(file_parser_tuple) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self._dictionary!r})" diff --git a/venv/lib/python3.11/site-packages/pip/_internal/distributions/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/distributions/__init__.py new file mode 100644 index 0000000..9a89a83 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/distributions/__init__.py @@ -0,0 +1,21 @@ +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.distributions.sdist import SourceDistribution +from pip._internal.distributions.wheel import WheelDistribution +from pip._internal.req.req_install import InstallRequirement + + +def make_distribution_for_install_requirement( + install_req: InstallRequirement, +) -> AbstractDistribution: + """Returns a Distribution for the given InstallRequirement""" + # Editable requirements will always be source distributions. They use the + # legacy logic until we create a modern standard for them. + if install_req.editable: + return SourceDistribution(install_req) + + # If it's a wheel, it's a WheelDistribution + if install_req.is_wheel: + return WheelDistribution(install_req) + + # Otherwise, a SourceDistribution + return SourceDistribution(install_req) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18f8afe6a27a720514f2d25e33cc2322e994b600 GIT binary patch literal 1044 zcmaJ;Pfrs;6rX8#w~G`uAQwXi}a>mVl6bHTC)aNr?tSKxT6KN4_ea< z%w6Qn{8U99oG)#+gyeo(K4oB8t1np+gMV>1>GL+d;azyuqcptXTznA=>4)JCJ?Jw| zBO1$mmi_g4oF3!`r?SuEHoj~`8ECRx=WhTUqa(DZyrpnUs_3O0p-*t{>($*|m0KA{ zA-6Wh2qHIgZ?ELww-0wpZo>BM$+qlH!fn~3c9#ukZ2#M#qva+InDkpA zeGk{+=wPmh3B}vK=#X9#QL-11lqY+%Ed@!Uf!Ffe`~8%_3j-3e7D*3fFNrtZjSV80 zq>U8fewPZ8vXpo%mXybSNP>w`3F1M3NzZfB!`zAdednBfLO`! zIe_=5s3Y_4u(n(vtdlcq^<@3ja)*|inQmcRhukyEK3P7s8bhm*nT_8Ds;_+9Kb>70 z&aP$J+BwuhFP)j(2FC6cV|S8~a9h5hT#Yziy)8|Yx5~f0HShY<^ZV2FpkEi(xPNZI zn`Pr)5T94L4%>yf6(vDGq>uO#9M!!XDSMHTFK{a&GiEzp0qlH4CV-zCZb literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/base.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d83bf5e94126903e52cc7b017ba3252ce30886e GIT binary patch literal 2416 zcmb6aOK%%Rc-CIqYbSP60!>JpWN9K%3u05?fS^L8ywn2`B8Y=IjAnPn@uutD?aVqa zRU$%>2vV=8*B($&R1W+AuG~1ds1ngiNRG zIU?ka)d?NngS}^NdLksQ`w6?+j&=e03Jhncp;6SxP_2=r8K%=L z)tmYrYHDEOXd}n+$0pJ&GnyHi-_;)g_rty@gc`*ZRe_bL!A58iJ}J$hr4t;ZduUT@ zl)=G~=-DL;d?0o>>Y3f+^n7oz6RdJVC7EE=zR{pnIvDhFEX)ljY?*?E zogn4Q%LChpEBwU3ME!s5ba;wc3H3W+5_S8idDWn}IK+DWEE`fmr@J*JwT9zVunt{q{Px zAlIFszRtY$y6af=04mh?UaMWZRu@jl7L!EO11G41LMT8;Q=JZVyr|0tsRdiS47#>w zPV1yvV(b)b2MPJH=YohP>Ou$({I7_)a2*mcQr}};_j|uXHjOh;g zyMo59q$5zR$jX)X6~<8s zpK|F8e@+5f=#g&uzRRa2TJHCN&0H5_$oLrSs*Jy*GS1~+PXXCK;%5L*lgSfj$~hxO z63k|Dlika;7{UC*>uNe17${$SoSTd@T5h5H(pxct`4}8#QGO~pj`Im^KDY2>d?wDp z44c!laY14Rx-=ITC00VEN<1Pllz?MN$89T}Kc_*MPJ;U@-+r$459Q%s Jr%)&Z{{<}!ixB_- literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea98cbe1a33aa6300655468537014729cf1daa4c GIT binary patch literal 1553 zcmaJ>PmkL~6dyab;|)o(g|-rZx>%?PMOE!BD{-MhDndo{utLBomyzvx*?8-Jotdnf z6^9k-p$G2$21Te}fe#U+9u}XFIB|2eoO8%SPQlX*)8iD|aKMWflDTwupj-Px3r33}JR$iEU$+?qPwlVs>o`>VRX`(z)fb#M}dpUqW@41IZ%TR`t zmlrBePr;M$aF$54C;6n1S!XVSE1HH>CSDtMxbv?*q_9Zw;Cz+1I| zQtihUomdXysi~QR0)0}*xv~E<8(FfC8o5nyncz(XMMtT_Bt=Nm%aOby+u-w^)A(Kki=dCZ9o*p{-|4d*mnM^?fms_QhtPgK9VX{eX!|9 z^?&3qTbH-(&}M&a)A77bTap?AHc5Hq-f8*$Ozz-C)FP@xs5^#XoU*%%&3Vf1EH>vU b+gohT+PQ3C`u~N+d%G`5{nrJyhLyho8d|HS literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..809a1b77e8287d7bca695a1228ee74562e00d2d5 GIT binary patch literal 8955 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f506eb15a7ae7efbc0edc3ec837d82f40b663fc0 GIT binary patch literal 2147 zcmb7F&1)M+6rWw~N-Nopl*V=Q(KthCDQaRZp-^lZ0x2bh(x|1WDd@7SG$U)B{g7u? zjwNacC5Ie*&ozYNQv46};6FkJ70f~)&{J<4+*3|@Z)B<3CMk5Zdi!SP&CGl6_j^0P zE-aJ?wB^GW8+!&Je`06S%v0s00m@^-2-AELXbnw6UHA1M*T^Y7=Np09FqLlj`Jm7! z1XjZeijAU1bn+Ep=0n2rJhz`C_-!v_TvT&OFWG~}F7H|$eb z+I5AC!Bba`mrDu>qfHLm2;PeQKJA5F$O>mQwN;WAJno6GrOgDG2OSYONmP74kz6P}SVdh{u`?Hp@)h83mR{ytcT$s!gl36!BV;{7GX>V7Hi!&>*Ms? z?D~BeKbXz|t8#;<-$X8xH12R3@YrQ;?9#S~0yQ$ue;Wuwy)cfzB8WsEQqAZ%X#kQ+ zB4RR&Bdm5~+LHi~7hh8#3GVm3aDxIgc-YL=k(llw_*M^K3IP8xI=J!Rle;`dJOSI7 zM(qsDtS4|+7Tphhh-7eHaSHqr9C)$K1;C9(!m9Zs2iqrQKZ4qEFes<%#+}5#X@N)x zq_sfYt9oKc?za3-F|Wb>u-WZrUVC9RdBP3uD#Xx z9dKE;K|CO7iBuN%c1Gooht@hi)%7E5eWdi`^0~d8z1^X;iqG=uk+nKf`m@TFC&n+< zh^`)0)<%`JN9MEgM^E@4D>r|S4|fiCk5=xCR_+{?>!WggXw^^PB$DLY>O+&1n?28G zjwd5uRbx_Vb$IKZGahEVE9))zl1>{kT-6&E9)3lEn_B%hQZ+;cM#Q@)mQcJ0LgG?n zhQJ_`%j2@=nOsdXIIv$&+J7#1A5XwCgT&2~;=&_CEJCkZOe{xzZyhHoIZhC<9#F_h z<{f9N=laMZ=oK7?MJ>k>7>PKC0aYr;(<5UJ#YtQk^d=X663g@{+v zI7v%c!$}d0bNNq&s*Gi`_|m#D2IQvr5RODX$)_OFoTh2VWNnyzo|9X{>~l None: + super().__init__() + self.req = req + + @abc.abstractmethod + def get_metadata_distribution(self) -> BaseDistribution: + raise NotImplementedError() + + @abc.abstractmethod + def prepare_distribution_metadata( + self, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, + ) -> None: + raise NotImplementedError() diff --git a/venv/lib/python3.11/site-packages/pip/_internal/distributions/installed.py b/venv/lib/python3.11/site-packages/pip/_internal/distributions/installed.py new file mode 100644 index 0000000..edb38aa --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/distributions/installed.py @@ -0,0 +1,23 @@ +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution + + +class InstalledDistribution(AbstractDistribution): + """Represents an installed package. + + This does not need any preparation as the required information has already + been computed. + """ + + def get_metadata_distribution(self) -> BaseDistribution: + assert self.req.satisfied_by is not None, "not actually installed" + return self.req.satisfied_by + + def prepare_distribution_metadata( + self, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, + ) -> None: + pass diff --git a/venv/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py b/venv/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py new file mode 100644 index 0000000..4c25647 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py @@ -0,0 +1,150 @@ +import logging +from typing import Iterable, Set, Tuple + +from pip._internal.build_env import BuildEnvironment +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.exceptions import InstallationError +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +class SourceDistribution(AbstractDistribution): + """Represents a source distribution. + + The preparation step for these needs metadata for the packages to be + generated, either using PEP 517 or using the legacy `setup.py egg_info`. + """ + + def get_metadata_distribution(self) -> BaseDistribution: + return self.req.get_dist() + + def prepare_distribution_metadata( + self, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, + ) -> None: + # Load pyproject.toml, to determine whether PEP 517 is to be used + self.req.load_pyproject_toml() + + # Set up the build isolation, if this requirement should be isolated + should_isolate = self.req.use_pep517 and build_isolation + if should_isolate: + # Setup an isolated environment and install the build backend static + # requirements in it. + self._prepare_build_backend(finder) + # Check that if the requirement is editable, it either supports PEP 660 or + # has a setup.py or a setup.cfg. This cannot be done earlier because we need + # to setup the build backend to verify it supports build_editable, nor can + # it be done later, because we want to avoid installing build requirements + # needlessly. Doing it here also works around setuptools generating + # UNKNOWN.egg-info when running get_requires_for_build_wheel on a directory + # without setup.py nor setup.cfg. + self.req.isolated_editable_sanity_check() + # Install the dynamic build requirements. + self._install_build_reqs(finder) + # Check if the current environment provides build dependencies + should_check_deps = self.req.use_pep517 and check_build_deps + if should_check_deps: + pyproject_requires = self.req.pyproject_requires + assert pyproject_requires is not None + conflicting, missing = self.req.build_env.check_requirements( + pyproject_requires + ) + if conflicting: + self._raise_conflicts("the backend dependencies", conflicting) + if missing: + self._raise_missing_reqs(missing) + self.req.prepare_metadata() + + def _prepare_build_backend(self, finder: PackageFinder) -> None: + # Isolate in a BuildEnvironment and install the build-time + # requirements. + pyproject_requires = self.req.pyproject_requires + assert pyproject_requires is not None + + self.req.build_env = BuildEnvironment() + self.req.build_env.install_requirements( + finder, pyproject_requires, "overlay", kind="build dependencies" + ) + conflicting, missing = self.req.build_env.check_requirements( + self.req.requirements_to_check + ) + if conflicting: + self._raise_conflicts("PEP 517/518 supported requirements", conflicting) + if missing: + logger.warning( + "Missing build requirements in pyproject.toml for %s.", + self.req, + ) + logger.warning( + "The project does not specify a build backend, and " + "pip cannot fall back to setuptools without %s.", + " and ".join(map(repr, sorted(missing))), + ) + + def _get_build_requires_wheel(self) -> Iterable[str]: + with self.req.build_env: + runner = runner_with_spinner_message("Getting requirements to build wheel") + backend = self.req.pep517_backend + assert backend is not None + with backend.subprocess_runner(runner): + return backend.get_requires_for_build_wheel() + + def _get_build_requires_editable(self) -> Iterable[str]: + with self.req.build_env: + runner = runner_with_spinner_message( + "Getting requirements to build editable" + ) + backend = self.req.pep517_backend + assert backend is not None + with backend.subprocess_runner(runner): + return backend.get_requires_for_build_editable() + + def _install_build_reqs(self, finder: PackageFinder) -> None: + # Install any extra build dependencies that the backend requests. + # This must be done in a second pass, as the pyproject.toml + # dependencies must be installed before we can call the backend. + if ( + self.req.editable + and self.req.permit_editable_wheels + and self.req.supports_pyproject_editable() + ): + build_reqs = self._get_build_requires_editable() + else: + build_reqs = self._get_build_requires_wheel() + conflicting, missing = self.req.build_env.check_requirements(build_reqs) + if conflicting: + self._raise_conflicts("the backend dependencies", conflicting) + self.req.build_env.install_requirements( + finder, missing, "normal", kind="backend dependencies" + ) + + def _raise_conflicts( + self, conflicting_with: str, conflicting_reqs: Set[Tuple[str, str]] + ) -> None: + format_string = ( + "Some build dependencies for {requirement} " + "conflict with {conflicting_with}: {description}." + ) + error_message = format_string.format( + requirement=self.req, + conflicting_with=conflicting_with, + description=", ".join( + f"{installed} is incompatible with {wanted}" + for installed, wanted in sorted(conflicting_reqs) + ), + ) + raise InstallationError(error_message) + + def _raise_missing_reqs(self, missing: Set[str]) -> None: + format_string = ( + "Some build dependencies for {requirement} are missing: {missing}." + ) + error_message = format_string.format( + requirement=self.req, missing=", ".join(map(repr, sorted(missing))) + ) + raise InstallationError(error_message) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py b/venv/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py new file mode 100644 index 0000000..03aac77 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py @@ -0,0 +1,34 @@ +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import ( + BaseDistribution, + FilesystemWheel, + get_wheel_distribution, +) + + +class WheelDistribution(AbstractDistribution): + """Represents a wheel distribution. + + This does not need any preparation as wheels can be directly unpacked. + """ + + def get_metadata_distribution(self) -> BaseDistribution: + """Loads the metadata from the wheel file into memory and returns a + Distribution that uses it, not relying on the wheel file or + requirement. + """ + assert self.req.local_file_path, "Set as part of preparation during download" + assert self.req.name, "Wheels are never unnamed" + wheel = FilesystemWheel(self.req.local_file_path) + return get_wheel_distribution(wheel, canonicalize_name(self.req.name)) + + def prepare_distribution_metadata( + self, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, + ) -> None: + pass diff --git a/venv/lib/python3.11/site-packages/pip/_internal/exceptions.py b/venv/lib/python3.11/site-packages/pip/_internal/exceptions.py new file mode 100644 index 0000000..d452729 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/exceptions.py @@ -0,0 +1,747 @@ +"""Exceptions used throughout package. + +This module MUST NOT try to import from anything within `pip._internal` to +operate. This is expected to be importable from any/all files within the +subpackage and, thus, should not depend on them. +""" + +import configparser +import contextlib +import locale +import logging +import pathlib +import re +import sys +from itertools import chain, groupby, repeat +from typing import TYPE_CHECKING, Dict, Iterator, List, Optional, Union + +from pip._vendor.requests.models import Request, Response +from pip._vendor.rich.console import Console, ConsoleOptions, RenderResult +from pip._vendor.rich.markup import escape +from pip._vendor.rich.text import Text + +if TYPE_CHECKING: + from hashlib import _Hash + from typing import Literal + + from pip._internal.metadata import BaseDistribution + from pip._internal.req.req_install import InstallRequirement + +logger = logging.getLogger(__name__) + + +# +# Scaffolding +# +def _is_kebab_case(s: str) -> bool: + return re.match(r"^[a-z]+(-[a-z]+)*$", s) is not None + + +def _prefix_with_indent( + s: Union[Text, str], + console: Console, + *, + prefix: str, + indent: str, +) -> Text: + if isinstance(s, Text): + text = s + else: + text = console.render_str(s) + + return console.render_str(prefix, overflow="ignore") + console.render_str( + f"\n{indent}", overflow="ignore" + ).join(text.split(allow_blank=True)) + + +class PipError(Exception): + """The base pip error.""" + + +class DiagnosticPipError(PipError): + """An error, that presents diagnostic information to the user. + + This contains a bunch of logic, to enable pretty presentation of our error + messages. Each error gets a unique reference. Each error can also include + additional context, a hint and/or a note -- which are presented with the + main error message in a consistent style. + + This is adapted from the error output styling in `sphinx-theme-builder`. + """ + + reference: str + + def __init__( + self, + *, + kind: 'Literal["error", "warning"]' = "error", + reference: Optional[str] = None, + message: Union[str, Text], + context: Optional[Union[str, Text]], + hint_stmt: Optional[Union[str, Text]], + note_stmt: Optional[Union[str, Text]] = None, + link: Optional[str] = None, + ) -> None: + # Ensure a proper reference is provided. + if reference is None: + assert hasattr(self, "reference"), "error reference not provided!" + reference = self.reference + assert _is_kebab_case(reference), "error reference must be kebab-case!" + + self.kind = kind + self.reference = reference + + self.message = message + self.context = context + + self.note_stmt = note_stmt + self.hint_stmt = hint_stmt + + self.link = link + + super().__init__(f"<{self.__class__.__name__}: {self.reference}>") + + def __repr__(self) -> str: + return ( + f"<{self.__class__.__name__}(" + f"reference={self.reference!r}, " + f"message={self.message!r}, " + f"context={self.context!r}, " + f"note_stmt={self.note_stmt!r}, " + f"hint_stmt={self.hint_stmt!r}" + ")>" + ) + + def __rich_console__( + self, + console: Console, + options: ConsoleOptions, + ) -> RenderResult: + colour = "red" if self.kind == "error" else "yellow" + + yield f"[{colour} bold]{self.kind}[/]: [bold]{self.reference}[/]" + yield "" + + if not options.ascii_only: + # Present the main message, with relevant context indented. + if self.context is not None: + yield _prefix_with_indent( + self.message, + console, + prefix=f"[{colour}]×[/] ", + indent=f"[{colour}]│[/] ", + ) + yield _prefix_with_indent( + self.context, + console, + prefix=f"[{colour}]╰─>[/] ", + indent=f"[{colour}] [/] ", + ) + else: + yield _prefix_with_indent( + self.message, + console, + prefix="[red]×[/] ", + indent=" ", + ) + else: + yield self.message + if self.context is not None: + yield "" + yield self.context + + if self.note_stmt is not None or self.hint_stmt is not None: + yield "" + + if self.note_stmt is not None: + yield _prefix_with_indent( + self.note_stmt, + console, + prefix="[magenta bold]note[/]: ", + indent=" ", + ) + if self.hint_stmt is not None: + yield _prefix_with_indent( + self.hint_stmt, + console, + prefix="[cyan bold]hint[/]: ", + indent=" ", + ) + + if self.link is not None: + yield "" + yield f"Link: {self.link}" + + +# +# Actual Errors +# +class ConfigurationError(PipError): + """General exception in configuration""" + + +class InstallationError(PipError): + """General exception during installation""" + + +class UninstallationError(PipError): + """General exception during uninstallation""" + + +class MissingPyProjectBuildRequires(DiagnosticPipError): + """Raised when pyproject.toml has `build-system`, but no `build-system.requires`.""" + + reference = "missing-pyproject-build-system-requires" + + def __init__(self, *, package: str) -> None: + super().__init__( + message=f"Can not process {escape(package)}", + context=Text( + "This package has an invalid pyproject.toml file.\n" + "The [build-system] table is missing the mandatory `requires` key." + ), + note_stmt="This is an issue with the package mentioned above, not pip.", + hint_stmt=Text("See PEP 518 for the detailed specification."), + ) + + +class InvalidPyProjectBuildRequires(DiagnosticPipError): + """Raised when pyproject.toml an invalid `build-system.requires`.""" + + reference = "invalid-pyproject-build-system-requires" + + def __init__(self, *, package: str, reason: str) -> None: + super().__init__( + message=f"Can not process {escape(package)}", + context=Text( + "This package has an invalid `build-system.requires` key in " + f"pyproject.toml.\n{reason}" + ), + note_stmt="This is an issue with the package mentioned above, not pip.", + hint_stmt=Text("See PEP 518 for the detailed specification."), + ) + + +class NoneMetadataError(PipError): + """Raised when accessing a Distribution's "METADATA" or "PKG-INFO". + + This signifies an inconsistency, when the Distribution claims to have + the metadata file (if not, raise ``FileNotFoundError`` instead), but is + not actually able to produce its content. This may be due to permission + errors. + """ + + def __init__( + self, + dist: "BaseDistribution", + metadata_name: str, + ) -> None: + """ + :param dist: A Distribution object. + :param metadata_name: The name of the metadata being accessed + (can be "METADATA" or "PKG-INFO"). + """ + self.dist = dist + self.metadata_name = metadata_name + + def __str__(self) -> str: + # Use `dist` in the error message because its stringification + # includes more information, like the version and location. + return "None {} metadata found for distribution: {}".format( + self.metadata_name, + self.dist, + ) + + +class UserInstallationInvalid(InstallationError): + """A --user install is requested on an environment without user site.""" + + def __str__(self) -> str: + return "User base directory is not specified" + + +class InvalidSchemeCombination(InstallationError): + def __str__(self) -> str: + before = ", ".join(str(a) for a in self.args[:-1]) + return f"Cannot set {before} and {self.args[-1]} together" + + +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 NetworkConnectionError(PipError): + """HTTP connection error""" + + def __init__( + self, + error_msg: str, + response: Optional[Response] = None, + request: Optional[Request] = None, + ) -> None: + """ + Initialize NetworkConnectionError with `request` and `response` + objects. + """ + self.response = response + self.request = request + self.error_msg = error_msg + if ( + self.response is not None + and not self.request + and hasattr(response, "request") + ): + self.request = self.response.request + super().__init__(error_msg, response, request) + + def __str__(self) -> str: + return str(self.error_msg) + + +class InvalidWheelFilename(InstallationError): + """Invalid wheel filename.""" + + +class UnsupportedWheel(InstallationError): + """Unsupported wheel.""" + + +class InvalidWheel(InstallationError): + """Invalid (e.g. corrupt) wheel.""" + + def __init__(self, location: str, name: str): + self.location = location + self.name = name + + def __str__(self) -> str: + return f"Wheel '{self.name}' located at {self.location} is invalid." + + +class MetadataInconsistent(InstallationError): + """Built metadata contains inconsistent information. + + This is raised when the metadata contains values (e.g. name and version) + that do not match the information previously obtained from sdist filename, + user-supplied ``#egg=`` value, or an install requirement name. + """ + + def __init__( + self, ireq: "InstallRequirement", field: str, f_val: str, m_val: str + ) -> None: + self.ireq = ireq + self.field = field + self.f_val = f_val + self.m_val = m_val + + def __str__(self) -> str: + return ( + f"Requested {self.ireq} has inconsistent {self.field}: " + f"expected {self.f_val!r}, but metadata has {self.m_val!r}" + ) + + +class LegacyInstallFailure(DiagnosticPipError): + """Error occurred while executing `setup.py install`""" + + reference = "legacy-install-failure" + + def __init__(self, package_details: str) -> None: + super().__init__( + message="Encountered error while trying to install package.", + context=package_details, + hint_stmt="See above for output from the failure.", + note_stmt="This is an issue with the package mentioned above, not pip.", + ) + + +class InstallationSubprocessError(DiagnosticPipError, InstallationError): + """A subprocess call failed.""" + + reference = "subprocess-exited-with-error" + + def __init__( + self, + *, + command_description: str, + exit_code: int, + output_lines: Optional[List[str]], + ) -> None: + if output_lines is None: + output_prompt = Text("See above for output.") + else: + output_prompt = ( + Text.from_markup(f"[red][{len(output_lines)} lines of output][/]\n") + + Text("".join(output_lines)) + + Text.from_markup(R"[red]\[end of output][/]") + ) + + super().__init__( + message=( + f"[green]{escape(command_description)}[/] did not run successfully.\n" + f"exit code: {exit_code}" + ), + context=output_prompt, + hint_stmt=None, + note_stmt=( + "This error originates from a subprocess, and is likely not a " + "problem with pip." + ), + ) + + self.command_description = command_description + self.exit_code = exit_code + + def __str__(self) -> str: + return f"{self.command_description} exited with {self.exit_code}" + + +class MetadataGenerationFailed(InstallationSubprocessError, InstallationError): + reference = "metadata-generation-failed" + + def __init__( + self, + *, + package_details: str, + ) -> None: + super(InstallationSubprocessError, self).__init__( + message="Encountered error while generating package metadata.", + context=escape(package_details), + hint_stmt="See above for details.", + note_stmt="This is an issue with the package mentioned above, not pip.", + ) + + def __str__(self) -> str: + return "metadata generation failed" + + +class HashErrors(InstallationError): + """Multiple HashError instances rolled into one for reporting""" + + def __init__(self) -> None: + self.errors: List["HashError"] = [] + + def append(self, error: "HashError") -> None: + self.errors.append(error) + + def __str__(self) -> str: + 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) + return "" + + def __bool__(self) -> bool: + return bool(self.errors) + + +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: Optional["InstallRequirement"] = None + head = "" + order: int = -1 + + def body(self) -> str: + """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 + its link already populated by the resolver's _populate_link(). + + """ + return f" {self._requirement_name()}" + + def __str__(self) -> str: + return f"{self.head}\n{self.body()}" + + def _requirement_name(self) -> str: + """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: str) -> None: + """ + :param gotten_hash: The hash of the (possibly malicious) archive we + just downloaded + """ + self.gotten_hash = gotten_hash + + def body(self) -> str: + # 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 " {} --hash={}:{}".format( + 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: Dict[str, List[str]], gots: Dict[str, "_Hash"]) -> None: + """ + :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) -> str: + return " {}:\n{}".format(self._requirement_name(), self._hash_comparison()) + + def _hash_comparison(self) -> str: + """ + Return a comparison of actual and expected hash values. + + Example:: + + Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde + or 123451234512345123451234512345123451234512345 + Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef + + """ + + def hash_then_or(hash_name: str) -> "chain[str]": + # 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: List[str] = [] + for hash_name, expecteds in self.allowed.items(): + prefix = hash_then_or(hash_name) + lines.extend( + (" Expected {} {}".format(next(prefix), e)) for e in expecteds + ) + lines.append( + " Got {}\n".format(self.gots[hash_name].hexdigest()) + ) + return "\n".join(lines) + + +class UnsupportedPythonVersion(InstallationError): + """Unsupported python version according to Requires-Python package + metadata.""" + + +class ConfigurationFileCouldNotBeLoaded(ConfigurationError): + """When there are errors while loading a configuration file""" + + def __init__( + self, + reason: str = "could not be loaded", + fname: Optional[str] = None, + error: Optional[configparser.Error] = None, + ) -> None: + super().__init__(error) + self.reason = reason + self.fname = fname + self.error = error + + def __str__(self) -> str: + if self.fname is not None: + message_part = f" in {self.fname}." + else: + assert self.error is not None + message_part = f".\n{self.error}\n" + return f"Configuration file {self.reason}{message_part}" + + +_DEFAULT_EXTERNALLY_MANAGED_ERROR = f"""\ +The Python environment under {sys.prefix} is managed externally, and may not be +manipulated by the user. Please use specific tooling from the distributor of +the Python installation to interact with this environment instead. +""" + + +class ExternallyManagedEnvironment(DiagnosticPipError): + """The current environment is externally managed. + + This is raised when the current environment is externally managed, as + defined by `PEP 668`_. The ``EXTERNALLY-MANAGED`` configuration is checked + and displayed when the error is bubbled up to the user. + + :param error: The error message read from ``EXTERNALLY-MANAGED``. + """ + + reference = "externally-managed-environment" + + def __init__(self, error: Optional[str]) -> None: + if error is None: + context = Text(_DEFAULT_EXTERNALLY_MANAGED_ERROR) + else: + context = Text(error) + super().__init__( + message="This environment is externally managed", + context=context, + note_stmt=( + "If you believe this is a mistake, please contact your " + "Python installation or OS distribution provider. " + "You can override this, at the risk of breaking your Python " + "installation or OS, by passing --break-system-packages." + ), + hint_stmt=Text("See PEP 668 for the detailed specification."), + ) + + @staticmethod + def _iter_externally_managed_error_keys() -> Iterator[str]: + # LC_MESSAGES is in POSIX, but not the C standard. The most common + # platform that does not implement this category is Windows, where + # using other categories for console message localization is equally + # unreliable, so we fall back to the locale-less vendor message. This + # can always be re-evaluated when a vendor proposes a new alternative. + try: + category = locale.LC_MESSAGES + except AttributeError: + lang: Optional[str] = None + else: + lang, _ = locale.getlocale(category) + if lang is not None: + yield f"Error-{lang}" + for sep in ("-", "_"): + before, found, _ = lang.partition(sep) + if not found: + continue + yield f"Error-{before}" + yield "Error" + + @classmethod + def from_config( + cls, + config: Union[pathlib.Path, str], + ) -> "ExternallyManagedEnvironment": + parser = configparser.ConfigParser(interpolation=None) + try: + parser.read(config, encoding="utf-8") + section = parser["externally-managed"] + for key in cls._iter_externally_managed_error_keys(): + with contextlib.suppress(KeyError): + return cls(section[key]) + except KeyError: + pass + except (OSError, UnicodeDecodeError, configparser.ParsingError): + from pip._internal.utils._log import VERBOSE + + exc_info = logger.isEnabledFor(VERBOSE) + logger.warning("Failed to read %s", config, exc_info=exc_info) + return cls(None) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/index/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/index/__init__.py new file mode 100644 index 0000000..7a17b7b --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/index/__init__.py @@ -0,0 +1,2 @@ +"""Index interaction code +""" diff --git a/venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f27fb26bbe73b06e0499f04a29081c76cb85aca GIT binary patch literal 248 zcmY*Tz0Lta6rDj3iCVr!v z3a2>t=bW2!|J&^r^XQ&$tFEutFnqw@%{^HDm}I|9@;U2Qj-9ENwC^eHD2s(tM)!n~ z)SC7ArGY4oKs>Q~xPL5QZBl}b1e=)+373OO3tYxxyR%S`E+A1$um`s`dK3+ZkSj+6 z>-Bg=Iap-@Ur9PnK!spHzfcY_vWG`=oEo`HXp+@^T=+Tv@l;kh=VgWSTFJgBt9kVa DOyWeV literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/collector.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b6d34047b8a5f31422b4dbe97ed988a5751e500 GIT binary patch literal 24554 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f3b61995e8e1988c29c1c6b3e0f0b0b357f246c GIT binary patch literal 44226 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/index/__pycache__/sources.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbc1796ce3033f8ea3edddba8985604d5671bfe6 GIT binary patch literal 11030 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 Optional[str]: + """Look for VCS schemes in the URL. + + Returns the matched VCS scheme, or None if there's no match. + """ + for scheme in vcs.schemes: + if url.lower().startswith(scheme) and url[len(scheme)] in "+:": + return scheme + return None + + +class _NotAPIContent(Exception): + def __init__(self, content_type: str, request_desc: str) -> None: + super().__init__(content_type, request_desc) + self.content_type = content_type + self.request_desc = request_desc + + +def _ensure_api_header(response: Response) -> None: + """ + Check the Content-Type header to ensure the response contains a Simple + API Response. + + Raises `_NotAPIContent` if the content type is not a valid content-type. + """ + content_type = response.headers.get("Content-Type", "Unknown") + + content_type_l = content_type.lower() + if content_type_l.startswith( + ( + "text/html", + "application/vnd.pypi.simple.v1+html", + "application/vnd.pypi.simple.v1+json", + ) + ): + return + + raise _NotAPIContent(content_type, response.request.method) + + +class _NotHTTP(Exception): + pass + + +def _ensure_api_response(url: str, session: PipSession) -> None: + """ + Send a HEAD request to the URL, and ensure the response contains a simple + API Response. + + Raises `_NotHTTP` if the URL is not available for a HEAD request, or + `_NotAPIContent` if the content type is not a valid content type. + """ + scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url) + if scheme not in {"http", "https"}: + raise _NotHTTP() + + resp = session.head(url, allow_redirects=True) + raise_for_status(resp) + + _ensure_api_header(resp) + + +def _get_simple_response(url: str, session: PipSession) -> Response: + """Access an Simple API response with GET, and return the response. + + This consists of three parts: + + 1. If the URL looks suspiciously like an archive, send a HEAD first to + check the Content-Type is HTML or Simple API, to avoid downloading a + large file. Raise `_NotHTTP` if the content type cannot be determined, or + `_NotAPIContent` if it is not HTML or a Simple API. + 2. Actually perform the request. Raise HTTP exceptions on network failures. + 3. Check the Content-Type header to make sure we got a Simple API response, + and raise `_NotAPIContent` otherwise. + """ + if is_archive_file(Link(url).filename): + _ensure_api_response(url, session=session) + + logger.debug("Getting page %s", redact_auth_from_url(url)) + + resp = session.get( + url, + headers={ + "Accept": ", ".join( + [ + "application/vnd.pypi.simple.v1+json", + "application/vnd.pypi.simple.v1+html; q=0.1", + "text/html; q=0.01", + ] + ), + # We don't want to blindly returned cached data for + # /simple/, because authors generally expecting that + # twine upload && pip install will function, but if + # they've done a pip install in the last ~10 minutes + # it won't. Thus by setting this to zero we will not + # blindly use any cached data, however the benefit of + # using max-age=0 instead of no-cache, is that we will + # still support conditional requests, so we will still + # minimize traffic sent in cases where the page hasn't + # changed at all, we will just always incur the round + # trip for the conditional GET now instead of only + # once per 10 minutes. + # For more information, please see pypa/pip#5670. + "Cache-Control": "max-age=0", + }, + ) + raise_for_status(resp) + + # 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 a + # Simple API response or not. However we can check after we've + # downloaded it. + _ensure_api_header(resp) + + logger.debug( + "Fetched page %s as %s", + redact_auth_from_url(url), + resp.headers.get("Content-Type", "Unknown"), + ) + + return resp + + +def _get_encoding_from_headers(headers: ResponseHeaders) -> Optional[str]: + """Determine if we have any encoding information in our headers.""" + if headers and "Content-Type" in headers: + m = email.message.Message() + m["content-type"] = headers["Content-Type"] + charset = m.get_param("charset") + if charset: + return str(charset) + return None + + +class CacheablePageContent: + def __init__(self, page: "IndexContent") -> None: + assert page.cache_link_parsing + self.page = page + + def __eq__(self, other: object) -> bool: + return isinstance(other, type(self)) and self.page.url == other.page.url + + def __hash__(self) -> int: + return hash(self.page.url) + + +class ParseLinks(Protocol): + def __call__(self, page: "IndexContent") -> Iterable[Link]: + ... + + +def with_cached_index_content(fn: ParseLinks) -> ParseLinks: + """ + Given a function that parses an Iterable[Link] from an IndexContent, cache the + function's result (keyed by CacheablePageContent), unless the IndexContent + `page` has `page.cache_link_parsing == False`. + """ + + @functools.lru_cache(maxsize=None) + def wrapper(cacheable_page: CacheablePageContent) -> List[Link]: + return list(fn(cacheable_page.page)) + + @functools.wraps(fn) + def wrapper_wrapper(page: "IndexContent") -> List[Link]: + if page.cache_link_parsing: + return wrapper(CacheablePageContent(page)) + return list(fn(page)) + + return wrapper_wrapper + + +@with_cached_index_content +def parse_links(page: "IndexContent") -> Iterable[Link]: + """ + Parse a Simple API's Index Content, and yield its anchor elements as Link objects. + """ + + content_type_l = page.content_type.lower() + if content_type_l.startswith("application/vnd.pypi.simple.v1+json"): + data = json.loads(page.content) + for file in data.get("files", []): + link = Link.from_json(file, page.url) + if link is None: + continue + yield link + return + + parser = HTMLLinkParser(page.url) + encoding = page.encoding or "utf-8" + parser.feed(page.content.decode(encoding)) + + url = page.url + base_url = parser.base_url or url + for anchor in parser.anchors: + link = Link.from_element(anchor, page_url=url, base_url=base_url) + if link is None: + continue + yield link + + +class IndexContent: + """Represents one response (or page), along with its URL""" + + def __init__( + self, + content: bytes, + content_type: str, + encoding: Optional[str], + url: str, + cache_link_parsing: bool = True, + ) -> None: + """ + :param encoding: the encoding to decode the given content. + :param url: the URL from which the HTML was downloaded. + :param cache_link_parsing: whether links parsed from this page's url + should be cached. PyPI index urls should + have this set to False, for example. + """ + self.content = content + self.content_type = content_type + self.encoding = encoding + self.url = url + self.cache_link_parsing = cache_link_parsing + + def __str__(self) -> str: + return redact_auth_from_url(self.url) + + +class HTMLLinkParser(HTMLParser): + """ + HTMLParser that keeps the first base HREF and a list of all anchor + elements' attributes. + """ + + def __init__(self, url: str) -> None: + super().__init__(convert_charrefs=True) + + self.url: str = url + self.base_url: Optional[str] = None + self.anchors: List[Dict[str, Optional[str]]] = [] + + def handle_starttag(self, tag: str, attrs: List[Tuple[str, Optional[str]]]) -> None: + if tag == "base" and self.base_url is None: + href = self.get_href(attrs) + if href is not None: + self.base_url = href + elif tag == "a": + self.anchors.append(dict(attrs)) + + def get_href(self, attrs: List[Tuple[str, Optional[str]]]) -> Optional[str]: + for name, value in attrs: + if name == "href": + return value + return None + + +def _handle_get_simple_fail( + link: Link, + reason: Union[str, Exception], + meth: Optional[Callable[..., None]] = None, +) -> None: + if meth is None: + meth = logger.debug + meth("Could not fetch URL %s: %s - skipping", link, reason) + + +def _make_index_content( + response: Response, cache_link_parsing: bool = True +) -> IndexContent: + encoding = _get_encoding_from_headers(response.headers) + return IndexContent( + response.content, + response.headers["Content-Type"], + encoding=encoding, + url=response.url, + cache_link_parsing=cache_link_parsing, + ) + + +def _get_index_content(link: Link, *, session: PipSession) -> Optional["IndexContent"]: + url = link.url.split("#", 1)[0] + + # Check for VCS schemes that do not support lookup as web pages. + vcs_scheme = _match_vcs_scheme(url) + if vcs_scheme: + logger.warning( + "Cannot look at %s URL %s because it does not support lookup as web pages.", + vcs_scheme, + link, + ) + return None + + # Tack index.html onto file:// URLs that point to directories + scheme, _, path, _, _, _ = 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 += "/" + # TODO: In the future, it would be nice if pip supported PEP 691 + # style responses in the file:// URLs, however there's no + # standard file extension for application/vnd.pypi.simple.v1+json + # so we'll need to come up with something on our own. + url = urllib.parse.urljoin(url, "index.html") + logger.debug(" file: URL is directory, getting %s", url) + + try: + resp = _get_simple_response(url, session=session) + except _NotHTTP: + logger.warning( + "Skipping page %s because it looks like an archive, and cannot " + "be checked by a HTTP HEAD request.", + link, + ) + except _NotAPIContent as exc: + logger.warning( + "Skipping page %s because the %s request got Content-Type: %s. " + "The only supported Content-Types are application/vnd.pypi.simple.v1+json, " + "application/vnd.pypi.simple.v1+html, and text/html", + link, + exc.request_desc, + exc.content_type, + ) + except NetworkConnectionError as exc: + _handle_get_simple_fail(link, exc) + except RetryError as exc: + _handle_get_simple_fail(link, exc) + except SSLError as exc: + reason = "There was a problem confirming the ssl certificate: " + reason += str(exc) + _handle_get_simple_fail(link, reason, meth=logger.info) + except requests.ConnectionError as exc: + _handle_get_simple_fail(link, f"connection error: {exc}") + except requests.Timeout: + _handle_get_simple_fail(link, "timed out") + else: + return _make_index_content(resp, cache_link_parsing=link.cache_link_parsing) + return None + + +class CollectedSources(NamedTuple): + find_links: Sequence[Optional[LinkSource]] + index_urls: Sequence[Optional[LinkSource]] + + +class LinkCollector: + + """ + Responsible for collecting Link objects from all configured locations, + making network requests as needed. + + The class's main method is its collect_sources() method. + """ + + def __init__( + self, + session: PipSession, + search_scope: SearchScope, + ) -> None: + self.search_scope = search_scope + self.session = session + + @classmethod + def create( + cls, + session: PipSession, + options: Values, + suppress_no_index: bool = False, + ) -> "LinkCollector": + """ + :param session: The Session to use to make requests. + :param suppress_no_index: Whether to ignore the --no-index option + when constructing the SearchScope object. + """ + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index and not suppress_no_index: + logger.debug( + "Ignoring indexes: %s", + ",".join(redact_auth_from_url(url) for url in index_urls), + ) + index_urls = [] + + # Make sure find_links is a list before passing to create(). + find_links = options.find_links or [] + + search_scope = SearchScope.create( + find_links=find_links, + index_urls=index_urls, + no_index=options.no_index, + ) + link_collector = LinkCollector( + session=session, + search_scope=search_scope, + ) + return link_collector + + @property + def find_links(self) -> List[str]: + return self.search_scope.find_links + + def fetch_response(self, location: Link) -> Optional[IndexContent]: + """ + Fetch an HTML page containing package links. + """ + return _get_index_content(location, session=self.session) + + def collect_sources( + self, + project_name: str, + candidates_from_page: CandidatesFromPage, + ) -> CollectedSources: + # The OrderedDict calls deduplicate sources by URL. + index_url_sources = collections.OrderedDict( + build_source( + loc, + candidates_from_page=candidates_from_page, + page_validator=self.session.is_secure_origin, + expand_dir=False, + cache_link_parsing=False, + ) + for loc in self.search_scope.get_index_urls_locations(project_name) + ).values() + find_links_sources = collections.OrderedDict( + build_source( + loc, + candidates_from_page=candidates_from_page, + page_validator=self.session.is_secure_origin, + expand_dir=True, + cache_link_parsing=True, + ) + for loc in self.find_links + ).values() + + if logger.isEnabledFor(logging.DEBUG): + lines = [ + f"* {s.link}" + for s in itertools.chain(find_links_sources, index_url_sources) + if s is not None and s.link is not None + ] + lines = [ + f"{len(lines)} location(s) to search " + f"for versions of {project_name}:" + ] + lines + logger.debug("\n".join(lines)) + + return CollectedSources( + find_links=list(find_links_sources), + index_urls=list(index_url_sources), + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/index/package_finder.py b/venv/lib/python3.11/site-packages/pip/_internal/index/package_finder.py new file mode 100644 index 0000000..b6f8d57 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/index/package_finder.py @@ -0,0 +1,1029 @@ +"""Routines related to PyPI, indexes""" + +import enum +import functools +import itertools +import logging +import re +from typing import TYPE_CHECKING, FrozenSet, Iterable, List, Optional, Set, Tuple, Union + +from pip._vendor.packaging import specifiers +from pip._vendor.packaging.tags import Tag +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import _BaseVersion +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.exceptions import ( + BestVersionAlreadyInstalled, + DistributionNotFound, + InvalidWheelFilename, + UnsupportedWheel, +) +from pip._internal.index.collector import LinkCollector, parse_links +from pip._internal.models.candidate import InstallationCandidate +from pip._internal.models.format_control import FormatControl +from pip._internal.models.link import Link +from pip._internal.models.search_scope import SearchScope +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.models.wheel import Wheel +from pip._internal.req import InstallRequirement +from pip._internal.utils._log import getLogger +from pip._internal.utils.filetypes import WHEEL_EXTENSION +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import build_netloc +from pip._internal.utils.packaging import check_requires_python +from pip._internal.utils.unpacking import SUPPORTED_EXTENSIONS + +if TYPE_CHECKING: + from pip._vendor.typing_extensions import TypeGuard + +__all__ = ["FormatControl", "BestCandidateResult", "PackageFinder"] + + +logger = getLogger(__name__) + +BuildTag = Union[Tuple[()], Tuple[int, str]] +CandidateSortingKey = Tuple[int, int, int, _BaseVersion, Optional[int], BuildTag] + + +def _check_link_requires_python( + link: Link, + version_info: Tuple[int, int, int], + ignore_requires_python: bool = False, +) -> bool: + """ + Return whether the given Python version is compatible with a link's + "Requires-Python" value. + + :param version_info: A 3-tuple of ints representing the Python + major-minor-micro version to check. + :param ignore_requires_python: Whether to ignore the "Requires-Python" + value if the given Python version isn't compatible. + """ + try: + is_compatible = check_requires_python( + link.requires_python, + version_info=version_info, + ) + except specifiers.InvalidSpecifier: + logger.debug( + "Ignoring invalid Requires-Python (%r) for link: %s", + link.requires_python, + link, + ) + else: + if not is_compatible: + version = ".".join(map(str, version_info)) + if not ignore_requires_python: + logger.verbose( + "Link requires a different Python (%s not in: %r): %s", + version, + link.requires_python, + link, + ) + return False + + logger.debug( + "Ignoring failed Requires-Python check (%s not in: %r) for link: %s", + version, + link.requires_python, + link, + ) + + return True + + +class LinkType(enum.Enum): + candidate = enum.auto() + different_project = enum.auto() + yanked = enum.auto() + format_unsupported = enum.auto() + format_invalid = enum.auto() + platform_mismatch = enum.auto() + requires_python_mismatch = enum.auto() + + +class LinkEvaluator: + + """ + Responsible for evaluating links for a particular project. + """ + + _py_version_re = re.compile(r"-py([123]\.?[0-9]?)$") + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + def __init__( + self, + project_name: str, + canonical_name: str, + formats: FrozenSet[str], + target_python: TargetPython, + allow_yanked: bool, + ignore_requires_python: Optional[bool] = None, + ) -> None: + """ + :param project_name: The user supplied package name. + :param canonical_name: The canonical package name. + :param formats: The formats allowed for this package. Should be a set + with 'binary' or 'source' or both in it. + :param target_python: The target Python interpreter to use when + evaluating link compatibility. This is used, for example, to + check wheel compatibility, as well as when checking the Python + version, e.g. the Python version embedded in a link filename + (or egg fragment) and against an HTML link's optional PEP 503 + "data-requires-python" attribute. + :param allow_yanked: Whether files marked as yanked (in the sense + of PEP 592) are permitted to be candidates for install. + :param ignore_requires_python: Whether to ignore incompatible + PEP 503 "data-requires-python" values in HTML links. Defaults + to False. + """ + if ignore_requires_python is None: + ignore_requires_python = False + + self._allow_yanked = allow_yanked + self._canonical_name = canonical_name + self._ignore_requires_python = ignore_requires_python + self._formats = formats + self._target_python = target_python + + self.project_name = project_name + + def evaluate_link(self, link: Link) -> Tuple[LinkType, str]: + """ + Determine whether a link is a candidate for installation. + + :return: A tuple (result, detail), where *result* is an enum + representing whether the evaluation found a candidate, or the reason + why one is not found. If a candidate is found, *detail* will be the + candidate's version string; if one is not found, it contains the + reason the link fails to qualify. + """ + version = None + if link.is_yanked and not self._allow_yanked: + reason = link.yanked_reason or "" + return (LinkType.yanked, f"yanked for reason: {reason}") + + if link.egg_fragment: + egg_info = link.egg_fragment + ext = link.ext + else: + egg_info, ext = link.splitext() + if not ext: + return (LinkType.format_unsupported, "not a file") + if ext not in SUPPORTED_EXTENSIONS: + return ( + LinkType.format_unsupported, + f"unsupported archive format: {ext}", + ) + if "binary" not in self._formats and ext == WHEEL_EXTENSION: + reason = f"No binaries permitted for {self.project_name}" + return (LinkType.format_unsupported, reason) + if "macosx10" in link.path and ext == ".zip": + return (LinkType.format_unsupported, "macosx10 one") + if ext == WHEEL_EXTENSION: + try: + wheel = Wheel(link.filename) + except InvalidWheelFilename: + return ( + LinkType.format_invalid, + "invalid wheel filename", + ) + if canonicalize_name(wheel.name) != self._canonical_name: + reason = f"wrong project name (not {self.project_name})" + return (LinkType.different_project, reason) + + supported_tags = self._target_python.get_tags() + if not wheel.supported(supported_tags): + # Include the wheel's tags in the reason string to + # simplify troubleshooting compatibility issues. + file_tags = ", ".join(wheel.get_formatted_file_tags()) + reason = ( + f"none of the wheel's tags ({file_tags}) are compatible " + f"(run pip debug --verbose to show compatible tags)" + ) + return (LinkType.platform_mismatch, reason) + + version = wheel.version + + # This should be up by the self.ok_binary check, but see issue 2700. + if "source" not in self._formats and ext != WHEEL_EXTENSION: + reason = f"No sources permitted for {self.project_name}" + return (LinkType.format_unsupported, reason) + + if not version: + version = _extract_version_from_fragment( + egg_info, + self._canonical_name, + ) + if not version: + reason = f"Missing project version for {self.project_name}" + return (LinkType.format_invalid, reason) + + match = self._py_version_re.search(version) + if match: + version = version[: match.start()] + py_version = match.group(1) + if py_version != self._target_python.py_version: + return ( + LinkType.platform_mismatch, + "Python version is incorrect", + ) + + supports_python = _check_link_requires_python( + link, + version_info=self._target_python.py_version_info, + ignore_requires_python=self._ignore_requires_python, + ) + if not supports_python: + reason = f"{version} Requires-Python {link.requires_python}" + return (LinkType.requires_python_mismatch, reason) + + logger.debug("Found link %s, version: %s", link, version) + + return (LinkType.candidate, version) + + +def filter_unallowed_hashes( + candidates: List[InstallationCandidate], + hashes: Optional[Hashes], + project_name: str, +) -> List[InstallationCandidate]: + """ + Filter out candidates whose hashes aren't allowed, and return a new + list of candidates. + + If at least one candidate has an allowed hash, then all candidates with + either an allowed hash or no hash specified are returned. Otherwise, + the given candidates are returned. + + Including the candidates with no hash specified when there is a match + allows a warning to be logged if there is a more preferred candidate + with no hash specified. Returning all candidates in the case of no + matches lets pip report the hash of the candidate that would otherwise + have been installed (e.g. permitting the user to more easily update + their requirements file with the desired hash). + """ + if not hashes: + logger.debug( + "Given no hashes to check %s links for project %r: " + "discarding no candidates", + len(candidates), + project_name, + ) + # Make sure we're not returning back the given value. + return list(candidates) + + matches_or_no_digest = [] + # Collect the non-matches for logging purposes. + non_matches = [] + match_count = 0 + for candidate in candidates: + link = candidate.link + if not link.has_hash: + pass + elif link.is_hash_allowed(hashes=hashes): + match_count += 1 + else: + non_matches.append(candidate) + continue + + matches_or_no_digest.append(candidate) + + if match_count: + filtered = matches_or_no_digest + else: + # Make sure we're not returning back the given value. + filtered = list(candidates) + + if len(filtered) == len(candidates): + discard_message = "discarding no candidates" + else: + discard_message = "discarding {} non-matches:\n {}".format( + len(non_matches), + "\n ".join(str(candidate.link) for candidate in non_matches), + ) + + logger.debug( + "Checked %s links for project %r against %s hashes " + "(%s matches, %s no digest): %s", + len(candidates), + project_name, + hashes.digest_count, + match_count, + len(matches_or_no_digest) - match_count, + discard_message, + ) + + return filtered + + +class CandidatePreferences: + + """ + Encapsulates some of the preferences for filtering and sorting + InstallationCandidate objects. + """ + + def __init__( + self, + prefer_binary: bool = False, + allow_all_prereleases: bool = False, + ) -> None: + """ + :param allow_all_prereleases: Whether to allow all pre-releases. + """ + self.allow_all_prereleases = allow_all_prereleases + self.prefer_binary = prefer_binary + + +class BestCandidateResult: + """A collection of candidates, returned by `PackageFinder.find_best_candidate`. + + This class is only intended to be instantiated by CandidateEvaluator's + `compute_best_candidate()` method. + """ + + def __init__( + self, + candidates: List[InstallationCandidate], + applicable_candidates: List[InstallationCandidate], + best_candidate: Optional[InstallationCandidate], + ) -> None: + """ + :param candidates: A sequence of all available candidates found. + :param applicable_candidates: The applicable candidates. + :param best_candidate: The most preferred candidate found, or None + if no applicable candidates were found. + """ + assert set(applicable_candidates) <= set(candidates) + + if best_candidate is None: + assert not applicable_candidates + else: + assert best_candidate in applicable_candidates + + self._applicable_candidates = applicable_candidates + self._candidates = candidates + + self.best_candidate = best_candidate + + def iter_all(self) -> Iterable[InstallationCandidate]: + """Iterate through all candidates.""" + return iter(self._candidates) + + def iter_applicable(self) -> Iterable[InstallationCandidate]: + """Iterate through the applicable candidates.""" + return iter(self._applicable_candidates) + + +class CandidateEvaluator: + + """ + Responsible for filtering and sorting candidates for installation based + on what tags are valid. + """ + + @classmethod + def create( + cls, + project_name: str, + target_python: Optional[TargetPython] = None, + prefer_binary: bool = False, + allow_all_prereleases: bool = False, + specifier: Optional[specifiers.BaseSpecifier] = None, + hashes: Optional[Hashes] = None, + ) -> "CandidateEvaluator": + """Create a CandidateEvaluator object. + + :param target_python: The target Python interpreter to use when + checking compatibility. If None (the default), a TargetPython + object will be constructed from the running Python. + :param specifier: An optional object implementing `filter` + (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable + versions. + :param hashes: An optional collection of allowed hashes. + """ + if target_python is None: + target_python = TargetPython() + if specifier is None: + specifier = specifiers.SpecifierSet() + + supported_tags = target_python.get_tags() + + return cls( + project_name=project_name, + supported_tags=supported_tags, + specifier=specifier, + prefer_binary=prefer_binary, + allow_all_prereleases=allow_all_prereleases, + hashes=hashes, + ) + + def __init__( + self, + project_name: str, + supported_tags: List[Tag], + specifier: specifiers.BaseSpecifier, + prefer_binary: bool = False, + allow_all_prereleases: bool = False, + hashes: Optional[Hashes] = None, + ) -> None: + """ + :param supported_tags: The PEP 425 tags supported by the target + Python in order of preference (most preferred first). + """ + self._allow_all_prereleases = allow_all_prereleases + self._hashes = hashes + self._prefer_binary = prefer_binary + self._project_name = project_name + self._specifier = specifier + self._supported_tags = supported_tags + # Since the index of the tag in the _supported_tags list is used + # as a priority, precompute a map from tag to index/priority to be + # used in wheel.find_most_preferred_tag. + self._wheel_tag_preferences = { + tag: idx for idx, tag in enumerate(supported_tags) + } + + def get_applicable_candidates( + self, + candidates: List[InstallationCandidate], + ) -> List[InstallationCandidate]: + """ + Return the applicable candidates from a list of candidates. + """ + # Using None infers from the specifier instead. + allow_prereleases = self._allow_all_prereleases or None + specifier = self._specifier + versions = { + str(v) + for v in 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 candidates), + prereleases=allow_prereleases, + ) + } + + # Again, converting version to str to deal with debundling. + applicable_candidates = [c for c in candidates if str(c.version) in versions] + + filtered_applicable_candidates = filter_unallowed_hashes( + candidates=applicable_candidates, + hashes=self._hashes, + project_name=self._project_name, + ) + + return sorted(filtered_applicable_candidates, key=self._sort_key) + + def _sort_key(self, candidate: InstallationCandidate) -> CandidateSortingKey: + """ + Function to pass as the `key` argument to a call to sorted() to sort + InstallationCandidates by preference. + + Returns a tuple such that tuples sorting as greater using Python's + default comparison operator are more preferred. + + The preference is as follows: + + First and foremost, candidates with allowed (matching) hashes are + always preferred over candidates without matching hashes. This is + because e.g. if the only candidate with an allowed hash is yanked, + we still want to use that candidate. + + Second, excepting hash considerations, candidates that have been + yanked (in the sense of PEP 592) are always less preferred than + candidates that haven't been yanked. Then: + + If not finding wheels, they are 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._supported_tags) + 3. source archives + If prefer_binary was set, then all wheels are sorted above sources. + + 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 + """ + valid_tags = self._supported_tags + support_num = len(valid_tags) + build_tag: BuildTag = () + binary_preference = 0 + link = candidate.link + if link.is_wheel: + # can raise InvalidWheelFilename + wheel = Wheel(link.filename) + try: + pri = -( + wheel.find_most_preferred_tag( + valid_tags, self._wheel_tag_preferences + ) + ) + except ValueError: + raise UnsupportedWheel( + "{} is not a supported wheel for this platform. It " + "can't be sorted.".format(wheel.filename) + ) + if self._prefer_binary: + binary_preference = 1 + if wheel.build_tag is not None: + match = re.match(r"^(\d+)(.*)$", wheel.build_tag) + assert match is not None, "guaranteed by filename validation" + build_tag_groups = match.groups() + build_tag = (int(build_tag_groups[0]), build_tag_groups[1]) + else: # sdist + pri = -(support_num) + has_allowed_hash = int(link.is_hash_allowed(self._hashes)) + yank_value = -1 * int(link.is_yanked) # -1 for yanked. + return ( + has_allowed_hash, + yank_value, + binary_preference, + candidate.version, + pri, + build_tag, + ) + + def sort_best_candidate( + self, + candidates: List[InstallationCandidate], + ) -> Optional[InstallationCandidate]: + """ + Return the best candidate per the instance's sort order, or None if + no candidate is acceptable. + """ + if not candidates: + return None + best_candidate = max(candidates, key=self._sort_key) + return best_candidate + + def compute_best_candidate( + self, + candidates: List[InstallationCandidate], + ) -> BestCandidateResult: + """ + Compute and return a `BestCandidateResult` instance. + """ + applicable_candidates = self.get_applicable_candidates(candidates) + + best_candidate = self.sort_best_candidate(applicable_candidates) + + return BestCandidateResult( + candidates, + applicable_candidates=applicable_candidates, + best_candidate=best_candidate, + ) + + +class PackageFinder: + """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, + link_collector: LinkCollector, + target_python: TargetPython, + allow_yanked: bool, + format_control: Optional[FormatControl] = None, + candidate_prefs: Optional[CandidatePreferences] = None, + ignore_requires_python: Optional[bool] = None, + ) -> None: + """ + This constructor is primarily meant to be used by the create() class + method and from tests. + + :param format_control: A FormatControl object, used to control + the selection of source packages / binary packages when consulting + the index and links. + :param candidate_prefs: Options to use when creating a + CandidateEvaluator object. + """ + if candidate_prefs is None: + candidate_prefs = CandidatePreferences() + + format_control = format_control or FormatControl(set(), set()) + + self._allow_yanked = allow_yanked + self._candidate_prefs = candidate_prefs + self._ignore_requires_python = ignore_requires_python + self._link_collector = link_collector + self._target_python = target_python + + self.format_control = format_control + + # These are boring links that have already been logged somehow. + self._logged_links: Set[Tuple[Link, LinkType, str]] = set() + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + @classmethod + def create( + cls, + link_collector: LinkCollector, + selection_prefs: SelectionPreferences, + target_python: Optional[TargetPython] = None, + ) -> "PackageFinder": + """Create a PackageFinder. + + :param selection_prefs: The candidate selection preferences, as a + SelectionPreferences object. + :param target_python: The target Python interpreter to use when + checking compatibility. If None (the default), a TargetPython + object will be constructed from the running Python. + """ + if target_python is None: + target_python = TargetPython() + + candidate_prefs = CandidatePreferences( + prefer_binary=selection_prefs.prefer_binary, + allow_all_prereleases=selection_prefs.allow_all_prereleases, + ) + + return cls( + candidate_prefs=candidate_prefs, + link_collector=link_collector, + target_python=target_python, + allow_yanked=selection_prefs.allow_yanked, + format_control=selection_prefs.format_control, + ignore_requires_python=selection_prefs.ignore_requires_python, + ) + + @property + def target_python(self) -> TargetPython: + return self._target_python + + @property + def search_scope(self) -> SearchScope: + return self._link_collector.search_scope + + @search_scope.setter + def search_scope(self, search_scope: SearchScope) -> None: + self._link_collector.search_scope = search_scope + + @property + def find_links(self) -> List[str]: + return self._link_collector.find_links + + @property + def index_urls(self) -> List[str]: + return self.search_scope.index_urls + + @property + def trusted_hosts(self) -> Iterable[str]: + for host_port in self._link_collector.session.pip_trusted_origins: + yield build_netloc(*host_port) + + @property + def allow_all_prereleases(self) -> bool: + return self._candidate_prefs.allow_all_prereleases + + def set_allow_all_prereleases(self) -> None: + self._candidate_prefs.allow_all_prereleases = True + + @property + def prefer_binary(self) -> bool: + return self._candidate_prefs.prefer_binary + + def set_prefer_binary(self) -> None: + self._candidate_prefs.prefer_binary = True + + def requires_python_skipped_reasons(self) -> List[str]: + reasons = { + detail + for _, result, detail in self._logged_links + if result == LinkType.requires_python_mismatch + } + return sorted(reasons) + + def make_link_evaluator(self, project_name: str) -> LinkEvaluator: + canonical_name = canonicalize_name(project_name) + formats = self.format_control.get_allowed_formats(canonical_name) + + return LinkEvaluator( + project_name=project_name, + canonical_name=canonical_name, + formats=formats, + target_python=self._target_python, + allow_yanked=self._allow_yanked, + ignore_requires_python=self._ignore_requires_python, + ) + + def _sort_links(self, links: Iterable[Link]) -> List[Link]: + """ + Returns elements of links in order, non-egg links first, egg links + second, while eliminating duplicates + """ + eggs, no_eggs = [], [] + seen: Set[Link] = 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 _log_skipped_link(self, link: Link, result: LinkType, detail: str) -> None: + entry = (link, result, detail) + if entry not in self._logged_links: + # Put the link at the end so the reason is more visible and because + # the link string is usually very long. + logger.debug("Skipping link: %s: %s", detail, link) + self._logged_links.add(entry) + + def get_install_candidate( + self, link_evaluator: LinkEvaluator, link: Link + ) -> Optional[InstallationCandidate]: + """ + If the link is a candidate for install, convert it to an + InstallationCandidate and return it. Otherwise, return None. + """ + result, detail = link_evaluator.evaluate_link(link) + if result != LinkType.candidate: + self._log_skipped_link(link, result, detail) + return None + + return InstallationCandidate( + name=link_evaluator.project_name, + link=link, + version=detail, + ) + + def evaluate_links( + self, link_evaluator: LinkEvaluator, links: Iterable[Link] + ) -> List[InstallationCandidate]: + """ + Convert links that are candidates to InstallationCandidate objects. + """ + candidates = [] + for link in self._sort_links(links): + candidate = self.get_install_candidate(link_evaluator, link) + if candidate is not None: + candidates.append(candidate) + + return candidates + + def process_project_url( + self, project_url: Link, link_evaluator: LinkEvaluator + ) -> List[InstallationCandidate]: + logger.debug( + "Fetching project page and analyzing links: %s", + project_url, + ) + index_response = self._link_collector.fetch_response(project_url) + if index_response is None: + return [] + + page_links = list(parse_links(index_response)) + + with indent_log(): + package_links = self.evaluate_links( + link_evaluator, + links=page_links, + ) + + return package_links + + @functools.lru_cache(maxsize=None) + def find_all_candidates(self, project_name: str) -> List[InstallationCandidate]: + """Find all available InstallationCandidate for project_name + + This checks index_urls and find_links. + All versions found are returned as an InstallationCandidate list. + + See LinkEvaluator.evaluate_link() for details on which files + are accepted. + """ + link_evaluator = self.make_link_evaluator(project_name) + + collected_sources = self._link_collector.collect_sources( + project_name=project_name, + candidates_from_page=functools.partial( + self.process_project_url, + link_evaluator=link_evaluator, + ), + ) + + page_candidates_it = itertools.chain.from_iterable( + source.page_candidates() + for sources in collected_sources + for source in sources + if source is not None + ) + page_candidates = list(page_candidates_it) + + file_links_it = itertools.chain.from_iterable( + source.file_links() + for sources in collected_sources + for source in sources + if source is not None + ) + file_candidates = self.evaluate_links( + link_evaluator, + sorted(file_links_it, reverse=True), + ) + + if logger.isEnabledFor(logging.DEBUG) and file_candidates: + paths = [] + for candidate in file_candidates: + assert candidate.link.url # we need to have a URL + try: + paths.append(candidate.link.file_path) + except Exception: + paths.append(candidate.link.url) # it's not a local file + + logger.debug("Local files found: %s", ", ".join(paths)) + + # This is an intentional priority ordering + return file_candidates + page_candidates + + def make_candidate_evaluator( + self, + project_name: str, + specifier: Optional[specifiers.BaseSpecifier] = None, + hashes: Optional[Hashes] = None, + ) -> CandidateEvaluator: + """Create a CandidateEvaluator object to use.""" + candidate_prefs = self._candidate_prefs + return CandidateEvaluator.create( + project_name=project_name, + target_python=self._target_python, + prefer_binary=candidate_prefs.prefer_binary, + allow_all_prereleases=candidate_prefs.allow_all_prereleases, + specifier=specifier, + hashes=hashes, + ) + + @functools.lru_cache(maxsize=None) + def find_best_candidate( + self, + project_name: str, + specifier: Optional[specifiers.BaseSpecifier] = None, + hashes: Optional[Hashes] = None, + ) -> BestCandidateResult: + """Find matches for the given project and specifier. + + :param specifier: An optional object implementing `filter` + (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable + versions. + + :return: A `BestCandidateResult` instance. + """ + candidates = self.find_all_candidates(project_name) + candidate_evaluator = self.make_candidate_evaluator( + project_name=project_name, + specifier=specifier, + hashes=hashes, + ) + return candidate_evaluator.compute_best_candidate(candidates) + + def find_requirement( + self, req: InstallRequirement, upgrade: bool + ) -> Optional[InstallationCandidate]: + """Try to find a Link matching req + + Expects req, an InstallRequirement and upgrade, a boolean + Returns a InstallationCandidate if found, + Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise + """ + hashes = req.hashes(trust_internet=False) + best_candidate_result = self.find_best_candidate( + req.name, + specifier=req.specifier, + hashes=hashes, + ) + best_candidate = best_candidate_result.best_candidate + + installed_version: Optional[_BaseVersion] = None + if req.satisfied_by is not None: + installed_version = req.satisfied_by.version + + def _format_versions(cand_iter: Iterable[InstallationCandidate]) -> str: + # This repeated parse_version and str() conversion is needed to + # handle different vendoring sources from pip and pkg_resources. + # If we stop using the pkg_resources provided specifier and start + # using our own, we can drop the cast to str(). + return ( + ", ".join( + sorted( + {str(c.version) for c in cand_iter}, + key=parse_version, + ) + ) + or "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, + _format_versions(best_candidate_result.iter_all()), + ) + + raise DistributionNotFound( + "No matching distribution found for {}".format(req) + ) + + def _should_install_candidate( + candidate: Optional[InstallationCandidate], + ) -> "TypeGuard[InstallationCandidate]": + if installed_version is None: + return True + if best_candidate is None: + return False + return best_candidate.version > installed_version + + if not upgrade and installed_version is not None: + if _should_install_candidate(best_candidate): + logger.debug( + "Existing installed version (%s) satisfies requirement " + "(most up-to-date version is %s)", + installed_version, + best_candidate.version, + ) + else: + logger.debug( + "Existing installed version (%s) is most up-to-date and " + "satisfies requirement", + installed_version, + ) + return None + + if _should_install_candidate(best_candidate): + logger.debug( + "Using version %s (newest of versions: %s)", + best_candidate.version, + _format_versions(best_candidate_result.iter_applicable()), + ) + return best_candidate + + # 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, + _format_versions(best_candidate_result.iter_applicable()), + ) + raise BestVersionAlreadyInstalled + + +def _find_name_version_sep(fragment: str, canonical_name: str) -> int: + """Find the separator's index based on the package's canonical name. + + :param fragment: A + filename "fragment" (stem) or + egg fragment. + :param canonical_name: The package's canonical name. + + This function is needed since the canonicalized name does not necessarily + have the same length as the egg info's name part. An example:: + + >>> fragment = 'foo__bar-1.0' + >>> canonical_name = 'foo-bar' + >>> _find_name_version_sep(fragment, canonical_name) + 8 + """ + # Project name and version must be separated by one single dash. Find all + # occurrences of dashes; if the string in front of it matches the canonical + # name, this is the one separating the name and version parts. + for i, c in enumerate(fragment): + if c != "-": + continue + if canonicalize_name(fragment[:i]) == canonical_name: + return i + raise ValueError(f"{fragment} does not match {canonical_name}") + + +def _extract_version_from_fragment(fragment: str, canonical_name: str) -> Optional[str]: + """Parse the version string from a + filename + "fragment" (stem) or egg fragment. + + :param fragment: The string to parse. E.g. foo-2.1 + :param canonical_name: The canonicalized name of the package this + belongs to. + """ + try: + version_start = _find_name_version_sep(fragment, canonical_name) + 1 + except ValueError: + return None + version = fragment[version_start:] + if not version: + return None + return version diff --git a/venv/lib/python3.11/site-packages/pip/_internal/index/sources.py b/venv/lib/python3.11/site-packages/pip/_internal/index/sources.py new file mode 100644 index 0000000..eec3f12 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/index/sources.py @@ -0,0 +1,224 @@ +import logging +import mimetypes +import os +import pathlib +from typing import Callable, Iterable, Optional, Tuple + +from pip._internal.models.candidate import InstallationCandidate +from pip._internal.models.link import Link +from pip._internal.utils.urls import path_to_url, url_to_path +from pip._internal.vcs import is_url + +logger = logging.getLogger(__name__) + +FoundCandidates = Iterable[InstallationCandidate] +FoundLinks = Iterable[Link] +CandidatesFromPage = Callable[[Link], Iterable[InstallationCandidate]] +PageValidator = Callable[[Link], bool] + + +class LinkSource: + @property + def link(self) -> Optional[Link]: + """Returns the underlying link, if there's one.""" + raise NotImplementedError() + + def page_candidates(self) -> FoundCandidates: + """Candidates found by parsing an archive listing HTML file.""" + raise NotImplementedError() + + def file_links(self) -> FoundLinks: + """Links found by specifying archives directly.""" + raise NotImplementedError() + + +def _is_html_file(file_url: str) -> bool: + return mimetypes.guess_type(file_url, strict=False)[0] == "text/html" + + +class _FlatDirectorySource(LinkSource): + """Link source specified by ``--find-links=``. + + This looks the content of the directory, and returns: + + * ``page_candidates``: Links listed on each HTML file in the directory. + * ``file_candidates``: Archives in the directory. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + path: str, + ) -> None: + self._candidates_from_page = candidates_from_page + self._path = pathlib.Path(os.path.realpath(path)) + + @property + def link(self) -> Optional[Link]: + return None + + def page_candidates(self) -> FoundCandidates: + for path in self._path.iterdir(): + url = path_to_url(str(path)) + if not _is_html_file(url): + continue + yield from self._candidates_from_page(Link(url)) + + def file_links(self) -> FoundLinks: + for path in self._path.iterdir(): + url = path_to_url(str(path)) + if _is_html_file(url): + continue + yield Link(url) + + +class _LocalFileSource(LinkSource): + """``--find-links=`` or ``--[extra-]index-url=``. + + If a URL is supplied, it must be a ``file:`` URL. If a path is supplied to + the option, it is converted to a URL first. This returns: + + * ``page_candidates``: Links listed on an HTML file. + * ``file_candidates``: The non-HTML file. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + link: Link, + ) -> None: + self._candidates_from_page = candidates_from_page + self._link = link + + @property + def link(self) -> Optional[Link]: + return self._link + + def page_candidates(self) -> FoundCandidates: + if not _is_html_file(self._link.url): + return + yield from self._candidates_from_page(self._link) + + def file_links(self) -> FoundLinks: + if _is_html_file(self._link.url): + return + yield self._link + + +class _RemoteFileSource(LinkSource): + """``--find-links=`` or ``--[extra-]index-url=``. + + This returns: + + * ``page_candidates``: Links listed on an HTML file. + * ``file_candidates``: The non-HTML file. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + page_validator: PageValidator, + link: Link, + ) -> None: + self._candidates_from_page = candidates_from_page + self._page_validator = page_validator + self._link = link + + @property + def link(self) -> Optional[Link]: + return self._link + + def page_candidates(self) -> FoundCandidates: + if not self._page_validator(self._link): + return + yield from self._candidates_from_page(self._link) + + def file_links(self) -> FoundLinks: + yield self._link + + +class _IndexDirectorySource(LinkSource): + """``--[extra-]index-url=``. + + This is treated like a remote URL; ``candidates_from_page`` contains logic + for this by appending ``index.html`` to the link. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + link: Link, + ) -> None: + self._candidates_from_page = candidates_from_page + self._link = link + + @property + def link(self) -> Optional[Link]: + return self._link + + def page_candidates(self) -> FoundCandidates: + yield from self._candidates_from_page(self._link) + + def file_links(self) -> FoundLinks: + return () + + +def build_source( + location: str, + *, + candidates_from_page: CandidatesFromPage, + page_validator: PageValidator, + expand_dir: bool, + cache_link_parsing: bool, +) -> Tuple[Optional[str], Optional[LinkSource]]: + + path: Optional[str] = None + url: Optional[str] = None + if os.path.exists(location): # Is a local path. + url = path_to_url(location) + path = location + elif location.startswith("file:"): # A file: URL. + url = location + path = url_to_path(location) + elif is_url(location): + url = location + + if url is None: + msg = ( + "Location '%s' is ignored: " + "it is either a non-existing path or lacks a specific scheme." + ) + logger.warning(msg, location) + return (None, None) + + if path is None: + source: LinkSource = _RemoteFileSource( + candidates_from_page=candidates_from_page, + page_validator=page_validator, + link=Link(url, cache_link_parsing=cache_link_parsing), + ) + return (url, source) + + if os.path.isdir(path): + if expand_dir: + source = _FlatDirectorySource( + candidates_from_page=candidates_from_page, + path=path, + ) + else: + source = _IndexDirectorySource( + candidates_from_page=candidates_from_page, + link=Link(url, cache_link_parsing=cache_link_parsing), + ) + return (url, source) + elif os.path.isfile(path): + source = _LocalFileSource( + candidates_from_page=candidates_from_page, + link=Link(url, cache_link_parsing=cache_link_parsing), + ) + return (url, source) + logger.warning( + "Location '%s' is ignored: it is neither a file nor a directory.", + location, + ) + return (url, None) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/locations/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/locations/__init__.py new file mode 100644 index 0000000..d54bc63 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/locations/__init__.py @@ -0,0 +1,467 @@ +import functools +import logging +import os +import pathlib +import sys +import sysconfig +from typing import Any, Dict, Generator, Optional, Tuple + +from pip._internal.models.scheme import SCHEME_KEYS, Scheme +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.virtualenv import running_under_virtualenv + +from . import _sysconfig +from .base import ( + USER_CACHE_DIR, + get_major_minor_version, + get_src_prefix, + is_osx_framework, + site_packages, + user_site, +) + +__all__ = [ + "USER_CACHE_DIR", + "get_bin_prefix", + "get_bin_user", + "get_major_minor_version", + "get_platlib", + "get_purelib", + "get_scheme", + "get_src_prefix", + "site_packages", + "user_site", +] + + +logger = logging.getLogger(__name__) + + +_PLATLIBDIR: str = getattr(sys, "platlibdir", "lib") + +_USE_SYSCONFIG_DEFAULT = sys.version_info >= (3, 10) + + +def _should_use_sysconfig() -> bool: + """This function determines the value of _USE_SYSCONFIG. + + By default, pip uses sysconfig on Python 3.10+. + But Python distributors can override this decision by setting: + sysconfig._PIP_USE_SYSCONFIG = True / False + Rationale in https://github.com/pypa/pip/issues/10647 + + This is a function for testability, but should be constant during any one + run. + """ + return bool(getattr(sysconfig, "_PIP_USE_SYSCONFIG", _USE_SYSCONFIG_DEFAULT)) + + +_USE_SYSCONFIG = _should_use_sysconfig() + +if not _USE_SYSCONFIG: + # Import distutils lazily to avoid deprecation warnings, + # but import it soon enough that it is in memory and available during + # a pip reinstall. + from . import _distutils + +# Be noisy about incompatibilities if this platforms "should" be using +# sysconfig, but is explicitly opting out and using distutils instead. +if _USE_SYSCONFIG_DEFAULT and not _USE_SYSCONFIG: + _MISMATCH_LEVEL = logging.WARNING +else: + _MISMATCH_LEVEL = logging.DEBUG + + +def _looks_like_bpo_44860() -> bool: + """The resolution to bpo-44860 will change this incorrect platlib. + + See . + """ + from distutils.command.install import INSTALL_SCHEMES + + try: + unix_user_platlib = INSTALL_SCHEMES["unix_user"]["platlib"] + except KeyError: + return False + return unix_user_platlib == "$usersite" + + +def _looks_like_red_hat_patched_platlib_purelib(scheme: Dict[str, str]) -> bool: + platlib = scheme["platlib"] + if "/$platlibdir/" in platlib: + platlib = platlib.replace("/$platlibdir/", f"/{_PLATLIBDIR}/") + if "/lib64/" not in platlib: + return False + unpatched = platlib.replace("/lib64/", "/lib/") + return unpatched.replace("$platbase/", "$base/") == scheme["purelib"] + + +@functools.lru_cache(maxsize=None) +def _looks_like_red_hat_lib() -> bool: + """Red Hat patches platlib in unix_prefix and unix_home, but not purelib. + + This is the only way I can see to tell a Red Hat-patched Python. + """ + from distutils.command.install import INSTALL_SCHEMES + + return all( + k in INSTALL_SCHEMES + and _looks_like_red_hat_patched_platlib_purelib(INSTALL_SCHEMES[k]) + for k in ("unix_prefix", "unix_home") + ) + + +@functools.lru_cache(maxsize=None) +def _looks_like_debian_scheme() -> bool: + """Debian adds two additional schemes.""" + from distutils.command.install import INSTALL_SCHEMES + + return "deb_system" in INSTALL_SCHEMES and "unix_local" in INSTALL_SCHEMES + + +@functools.lru_cache(maxsize=None) +def _looks_like_red_hat_scheme() -> bool: + """Red Hat patches ``sys.prefix`` and ``sys.exec_prefix``. + + Red Hat's ``00251-change-user-install-location.patch`` changes the install + command's ``prefix`` and ``exec_prefix`` to append ``"/local"``. This is + (fortunately?) done quite unconditionally, so we create a default command + object without any configuration to detect this. + """ + from distutils.command.install import install + from distutils.dist import Distribution + + cmd: Any = install(Distribution()) + cmd.finalize_options() + return ( + cmd.exec_prefix == f"{os.path.normpath(sys.exec_prefix)}/local" + and cmd.prefix == f"{os.path.normpath(sys.prefix)}/local" + ) + + +@functools.lru_cache(maxsize=None) +def _looks_like_slackware_scheme() -> bool: + """Slackware patches sysconfig but fails to patch distutils and site. + + Slackware changes sysconfig's user scheme to use ``"lib64"`` for the lib + path, but does not do the same to the site module. + """ + if user_site is None: # User-site not available. + return False + try: + paths = sysconfig.get_paths(scheme="posix_user", expand=False) + except KeyError: # User-site not available. + return False + return "/lib64/" in paths["purelib"] and "/lib64/" not in user_site + + +@functools.lru_cache(maxsize=None) +def _looks_like_msys2_mingw_scheme() -> bool: + """MSYS2 patches distutils and sysconfig to use a UNIX-like scheme. + + However, MSYS2 incorrectly patches sysconfig ``nt`` scheme. The fix is + likely going to be included in their 3.10 release, so we ignore the warning. + See msys2/MINGW-packages#9319. + + MSYS2 MINGW's patch uses lowercase ``"lib"`` instead of the usual uppercase, + and is missing the final ``"site-packages"``. + """ + paths = sysconfig.get_paths("nt", expand=False) + return all( + "Lib" not in p and "lib" in p and not p.endswith("site-packages") + for p in (paths[key] for key in ("platlib", "purelib")) + ) + + +def _fix_abiflags(parts: Tuple[str]) -> Generator[str, None, None]: + ldversion = sysconfig.get_config_var("LDVERSION") + abiflags = getattr(sys, "abiflags", None) + + # LDVERSION does not end with sys.abiflags. Just return the path unchanged. + if not ldversion or not abiflags or not ldversion.endswith(abiflags): + yield from parts + return + + # Strip sys.abiflags from LDVERSION-based path components. + for part in parts: + if part.endswith(ldversion): + part = part[: (0 - len(abiflags))] + yield part + + +@functools.lru_cache(maxsize=None) +def _warn_mismatched(old: pathlib.Path, new: pathlib.Path, *, key: str) -> None: + issue_url = "https://github.com/pypa/pip/issues/10151" + message = ( + "Value for %s does not match. Please report this to <%s>" + "\ndistutils: %s" + "\nsysconfig: %s" + ) + logger.log(_MISMATCH_LEVEL, message, key, issue_url, old, new) + + +def _warn_if_mismatch(old: pathlib.Path, new: pathlib.Path, *, key: str) -> bool: + if old == new: + return False + _warn_mismatched(old, new, key=key) + return True + + +@functools.lru_cache(maxsize=None) +def _log_context( + *, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + prefix: Optional[str] = None, +) -> None: + parts = [ + "Additional context:", + "user = %r", + "home = %r", + "root = %r", + "prefix = %r", + ] + + logger.log(_MISMATCH_LEVEL, "\n".join(parts), user, home, root, prefix) + + +def get_scheme( + dist_name: str, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, +) -> Scheme: + new = _sysconfig.get_scheme( + dist_name, + user=user, + home=home, + root=root, + isolated=isolated, + prefix=prefix, + ) + if _USE_SYSCONFIG: + return new + + old = _distutils.get_scheme( + dist_name, + user=user, + home=home, + root=root, + isolated=isolated, + prefix=prefix, + ) + + warning_contexts = [] + for k in SCHEME_KEYS: + old_v = pathlib.Path(getattr(old, k)) + new_v = pathlib.Path(getattr(new, k)) + + if old_v == new_v: + continue + + # distutils incorrectly put PyPy packages under ``site-packages/python`` + # in the ``posix_home`` scheme, but PyPy devs said they expect the + # directory name to be ``pypy`` instead. So we treat this as a bug fix + # and not warn about it. See bpo-43307 and python/cpython#24628. + skip_pypy_special_case = ( + sys.implementation.name == "pypy" + and home is not None + and k in ("platlib", "purelib") + and old_v.parent == new_v.parent + and old_v.name.startswith("python") + and new_v.name.startswith("pypy") + ) + if skip_pypy_special_case: + continue + + # sysconfig's ``osx_framework_user`` does not include ``pythonX.Y`` in + # the ``include`` value, but distutils's ``headers`` does. We'll let + # CPython decide whether this is a bug or feature. See bpo-43948. + skip_osx_framework_user_special_case = ( + user + and is_osx_framework() + and k == "headers" + and old_v.parent.parent == new_v.parent + and old_v.parent.name.startswith("python") + ) + if skip_osx_framework_user_special_case: + continue + + # On Red Hat and derived Linux distributions, distutils is patched to + # use "lib64" instead of "lib" for platlib. + if k == "platlib" and _looks_like_red_hat_lib(): + continue + + # On Python 3.9+, sysconfig's posix_user scheme sets platlib against + # sys.platlibdir, but distutils's unix_user incorrectly coninutes + # using the same $usersite for both platlib and purelib. This creates a + # mismatch when sys.platlibdir is not "lib". + skip_bpo_44860 = ( + user + and k == "platlib" + and not WINDOWS + and sys.version_info >= (3, 9) + and _PLATLIBDIR != "lib" + and _looks_like_bpo_44860() + ) + if skip_bpo_44860: + continue + + # Slackware incorrectly patches posix_user to use lib64 instead of lib, + # but not usersite to match the location. + skip_slackware_user_scheme = ( + user + and k in ("platlib", "purelib") + and not WINDOWS + and _looks_like_slackware_scheme() + ) + if skip_slackware_user_scheme: + continue + + # Both Debian and Red Hat patch Python to place the system site under + # /usr/local instead of /usr. Debian also places lib in dist-packages + # instead of site-packages, but the /usr/local check should cover it. + skip_linux_system_special_case = ( + not (user or home or prefix or running_under_virtualenv()) + and old_v.parts[1:3] == ("usr", "local") + and len(new_v.parts) > 1 + and new_v.parts[1] == "usr" + and (len(new_v.parts) < 3 or new_v.parts[2] != "local") + and (_looks_like_red_hat_scheme() or _looks_like_debian_scheme()) + ) + if skip_linux_system_special_case: + continue + + # On Python 3.7 and earlier, sysconfig does not include sys.abiflags in + # the "pythonX.Y" part of the path, but distutils does. + skip_sysconfig_abiflag_bug = ( + sys.version_info < (3, 8) + and not WINDOWS + and k in ("headers", "platlib", "purelib") + and tuple(_fix_abiflags(old_v.parts)) == new_v.parts + ) + if skip_sysconfig_abiflag_bug: + continue + + # MSYS2 MINGW's sysconfig patch does not include the "site-packages" + # part of the path. This is incorrect and will be fixed in MSYS. + skip_msys2_mingw_bug = ( + WINDOWS and k in ("platlib", "purelib") and _looks_like_msys2_mingw_scheme() + ) + if skip_msys2_mingw_bug: + continue + + # CPython's POSIX install script invokes pip (via ensurepip) against the + # interpreter located in the source tree, not the install site. This + # triggers special logic in sysconfig that's not present in distutils. + # https://github.com/python/cpython/blob/8c21941ddaf/Lib/sysconfig.py#L178-L194 + skip_cpython_build = ( + sysconfig.is_python_build(check_home=True) + and not WINDOWS + and k in ("headers", "include", "platinclude") + ) + if skip_cpython_build: + continue + + warning_contexts.append((old_v, new_v, f"scheme.{k}")) + + if not warning_contexts: + return old + + # Check if this path mismatch is caused by distutils config files. Those + # files will no longer work once we switch to sysconfig, so this raises a + # deprecation message for them. + default_old = _distutils.distutils_scheme( + dist_name, + user, + home, + root, + isolated, + prefix, + ignore_config_files=True, + ) + if any(default_old[k] != getattr(old, k) for k in SCHEME_KEYS): + deprecated( + reason=( + "Configuring installation scheme with distutils config files " + "is deprecated and will no longer work in the near future. If you " + "are using a Homebrew or Linuxbrew Python, please see discussion " + "at https://github.com/Homebrew/homebrew-core/issues/76621" + ), + replacement=None, + gone_in=None, + ) + return old + + # Post warnings about this mismatch so user can report them back. + for old_v, new_v, key in warning_contexts: + _warn_mismatched(old_v, new_v, key=key) + _log_context(user=user, home=home, root=root, prefix=prefix) + + return old + + +def get_bin_prefix() -> str: + new = _sysconfig.get_bin_prefix() + if _USE_SYSCONFIG: + return new + + old = _distutils.get_bin_prefix() + if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="bin_prefix"): + _log_context() + return old + + +def get_bin_user() -> str: + return _sysconfig.get_scheme("", user=True).scripts + + +def _looks_like_deb_system_dist_packages(value: str) -> bool: + """Check if the value is Debian's APT-controlled dist-packages. + + Debian's ``distutils.sysconfig.get_python_lib()`` implementation returns the + default package path controlled by APT, but does not patch ``sysconfig`` to + do the same. This is similar to the bug worked around in ``get_scheme()``, + but here the default is ``deb_system`` instead of ``unix_local``. Ultimately + we can't do anything about this Debian bug, and this detection allows us to + skip the warning when needed. + """ + if not _looks_like_debian_scheme(): + return False + if value == "/usr/lib/python3/dist-packages": + return True + return False + + +def get_purelib() -> str: + """Return the default pure-Python lib location.""" + new = _sysconfig.get_purelib() + if _USE_SYSCONFIG: + return new + + old = _distutils.get_purelib() + if _looks_like_deb_system_dist_packages(old): + return old + if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="purelib"): + _log_context() + return old + + +def get_platlib() -> str: + """Return the default platform-shared lib location.""" + new = _sysconfig.get_platlib() + if _USE_SYSCONFIG: + return new + + from . import _distutils + + old = _distutils.get_platlib() + if _looks_like_deb_system_dist_packages(old): + return old + if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="platlib"): + _log_context() + return old diff --git a/venv/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..599aa5538bb3d78e90931b0be25b73d4959ddbae GIT binary patch literal 18186 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/locations/__pycache__/base.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46458ff385ce83243f078b3b0135397c4ba346a4 GIT binary patch literal 4011 zcmb6bYi|?T^^V8yN9@En4`9h`g5ns0T>{&%YyBS|dfRRPkZI8BrvJ`l07udmKAJrM)wA z?zxZixM$8e_x#1@b0cVn{{C$Kzb=ISO$KJOH<9O&#a$G)X53j%+`}LX5?yJpDN?X~1+pH&*JyDc ztXtDv=2)=rS@(+pv0HFV!Un-922vKmb=Mm25!_-x@W4mr?1C5Og3Waw;QL%et|c8Z z`F;h+BXfY_y`nAMXAZ@{fQcfI)kS2gfY6OWL4uc8D5hV`3lAghDisX%Lx)z z0qw_mS(fDaL|zs|oLG{umgh5~ykxLBDQ7rxc`Rn6Im4$)nwZG($whu%R1G^8wLF%S zriP?vo8R*zfZPW&2~3*I)23NW454%j|1AP#EvurNgLa*=VNWSI%WDR!uBe8$DIg)qDdn%|Inndg&teNoR*a>ESPm;`F{!CBCA*ZEgY)Ne zu_dri46G8%Q6)ge@ffksG1ERVuw4uoY9f~TOe~`$sr}X19IuMe+=|gRFKP*T$^<=S zqNxP#2I)cg)LsBZRCgoq{?f$8*)LD%2aZ-eV-@Qd_QR6ll*K{Mi5Rzc;kYk0vkyKp1=Z&Dg^u@L~y%AQyj<30ttMXBaF!=7*Gwhf-=Sx7Nq0? zQ3g^#a&d)&lyG@^CU#Sj1*HJF0f;~1lic)7^H{S@-RBg@g#}UIQdr40lSx>GOac@< z7C4A*%;Oc95+qg2Yf=W3RD^s+Y@EZe4Y7MlS|)nu_s~Tn4#T3ThLyy&VI_t%Y?8{) z!4$ED;Z}1QNfR*q6ifm&V#PhsVUj-#TVwtJ;41Mml3{Uxtauta(By$Rn4x?A2}lvW z=s`~R-NI)0TgO1fF|gzB-Y9&ww!T*Wr0O5h{Ude6x=!r`L-!``PkuhR<=h^v22be0 z6BX}?r|q+kk3SxNJpT1qH8`OMCo0~Fr!LP%-{$4@!P4MP|Nbu=|L8yRZU2$&Q`P>H zdjHAa_)4KoYt7@|WHu%?h4pi#bG2Y!nJHV!mV2j4mm7NAS-(@hx+PToM|JP1wi+=EO_D!{|9Bs1tzbf^^IpYA z-+Y0+IYDa9mIRb;B^6;$+FL{NO&9uJeB07-nk0DIIyHTRl*7YFYt=yrLG97UAPs6Z zv!z@53YN|U!l3r5_`?f`eO8@*IyvPFxm~ z5M>bFaCJ6;N zhSofWRa}-dsC(vA5=Kz>xIvLbW4B8FdNVe<$i2L~gd?yt0iXJN07bOp7_2(p)gABF zk<<25W+&8l@8d; zpPgGjS3X_!jOd<`igiRKRm0zoUpR)oIdNHKTK@PB-3_UiPtA6>uj(UqIi*MAHJmvv52 zGKLGvt)wESqa~!jSq33SPv=VZ$_h>OlZS^wi`3 zol6glRwAdXfe-Y+2UX9c?wPDuCn=Z6JBBNjmy;TZRjH>KR$>S0B{&8w47;|H19vm} z!QY~-QY|VjC&e78l~tNjjbP_8y$CQ#8^)nGtVDO~XX>Oz7ySiEKDi(!pyD>VZp>V{ zp15@3($y=8%Tw14C-FDpl9+@bgolO=eZt9D2A?r5~Z;WArC(Cr1BjTrv?#q6uzuELU1p^{uZbO_TB3$PLYRLbr52^?nIVQaX@GGm1ir=P?Z_dnIX8| om^016=^4+gco-v9sr literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py b/venv/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py new file mode 100644 index 0000000..92bd931 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py @@ -0,0 +1,173 @@ +"""Locations where we look for configs, install stuff, etc""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +# If pip's going to use distutils, it should not be using the copy that setuptools +# might have injected into the environment. This is done by removing the injected +# shim, if it's injected. +# +# See https://github.com/pypa/pip/issues/8761 for the original discussion and +# rationale for why this is done within pip. +try: + __import__("_distutils_hack").remove_shim() +except (ImportError, AttributeError): + pass + +import logging +import os +import sys +from distutils.cmd import Command as DistutilsCommand +from distutils.command.install import SCHEME_KEYS +from distutils.command.install import install as distutils_install_command +from distutils.sysconfig import get_python_lib +from typing import Dict, List, Optional, Union, cast + +from pip._internal.models.scheme import Scheme +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.virtualenv import running_under_virtualenv + +from .base import get_major_minor_version + +logger = logging.getLogger(__name__) + + +def distutils_scheme( + dist_name: str, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, + *, + ignore_config_files: bool = False, +) -> Dict[str, str]: + """ + Return a distutils install scheme + """ + from distutils.dist import Distribution + + dist_args: Dict[str, Union[str, List[str]]] = {"name": dist_name} + if isolated: + dist_args["script_args"] = ["--no-user-cfg"] + + d = Distribution(dist_args) + if not ignore_config_files: + try: + d.parse_config_files() + except UnicodeDecodeError: + # Typeshed does not include find_config_files() for some reason. + paths = d.find_config_files() # type: ignore + logger.warning( + "Ignore distutils configs in %s due to encoding errors.", + ", ".join(os.path.basename(p) for p in paths), + ) + obj: Optional[DistutilsCommand] = None + obj = d.get_command_obj("install", create=True) + assert obj is not None + i = cast(distutils_install_command, obj) + # 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), f"user={user} prefix={prefix}" + assert not (home and prefix), f"home={home} prefix={prefix}" + i.user = user or i.user + if user or home: + i.prefix = "" + i.prefix = prefix or i.prefix + i.home = home or i.home + i.root = root or i.root + i.finalize_options() + + scheme = {} + 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(): + if home: + prefix = home + elif user: + prefix = i.install_userbase + else: + prefix = i.prefix + scheme["headers"] = os.path.join( + prefix, + "include", + "site", + f"python{get_major_minor_version()}", + 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 + + +def get_scheme( + dist_name: str, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, +) -> Scheme: + """ + Get the "scheme" corresponding to the input parameters. The distutils + documentation provides the context for the available schemes: + https://docs.python.org/3/install/index.html#alternate-installation + + :param dist_name: the name of the package to retrieve the scheme for, used + in the headers scheme path + :param user: indicates to use the "user" scheme + :param home: indicates to use the "home" scheme and provides the base + directory for the same + :param root: root under which other directories are re-based + :param isolated: equivalent to --no-user-cfg, i.e. do not consider + ~/.pydistutils.cfg (posix) or ~/pydistutils.cfg (non-posix) for + scheme paths + :param prefix: indicates to use the "prefix" scheme and provides the + base directory for the same + """ + scheme = distutils_scheme(dist_name, user, home, root, isolated, prefix) + return Scheme( + platlib=scheme["platlib"], + purelib=scheme["purelib"], + headers=scheme["headers"], + scripts=scheme["scripts"], + data=scheme["data"], + ) + + +def get_bin_prefix() -> str: + # XXX: In old virtualenv versions, sys.prefix can contain '..' components, + # so we need to call normpath to eliminate them. + prefix = os.path.normpath(sys.prefix) + if WINDOWS: + bin_py = os.path.join(prefix, "Scripts") + # buildout uses 'bin' on Windows too? + if not os.path.exists(bin_py): + bin_py = os.path.join(prefix, "bin") + return bin_py + # 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 prefix[:16] == "/System/Library/": + return "/usr/local/bin" + return os.path.join(prefix, "bin") + + +def get_purelib() -> str: + return get_python_lib(plat_specific=False) + + +def get_platlib() -> str: + return get_python_lib(plat_specific=True) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/locations/_sysconfig.py b/venv/lib/python3.11/site-packages/pip/_internal/locations/_sysconfig.py new file mode 100644 index 0000000..97aef1f --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/locations/_sysconfig.py @@ -0,0 +1,213 @@ +import logging +import os +import sys +import sysconfig +import typing + +from pip._internal.exceptions import InvalidSchemeCombination, UserInstallationInvalid +from pip._internal.models.scheme import SCHEME_KEYS, Scheme +from pip._internal.utils.virtualenv import running_under_virtualenv + +from .base import change_root, get_major_minor_version, is_osx_framework + +logger = logging.getLogger(__name__) + + +# Notes on _infer_* functions. +# Unfortunately ``get_default_scheme()`` didn't exist before 3.10, so there's no +# way to ask things like "what is the '_prefix' scheme on this platform". These +# functions try to answer that with some heuristics while accounting for ad-hoc +# platforms not covered by CPython's default sysconfig implementation. If the +# ad-hoc implementation does not fully implement sysconfig, we'll fall back to +# a POSIX scheme. + +_AVAILABLE_SCHEMES = set(sysconfig.get_scheme_names()) + +_PREFERRED_SCHEME_API = getattr(sysconfig, "get_preferred_scheme", None) + + +def _should_use_osx_framework_prefix() -> bool: + """Check for Apple's ``osx_framework_library`` scheme. + + Python distributed by Apple's Command Line Tools has this special scheme + that's used when: + + * This is a framework build. + * We are installing into the system prefix. + + This does not account for ``pip install --prefix`` (also means we're not + installing to the system prefix), which should use ``posix_prefix``, but + logic here means ``_infer_prefix()`` outputs ``osx_framework_library``. But + since ``prefix`` is not available for ``sysconfig.get_default_scheme()``, + which is the stdlib replacement for ``_infer_prefix()``, presumably Apple + wouldn't be able to magically switch between ``osx_framework_library`` and + ``posix_prefix``. ``_infer_prefix()`` returning ``osx_framework_library`` + means its behavior is consistent whether we use the stdlib implementation + or our own, and we deal with this special case in ``get_scheme()`` instead. + """ + return ( + "osx_framework_library" in _AVAILABLE_SCHEMES + and not running_under_virtualenv() + and is_osx_framework() + ) + + +def _infer_prefix() -> str: + """Try to find a prefix scheme for the current platform. + + This tries: + + * A special ``osx_framework_library`` for Python distributed by Apple's + Command Line Tools, when not running in a virtual environment. + * Implementation + OS, used by PyPy on Windows (``pypy_nt``). + * Implementation without OS, used by PyPy on POSIX (``pypy``). + * OS + "prefix", used by CPython on POSIX (``posix_prefix``). + * Just the OS name, used by CPython on Windows (``nt``). + + If none of the above works, fall back to ``posix_prefix``. + """ + if _PREFERRED_SCHEME_API: + return _PREFERRED_SCHEME_API("prefix") + if _should_use_osx_framework_prefix(): + return "osx_framework_library" + implementation_suffixed = f"{sys.implementation.name}_{os.name}" + if implementation_suffixed in _AVAILABLE_SCHEMES: + return implementation_suffixed + if sys.implementation.name in _AVAILABLE_SCHEMES: + return sys.implementation.name + suffixed = f"{os.name}_prefix" + if suffixed in _AVAILABLE_SCHEMES: + return suffixed + if os.name in _AVAILABLE_SCHEMES: # On Windows, prefx is just called "nt". + return os.name + return "posix_prefix" + + +def _infer_user() -> str: + """Try to find a user scheme for the current platform.""" + if _PREFERRED_SCHEME_API: + return _PREFERRED_SCHEME_API("user") + if is_osx_framework() and not running_under_virtualenv(): + suffixed = "osx_framework_user" + else: + suffixed = f"{os.name}_user" + if suffixed in _AVAILABLE_SCHEMES: + return suffixed + if "posix_user" not in _AVAILABLE_SCHEMES: # User scheme unavailable. + raise UserInstallationInvalid() + return "posix_user" + + +def _infer_home() -> str: + """Try to find a home for the current platform.""" + if _PREFERRED_SCHEME_API: + return _PREFERRED_SCHEME_API("home") + suffixed = f"{os.name}_home" + if suffixed in _AVAILABLE_SCHEMES: + return suffixed + return "posix_home" + + +# Update these keys if the user sets a custom home. +_HOME_KEYS = [ + "installed_base", + "base", + "installed_platbase", + "platbase", + "prefix", + "exec_prefix", +] +if sysconfig.get_config_var("userbase") is not None: + _HOME_KEYS.append("userbase") + + +def get_scheme( + dist_name: str, + user: bool = False, + home: typing.Optional[str] = None, + root: typing.Optional[str] = None, + isolated: bool = False, + prefix: typing.Optional[str] = None, +) -> Scheme: + """ + Get the "scheme" corresponding to the input parameters. + + :param dist_name: the name of the package to retrieve the scheme for, used + in the headers scheme path + :param user: indicates to use the "user" scheme + :param home: indicates to use the "home" scheme + :param root: root under which other directories are re-based + :param isolated: ignored, but kept for distutils compatibility (where + this controls whether the user-site pydistutils.cfg is honored) + :param prefix: indicates to use the "prefix" scheme and provides the + base directory for the same + """ + if user and prefix: + raise InvalidSchemeCombination("--user", "--prefix") + if home and prefix: + raise InvalidSchemeCombination("--home", "--prefix") + + if home is not None: + scheme_name = _infer_home() + elif user: + scheme_name = _infer_user() + else: + scheme_name = _infer_prefix() + + # Special case: When installing into a custom prefix, use posix_prefix + # instead of osx_framework_library. See _should_use_osx_framework_prefix() + # docstring for details. + if prefix is not None and scheme_name == "osx_framework_library": + scheme_name = "posix_prefix" + + if home is not None: + variables = {k: home for k in _HOME_KEYS} + elif prefix is not None: + variables = {k: prefix for k in _HOME_KEYS} + else: + variables = {} + + paths = sysconfig.get_paths(scheme=scheme_name, vars=variables) + + # Logic here is very arbitrary, we're doing it for compatibility, don't ask. + # 1. Pip historically uses a special header path in virtual environments. + # 2. If the distribution name is not known, distutils uses 'UNKNOWN'. We + # only do the same when not running in a virtual environment because + # pip's historical header path logic (see point 1) did not do this. + if running_under_virtualenv(): + if user: + base = variables.get("userbase", sys.prefix) + else: + base = variables.get("base", sys.prefix) + python_xy = f"python{get_major_minor_version()}" + paths["include"] = os.path.join(base, "include", "site", python_xy) + elif not dist_name: + dist_name = "UNKNOWN" + + scheme = Scheme( + platlib=paths["platlib"], + purelib=paths["purelib"], + headers=os.path.join(paths["include"], dist_name), + scripts=paths["scripts"], + data=paths["data"], + ) + if root is not None: + for key in SCHEME_KEYS: + value = change_root(root, getattr(scheme, key)) + setattr(scheme, key, value) + return scheme + + +def get_bin_prefix() -> str: + # Forcing to use /usr/local/bin for standard macOS framework installs. + if sys.platform[:6] == "darwin" and sys.prefix[:16] == "/System/Library/": + return "/usr/local/bin" + return sysconfig.get_paths()["scripts"] + + +def get_purelib() -> str: + return sysconfig.get_paths()["purelib"] + + +def get_platlib() -> str: + return sysconfig.get_paths()["platlib"] diff --git a/venv/lib/python3.11/site-packages/pip/_internal/locations/base.py b/venv/lib/python3.11/site-packages/pip/_internal/locations/base.py new file mode 100644 index 0000000..3f9f896 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/locations/base.py @@ -0,0 +1,81 @@ +import functools +import os +import site +import sys +import sysconfig +import typing + +from pip._internal.exceptions import InstallationError +from pip._internal.utils import appdirs +from pip._internal.utils.virtualenv import running_under_virtualenv + +# Application Directories +USER_CACHE_DIR = appdirs.user_cache_dir("pip") + +# FIXME doesn't account for venv linked to global site-packages +site_packages: str = sysconfig.get_path("purelib") + + +def get_major_minor_version() -> str: + """ + Return the major-minor version of the current Python as a string, e.g. + "3.7" or "3.10". + """ + return "{}.{}".format(*sys.version_info) + + +def change_root(new_root: str, pathname: str) -> str: + """Return 'pathname' with 'new_root' prepended. + + If 'pathname' is relative, this is equivalent to os.path.join(new_root, pathname). + Otherwise, it requires making 'pathname' relative and then joining the + two, which is tricky on DOS/Windows and Mac OS. + + This is borrowed from Python's standard library's distutils module. + """ + if os.name == "posix": + if not os.path.isabs(pathname): + return os.path.join(new_root, pathname) + else: + return os.path.join(new_root, pathname[1:]) + + elif os.name == "nt": + (drive, path) = os.path.splitdrive(pathname) + if path[0] == "\\": + path = path[1:] + return os.path.join(new_root, path) + + else: + raise InstallationError( + f"Unknown platform: {os.name}\n" + "Can not change root path prefix on unknown platform." + ) + + +def get_src_prefix() -> str: + 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/.. + return os.path.abspath(src_prefix) + + +try: + # Use getusersitepackages if this is present, as it ensures that the + # value is initialised properly. + user_site: typing.Optional[str] = site.getusersitepackages() +except AttributeError: + user_site = site.USER_SITE + + +@functools.lru_cache(maxsize=None) +def is_osx_framework() -> bool: + return bool(sysconfig.get_config_var("PYTHONFRAMEWORK")) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/main.py b/venv/lib/python3.11/site-packages/pip/_internal/main.py new file mode 100644 index 0000000..33c6d24 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/main.py @@ -0,0 +1,12 @@ +from typing import List, Optional + + +def main(args: Optional[List[str]] = None) -> int: + """This is preserved for old console scripts that may still be referencing + it. + + For additional details, see https://github.com/pypa/pip/issues/7498. + """ + from pip._internal.utils.entrypoints import _wrapper + + return _wrapper(args) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py new file mode 100644 index 0000000..9f73ca7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py @@ -0,0 +1,127 @@ +import contextlib +import functools +import os +import sys +from typing import TYPE_CHECKING, List, Optional, Type, cast + +from pip._internal.utils.misc import strtobool + +from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel + +if TYPE_CHECKING: + from typing import Protocol +else: + Protocol = object + +__all__ = [ + "BaseDistribution", + "BaseEnvironment", + "FilesystemWheel", + "MemoryWheel", + "Wheel", + "get_default_environment", + "get_environment", + "get_wheel_distribution", + "select_backend", +] + + +def _should_use_importlib_metadata() -> bool: + """Whether to use the ``importlib.metadata`` or ``pkg_resources`` backend. + + By default, pip uses ``importlib.metadata`` on Python 3.11+, and + ``pkg_resourcess`` otherwise. This can be overridden by a couple of ways: + + * If environment variable ``_PIP_USE_IMPORTLIB_METADATA`` is set, it + dictates whether ``importlib.metadata`` is used, regardless of Python + version. + * On Python 3.11+, Python distributors can patch ``importlib.metadata`` + to add a global constant ``_PIP_USE_IMPORTLIB_METADATA = False``. This + makes pip use ``pkg_resources`` (unless the user set the aforementioned + environment variable to *True*). + """ + with contextlib.suppress(KeyError, ValueError): + return bool(strtobool(os.environ["_PIP_USE_IMPORTLIB_METADATA"])) + if sys.version_info < (3, 11): + return False + import importlib.metadata + + return bool(getattr(importlib.metadata, "_PIP_USE_IMPORTLIB_METADATA", True)) + + +class Backend(Protocol): + Distribution: Type[BaseDistribution] + Environment: Type[BaseEnvironment] + + +@functools.lru_cache(maxsize=None) +def select_backend() -> Backend: + if _should_use_importlib_metadata(): + from . import importlib + + return cast(Backend, importlib) + from . import pkg_resources + + return cast(Backend, pkg_resources) + + +def get_default_environment() -> BaseEnvironment: + """Get the default representation for the current environment. + + This returns an Environment instance from the chosen backend. The default + Environment instance should be built from ``sys.path`` and may use caching + to share instance state accorss calls. + """ + return select_backend().Environment.default() + + +def get_environment(paths: Optional[List[str]]) -> BaseEnvironment: + """Get a representation of the environment specified by ``paths``. + + This returns an Environment instance from the chosen backend based on the + given import paths. The backend must build a fresh instance representing + the state of installed distributions when this function is called. + """ + return select_backend().Environment.from_paths(paths) + + +def get_directory_distribution(directory: str) -> BaseDistribution: + """Get the distribution metadata representation in the specified directory. + + This returns a Distribution instance from the chosen backend based on + the given on-disk ``.dist-info`` directory. + """ + return select_backend().Distribution.from_directory(directory) + + +def get_wheel_distribution(wheel: Wheel, canonical_name: str) -> BaseDistribution: + """Get the representation of the specified wheel's distribution metadata. + + This returns a Distribution instance from the chosen backend based on + the given wheel's ``.dist-info`` directory. + + :param canonical_name: Normalized project name of the given wheel. + """ + return select_backend().Distribution.from_wheel(wheel, canonical_name) + + +def get_metadata_distribution( + metadata_contents: bytes, + filename: str, + canonical_name: str, +) -> BaseDistribution: + """Get the dist representation of the specified METADATA file contents. + + This returns a Distribution instance from the chosen backend sourced from the data + in `metadata_contents`. + + :param metadata_contents: Contents of a METADATA file within a dist, or one served + via PEP 658. + :param filename: Filename for the dist this metadata represents. + :param canonical_name: Normalized project name of the given dist. + """ + return select_backend().Distribution.from_metadata_file_contents( + metadata_contents, + filename, + canonical_name, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..defb0d00247ccbd2e53ab9bcacaf557b834a7e10 GIT binary patch literal 6419 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/_json.py b/venv/lib/python3.11/site-packages/pip/_internal/metadata/_json.py new file mode 100644 index 0000000..336b52f --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/metadata/_json.py @@ -0,0 +1,84 @@ +# Extracted from https://github.com/pfmoore/pkg_metadata + +from email.header import Header, decode_header, make_header +from email.message import Message +from typing import Any, Dict, List, Union + +METADATA_FIELDS = [ + # Name, Multiple-Use + ("Metadata-Version", False), + ("Name", False), + ("Version", False), + ("Dynamic", True), + ("Platform", True), + ("Supported-Platform", True), + ("Summary", False), + ("Description", False), + ("Description-Content-Type", False), + ("Keywords", False), + ("Home-page", False), + ("Download-URL", False), + ("Author", False), + ("Author-email", False), + ("Maintainer", False), + ("Maintainer-email", False), + ("License", False), + ("Classifier", True), + ("Requires-Dist", True), + ("Requires-Python", False), + ("Requires-External", True), + ("Project-URL", True), + ("Provides-Extra", True), + ("Provides-Dist", True), + ("Obsoletes-Dist", True), +] + + +def json_name(field: str) -> str: + return field.lower().replace("-", "_") + + +def msg_to_json(msg: Message) -> Dict[str, Any]: + """Convert a Message object into a JSON-compatible dictionary.""" + + def sanitise_header(h: Union[Header, str]) -> str: + if isinstance(h, Header): + chunks = [] + for bytes, encoding in decode_header(h): + if encoding == "unknown-8bit": + try: + # See if UTF-8 works + bytes.decode("utf-8") + encoding = "utf-8" + except UnicodeDecodeError: + # If not, latin1 at least won't fail + encoding = "latin1" + chunks.append((bytes, encoding)) + return str(make_header(chunks)) + return str(h) + + result = {} + for field, multi in METADATA_FIELDS: + if field not in msg: + continue + key = json_name(field) + if multi: + value: Union[str, List[str]] = [ + sanitise_header(v) for v in msg.get_all(field) + ] + else: + value = sanitise_header(msg.get(field)) + if key == "keywords": + # Accept both comma-separated and space-separated + # forms, for better compatibility with old data. + if "," in value: + value = [v.strip() for v in value.split(",")] + else: + value = value.split() + result[key] = value + + payload = msg.get_payload() + if payload: + result["description"] = payload + + return result diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/base.py b/venv/lib/python3.11/site-packages/pip/_internal/metadata/base.py new file mode 100644 index 0000000..cafb79f --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/metadata/base.py @@ -0,0 +1,688 @@ +import csv +import email.message +import functools +import json +import logging +import pathlib +import re +import zipfile +from typing import ( + IO, + TYPE_CHECKING, + Any, + Collection, + Container, + Dict, + Iterable, + Iterator, + List, + NamedTuple, + Optional, + Tuple, + Union, +) + +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.specifiers import InvalidSpecifier, SpecifierSet +from pip._vendor.packaging.utils import NormalizedName +from pip._vendor.packaging.version import LegacyVersion, Version + +from pip._internal.exceptions import NoneMetadataError +from pip._internal.locations import site_packages, user_site +from pip._internal.models.direct_url import ( + DIRECT_URL_METADATA_NAME, + DirectUrl, + DirectUrlValidationError, +) +from pip._internal.utils.compat import stdlib_pkgs # TODO: Move definition here. +from pip._internal.utils.egg_link import egg_link_path_from_sys_path +from pip._internal.utils.misc import is_local, normalize_path +from pip._internal.utils.packaging import safe_extra +from pip._internal.utils.urls import url_to_path + +from ._json import msg_to_json + +if TYPE_CHECKING: + from typing import Protocol +else: + Protocol = object + +DistributionVersion = Union[LegacyVersion, Version] + +InfoPath = Union[str, pathlib.PurePath] + +logger = logging.getLogger(__name__) + + +class BaseEntryPoint(Protocol): + @property + def name(self) -> str: + raise NotImplementedError() + + @property + def value(self) -> str: + raise NotImplementedError() + + @property + def group(self) -> str: + raise NotImplementedError() + + +def _convert_installed_files_path( + entry: Tuple[str, ...], + info: Tuple[str, ...], +) -> str: + """Convert a legacy installed-files.txt path into modern RECORD path. + + The legacy format stores paths relative to the info directory, while the + modern format stores paths relative to the package root, e.g. the + site-packages directory. + + :param entry: Path parts of the installed-files.txt entry. + :param info: Path parts of the egg-info directory relative to package root. + :returns: The converted entry. + + For best compatibility with symlinks, this does not use ``abspath()`` or + ``Path.resolve()``, but tries to work with path parts: + + 1. While ``entry`` starts with ``..``, remove the equal amounts of parts + from ``info``; if ``info`` is empty, start appending ``..`` instead. + 2. Join the two directly. + """ + while entry and entry[0] == "..": + if not info or info[-1] == "..": + info += ("..",) + else: + info = info[:-1] + entry = entry[1:] + return str(pathlib.Path(*info, *entry)) + + +class RequiresEntry(NamedTuple): + requirement: str + extra: str + marker: str + + +class BaseDistribution(Protocol): + @classmethod + def from_directory(cls, directory: str) -> "BaseDistribution": + """Load the distribution from a metadata directory. + + :param directory: Path to a metadata directory, e.g. ``.dist-info``. + """ + raise NotImplementedError() + + @classmethod + def from_metadata_file_contents( + cls, + metadata_contents: bytes, + filename: str, + project_name: str, + ) -> "BaseDistribution": + """Load the distribution from the contents of a METADATA file. + + This is used to implement PEP 658 by generating a "shallow" dist object that can + be used for resolution without downloading or building the actual dist yet. + + :param metadata_contents: The contents of a METADATA file. + :param filename: File name for the dist with this metadata. + :param project_name: Name of the project this dist represents. + """ + raise NotImplementedError() + + @classmethod + def from_wheel(cls, wheel: "Wheel", name: str) -> "BaseDistribution": + """Load the distribution from a given wheel. + + :param wheel: A concrete wheel definition. + :param name: File name of the wheel. + + :raises InvalidWheel: Whenever loading of the wheel causes a + :py:exc:`zipfile.BadZipFile` exception to be thrown. + :raises UnsupportedWheel: If the wheel is a valid zip, but malformed + internally. + """ + raise NotImplementedError() + + def __repr__(self) -> str: + return f"{self.raw_name} {self.version} ({self.location})" + + def __str__(self) -> str: + return f"{self.raw_name} {self.version}" + + @property + def location(self) -> Optional[str]: + """Where the distribution is loaded from. + + A string value is not necessarily a filesystem path, since distributions + can be loaded from other sources, e.g. arbitrary zip archives. ``None`` + means the distribution is created in-memory. + + Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If + this is a symbolic link, we want to preserve the relative path between + it and files in the distribution. + """ + raise NotImplementedError() + + @property + def editable_project_location(self) -> Optional[str]: + """The project location for editable distributions. + + This is the directory where pyproject.toml or setup.py is located. + None if the distribution is not installed in editable mode. + """ + # TODO: this property is relatively costly to compute, memoize it ? + direct_url = self.direct_url + if direct_url: + if direct_url.is_local_editable(): + return url_to_path(direct_url.url) + else: + # Search for an .egg-link file by walking sys.path, as it was + # done before by dist_is_editable(). + egg_link_path = egg_link_path_from_sys_path(self.raw_name) + if egg_link_path: + # TODO: get project location from second line of egg_link file + # (https://github.com/pypa/pip/issues/10243) + return self.location + return None + + @property + def installed_location(self) -> Optional[str]: + """The distribution's "installed" location. + + This should generally be a ``site-packages`` directory. This is + usually ``dist.location``, except for legacy develop-installed packages, + where ``dist.location`` is the source code location, and this is where + the ``.egg-link`` file is. + + The returned location is normalized (in particular, with symlinks removed). + """ + raise NotImplementedError() + + @property + def info_location(self) -> Optional[str]: + """Location of the .[egg|dist]-info directory or file. + + Similarly to ``location``, a string value is not necessarily a + filesystem path. ``None`` means the distribution is created in-memory. + + For a modern .dist-info installation on disk, this should be something + like ``{location}/{raw_name}-{version}.dist-info``. + + Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If + this is a symbolic link, we want to preserve the relative path between + it and other files in the distribution. + """ + raise NotImplementedError() + + @property + def installed_by_distutils(self) -> bool: + """Whether this distribution is installed with legacy distutils format. + + A distribution installed with "raw" distutils not patched by setuptools + uses one single file at ``info_location`` to store metadata. We need to + treat this specially on uninstallation. + """ + info_location = self.info_location + if not info_location: + return False + return pathlib.Path(info_location).is_file() + + @property + def installed_as_egg(self) -> bool: + """Whether this distribution is installed as an egg. + + This usually indicates the distribution was installed by (older versions + of) easy_install. + """ + location = self.location + if not location: + return False + return location.endswith(".egg") + + @property + def installed_with_setuptools_egg_info(self) -> bool: + """Whether this distribution is installed with the ``.egg-info`` format. + + This usually indicates the distribution was installed with setuptools + with an old pip version or with ``single-version-externally-managed``. + + Note that this ensure the metadata store is a directory. distutils can + also installs an ``.egg-info``, but as a file, not a directory. This + property is *False* for that case. Also see ``installed_by_distutils``. + """ + info_location = self.info_location + if not info_location: + return False + if not info_location.endswith(".egg-info"): + return False + return pathlib.Path(info_location).is_dir() + + @property + def installed_with_dist_info(self) -> bool: + """Whether this distribution is installed with the "modern format". + + This indicates a "modern" installation, e.g. storing metadata in the + ``.dist-info`` directory. This applies to installations made by + setuptools (but through pip, not directly), or anything using the + standardized build backend interface (PEP 517). + """ + info_location = self.info_location + if not info_location: + return False + if not info_location.endswith(".dist-info"): + return False + return pathlib.Path(info_location).is_dir() + + @property + def canonical_name(self) -> NormalizedName: + raise NotImplementedError() + + @property + def version(self) -> DistributionVersion: + raise NotImplementedError() + + @property + def setuptools_filename(self) -> str: + """Convert a project name to its setuptools-compatible filename. + + This is a copy of ``pkg_resources.to_filename()`` for compatibility. + """ + return self.raw_name.replace("-", "_") + + @property + def direct_url(self) -> Optional[DirectUrl]: + """Obtain a DirectUrl from this distribution. + + Returns None if the distribution has no `direct_url.json` metadata, + or if `direct_url.json` is invalid. + """ + try: + content = self.read_text(DIRECT_URL_METADATA_NAME) + except FileNotFoundError: + return None + try: + return DirectUrl.from_json(content) + except ( + UnicodeDecodeError, + json.JSONDecodeError, + DirectUrlValidationError, + ) as e: + logger.warning( + "Error parsing %s for %s: %s", + DIRECT_URL_METADATA_NAME, + self.canonical_name, + e, + ) + return None + + @property + def installer(self) -> str: + try: + installer_text = self.read_text("INSTALLER") + except (OSError, ValueError, NoneMetadataError): + return "" # Fail silently if the installer file cannot be read. + for line in installer_text.splitlines(): + cleaned_line = line.strip() + if cleaned_line: + return cleaned_line + return "" + + @property + def requested(self) -> bool: + return self.is_file("REQUESTED") + + @property + def editable(self) -> bool: + return bool(self.editable_project_location) + + @property + def local(self) -> bool: + """If distribution is installed in the current virtual environment. + + Always True if we're not in a virtualenv. + """ + if self.installed_location is None: + return False + return is_local(self.installed_location) + + @property + def in_usersite(self) -> bool: + if self.installed_location is None or user_site is None: + return False + return self.installed_location.startswith(normalize_path(user_site)) + + @property + def in_site_packages(self) -> bool: + if self.installed_location is None or site_packages is None: + return False + return self.installed_location.startswith(normalize_path(site_packages)) + + def is_file(self, path: InfoPath) -> bool: + """Check whether an entry in the info directory is a file.""" + raise NotImplementedError() + + def iter_distutils_script_names(self) -> Iterator[str]: + """Find distutils 'scripts' entries metadata. + + If 'scripts' is supplied in ``setup.py``, distutils records those in the + installed distribution's ``scripts`` directory, a file for each script. + """ + raise NotImplementedError() + + def read_text(self, path: InfoPath) -> str: + """Read a file in the info directory. + + :raise FileNotFoundError: If ``path`` does not exist in the directory. + :raise NoneMetadataError: If ``path`` exists in the info directory, but + cannot be read. + """ + raise NotImplementedError() + + def iter_entry_points(self) -> Iterable[BaseEntryPoint]: + raise NotImplementedError() + + def _metadata_impl(self) -> email.message.Message: + raise NotImplementedError() + + @functools.lru_cache(maxsize=1) + def _metadata_cached(self) -> email.message.Message: + # When we drop python 3.7 support, move this to the metadata property and use + # functools.cached_property instead of lru_cache. + metadata = self._metadata_impl() + self._add_egg_info_requires(metadata) + return metadata + + @property + def metadata(self) -> email.message.Message: + """Metadata of distribution parsed from e.g. METADATA or PKG-INFO. + + This should return an empty message if the metadata file is unavailable. + + :raises NoneMetadataError: If the metadata file is available, but does + not contain valid metadata. + """ + return self._metadata_cached() + + @property + def metadata_dict(self) -> Dict[str, Any]: + """PEP 566 compliant JSON-serializable representation of METADATA or PKG-INFO. + + This should return an empty dict if the metadata file is unavailable. + + :raises NoneMetadataError: If the metadata file is available, but does + not contain valid metadata. + """ + return msg_to_json(self.metadata) + + @property + def metadata_version(self) -> Optional[str]: + """Value of "Metadata-Version:" in distribution metadata, if available.""" + return self.metadata.get("Metadata-Version") + + @property + def raw_name(self) -> str: + """Value of "Name:" in distribution metadata.""" + # The metadata should NEVER be missing the Name: key, but if it somehow + # does, fall back to the known canonical name. + return self.metadata.get("Name", self.canonical_name) + + @property + def requires_python(self) -> SpecifierSet: + """Value of "Requires-Python:" in distribution metadata. + + If the key does not exist or contains an invalid value, an empty + SpecifierSet should be returned. + """ + value = self.metadata.get("Requires-Python") + if value is None: + return SpecifierSet() + try: + # Convert to str to satisfy the type checker; this can be a Header object. + spec = SpecifierSet(str(value)) + except InvalidSpecifier as e: + message = "Package %r has an invalid Requires-Python: %s" + logger.warning(message, self.raw_name, e) + return SpecifierSet() + return spec + + def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: + """Dependencies of this distribution. + + For modern .dist-info distributions, this is the collection of + "Requires-Dist:" entries in distribution metadata. + """ + raise NotImplementedError() + + def iter_provided_extras(self) -> Iterable[str]: + """Extras provided by this distribution. + + For modern .dist-info distributions, this is the collection of + "Provides-Extra:" entries in distribution metadata. + """ + raise NotImplementedError() + + def _iter_declared_entries_from_record(self) -> Optional[Iterator[str]]: + try: + text = self.read_text("RECORD") + except FileNotFoundError: + return None + # This extra Path-str cast normalizes entries. + return (str(pathlib.Path(row[0])) for row in csv.reader(text.splitlines())) + + def _iter_declared_entries_from_legacy(self) -> Optional[Iterator[str]]: + try: + text = self.read_text("installed-files.txt") + except FileNotFoundError: + return None + paths = (p for p in text.splitlines(keepends=False) if p) + root = self.location + info = self.info_location + if root is None or info is None: + return paths + try: + info_rel = pathlib.Path(info).relative_to(root) + except ValueError: # info is not relative to root. + return paths + if not info_rel.parts: # info *is* root. + return paths + return ( + _convert_installed_files_path(pathlib.Path(p).parts, info_rel.parts) + for p in paths + ) + + def iter_declared_entries(self) -> Optional[Iterator[str]]: + """Iterate through file entries declared in this distribution. + + For modern .dist-info distributions, this is the files listed in the + ``RECORD`` metadata file. For legacy setuptools distributions, this + comes from ``installed-files.txt``, with entries normalized to be + compatible with the format used by ``RECORD``. + + :return: An iterator for listed entries, or None if the distribution + contains neither ``RECORD`` nor ``installed-files.txt``. + """ + return ( + self._iter_declared_entries_from_record() + or self._iter_declared_entries_from_legacy() + ) + + def _iter_requires_txt_entries(self) -> Iterator[RequiresEntry]: + """Parse a ``requires.txt`` in an egg-info directory. + + This is an INI-ish format where an egg-info stores dependencies. A + section name describes extra other environment markers, while each entry + is an arbitrary string (not a key-value pair) representing a dependency + as a requirement string (no markers). + + There is a construct in ``importlib.metadata`` called ``Sectioned`` that + does mostly the same, but the format is currently considered private. + """ + try: + content = self.read_text("requires.txt") + except FileNotFoundError: + return + extra = marker = "" # Section-less entries don't have markers. + for line in content.splitlines(): + line = line.strip() + if not line or line.startswith("#"): # Comment; ignored. + continue + if line.startswith("[") and line.endswith("]"): # A section header. + extra, _, marker = line.strip("[]").partition(":") + continue + yield RequiresEntry(requirement=line, extra=extra, marker=marker) + + def _iter_egg_info_extras(self) -> Iterable[str]: + """Get extras from the egg-info directory.""" + known_extras = {""} + for entry in self._iter_requires_txt_entries(): + if entry.extra in known_extras: + continue + known_extras.add(entry.extra) + yield entry.extra + + def _iter_egg_info_dependencies(self) -> Iterable[str]: + """Get distribution dependencies from the egg-info directory. + + To ease parsing, this converts a legacy dependency entry into a PEP 508 + requirement string. Like ``_iter_requires_txt_entries()``, there is code + in ``importlib.metadata`` that does mostly the same, but not do exactly + what we need. + + Namely, ``importlib.metadata`` does not normalize the extra name before + putting it into the requirement string, which causes marker comparison + to fail because the dist-info format do normalize. This is consistent in + all currently available PEP 517 backends, although not standardized. + """ + for entry in self._iter_requires_txt_entries(): + if entry.extra and entry.marker: + marker = f'({entry.marker}) and extra == "{safe_extra(entry.extra)}"' + elif entry.extra: + marker = f'extra == "{safe_extra(entry.extra)}"' + elif entry.marker: + marker = entry.marker + else: + marker = "" + if marker: + yield f"{entry.requirement} ; {marker}" + else: + yield entry.requirement + + def _add_egg_info_requires(self, metadata: email.message.Message) -> None: + """Add egg-info requires.txt information to the metadata.""" + if not metadata.get_all("Requires-Dist"): + for dep in self._iter_egg_info_dependencies(): + metadata["Requires-Dist"] = dep + if not metadata.get_all("Provides-Extra"): + for extra in self._iter_egg_info_extras(): + metadata["Provides-Extra"] = extra + + +class BaseEnvironment: + """An environment containing distributions to introspect.""" + + @classmethod + def default(cls) -> "BaseEnvironment": + raise NotImplementedError() + + @classmethod + def from_paths(cls, paths: Optional[List[str]]) -> "BaseEnvironment": + raise NotImplementedError() + + def get_distribution(self, name: str) -> Optional["BaseDistribution"]: + """Given a requirement name, return the installed distributions. + + The name may not be normalized. The implementation must canonicalize + it for lookup. + """ + raise NotImplementedError() + + def _iter_distributions(self) -> Iterator["BaseDistribution"]: + """Iterate through installed distributions. + + This function should be implemented by subclass, but never called + directly. Use the public ``iter_distribution()`` instead, which + implements additional logic to make sure the distributions are valid. + """ + raise NotImplementedError() + + def iter_all_distributions(self) -> Iterator[BaseDistribution]: + """Iterate through all installed distributions without any filtering.""" + for dist in self._iter_distributions(): + # Make sure the distribution actually comes from a valid Python + # packaging distribution. Pip's AdjacentTempDirectory leaves folders + # e.g. ``~atplotlib.dist-info`` if cleanup was interrupted. The + # valid project name pattern is taken from PEP 508. + project_name_valid = re.match( + r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", + dist.canonical_name, + flags=re.IGNORECASE, + ) + if not project_name_valid: + logger.warning( + "Ignoring invalid distribution %s (%s)", + dist.canonical_name, + dist.location, + ) + continue + yield dist + + def iter_installed_distributions( + self, + local_only: bool = True, + skip: Container[str] = stdlib_pkgs, + include_editables: bool = True, + editables_only: bool = False, + user_only: bool = False, + ) -> Iterator[BaseDistribution]: + """Return a list of installed distributions. + + This is based on ``iter_all_distributions()`` with additional filtering + options. Note that ``iter_installed_distributions()`` without arguments + is *not* equal to ``iter_all_distributions()``, since some of the + configurations exclude packages by default. + + :param local_only: If True (default), only return installations + local to the current virtualenv, if in a virtualenv. + :param skip: An iterable of canonicalized project names to ignore; + defaults to ``stdlib_pkgs``. + :param include_editables: If False, don't report editables. + :param editables_only: If True, only report editables. + :param user_only: If True, only report installations in the user + site directory. + """ + it = self.iter_all_distributions() + if local_only: + it = (d for d in it if d.local) + if not include_editables: + it = (d for d in it if not d.editable) + if editables_only: + it = (d for d in it if d.editable) + if user_only: + it = (d for d in it if d.in_usersite) + return (d for d in it if d.canonical_name not in skip) + + +class Wheel(Protocol): + location: str + + def as_zipfile(self) -> zipfile.ZipFile: + raise NotImplementedError() + + +class FilesystemWheel(Wheel): + def __init__(self, location: str) -> None: + self.location = location + + def as_zipfile(self) -> zipfile.ZipFile: + return zipfile.ZipFile(self.location, allowZip64=True) + + +class MemoryWheel(Wheel): + def __init__(self, location: str, stream: IO[bytes]) -> None: + self.location = location + self.stream = stream + + def as_zipfile(self) -> zipfile.ZipFile: + return zipfile.ZipFile(self.stream, allowZip64=True) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py new file mode 100644 index 0000000..5e7af9f --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py @@ -0,0 +1,4 @@ +from ._dists import Distribution +from ._envs import Environment + +__all__ = ["Distribution", "Environment"] diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42f9493fc9f8ea2dacd8bc1083a9743eb8093d3b GIT binary patch literal 365 zcmY*UJ5B>J5Vd!+2_)nIG!Yfj7Q~7uXn+b@8oF&PC$=_D{FCinDIK?f8zAn$AyP(L zAyLtR(xqZHf+91cnK$#^ljYapu#X@{??2@d=4ZS7NAd@@=K!7&M;t4pae;A*6P4(+ zNCBt3Qzk`+XOAfFeqj*jxH-9#A$mEjqO=C~!M&-aw?+#SeF_@if%cGRO_y?zhW)Y0 zs4#Wdb4`y@rWB=bXbV!bTavlef-E?3-Y&!}24Zzhr);*Y9I3%bl$;W`igRl&$CC*O zGKvcaJS#;YPC7!RiNYJEh!&A?78#M+Ssz;`1y)8%$8NPdy4IFgO5FMZyxo2(TtWLz eF~%Eowmz&48m$lOV{rO%v+n0ly*B+Zcz*#My=MUc literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9c5dd2bcf8a77c2b6a783c6da073539272ca79f GIT binary patch literal 3572 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 I0#O(L4TM1`KmY&$ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26cd22282708d3d7ed8ea0d6561b894a024cd2cd GIT binary patch literal 12426 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 w#pdK)>t{AD{^-jH_wug0B74*UnA None: + self.dist = dist + self.reason = reason + + def __str__(self) -> str: + return f"Bad metadata in {self.dist} ({self.reason})" + + +class BasePath(Protocol): + """A protocol that various path objects conform. + + This exists because importlib.metadata uses both ``pathlib.Path`` and + ``zipfile.Path``, and we need a common base for type hints (Union does not + work well since ``zipfile.Path`` is too new for our linter setup). + + This does not mean to be exhaustive, but only contains things that present + in both classes *that we need*. + """ + + @property + def name(self) -> str: + raise NotImplementedError() + + @property + def parent(self) -> "BasePath": + raise NotImplementedError() + + +def get_info_location(d: importlib.metadata.Distribution) -> Optional[BasePath]: + """Find the path to the distribution's metadata directory. + + HACK: This relies on importlib.metadata's private ``_path`` attribute. Not + all distributions exist on disk, so importlib.metadata is correct to not + expose the attribute as public. But pip's code base is old and not as clean, + so we do this to avoid having to rewrite too many things. Hopefully we can + eliminate this some day. + """ + return getattr(d, "_path", None) + + +def get_dist_name(dist: importlib.metadata.Distribution) -> str: + """Get the distribution's project name. + + The ``name`` attribute is only available in Python 3.10 or later. We are + targeting exactly that, but Mypy does not know this. + """ + name = cast(Any, dist).name + if not isinstance(name, str): + raise BadMetadata(dist, reason="invalid metadata entry 'name'") + return name diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py b/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py new file mode 100644 index 0000000..65c043c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py @@ -0,0 +1,224 @@ +import email.message +import importlib.metadata +import os +import pathlib +import zipfile +from typing import ( + Collection, + Dict, + Iterable, + Iterator, + Mapping, + Optional, + Sequence, + cast, +) + +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.exceptions import InvalidWheel, UnsupportedWheel +from pip._internal.metadata.base import ( + BaseDistribution, + BaseEntryPoint, + DistributionVersion, + InfoPath, + Wheel, +) +from pip._internal.utils.misc import normalize_path +from pip._internal.utils.packaging import safe_extra +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file + +from ._compat import BasePath, get_dist_name + + +class WheelDistribution(importlib.metadata.Distribution): + """An ``importlib.metadata.Distribution`` read from a wheel. + + Although ``importlib.metadata.PathDistribution`` accepts ``zipfile.Path``, + its implementation is too "lazy" for pip's needs (we can't keep the ZipFile + handle open for the entire lifetime of the distribution object). + + This implementation eagerly reads the entire metadata directory into the + memory instead, and operates from that. + """ + + def __init__( + self, + files: Mapping[pathlib.PurePosixPath, bytes], + info_location: pathlib.PurePosixPath, + ) -> None: + self._files = files + self.info_location = info_location + + @classmethod + def from_zipfile( + cls, + zf: zipfile.ZipFile, + name: str, + location: str, + ) -> "WheelDistribution": + info_dir, _ = parse_wheel(zf, name) + paths = ( + (name, pathlib.PurePosixPath(name.split("/", 1)[-1])) + for name in zf.namelist() + if name.startswith(f"{info_dir}/") + ) + files = { + relpath: read_wheel_metadata_file(zf, fullpath) + for fullpath, relpath in paths + } + info_location = pathlib.PurePosixPath(location, info_dir) + return cls(files, info_location) + + def iterdir(self, path: InfoPath) -> Iterator[pathlib.PurePosixPath]: + # Only allow iterating through the metadata directory. + if pathlib.PurePosixPath(str(path)) in self._files: + return iter(self._files) + raise FileNotFoundError(path) + + def read_text(self, filename: str) -> Optional[str]: + try: + data = self._files[pathlib.PurePosixPath(filename)] + except KeyError: + return None + try: + text = data.decode("utf-8") + except UnicodeDecodeError as e: + wheel = self.info_location.parent + error = f"Error decoding metadata for {wheel}: {e} in {filename} file" + raise UnsupportedWheel(error) + return text + + +class Distribution(BaseDistribution): + def __init__( + self, + dist: importlib.metadata.Distribution, + info_location: Optional[BasePath], + installed_location: Optional[BasePath], + ) -> None: + self._dist = dist + self._info_location = info_location + self._installed_location = installed_location + + @classmethod + def from_directory(cls, directory: str) -> BaseDistribution: + info_location = pathlib.Path(directory) + dist = importlib.metadata.Distribution.at(info_location) + return cls(dist, info_location, info_location.parent) + + @classmethod + def from_metadata_file_contents( + cls, + metadata_contents: bytes, + filename: str, + project_name: str, + ) -> BaseDistribution: + # Generate temp dir to contain the metadata file, and write the file contents. + temp_dir = pathlib.Path( + TempDirectory(kind="metadata", globally_managed=True).path + ) + metadata_path = temp_dir / "METADATA" + metadata_path.write_bytes(metadata_contents) + # Construct dist pointing to the newly created directory. + dist = importlib.metadata.Distribution.at(metadata_path.parent) + return cls(dist, metadata_path.parent, None) + + @classmethod + def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution: + try: + with wheel.as_zipfile() as zf: + dist = WheelDistribution.from_zipfile(zf, name, wheel.location) + except zipfile.BadZipFile as e: + raise InvalidWheel(wheel.location, name) from e + except UnsupportedWheel as e: + raise UnsupportedWheel(f"{name} has an invalid wheel, {e}") + return cls(dist, dist.info_location, pathlib.PurePosixPath(wheel.location)) + + @property + def location(self) -> Optional[str]: + if self._info_location is None: + return None + return str(self._info_location.parent) + + @property + def info_location(self) -> Optional[str]: + if self._info_location is None: + return None + return str(self._info_location) + + @property + def installed_location(self) -> Optional[str]: + if self._installed_location is None: + return None + return normalize_path(str(self._installed_location)) + + def _get_dist_name_from_location(self) -> Optional[str]: + """Try to get the name from the metadata directory name. + + This is much faster than reading metadata. + """ + if self._info_location is None: + return None + stem, suffix = os.path.splitext(self._info_location.name) + if suffix not in (".dist-info", ".egg-info"): + return None + return stem.split("-", 1)[0] + + @property + def canonical_name(self) -> NormalizedName: + name = self._get_dist_name_from_location() or get_dist_name(self._dist) + return canonicalize_name(name) + + @property + def version(self) -> DistributionVersion: + return parse_version(self._dist.version) + + def is_file(self, path: InfoPath) -> bool: + return self._dist.read_text(str(path)) is not None + + def iter_distutils_script_names(self) -> Iterator[str]: + # A distutils installation is always "flat" (not in e.g. egg form), so + # if this distribution's info location is NOT a pathlib.Path (but e.g. + # zipfile.Path), it can never contain any distutils scripts. + if not isinstance(self._info_location, pathlib.Path): + return + for child in self._info_location.joinpath("scripts").iterdir(): + yield child.name + + def read_text(self, path: InfoPath) -> str: + content = self._dist.read_text(str(path)) + if content is None: + raise FileNotFoundError(path) + return content + + def iter_entry_points(self) -> Iterable[BaseEntryPoint]: + # importlib.metadata's EntryPoint structure sasitfies BaseEntryPoint. + return self._dist.entry_points + + def _metadata_impl(self) -> email.message.Message: + # From Python 3.10+, importlib.metadata declares PackageMetadata as the + # return type. This protocol is unfortunately a disaster now and misses + # a ton of fields that we need, including get() and get_payload(). We + # rely on the implementation that the object is actually a Message now, + # until upstream can improve the protocol. (python/cpython#94952) + return cast(email.message.Message, self._dist.metadata) + + def iter_provided_extras(self) -> Iterable[str]: + return ( + safe_extra(extra) for extra in self.metadata.get_all("Provides-Extra", []) + ) + + def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: + contexts: Sequence[Dict[str, str]] = [{"extra": safe_extra(e)} for e in extras] + for req_string in self.metadata.get_all("Requires-Dist", []): + req = Requirement(req_string) + if not req.marker: + yield req + elif not extras and req.marker.evaluate({"extra": ""}): + yield req + elif any(req.marker.evaluate(context) for context in contexts): + yield req diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py b/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py new file mode 100644 index 0000000..cbec59e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py @@ -0,0 +1,188 @@ +import functools +import importlib.metadata +import logging +import os +import pathlib +import sys +import zipfile +import zipimport +from typing import Iterator, List, Optional, Sequence, Set, Tuple + +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name + +from pip._internal.metadata.base import BaseDistribution, BaseEnvironment +from pip._internal.models.wheel import Wheel +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.filetypes import WHEEL_EXTENSION + +from ._compat import BadMetadata, BasePath, get_dist_name, get_info_location +from ._dists import Distribution + +logger = logging.getLogger(__name__) + + +def _looks_like_wheel(location: str) -> bool: + if not location.endswith(WHEEL_EXTENSION): + return False + if not os.path.isfile(location): + return False + if not Wheel.wheel_file_re.match(os.path.basename(location)): + return False + return zipfile.is_zipfile(location) + + +class _DistributionFinder: + """Finder to locate distributions. + + The main purpose of this class is to memoize found distributions' names, so + only one distribution is returned for each package name. At lot of pip code + assumes this (because it is setuptools's behavior), and not doing the same + can potentially cause a distribution in lower precedence path to override a + higher precedence one if the caller is not careful. + + Eventually we probably want to make it possible to see lower precedence + installations as well. It's useful feature, after all. + """ + + FoundResult = Tuple[importlib.metadata.Distribution, Optional[BasePath]] + + def __init__(self) -> None: + self._found_names: Set[NormalizedName] = set() + + def _find_impl(self, location: str) -> Iterator[FoundResult]: + """Find distributions in a location.""" + # Skip looking inside a wheel. Since a package inside a wheel is not + # always valid (due to .data directories etc.), its .dist-info entry + # should not be considered an installed distribution. + if _looks_like_wheel(location): + return + # To know exactly where we find a distribution, we have to feed in the + # paths one by one, instead of dumping the list to importlib.metadata. + for dist in importlib.metadata.distributions(path=[location]): + info_location = get_info_location(dist) + try: + raw_name = get_dist_name(dist) + except BadMetadata as e: + logger.warning("Skipping %s due to %s", info_location, e.reason) + continue + normalized_name = canonicalize_name(raw_name) + if normalized_name in self._found_names: + continue + self._found_names.add(normalized_name) + yield dist, info_location + + def find(self, location: str) -> Iterator[BaseDistribution]: + """Find distributions in a location. + + The path can be either a directory, or a ZIP archive. + """ + for dist, info_location in self._find_impl(location): + if info_location is None: + installed_location: Optional[BasePath] = None + else: + installed_location = info_location.parent + yield Distribution(dist, info_location, installed_location) + + def find_linked(self, location: str) -> Iterator[BaseDistribution]: + """Read location in egg-link files and return distributions in there. + + The path should be a directory; otherwise this returns nothing. This + follows how setuptools does this for compatibility. The first non-empty + line in the egg-link is read as a path (resolved against the egg-link's + containing directory if relative). Distributions found at that linked + location are returned. + """ + path = pathlib.Path(location) + if not path.is_dir(): + return + for child in path.iterdir(): + if child.suffix != ".egg-link": + continue + with child.open() as f: + lines = (line.strip() for line in f) + target_rel = next((line for line in lines if line), "") + if not target_rel: + continue + target_location = str(path.joinpath(target_rel)) + for dist, info_location in self._find_impl(target_location): + yield Distribution(dist, info_location, path) + + def _find_eggs_in_dir(self, location: str) -> Iterator[BaseDistribution]: + from pip._vendor.pkg_resources import find_distributions + + from pip._internal.metadata import pkg_resources as legacy + + with os.scandir(location) as it: + for entry in it: + if not entry.name.endswith(".egg"): + continue + for dist in find_distributions(entry.path): + yield legacy.Distribution(dist) + + def _find_eggs_in_zip(self, location: str) -> Iterator[BaseDistribution]: + from pip._vendor.pkg_resources import find_eggs_in_zip + + from pip._internal.metadata import pkg_resources as legacy + + try: + importer = zipimport.zipimporter(location) + except zipimport.ZipImportError: + return + for dist in find_eggs_in_zip(importer, location): + yield legacy.Distribution(dist) + + def find_eggs(self, location: str) -> Iterator[BaseDistribution]: + """Find eggs in a location. + + This actually uses the old *pkg_resources* backend. We likely want to + deprecate this so we can eventually remove the *pkg_resources* + dependency entirely. Before that, this should first emit a deprecation + warning for some versions when using the fallback since importing + *pkg_resources* is slow for those who don't need it. + """ + if os.path.isdir(location): + yield from self._find_eggs_in_dir(location) + if zipfile.is_zipfile(location): + yield from self._find_eggs_in_zip(location) + + +@functools.lru_cache(maxsize=None) # Warn a distribution exactly once. +def _emit_egg_deprecation(location: Optional[str]) -> None: + deprecated( + reason=f"Loading egg at {location} is deprecated.", + replacement="to use pip for package installation.", + gone_in=None, + ) + + +class Environment(BaseEnvironment): + def __init__(self, paths: Sequence[str]) -> None: + self._paths = paths + + @classmethod + def default(cls) -> BaseEnvironment: + return cls(sys.path) + + @classmethod + def from_paths(cls, paths: Optional[List[str]]) -> BaseEnvironment: + if paths is None: + return cls(sys.path) + return cls(paths) + + def _iter_distributions(self) -> Iterator[BaseDistribution]: + finder = _DistributionFinder() + for location in self._paths: + yield from finder.find(location) + for dist in finder.find_eggs(location): + # _emit_egg_deprecation(dist.location) # TODO: Enable this. + yield dist + # This must go last because that's how pkg_resources tie-breaks. + yield from finder.find_linked(location) + + def get_distribution(self, name: str) -> Optional[BaseDistribution]: + matches = ( + distribution + for distribution in self.iter_all_distributions() + if distribution.canonical_name == canonicalize_name(name) + ) + return next(matches, None) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py b/venv/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py new file mode 100644 index 0000000..f330ef1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py @@ -0,0 +1,270 @@ +import email.message +import email.parser +import logging +import os +import zipfile +from typing import Collection, Iterable, Iterator, List, Mapping, NamedTuple, Optional + +from pip._vendor import pkg_resources +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.exceptions import InvalidWheel, NoneMetadataError, UnsupportedWheel +from pip._internal.utils.egg_link import egg_link_path_from_location +from pip._internal.utils.misc import display_path, normalize_path +from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file + +from .base import ( + BaseDistribution, + BaseEntryPoint, + BaseEnvironment, + DistributionVersion, + InfoPath, + Wheel, +) + +logger = logging.getLogger(__name__) + + +class EntryPoint(NamedTuple): + name: str + value: str + group: str + + +class InMemoryMetadata: + """IMetadataProvider that reads metadata files from a dictionary. + + This also maps metadata decoding exceptions to our internal exception type. + """ + + def __init__(self, metadata: Mapping[str, bytes], wheel_name: str) -> None: + self._metadata = metadata + self._wheel_name = wheel_name + + def has_metadata(self, name: str) -> bool: + return name in self._metadata + + def get_metadata(self, name: str) -> str: + try: + return self._metadata[name].decode() + except UnicodeDecodeError as e: + # Augment the default error with the origin of the file. + raise UnsupportedWheel( + f"Error decoding metadata for {self._wheel_name}: {e} in {name} file" + ) + + def get_metadata_lines(self, name: str) -> Iterable[str]: + return pkg_resources.yield_lines(self.get_metadata(name)) + + def metadata_isdir(self, name: str) -> bool: + return False + + def metadata_listdir(self, name: str) -> List[str]: + return [] + + def run_script(self, script_name: str, namespace: str) -> None: + pass + + +class Distribution(BaseDistribution): + def __init__(self, dist: pkg_resources.Distribution) -> None: + self._dist = dist + + @classmethod + def from_directory(cls, directory: str) -> BaseDistribution: + dist_dir = directory.rstrip(os.sep) + + # Build a PathMetadata object, from path to metadata. :wink: + base_dir, dist_dir_name = os.path.split(dist_dir) + metadata = pkg_resources.PathMetadata(base_dir, dist_dir) + + # Determine the correct Distribution object type. + if dist_dir.endswith(".egg-info"): + dist_cls = pkg_resources.Distribution + dist_name = os.path.splitext(dist_dir_name)[0] + else: + assert dist_dir.endswith(".dist-info") + dist_cls = pkg_resources.DistInfoDistribution + dist_name = os.path.splitext(dist_dir_name)[0].split("-")[0] + + dist = dist_cls(base_dir, project_name=dist_name, metadata=metadata) + return cls(dist) + + @classmethod + def from_metadata_file_contents( + cls, + metadata_contents: bytes, + filename: str, + project_name: str, + ) -> BaseDistribution: + metadata_dict = { + "METADATA": metadata_contents, + } + dist = pkg_resources.DistInfoDistribution( + location=filename, + metadata=InMemoryMetadata(metadata_dict, filename), + project_name=project_name, + ) + return cls(dist) + + @classmethod + def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution: + try: + with wheel.as_zipfile() as zf: + info_dir, _ = parse_wheel(zf, name) + metadata_dict = { + path.split("/", 1)[-1]: read_wheel_metadata_file(zf, path) + for path in zf.namelist() + if path.startswith(f"{info_dir}/") + } + except zipfile.BadZipFile as e: + raise InvalidWheel(wheel.location, name) from e + except UnsupportedWheel as e: + raise UnsupportedWheel(f"{name} has an invalid wheel, {e}") + dist = pkg_resources.DistInfoDistribution( + location=wheel.location, + metadata=InMemoryMetadata(metadata_dict, wheel.location), + project_name=name, + ) + return cls(dist) + + @property + def location(self) -> Optional[str]: + return self._dist.location + + @property + def installed_location(self) -> Optional[str]: + egg_link = egg_link_path_from_location(self.raw_name) + if egg_link: + location = egg_link + elif self.location: + location = self.location + else: + return None + return normalize_path(location) + + @property + def info_location(self) -> Optional[str]: + return self._dist.egg_info + + @property + def installed_by_distutils(self) -> bool: + # A distutils-installed distribution is provided by FileMetadata. This + # provider has a "path" attribute not present anywhere else. Not the + # best introspection logic, but pip has been doing this for a long time. + try: + return bool(self._dist._provider.path) + except AttributeError: + return False + + @property + def canonical_name(self) -> NormalizedName: + return canonicalize_name(self._dist.project_name) + + @property + def version(self) -> DistributionVersion: + return parse_version(self._dist.version) + + def is_file(self, path: InfoPath) -> bool: + return self._dist.has_metadata(str(path)) + + def iter_distutils_script_names(self) -> Iterator[str]: + yield from self._dist.metadata_listdir("scripts") + + def read_text(self, path: InfoPath) -> str: + name = str(path) + if not self._dist.has_metadata(name): + raise FileNotFoundError(name) + content = self._dist.get_metadata(name) + if content is None: + raise NoneMetadataError(self, name) + return content + + def iter_entry_points(self) -> Iterable[BaseEntryPoint]: + for group, entries in self._dist.get_entry_map().items(): + for name, entry_point in entries.items(): + name, _, value = str(entry_point).partition("=") + yield EntryPoint(name=name.strip(), value=value.strip(), group=group) + + def _metadata_impl(self) -> email.message.Message: + """ + :raises NoneMetadataError: if the distribution reports `has_metadata()` + True but `get_metadata()` returns None. + """ + if isinstance(self._dist, pkg_resources.DistInfoDistribution): + metadata_name = "METADATA" + else: + metadata_name = "PKG-INFO" + try: + metadata = self.read_text(metadata_name) + except FileNotFoundError: + if self.location: + displaying_path = display_path(self.location) + else: + displaying_path = repr(self.location) + logger.warning("No metadata found in %s", displaying_path) + metadata = "" + feed_parser = email.parser.FeedParser() + feed_parser.feed(metadata) + return feed_parser.close() + + def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: + if extras: # pkg_resources raises on invalid extras, so we sanitize. + extras = frozenset(extras).intersection(self._dist.extras) + return self._dist.requires(extras) + + def iter_provided_extras(self) -> Iterable[str]: + return self._dist.extras + + +class Environment(BaseEnvironment): + def __init__(self, ws: pkg_resources.WorkingSet) -> None: + self._ws = ws + + @classmethod + def default(cls) -> BaseEnvironment: + return cls(pkg_resources.working_set) + + @classmethod + def from_paths(cls, paths: Optional[List[str]]) -> BaseEnvironment: + return cls(pkg_resources.WorkingSet(paths)) + + def _iter_distributions(self) -> Iterator[BaseDistribution]: + for dist in self._ws: + yield Distribution(dist) + + def _search_distribution(self, name: str) -> Optional[BaseDistribution]: + """Find a distribution matching the ``name`` in the environment. + + This searches from *all* distributions available in the environment, to + match the behavior of ``pkg_resources.get_distribution()``. + """ + canonical_name = canonicalize_name(name) + for dist in self.iter_all_distributions(): + if dist.canonical_name == canonical_name: + return dist + return None + + def get_distribution(self, name: str) -> Optional[BaseDistribution]: + # Search the distribution by looking through the working set. + dist = self._search_distribution(name) + if dist: + return dist + + # If distribution could not be found, call working_set.require to + # update the working set, and try to find the distribution again. + # This might happen for e.g. when you install a package twice, once + # using setup.py develop and again using setup.py install. Now when + # running pip uninstall twice, the package gets removed from the + # working set in the first uninstall, so we have to populate the + # working set again so that pip knows about it and the packages gets + # picked up and is successfully uninstalled the second time too. + try: + # We didn't pass in any version specifiers, so this can never + # raise pkg_resources.VersionConflict. + self._ws.require(name) + except pkg_resources.DistributionNotFound: + return None + return self._search_distribution(name) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/models/__init__.py new file mode 100644 index 0000000..7855226 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/__init__.py @@ -0,0 +1,2 @@ +"""A package that contains models that represent entities. +""" diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4888159d9c785632f40ac2797e3124308c18f4c GIT binary patch literal 282 zcmY*UJ5B>J5Veztph!7D8ss)bb`+(dK%iWJhK^?BtVdagUE8uJD}{@21jHRU2`v{` zlr9xsB@{eqes4y4Z{DZViO9J5{MkO_`rQwIkeBAzpS%epo`sQ5Vm^4iU8|tW7riCL zm1b3X$J)B28gHmhXEIWVl*qBlVcAkDCXaLZHAXbPMEnrPUf_gK`G#O;AVj~Tk`wr* z#Z4C22WZK)P}>cJ16SUyiscfLWm;SeBnUPDTE`TfuHozeFf*1Bi*Pty-(_-N(|x?k Ydi_^vmQy#BQg#C=N1gbW;wW!_0o7Gega7~l literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/candidate.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83bbf634f92d2f7593d90673453d4c2bb84d1d1f GIT binary patch literal 2101 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 D5oq>x literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/format_control.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f55f4bdb8c0b2070732dc127656615bc3378da3 GIT binary patch literal 4665 zcma(UTWk~A_0G%h*iIbMKp+exA(%~UD5X%uQfXl+Pgg1IwzAmHI=+|0F!q=`V;)(j zidw2QQ6%W9t9Ye+xDus{_{m2<_G3Tz*pGgWktM8=B1LK|?fx0Ds#bjU+?mA5BmwRC z`rOyK=bn4+dEI|>bOaE5{a?SFX!;TQH|wl^;!5MyMQF?;j4-F7JeTJ3e45V-X@O&7 zyej6Uv}Csh)sy$8y&U4vuMigRAuK)S5qb)L=S%yr=Q4_Wzhm9FVENBbZHg2w6T|ZT zx@hFILPoU&=*Bs#Gn*-Bgax+}q!)|3Ed5 z2ugDprFqPy1i~)_U!z)HzCD@C zPRbd%n91JAOb{7FERPd8SI~`&suG;A`~^)J&lNKCt`*b@>fM!2%JNWRlxQIFLPz2wAYt;=(RNmqs!{P(Qp?{`#^LOxV)7O#+)Aps@nrF?F{u>} zCk`D->N$gquE<7D7IVdtK;8YZfqbi}D-9g!!BcP*a+NI64Mrg~i0kyst? z0DknN0A^4tfI{2M;LfGqzAvN&sdBCv>@kD=OFMRbF|;sLxv;!_Z$+F7H~aQg#D=fe zw96}4iY!SpCJD{91p;HtKyC3qg2t!lQ*Iuu7yo_kKDyo(r`r&9ufbNYe3ubmwlDTR zx7NO4k5VwB%g9(YF<4dMDhL#wzvo-O@-%W^`D57qX`2I3Ss`^M+wKDy5Bv|q|J79h zpYseZvI`fpg8W?8@7}_MDrYn=7yQ-&@gNO{=+*#jErH>xM=Z- zgBEv#cEbdX0??U2WO-(Wc0%K||HK3-kUK?sa%yBvHXgXRWrJ-C{{S78RzmvmE;L%CT3H*su^rb027Y$_F3#x=}ZbAe{3Je@+b=9 zda8S?v+Q7ury1iv%%G*n_Ucfr`%!;AaG=x%XRk>>}PB5@1OzUg{wim`75u} z;p=VfhtamaLc6WYk74v_dj>R)PfZ0rncn}&^oab)bR6XBaV(hbgsqtEvcRG!YwqI- z=V${{Q`wOnU{O+}TUod>J^;A-I{;=-Gt&1WviEspZ!;8~OEp3RwJVQ)zj&o_$*Va*7TjREM4&48b#%tf#8a3cmbaMa{1q}ZhlfRpdNxCGT%!A+Plp*`p3@QvztoG|L}G_w7U`7ZH9I?qcO94z^t2)<(&OyXilS}3E#&d92l6L$@xSb^1 zj?9%FFr#JvSN*mF!5ro%`Dr`Lx(>t62L|2)3e5Cl)3?!iaHw#VVhliIz9e2164e!CgsvJ-Sw+SwfjVkBfGa zNq-7$J49H1$fM!K0y$`0a6;|RVUA_TdPy}_b5AF3#K5I1V1C+df)yw1=u>;#>c0ib zFM*)`HvkY#x^`60nw>)xPcyi^dZn>z)C{u1R5mr6svfI{1{oQ_a=l3j0C%1khU-M!Z+~T zH_!~l?C=c$EbpaP^h4kV&~gL&_>f_wAnOVNg;czY4nS=M6a}6OC2)R<6;hO&;QyR7 z!}2N$*0PXK^aCCh8DMS`9yJD~U99EN#@SoN62~=7r82`9V&frj*+wp#C-7RqjvSbA zQCC`;9C;Dd&K1Vl8`{x!vmrg(9=b7wVgMn`7OwR|W(+B}eGd4tk$ z3jtV;fwQd%3uha#p_ar(J*cO@nyn2iOg6R+JBU6M2)F#JOYC(H*x{9a!&T3;5UXp3 zQ*Qyg1SwD*0B;Ym$xxv$+_A3PKj z3cM$=Mib8K5wH>^Bd6+4`0TYYR-cjy2!+Is+PWQloy$7IZj9yr_65H7op3bhBs~vf uOvUv-0cZ&v$2HMA=9|kh`i1E(%jl5lE-lYlj)P-w4PV;h-@jqjX7c~DOCKNr literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/index.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13d63b03a6ffc7bfe99e423ab9b6638524aed004 GIT binary patch literal 1907 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 IG-Jd67v6951J literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/scheme.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb4af8b1e060fe98fec0c2dea50e4c09ceaae182 GIT binary patch literal 1273 zcmZ`%O=}b}7|zVj?8kK5wOX-))PSd=?obLILlQGF|KiESL z9z1yO-Gd_j1Mx?AlsSq1fsuOZ$v3+@MQF`To;>fHuQ$*8ew>{R5VWPQzk5Gjgnn70 zY~GX{UITJ~80w%NV$OS~pciOS(Cs$};DGS z4nFyLEraM1u?b|L_?X0;GOl!9(~%OH(YeQ{p;7s8J2t1r;SC@Mh@*}Jnz_vBRJhmi znaiuJ0^Nh|L$5-wv3j@38gIM~FiS9h)_6M>QH-hLc%VT~ zs;vxolWLBcP&_hH36Q)iRe+&UWki=o=428mem>R*&W&Et9&eA=s|tj!Y~qz~p=zN9 zkXIEq1C_2v)>Sr}ce~^83BUmwIU_{MIW%&?a!PYl0qeL)rMH{8&;J{BvwO~-Q78)hk!qggI|M)9h*RL1ILLJRt+J97d zP5D3~i+mZAT^Bpw^e`f^2CrPP9j zac~zbI}Z4$erqDYZM6s!wsiC}fTH3!PT~5FS0D>#Q0t!aZSF4o`!hxLoCCL?gx}Wp K=ah-@g?|A8K}uf$ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e886f944492413b25e8e3de49c281d3df68aac5 GIT binary patch literal 5836 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d85b0e6e214556a6c98871f5c9b732e6a19a8d7d GIT binary patch literal 2004 zcmZ`)Pj4GV6rZ(s9ow-3MWsrbKbj^K;wtefMMV&`l~Ab>7ZXtsl0jOHJ>z7X_0D!? zosh~%IrP9ch`1qyfQqlchsdD^Yfq6laoZ}Kdg^<-UOQI9c=yeFZ+70i`TgFE|EN~W z1lr2qFL(6}A^)I}HFKn#e+dihq~AUX0m;rVBTo4@A>`3v5( zwM=e3BDKQ5Xx5CV_+=2f(q|s%)rM3(7Cw-EsHE2!%}BcH$Td|Zgwkt_L?=)T87p=r1$XovaS zL7b3*b)4h5AFY8gAWrrT8RWn+GINjzYfSdQ1Pdc1ZD4_wl@F8+fSqTD@bLpB5I{yR z1D?wEV_>6RP5?p^FrRzdA(}Zl(Pw7-Kk9I+!8k*7E&Hkisj<#J+l9ijX-f3ObGRpb3bCLx!>r6OJ8T%v^||$H?uVQL_00`Jl_enn!T?UxIVU@JOJS`@9G#d&o zH@J%;6VUGd@7d6JCJ-x1Uv=$0*%S6-ZU;(YU20qQ4xBbH(+}(e;UCzZ+qTp5_F;W% z%hqlvHZ$hzzzuB2^+TcH%Cmct3s2i)uJMd_bv-zWiVl3`hK}=e`LaV%&xYqAHGLn% zF^ShnW%YEnHoST3w6c1(wEmO%qPQ@;xsCnmaAgDg#o_WT?5_{szl;6aY4V&y1X42_ z%|^3U!o_{o6OI#=9S3skd#G0&=SiP=qmdcM;j#nnlH+Jkh8k3}Ev2XMyemBB>I#VG zM7@Lh+b9soM4+O725~(8#kssyj0uWz;YuMUnK=F;ULhZB3~zrlTv;1#-HEG<*1ed3 zIJTh%D>^V}Ni{C;&#<@(S zS!15fniUnoqX3RovbSgrNUV=ZtfwT_r!RmMfMmb;Uo*krRq<|$=zX;W19)-j??A+P g!!U+q@pSq*Blk|HpSZATK*n#1m+1TNl7VFL*ObdKtN;K2 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/target_python.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..268245dc30433c2832de65df8adfe843c5f67af6 GIT binary patch literal 4766 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/models/__pycache__/wheel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7db69552cbed690ce342fcbeb3088ba21ab7cf81 GIT binary patch literal 6429 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 None: + self.name = name + self.version = parse_version(version) + self.link = link + + super().__init__( + key=(self.name, self.version, self.link), + defining_class=InstallationCandidate, + ) + + def __repr__(self) -> str: + return "".format( + self.name, + self.version, + self.link, + ) + + def __str__(self) -> str: + return "{!r} candidate (version {} at {})".format( + self.name, + self.version, + self.link, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/direct_url.py b/venv/lib/python3.11/site-packages/pip/_internal/models/direct_url.py new file mode 100644 index 0000000..c3de70a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/direct_url.py @@ -0,0 +1,228 @@ +""" PEP 610 """ +import json +import re +import urllib.parse +from typing import Any, Dict, Iterable, Optional, Type, TypeVar, Union + +__all__ = [ + "DirectUrl", + "DirectUrlValidationError", + "DirInfo", + "ArchiveInfo", + "VcsInfo", +] + +T = TypeVar("T") + +DIRECT_URL_METADATA_NAME = "direct_url.json" +ENV_VAR_RE = re.compile(r"^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$") + + +class DirectUrlValidationError(Exception): + pass + + +def _get( + d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None +) -> Optional[T]: + """Get value from dictionary and verify expected type.""" + if key not in d: + return default + value = d[key] + if not isinstance(value, expected_type): + raise DirectUrlValidationError( + "{!r} has unexpected type for {} (expected {})".format( + value, key, expected_type + ) + ) + return value + + +def _get_required( + d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None +) -> T: + value = _get(d, expected_type, key, default) + if value is None: + raise DirectUrlValidationError(f"{key} must have a value") + return value + + +def _exactly_one_of(infos: Iterable[Optional["InfoType"]]) -> "InfoType": + infos = [info for info in infos if info is not None] + if not infos: + raise DirectUrlValidationError( + "missing one of archive_info, dir_info, vcs_info" + ) + if len(infos) > 1: + raise DirectUrlValidationError( + "more than one of archive_info, dir_info, vcs_info" + ) + assert infos[0] is not None + return infos[0] + + +def _filter_none(**kwargs: Any) -> Dict[str, Any]: + """Make dict excluding None values.""" + return {k: v for k, v in kwargs.items() if v is not None} + + +class VcsInfo: + name = "vcs_info" + + def __init__( + self, + vcs: str, + commit_id: str, + requested_revision: Optional[str] = None, + ) -> None: + self.vcs = vcs + self.requested_revision = requested_revision + self.commit_id = commit_id + + @classmethod + def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["VcsInfo"]: + if d is None: + return None + return cls( + vcs=_get_required(d, str, "vcs"), + commit_id=_get_required(d, str, "commit_id"), + requested_revision=_get(d, str, "requested_revision"), + ) + + def _to_dict(self) -> Dict[str, Any]: + return _filter_none( + vcs=self.vcs, + requested_revision=self.requested_revision, + commit_id=self.commit_id, + ) + + +class ArchiveInfo: + name = "archive_info" + + def __init__( + self, + hash: Optional[str] = None, + hashes: Optional[Dict[str, str]] = None, + ) -> None: + if hash is not None: + # Auto-populate the hashes key to upgrade to the new format automatically. + # We don't back-populate the legacy hash key. + try: + hash_name, hash_value = hash.split("=", 1) + except ValueError: + raise DirectUrlValidationError( + f"invalid archive_info.hash format: {hash!r}" + ) + if hashes is None: + hashes = {hash_name: hash_value} + elif hash_name not in hash: + hashes = hashes.copy() + hashes[hash_name] = hash_value + self.hash = hash + self.hashes = hashes + + @classmethod + def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["ArchiveInfo"]: + if d is None: + return None + return cls(hash=_get(d, str, "hash"), hashes=_get(d, dict, "hashes")) + + def _to_dict(self) -> Dict[str, Any]: + return _filter_none(hash=self.hash, hashes=self.hashes) + + +class DirInfo: + name = "dir_info" + + def __init__( + self, + editable: bool = False, + ) -> None: + self.editable = editable + + @classmethod + def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["DirInfo"]: + if d is None: + return None + return cls(editable=_get_required(d, bool, "editable", default=False)) + + def _to_dict(self) -> Dict[str, Any]: + return _filter_none(editable=self.editable or None) + + +InfoType = Union[ArchiveInfo, DirInfo, VcsInfo] + + +class DirectUrl: + def __init__( + self, + url: str, + info: InfoType, + subdirectory: Optional[str] = None, + ) -> None: + self.url = url + self.info = info + self.subdirectory = subdirectory + + def _remove_auth_from_netloc(self, netloc: str) -> str: + if "@" not in netloc: + return netloc + user_pass, netloc_no_user_pass = netloc.split("@", 1) + if ( + isinstance(self.info, VcsInfo) + and self.info.vcs == "git" + and user_pass == "git" + ): + return netloc + if ENV_VAR_RE.match(user_pass): + return netloc + return netloc_no_user_pass + + @property + def redacted_url(self) -> str: + """url with user:password part removed unless it is formed with + environment variables as specified in PEP 610, or it is ``git`` + in the case of a git URL. + """ + purl = urllib.parse.urlsplit(self.url) + netloc = self._remove_auth_from_netloc(purl.netloc) + surl = urllib.parse.urlunsplit( + (purl.scheme, netloc, purl.path, purl.query, purl.fragment) + ) + return surl + + def validate(self) -> None: + self.from_dict(self.to_dict()) + + @classmethod + def from_dict(cls, d: Dict[str, Any]) -> "DirectUrl": + return DirectUrl( + url=_get_required(d, str, "url"), + subdirectory=_get(d, str, "subdirectory"), + info=_exactly_one_of( + [ + ArchiveInfo._from_dict(_get(d, dict, "archive_info")), + DirInfo._from_dict(_get(d, dict, "dir_info")), + VcsInfo._from_dict(_get(d, dict, "vcs_info")), + ] + ), + ) + + def to_dict(self) -> Dict[str, Any]: + res = _filter_none( + url=self.redacted_url, + subdirectory=self.subdirectory, + ) + res[self.info.name] = self.info._to_dict() + return res + + @classmethod + def from_json(cls, s: str) -> "DirectUrl": + return cls.from_dict(json.loads(s)) + + def to_json(self) -> str: + return json.dumps(self.to_dict(), sort_keys=True) + + def is_local_editable(self) -> bool: + return isinstance(self.info, DirInfo) and self.info.editable diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/format_control.py b/venv/lib/python3.11/site-packages/pip/_internal/models/format_control.py new file mode 100644 index 0000000..db3995e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/format_control.py @@ -0,0 +1,80 @@ +from typing import FrozenSet, Optional, Set + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import CommandError + + +class FormatControl: + """Helper for managing formats from which a package can be installed.""" + + __slots__ = ["no_binary", "only_binary"] + + def __init__( + self, + no_binary: Optional[Set[str]] = None, + only_binary: Optional[Set[str]] = None, + ) -> None: + if no_binary is None: + no_binary = set() + if only_binary is None: + only_binary = set() + + self.no_binary = no_binary + self.only_binary = only_binary + + def __eq__(self, other: object) -> bool: + if not isinstance(other, self.__class__): + return NotImplemented + + if self.__slots__ != other.__slots__: + return False + + return all(getattr(self, k) == getattr(other, k) for k in self.__slots__) + + def __repr__(self) -> str: + return "{}({}, {})".format( + self.__class__.__name__, self.no_binary, self.only_binary + ) + + @staticmethod + def handle_mutual_excludes(value: str, target: Set[str], other: Set[str]) -> None: + if value.startswith("-"): + raise CommandError( + "--no-binary / --only-binary option requires 1 argument." + ) + new = value.split(",") + while ":all:" in new: + other.clear() + target.clear() + target.add(":all:") + del new[: new.index(":all:") + 1] + # Without a none, we want to discard everything as :all: covers it + if ":none:" not in new: + return + for name in new: + if name == ":none:": + target.clear() + continue + name = canonicalize_name(name) + other.discard(name) + target.add(name) + + def get_allowed_formats(self, canonical_name: str) -> FrozenSet[str]: + result = {"binary", "source"} + if canonical_name in self.only_binary: + result.discard("source") + elif canonical_name in self.no_binary: + result.discard("binary") + elif ":all:" in self.only_binary: + result.discard("source") + elif ":all:" in self.no_binary: + result.discard("binary") + return frozenset(result) + + def disallow_binaries(self) -> None: + self.handle_mutual_excludes( + ":all:", + self.no_binary, + self.only_binary, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/index.py b/venv/lib/python3.11/site-packages/pip/_internal/models/index.py new file mode 100644 index 0000000..b94c325 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/index.py @@ -0,0 +1,28 @@ +import urllib.parse + + +class PackageIndex: + """Represents a Package Index and provides easier access to endpoints""" + + __slots__ = ["url", "netloc", "simple_url", "pypi_url", "file_storage_domain"] + + def __init__(self, url: str, file_storage_domain: str) -> None: + super().__init__() + self.url = url + self.netloc = urllib.parse.urlsplit(url).netloc + self.simple_url = self._url_for_path("simple") + self.pypi_url = self._url_for_path("pypi") + + # This is part of a temporary hack used to block installs of PyPI + # packages which depend on external urls only necessary until PyPI can + # block such packages themselves + self.file_storage_domain = file_storage_domain + + def _url_for_path(self, path: str) -> str: + return urllib.parse.urljoin(self.url, path) + + +PyPI = PackageIndex("https://pypi.org/", file_storage_domain="files.pythonhosted.org") +TestPyPI = PackageIndex( + "https://test.pypi.org/", file_storage_domain="test-files.pythonhosted.org" +) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/installation_report.py b/venv/lib/python3.11/site-packages/pip/_internal/models/installation_report.py new file mode 100644 index 0000000..b54afb1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/installation_report.py @@ -0,0 +1,53 @@ +from typing import Any, Dict, Sequence + +from pip._vendor.packaging.markers import default_environment + +from pip import __version__ +from pip._internal.req.req_install import InstallRequirement + + +class InstallationReport: + def __init__(self, install_requirements: Sequence[InstallRequirement]): + self._install_requirements = install_requirements + + @classmethod + def _install_req_to_dict(cls, ireq: InstallRequirement) -> Dict[str, Any]: + assert ireq.download_info, f"No download_info for {ireq}" + res = { + # PEP 610 json for the download URL. download_info.archive_info.hash may + # be absent when the requirement was installed from the wheel cache + # and the cache entry was populated by an older pip version that did not + # record origin.json. + "download_info": ireq.download_info.to_dict(), + # is_direct is true if the requirement was a direct URL reference (which + # includes editable requirements), and false if the requirement was + # downloaded from a PEP 503 index or --find-links. + "is_direct": bool(ireq.original_link), + # requested is true if the requirement was specified by the user (aka + # top level requirement), and false if it was installed as a dependency of a + # requirement. https://peps.python.org/pep-0376/#requested + "requested": ireq.user_supplied, + # PEP 566 json encoding for metadata + # https://www.python.org/dev/peps/pep-0566/#json-compatible-metadata + "metadata": ireq.get_dist().metadata_dict, + } + if ireq.user_supplied and ireq.extras: + # For top level requirements, the list of requested extras, if any. + res["requested_extras"] = list(sorted(ireq.extras)) + return res + + def to_dict(self) -> Dict[str, Any]: + return { + "version": "1", + "pip_version": __version__, + "install": [ + self._install_req_to_dict(ireq) for ireq in self._install_requirements + ], + # https://peps.python.org/pep-0508/#environment-markers + # TODO: currently, the resolver uses the default environment to evaluate + # environment markers, so that is what we report here. In the future, it + # should also take into account options such as --python-version or + # --platform, perhaps under the form of an environment_override field? + # https://github.com/pypa/pip/issues/11198 + "environment": default_environment(), + } diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/link.py b/venv/lib/python3.11/site-packages/pip/_internal/models/link.py new file mode 100644 index 0000000..a1e4d5a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/link.py @@ -0,0 +1,524 @@ +import functools +import itertools +import logging +import os +import posixpath +import re +import urllib.parse +from dataclasses import dataclass +from typing import ( + TYPE_CHECKING, + Any, + Dict, + List, + Mapping, + NamedTuple, + Optional, + Tuple, + Union, +) + +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.filetypes import WHEEL_EXTENSION +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.misc import ( + pairwise, + redact_auth_from_url, + split_auth_from_netloc, + splitext, +) +from pip._internal.utils.models import KeyBasedCompareMixin +from pip._internal.utils.urls import path_to_url, url_to_path + +if TYPE_CHECKING: + from pip._internal.index.collector import IndexContent + +logger = logging.getLogger(__name__) + + +# Order matters, earlier hashes have a precedence over later hashes for what +# we will pick to use. +_SUPPORTED_HASHES = ("sha512", "sha384", "sha256", "sha224", "sha1", "md5") + + +@dataclass(frozen=True) +class LinkHash: + """Links to content may have embedded hash values. This class parses those. + + `name` must be any member of `_SUPPORTED_HASHES`. + + This class can be converted to and from `ArchiveInfo`. While ArchiveInfo intends to + be JSON-serializable to conform to PEP 610, this class contains the logic for + parsing a hash name and value for correctness, and then checking whether that hash + conforms to a schema with `.is_hash_allowed()`.""" + + name: str + value: str + + _hash_re = re.compile( + # NB: we do not validate that the second group (.*) is a valid hex + # digest. Instead, we simply keep that string in this class, and then check it + # against Hashes when hash-checking is needed. This is easier to debug than + # proactively discarding an invalid hex digest, as we handle incorrect hashes + # and malformed hashes in the same place. + r"({choices})=(.*)".format( + choices="|".join(re.escape(hash_name) for hash_name in _SUPPORTED_HASHES) + ), + ) + + def __post_init__(self) -> None: + assert self._hash_re.match(f"{self.name}={self.value}") + + @classmethod + @functools.lru_cache(maxsize=None) + def split_hash_name_and_value(cls, url: str) -> Optional["LinkHash"]: + """Search a string for a checksum algorithm name and encoded output value.""" + match = cls._hash_re.search(url) + if match is None: + return None + name, value = match.groups() + return cls(name=name, value=value) + + def as_dict(self) -> Dict[str, str]: + return {self.name: self.value} + + def as_hashes(self) -> Hashes: + """Return a Hashes instance which checks only for the current hash.""" + return Hashes({self.name: [self.value]}) + + def is_hash_allowed(self, hashes: Optional[Hashes]) -> bool: + """ + Return True if the current hash is allowed by `hashes`. + """ + if hashes is None: + return False + return hashes.is_hash_allowed(self.name, hex_digest=self.value) + + +def _clean_url_path_part(part: str) -> str: + """ + Clean a "part" of a URL path (i.e. after splitting on "@" characters). + """ + # We unquote prior to quoting to make sure nothing is double quoted. + return urllib.parse.quote(urllib.parse.unquote(part)) + + +def _clean_file_url_path(part: str) -> str: + """ + Clean the first part of a URL path that corresponds to a local + filesystem path (i.e. the first part after splitting on "@" characters). + """ + # We unquote prior to quoting to make sure nothing is double quoted. + # Also, on Windows the path part might contain a drive letter which + # should not be quoted. On Linux where drive letters do not + # exist, the colon should be quoted. We rely on urllib.request + # to do the right thing here. + return urllib.request.pathname2url(urllib.request.url2pathname(part)) + + +# percent-encoded: / +_reserved_chars_re = re.compile("(@|%2F)", re.IGNORECASE) + + +def _clean_url_path(path: str, is_local_path: bool) -> str: + """ + Clean the path portion of a URL. + """ + if is_local_path: + clean_func = _clean_file_url_path + else: + clean_func = _clean_url_path_part + + # Split on the reserved characters prior to cleaning so that + # revision strings in VCS URLs are properly preserved. + parts = _reserved_chars_re.split(path) + + cleaned_parts = [] + for to_clean, reserved in pairwise(itertools.chain(parts, [""])): + cleaned_parts.append(clean_func(to_clean)) + # Normalize %xx escapes (e.g. %2f -> %2F) + cleaned_parts.append(reserved.upper()) + + return "".join(cleaned_parts) + + +def _ensure_quoted_url(url: str) -> str: + """ + Make sure a link is fully quoted. + For example, if ' ' occurs in the URL, it will be replaced with "%20", + and without double-quoting other characters. + """ + # Split the URL into parts according to the general structure + # `scheme://netloc/path;parameters?query#fragment`. + result = urllib.parse.urlparse(url) + # If the netloc is empty, then the URL refers to a local filesystem path. + is_local_path = not result.netloc + path = _clean_url_path(result.path, is_local_path=is_local_path) + return urllib.parse.urlunparse(result._replace(path=path)) + + +class Link(KeyBasedCompareMixin): + """Represents a parsed link from a Package Index's simple URL""" + + __slots__ = [ + "_parsed_url", + "_url", + "_hashes", + "comes_from", + "requires_python", + "yanked_reason", + "dist_info_metadata", + "cache_link_parsing", + "egg_fragment", + ] + + def __init__( + self, + url: str, + comes_from: Optional[Union[str, "IndexContent"]] = None, + requires_python: Optional[str] = None, + yanked_reason: Optional[str] = None, + dist_info_metadata: Optional[str] = None, + cache_link_parsing: bool = True, + hashes: Optional[Mapping[str, str]] = None, + ) -> None: + """ + :param url: url of the resource pointed to (href of the link) + :param comes_from: instance of IndexContent where the link was found, + or string. + :param 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. + :param yanked_reason: the reason the file has been yanked, if the + file has been yanked, or None if the file hasn't been yanked. + This is the value of the "data-yanked" attribute, if present, in + a simple repository HTML link. If the file has been yanked but + no reason was provided, this should be the empty string. See + PEP 592 for more information and the specification. + :param dist_info_metadata: the metadata attached to the file, or None if no such + metadata is provided. This is the value of the "data-dist-info-metadata" + attribute, if present, in a simple repository HTML link. This may be parsed + into its own `Link` by `self.metadata_link()`. See PEP 658 for more + information and the specification. + :param cache_link_parsing: A flag that is used elsewhere to determine + whether resources retrieved from this link should be cached. PyPI + URLs should generally have this set to False, for example. + :param hashes: A mapping of hash names to digests to allow us to + determine the validity of a download. + """ + + # url can be a UNC windows share + if url.startswith("\\\\"): + url = path_to_url(url) + + self._parsed_url = urllib.parse.urlsplit(url) + # Store the url as a private attribute to prevent accidentally + # trying to set a new value. + self._url = url + + link_hash = LinkHash.split_hash_name_and_value(url) + hashes_from_link = {} if link_hash is None else link_hash.as_dict() + if hashes is None: + self._hashes = hashes_from_link + else: + self._hashes = {**hashes, **hashes_from_link} + + self.comes_from = comes_from + self.requires_python = requires_python if requires_python else None + self.yanked_reason = yanked_reason + self.dist_info_metadata = dist_info_metadata + + super().__init__(key=url, defining_class=Link) + + self.cache_link_parsing = cache_link_parsing + self.egg_fragment = self._egg_fragment() + + @classmethod + def from_json( + cls, + file_data: Dict[str, Any], + page_url: str, + ) -> Optional["Link"]: + """ + Convert an pypi json document from a simple repository page into a Link. + """ + file_url = file_data.get("url") + if file_url is None: + return None + + url = _ensure_quoted_url(urllib.parse.urljoin(page_url, file_url)) + pyrequire = file_data.get("requires-python") + yanked_reason = file_data.get("yanked") + dist_info_metadata = file_data.get("dist-info-metadata") + hashes = file_data.get("hashes", {}) + + # The Link.yanked_reason expects an empty string instead of a boolean. + if yanked_reason and not isinstance(yanked_reason, str): + yanked_reason = "" + # The Link.yanked_reason expects None instead of False. + elif not yanked_reason: + yanked_reason = None + + return cls( + url, + comes_from=page_url, + requires_python=pyrequire, + yanked_reason=yanked_reason, + hashes=hashes, + dist_info_metadata=dist_info_metadata, + ) + + @classmethod + def from_element( + cls, + anchor_attribs: Dict[str, Optional[str]], + page_url: str, + base_url: str, + ) -> Optional["Link"]: + """ + Convert an anchor element's attributes in a simple repository page to a Link. + """ + href = anchor_attribs.get("href") + if not href: + return None + + url = _ensure_quoted_url(urllib.parse.urljoin(base_url, href)) + pyrequire = anchor_attribs.get("data-requires-python") + yanked_reason = anchor_attribs.get("data-yanked") + dist_info_metadata = anchor_attribs.get("data-dist-info-metadata") + + return cls( + url, + comes_from=page_url, + requires_python=pyrequire, + yanked_reason=yanked_reason, + dist_info_metadata=dist_info_metadata, + ) + + def __str__(self) -> str: + if self.requires_python: + rp = f" (requires-python:{self.requires_python})" + else: + rp = "" + if self.comes_from: + return "{} (from {}){}".format( + redact_auth_from_url(self._url), self.comes_from, rp + ) + else: + return redact_auth_from_url(str(self._url)) + + def __repr__(self) -> str: + return f"" + + @property + def url(self) -> str: + return self._url + + @property + def filename(self) -> str: + path = self.path.rstrip("/") + name = posixpath.basename(path) + if not name: + # Make sure we don't leak auth information if the netloc + # includes a username and password. + netloc, user_pass = split_auth_from_netloc(self.netloc) + return netloc + + name = urllib.parse.unquote(name) + assert name, f"URL {self._url!r} produced no filename" + return name + + @property + def file_path(self) -> str: + return url_to_path(self.url) + + @property + def scheme(self) -> str: + return self._parsed_url.scheme + + @property + def netloc(self) -> str: + """ + This can contain auth information. + """ + return self._parsed_url.netloc + + @property + def path(self) -> str: + return urllib.parse.unquote(self._parsed_url.path) + + def splitext(self) -> Tuple[str, str]: + return splitext(posixpath.basename(self.path.rstrip("/"))) + + @property + def ext(self) -> str: + return self.splitext()[1] + + @property + def url_without_fragment(self) -> str: + scheme, netloc, path, query, fragment = self._parsed_url + return urllib.parse.urlunsplit((scheme, netloc, path, query, "")) + + _egg_fragment_re = re.compile(r"[#&]egg=([^&]*)") + + # Per PEP 508. + _project_name_re = re.compile( + r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", re.IGNORECASE + ) + + def _egg_fragment(self) -> Optional[str]: + match = self._egg_fragment_re.search(self._url) + if not match: + return None + + # An egg fragment looks like a PEP 508 project name, along with + # an optional extras specifier. Anything else is invalid. + project_name = match.group(1) + if not self._project_name_re.match(project_name): + deprecated( + reason=f"{self} contains an egg fragment with a non-PEP 508 name", + replacement="to use the req @ url syntax, and remove the egg fragment", + gone_in="25.0", + issue=11617, + ) + + return project_name + + _subdirectory_fragment_re = re.compile(r"[#&]subdirectory=([^&]*)") + + @property + def subdirectory_fragment(self) -> Optional[str]: + match = self._subdirectory_fragment_re.search(self._url) + if not match: + return None + return match.group(1) + + def metadata_link(self) -> Optional["Link"]: + """Implementation of PEP 658 parsing.""" + # Note that Link.from_element() parsing the "data-dist-info-metadata" attribute + # from an HTML anchor tag is typically how the Link.dist_info_metadata attribute + # gets set. + if self.dist_info_metadata is None: + return None + metadata_url = f"{self.url_without_fragment}.metadata" + # If data-dist-info-metadata="true" is set, then the metadata file exists, + # but there is no information about its checksum or anything else. + if self.dist_info_metadata != "true": + link_hash = LinkHash.split_hash_name_and_value(self.dist_info_metadata) + else: + link_hash = None + if link_hash is None: + return Link(metadata_url) + return Link(metadata_url, hashes=link_hash.as_dict()) + + def as_hashes(self) -> Hashes: + return Hashes({k: [v] for k, v in self._hashes.items()}) + + @property + def hash(self) -> Optional[str]: + return next(iter(self._hashes.values()), None) + + @property + def hash_name(self) -> Optional[str]: + return next(iter(self._hashes), None) + + @property + def show_url(self) -> str: + return posixpath.basename(self._url.split("#", 1)[0].split("?", 1)[0]) + + @property + def is_file(self) -> bool: + return self.scheme == "file" + + def is_existing_dir(self) -> bool: + return self.is_file and os.path.isdir(self.file_path) + + @property + def is_wheel(self) -> bool: + return self.ext == WHEEL_EXTENSION + + @property + def is_vcs(self) -> bool: + from pip._internal.vcs import vcs + + return self.scheme in vcs.all_schemes + + @property + def is_yanked(self) -> bool: + return self.yanked_reason is not None + + @property + def has_hash(self) -> bool: + return bool(self._hashes) + + def is_hash_allowed(self, hashes: Optional[Hashes]) -> bool: + """ + Return True if the link has a hash and it is allowed by `hashes`. + """ + if hashes is None: + return False + return any(hashes.is_hash_allowed(k, v) for k, v in self._hashes.items()) + + +class _CleanResult(NamedTuple): + """Convert link for equivalency check. + + This is used in the resolver to check whether two URL-specified requirements + likely point to the same distribution and can be considered equivalent. This + equivalency logic avoids comparing URLs literally, which can be too strict + (e.g. "a=1&b=2" vs "b=2&a=1") and produce conflicts unexpecting to users. + + Currently this does three things: + + 1. Drop the basic auth part. This is technically wrong since a server can + serve different content based on auth, but if it does that, it is even + impossible to guarantee two URLs without auth are equivalent, since + the user can input different auth information when prompted. So the + practical solution is to assume the auth doesn't affect the response. + 2. Parse the query to avoid the ordering issue. Note that ordering under the + same key in the query are NOT cleaned; i.e. "a=1&a=2" and "a=2&a=1" are + still considered different. + 3. Explicitly drop most of the fragment part, except ``subdirectory=`` and + hash values, since it should have no impact the downloaded content. Note + that this drops the "egg=" part historically used to denote the requested + project (and extras), which is wrong in the strictest sense, but too many + people are supplying it inconsistently to cause superfluous resolution + conflicts, so we choose to also ignore them. + """ + + parsed: urllib.parse.SplitResult + query: Dict[str, List[str]] + subdirectory: str + hashes: Dict[str, str] + + +def _clean_link(link: Link) -> _CleanResult: + parsed = link._parsed_url + netloc = parsed.netloc.rsplit("@", 1)[-1] + # According to RFC 8089, an empty host in file: means localhost. + if parsed.scheme == "file" and not netloc: + netloc = "localhost" + fragment = urllib.parse.parse_qs(parsed.fragment) + if "egg" in fragment: + logger.debug("Ignoring egg= fragment in %s", link) + try: + # If there are multiple subdirectory values, use the first one. + # This matches the behavior of Link.subdirectory_fragment. + subdirectory = fragment["subdirectory"][0] + except (IndexError, KeyError): + subdirectory = "" + # If there are multiple hash values under the same algorithm, use the + # first one. This matches the behavior of Link.hash_value. + hashes = {k: fragment[k][0] for k in _SUPPORTED_HASHES if k in fragment} + return _CleanResult( + parsed=parsed._replace(netloc=netloc, query="", fragment=""), + query=urllib.parse.parse_qs(parsed.query), + subdirectory=subdirectory, + hashes=hashes, + ) + + +@functools.lru_cache(maxsize=None) +def links_equivalent(link1: Link, link2: Link) -> bool: + return _clean_link(link1) == _clean_link(link2) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/scheme.py b/venv/lib/python3.11/site-packages/pip/_internal/models/scheme.py new file mode 100644 index 0000000..f51190a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/scheme.py @@ -0,0 +1,31 @@ +""" +For types associated with installation schemes. + +For a general overview of available schemes and their context, see +https://docs.python.org/3/install/index.html#alternate-installation. +""" + + +SCHEME_KEYS = ["platlib", "purelib", "headers", "scripts", "data"] + + +class Scheme: + """A Scheme holds paths which are used as the base directories for + artifacts associated with a Python package. + """ + + __slots__ = SCHEME_KEYS + + def __init__( + self, + platlib: str, + purelib: str, + headers: str, + scripts: str, + data: str, + ) -> None: + self.platlib = platlib + self.purelib = purelib + self.headers = headers + self.scripts = scripts + self.data = data diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/search_scope.py b/venv/lib/python3.11/site-packages/pip/_internal/models/search_scope.py new file mode 100644 index 0000000..a64af73 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/search_scope.py @@ -0,0 +1,133 @@ +import itertools +import logging +import os +import posixpath +import urllib.parse +from typing import List + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.models.index import PyPI +from pip._internal.utils.compat import has_tls +from pip._internal.utils.misc import normalize_path, redact_auth_from_url + +logger = logging.getLogger(__name__) + + +class SearchScope: + + """ + Encapsulates the locations that pip is configured to search. + """ + + __slots__ = ["find_links", "index_urls", "no_index"] + + @classmethod + def create( + cls, + find_links: List[str], + index_urls: List[str], + no_index: bool, + ) -> "SearchScope": + """ + Create a SearchScope object after normalizing the `find_links`. + """ + # 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 ~... + built_find_links: List[str] = [] + for link in find_links: + if link.startswith("~"): + new_link = normalize_path(link) + if os.path.exists(new_link): + link = new_link + built_find_links.append(link) + + # 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(index_urls, built_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 + + return cls( + find_links=built_find_links, + index_urls=index_urls, + no_index=no_index, + ) + + def __init__( + self, + find_links: List[str], + index_urls: List[str], + no_index: bool, + ) -> None: + self.find_links = find_links + self.index_urls = index_urls + self.no_index = no_index + + def get_formatted_locations(self) -> str: + lines = [] + redacted_index_urls = [] + if self.index_urls and self.index_urls != [PyPI.simple_url]: + for url in self.index_urls: + + redacted_index_url = redact_auth_from_url(url) + + # Parse the URL + purl = urllib.parse.urlsplit(redacted_index_url) + + # URL is generally invalid if scheme and netloc is missing + # 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 purl.scheme and not purl.netloc: + logger.warning( + 'The index url "%s" seems invalid, please provide a scheme.', + redacted_index_url, + ) + + redacted_index_urls.append(redacted_index_url) + + lines.append( + "Looking in indexes: {}".format(", ".join(redacted_index_urls)) + ) + + if self.find_links: + lines.append( + "Looking in links: {}".format( + ", ".join(redact_auth_from_url(url) for url in self.find_links) + ) + ) + return "\n".join(lines) + + def get_index_urls_locations(self, project_name: str) -> List[str]: + """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: str) -> str: + 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] diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/selection_prefs.py b/venv/lib/python3.11/site-packages/pip/_internal/models/selection_prefs.py new file mode 100644 index 0000000..977bc4c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/selection_prefs.py @@ -0,0 +1,51 @@ +from typing import Optional + +from pip._internal.models.format_control import FormatControl + + +class SelectionPreferences: + """ + Encapsulates the candidate selection preferences for downloading + and installing files. + """ + + __slots__ = [ + "allow_yanked", + "allow_all_prereleases", + "format_control", + "prefer_binary", + "ignore_requires_python", + ] + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + def __init__( + self, + allow_yanked: bool, + allow_all_prereleases: bool = False, + format_control: Optional[FormatControl] = None, + prefer_binary: bool = False, + ignore_requires_python: Optional[bool] = None, + ) -> None: + """Create a SelectionPreferences object. + + :param allow_yanked: Whether files marked as yanked (in the sense + of PEP 592) are permitted to be candidates for install. + :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 prefer_binary: Whether to prefer an old, but valid, binary + dist over a new source dist. + :param ignore_requires_python: Whether to ignore incompatible + "Requires-Python" values in links. Defaults to False. + """ + if ignore_requires_python is None: + ignore_requires_python = False + + self.allow_yanked = allow_yanked + self.allow_all_prereleases = allow_all_prereleases + self.format_control = format_control + self.prefer_binary = prefer_binary + self.ignore_requires_python = ignore_requires_python diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/target_python.py b/venv/lib/python3.11/site-packages/pip/_internal/models/target_python.py new file mode 100644 index 0000000..744bd7e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/target_python.py @@ -0,0 +1,110 @@ +import sys +from typing import List, Optional, Tuple + +from pip._vendor.packaging.tags import Tag + +from pip._internal.utils.compatibility_tags import get_supported, version_info_to_nodot +from pip._internal.utils.misc import normalize_version_info + + +class TargetPython: + + """ + Encapsulates the properties of a Python interpreter one is targeting + for a package install, download, etc. + """ + + __slots__ = [ + "_given_py_version_info", + "abis", + "implementation", + "platforms", + "py_version", + "py_version_info", + "_valid_tags", + ] + + def __init__( + self, + platforms: Optional[List[str]] = None, + py_version_info: Optional[Tuple[int, ...]] = None, + abis: Optional[List[str]] = None, + implementation: Optional[str] = None, + ) -> None: + """ + :param platforms: A list of strings or None. If None, searches for + packages that are supported by the current system. Otherwise, will + find packages that can be built on the platforms passed in. These + packages will only be downloaded for distribution: they will + not be built locally. + :param py_version_info: An optional tuple of ints representing the + Python version information to use (e.g. `sys.version_info[:3]`). + This can have length 1, 2, or 3 when provided. + :param abis: A list of strings or None. This is passed to + compatibility_tags.py's get_supported() function as is. + :param implementation: A string or None. This is passed to + compatibility_tags.py's get_supported() function as is. + """ + # Store the given py_version_info for when we call get_supported(). + self._given_py_version_info = py_version_info + + if py_version_info is None: + py_version_info = sys.version_info[:3] + else: + py_version_info = normalize_version_info(py_version_info) + + py_version = ".".join(map(str, py_version_info[:2])) + + self.abis = abis + self.implementation = implementation + self.platforms = platforms + self.py_version = py_version + self.py_version_info = py_version_info + + # This is used to cache the return value of get_tags(). + self._valid_tags: Optional[List[Tag]] = None + + def format_given(self) -> str: + """ + Format the given, non-None attributes for display. + """ + display_version = None + if self._given_py_version_info is not None: + display_version = ".".join( + str(part) for part in self._given_py_version_info + ) + + key_values = [ + ("platforms", self.platforms), + ("version_info", display_version), + ("abis", self.abis), + ("implementation", self.implementation), + ] + return " ".join( + f"{key}={value!r}" for key, value in key_values if value is not None + ) + + def get_tags(self) -> List[Tag]: + """ + Return the supported PEP 425 tags to check wheel candidates against. + + The tags are returned in order of preference (most preferred first). + """ + if self._valid_tags is None: + # Pass versions=None if no py_version_info was given since + # versions=None uses special default logic. + py_version_info = self._given_py_version_info + if py_version_info is None: + version = None + else: + version = version_info_to_nodot(py_version_info) + + tags = get_supported( + version=version, + platforms=self.platforms, + abis=self.abis, + impl=self.implementation, + ) + self._valid_tags = tags + + return self._valid_tags diff --git a/venv/lib/python3.11/site-packages/pip/_internal/models/wheel.py b/venv/lib/python3.11/site-packages/pip/_internal/models/wheel.py new file mode 100644 index 0000000..a5dc12b --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/models/wheel.py @@ -0,0 +1,92 @@ +"""Represents a wheel file and provides access to the various parts of the +name that have meaning. +""" +import re +from typing import Dict, Iterable, List + +from pip._vendor.packaging.tags import Tag + +from pip._internal.exceptions import InvalidWheelFilename + + +class Wheel: + """A wheel file""" + + wheel_file_re = re.compile( + r"""^(?P(?P[^\s-]+?)-(?P[^\s-]*?)) + ((-(?P\d[^-]*?))?-(?P[^\s-]+?)-(?P[^\s-]+?)-(?P[^\s-]+?) + \.whl|\.dist-info)$""", + re.VERBOSE, + ) + + def __init__(self, filename: str) -> None: + """ + :raises InvalidWheelFilename: when the filename is invalid for a wheel + """ + wheel_info = self.wheel_file_re.match(filename) + if not wheel_info: + raise InvalidWheelFilename(f"{filename} is not a valid wheel 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 = { + Tag(x, y, z) for x in self.pyversions for y in self.abis for z in self.plats + } + + def get_formatted_file_tags(self) -> List[str]: + """Return the wheel's tags as a sorted list of strings.""" + return sorted(str(tag) for tag in self.file_tags) + + def support_index_min(self, tags: List[Tag]) -> int: + """Return the lowest index that one of the wheel's file_tag combinations + achieves in the given list of supported tags. + + For example, if there are 8 supported tags and one of the file tags + is first in the list, then return 0. + + :param tags: the PEP 425 tags to check the wheel against, in order + with most preferred first. + + :raises ValueError: If none of the wheel's file tags match one of + the supported tags. + """ + try: + return next(i for i, t in enumerate(tags) if t in self.file_tags) + except StopIteration: + raise ValueError() + + def find_most_preferred_tag( + self, tags: List[Tag], tag_to_priority: Dict[Tag, int] + ) -> int: + """Return the priority of the most preferred tag that one of the wheel's file + tag combinations achieves in the given list of supported tags using the given + tag_to_priority mapping, where lower priorities are more-preferred. + + This is used in place of support_index_min in some cases in order to avoid + an expensive linear scan of a large list of tags. + + :param tags: the PEP 425 tags to check the wheel against. + :param tag_to_priority: a mapping from tag to priority of that tag, where + lower is more preferred. + + :raises ValueError: If none of the wheel's file tags match one of + the supported tags. + """ + return min( + tag_to_priority[tag] for tag in self.file_tags if tag in tag_to_priority + ) + + def supported(self, tags: Iterable[Tag]) -> bool: + """Return whether the wheel is compatible with one of the given tags. + + :param tags: the PEP 425 tags to check the wheel against. + """ + return not self.file_tags.isdisjoint(tags) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/network/__init__.py new file mode 100644 index 0000000..b51bde9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/network/__init__.py @@ -0,0 +1,2 @@ +"""Contains purely network-related utilities. +""" diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99ca720ba4861726fa2a1ad58bf1a2f6921bf922 GIT binary patch literal 270 zcmY*UF-`+95VS)CC{i9kgRYHGZk41(H1srdG{!lvl1+TJW$zt2KEe|af8ZsweBe;J zRQRM&FvaZ7&T2>dKAlcP#`WjVW|`~vApRgv&0$!16Gl7o56vx^91rTLTwg3PC literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/auth.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9deee5647c254a4ab2dff6ee070c8e1d4173eb28 GIT binary patch literal 19074 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 JC}-UK{{Z1Ta6$k8 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/cache.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2873fe1db408552b07cc3b98a778a0c9a376b1a GIT binary patch literal 5193 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78cff03d29ea3086b2c1bbec1bcac8eac2e125c3 GIT binary patch literal 9585 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 A-2eap literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aac5f3627c41ee6ef423e5816f93ca273bc580fb GIT binary patch literal 13031 zcmbVSTWlNGnV#Wws2eGXx?eoHSTb#0B0Fvp*Ks0Ca$+Zu6H94RZd!ukj3i3Ds53*` z;!>zlq=jN=8>UEMCUsFhWU~s=1+?2f7>j*KT42$KeIN~PO$=bb!0toy#=t2M^kw(^ z&yW-;%5Jj5;Xh~2vh zl4-@{J4UlAQ9e zfb zi?8ZE1h4obEAkcjhcQ{zUXQ4;jg6?H$&%hG1y#+rtVF}UYpb#x^2LSz46CKB1FR-H1k1*<;pS=l!ZY zi;k4wQj9v%>tB(>QDyVH^rd?HimVksnkJ!C313q8YH(vgR#h|s8vBcL)3b9|7Ic^5 z$AtKnql!<}{8~)aol3DcUtl#BSyuza^%pO zW1r*m>2*F|I4Z?LGSUq`-w$K{5Phi6_c8a75dC#&ay1&3C)cFO4JEpUl~E_7;j6wS ze_%bfF?m&vT%8OBmnJthwbf|k)Wp=(q#D%Z@ePz?iPXuB;Krmch*eWC<&zOvyB1Z} zCqtkZV;UwlHrcQkXhn~z6W~Vqm$wKvW)%^6x`jrjn?WqPT{UJ(w<)p~QzC&f9iyTh ze|mrTZveMAtu!ZiOYjL(H5H%cw#-^Z>x6l&OyLQ0b=@tCM!1Vt!lF4!X<+6)LO-9B z`>JjkzzWc>I+y1bxFK$eQ!Up_*UjJKuJJtgJ&woESTFw(pu568Q1pwH^dd%=Xe~tI zAyHeE#g!nILS)<|zJBH9iMl!w*WzkW6=Rqy#+0H${3t30L#m<{6{C^RrnoF?fmMcu z_!IOeMwi(uL&p#i-}!@)U}QxM%bH*EYyL5DEv9Os9ErwORz=V!Yf>B+P%p_MT7kr4 z0r30;LvwLiRAcC?JOsZYi;<{?+@fq4VBvF zm8@eV=NKt)HtPj`cknMZuDLgL{`L#$D_PgEoa@-O6D{-e@gef8C&iYoI}`s#O2PP@#Xxh&Ie`)3_IU;vrrtFf4R z_#dFNN@3wO%a&!RHrXnfWt(J??UGfpK_S@RvU&yCAz5YXvPlx&vU~&-pOg`L>&j)0 znzDMdYCx+xD3wNOM5@QLiPfjvhMM|LX;f;Wo@LjvMRKC&<{}0cTDC~Xprq_lE308& zwn=W(XhjV>u(hFvTk@cNn{4kYkB^mFq;}M7FXHMz%?|0f)QM-O)FpSZFSSVBc<+{b zP^(w!*~b9fy)`54!`Jkoe!qMKv(}Fh9l>9eMVZahersSGz$^}+|G{#-LDU^$U(qY$ zN#n0*VZ*$e_urT6q+#?lTy9P4Vv~*{@2F&hkUyb};&c7ISW!}AK_OWcp4uAs8a0ds=$l}Cki85`2JQcI0AXYm5YlDP__bDw^ydq(TB3e!kv7O!fq zMy>i%NrFo^l+u;Y1h-bkRNV*9tw1^YO0vdyBkP1+lBIH_>54BX)!;bd$ZExTl~GS2mqF1&1$%^f*kATl*)Pe8`uQKxDBd(GML3|^D$dlH^a_kCKW8a zz^WWr_r-%7P?Z){4lVB!zjA`cGzD-#2a<_MeB<-QI}d2riBbt`rlai*t^l3a@lN7q zA~o~R9ovblb1LVY+P2&mI#cef(4Q0fGeUpf*_v}6NuRpw9LbdK{OPlI0-v7A2q(8K zJB>;0z0LG+Zt&#&j_%Zxx6fvdJ)P@$Cfji)*Kr2r4foqdvu&PSn+Gp-d7Ag@^7|IDl8DS_d4zi+wAw25y^)0F4+hg~-kKgS+zWdyr3)$|OT=z_-p6>fCC6gUIiV|4x|!h_0Oyx4N;7#tYzHTh8P@TE%Nw#`9brYsV22f@ zpFecXzX^k7X+k$COUeD!`{#>Fu~=x``|oN?le^;&NAlMy{$cFNZqJ+ z3(U5Lr*W;7hYm95jMN#>xkt+sWIA=mp zRc6!8=6Jq1$+|T_1qTPOTm-^++d)ELbuXhx?FGP~g@&EFdqU@3p))IV=Y;M|>3+kOmUP!Z3FXu{A0^n=~+sA!isu`9v!F!)txS@>+*02pE+Tb4ru{%fLkLT zVOP4s<1FQoA6u>Pz}@Ef|6GBV5n~&~;54BynxM1xeZ-<~1_pxzMqV?~Ww>bek@qvL ziheTV;7SJNNC1K?2#1X@ff8a7bwdsWmxHk2;Ovc08HOIU^M^vkzG4wA7!v0$Ul7T& zGkSsZCyE#3YhZ3|)gNJo9kr?$V%Wb){$i;!jfk=8Am911B^T9eaBEfvmo zoXEPya;`D7fs$&v*_4c>r1Wd=uV#hOoG_XZMxj}E;_v+E=8sZZ);XMW4rhen$A|*@ ztg`AlbwB`DazA|;iPEntdQ0_dMQ^EO8C@$c5D*E_V(PZ&^0F#p?x6!fbycw(s_=~j zaczW$G@pMQ6f*9nkTpG3oNu6zwkr%2T_vw;J%Rnlh4YrtQl$|$q;V@SMcC{f)2%xo|i zF6$I4v{{u3qbXvf`z<8C&SxAV)cN>-BDPEtm_DRPE=Bvz2>BV}Ibz7)3Nj_X`Vh&D z*fGOqn1D4iQzo;;ig`Q8FhMmks)+%{O_0pxHWgD&OvFqG>aB*TlxHv_ATY9nnJ`vq z$xA|(3Tp*O$6_f-OarE4dj_Ftyx|F1cjfSdX;U$!0{J|Ea$R(!r1@|9`!x(-@m z<@!IRvGxGm;Gj&%itN2B^j5lP+x2Yxx>>#+sPcSh0_iIs4g=i6R?^{)MuPttXZY2M zgo-6O0)JAzPX1(R-ANNvt@|o6YS+Eg>?Tz=BuQTAAtx^<^rRLt!a(_E6=jW@& zO~%&{{trI@cnM=8UQ8ohdwqngPs-U_yaWE-ceqI(C8fS$5 zJ*N0(ksz57M*Cc1aidFIm*ov|)JO`H6juf3O>3+~HY7Y%S_(x2>tiCxV3GD}n8reA zAc$R<3Jeh8>>|oy(vU=XafNgCZPxlHEc+kOQoRK5XZ#@U8#rg{JHea5 zx7T;px6K8U+0m14Xx^Tq--8C%I~Q+WOa|Vb-! zYEg+08Ao5jvQ!IKi6<+3i?7_(sSLkK6jH0O|Eu>wtL^Gp?)w_^DJ}?426rBRaCN&Vf&L=PjprC3;p6%L{udTBTp#gnle*v-Xj<`xS+_0(<1Dv zTUl_78R^Ob)gw1caS``zC6dJCM;h^hok_U3ME>$JhFfA^L5UP-=E5V*GPLUXwS)%t?K zm-~&XQ(yh1j_VvOaC~#uKFGT}ld}ag@<8o)DKvfqjQitbJ3>`0S=mN-3~uS?V6{)>kqz zTG@VMuV!bEv=Bd2l&iEi2!q|&t0#%*uig?hTxI46QYlDsB5q?&^s|5E$8{@<`o@Jw zbUZ*_X}ocU9^(`$R-&Or$W0chwHXGJ$D&&TQEYFY!j~xYISLuH*ob6y4-q??R%L@y z)bd~q)&;>zzKX9j=D1kH3I}TJ5*l(wA%O+1^~k-Jp}Q?Z*_NZZmZRJDe9u&RF4HrG zdw0foZrhXgtkC&jXdEeoKSlB-x9&N`yG}9f{;+HBg->TQPBH7em~&pt2p0|Gz`}yf zRu*dxRLVOWx@OAu4J=$q*^(DvT!?vCep0c$Rk^?i%eHKYuvFkq@GFS1(21K$3>2BE zmf6?&Ejy$?X^7&LFrlRlvXp;(%Pmt?+{c*N5Y;E zj7ZM1sc0@Z@Q&WM>^t2kHLWu;R&10m*P-vh$O4F29h{+q#Ba5WdulDd`(@N+%4eI%K3)jl;hT6IcxS zzb2M>Lr=YoWdRSK!9)2rfhz=F1<=j3M^bl?J+DzYxg7`&si9y%#-S7A$p>|QP3PBD z*c%+pigB?+1iH-^mX#H`HY#f5|0|lPe+DR;OYK~D|LyMd>~357Qm$)q&;7feJByzl zz2nVIy_mFZ+wQwNQf(=FdStg{cVM^W!{gb`v8;PM=N``pF+Z zo=Pdet(C2~gQtMDERT%R(iSYF)<LCtvNjCiv_0>}#SXi8m&F^?` zdf$F?=S|pKjxh%AxAv#B+kd}1mu)?nYdyI=d*4lZw0n0U>z>NFr(kyW5B_@ngZ15` zd#!uYow;oP`CR|`0%vUm0)ThxlGdb}?>Ta>=ZU*LPwchbF=u2u8xxN?4*aTvLM0bw^CMFBS96(*c{=1Y{K2UNt)w0K68UP|LwE~oSZU`rfP z{s4j?gjYAi6jJEKmO{p^@*L#}IJCGSE83 zFydkkF}Y|gUZpHiN+v-2vC1j|q8^1f${<^ESB!0b;zEU3)1X*#)s!0q76{NjFq4N& zRj{vP;284NKKQja%D;liW)2TmBzXU?+c14m=Q zTB^iq8bIW1O$C$5>P`j<93K1N3p0w|dV>|hY&5DJF{&M*Y6hsNcBCKxLuz;*M@0%n zJ@i@$N>~R{7AhLp2NhTc3POYRXn_MrwX#QAW{-oQ_c5Id)=5yObux8|J$B9Pu{XmW z2Z0+yF}|~6M8?N|~`M&dlJnIK?rHlQcGMlZ;P; zsTtccex_4S3S)laUEL1TkhP(p1q)y3JviDt;lp036jdgS^UlCCfkWRRl^r>)u2DMk zIzh)eP=jO^lMs44L&VH%MCT?-2W%DEYA}wnw$l*$s;d=`Qcn~Q4>8GC?6HihRL2-o zC*fndlhmf}n7dAAnXmi@`wnfO{rWedoE^%whKf z?v2c&?>zTpruxovS2B;j3pSp2fS+qX+VchFez{*HH1QYs6hsO=NlwvoZ_RjS=3X}v Xhrq!#6A%749Dc#_zkEa~W1jy5nCuNx literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/network/__pycache__/session.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7359d5ad3ff44176d13b71f0ab6f570fe58290f GIT binary patch literal 21298 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/auth.py b/venv/lib/python3.11/site-packages/pip/_internal/network/auth.py new file mode 100644 index 0000000..c162132 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/network/auth.py @@ -0,0 +1,446 @@ +"""Network Authentication Helpers + +Contains interface (MultiDomainBasicAuth) and associated glue code for +providing credentials in the context of network requests. +""" + +import os +import shutil +import subprocess +import urllib.parse +from abc import ABC, abstractmethod +from typing import Any, Dict, List, NamedTuple, Optional, Tuple + +from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth +from pip._vendor.requests.models import Request, Response +from pip._vendor.requests.utils import get_netrc_auth + +from pip._internal.utils.logging import getLogger +from pip._internal.utils.misc import ( + ask, + ask_input, + ask_password, + remove_auth_from_url, + split_auth_netloc_from_url, +) +from pip._internal.vcs.versioncontrol import AuthInfo + +logger = getLogger(__name__) + +KEYRING_DISABLED = False + + +class Credentials(NamedTuple): + url: str + username: str + password: str + + +class KeyRingBaseProvider(ABC): + """Keyring base provider interface""" + + @abstractmethod + def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: + ... + + @abstractmethod + def save_auth_info(self, url: str, username: str, password: str) -> None: + ... + + +class KeyRingNullProvider(KeyRingBaseProvider): + """Keyring null provider""" + + def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: + return None + + def save_auth_info(self, url: str, username: str, password: str) -> None: + return None + + +class KeyRingPythonProvider(KeyRingBaseProvider): + """Keyring interface which uses locally imported `keyring`""" + + def __init__(self) -> None: + import keyring + + self.keyring = keyring + + def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: + # Support keyring's get_credential interface which supports getting + # credentials without a username. This is only available for + # keyring>=15.2.0. + if hasattr(self.keyring, "get_credential"): + logger.debug("Getting credentials from keyring for %s", url) + cred = self.keyring.get_credential(url, username) + if cred is not None: + return cred.username, cred.password + return None + + if username is not None: + logger.debug("Getting password from keyring for %s", url) + password = self.keyring.get_password(url, username) + if password: + return username, password + return None + + def save_auth_info(self, url: str, username: str, password: str) -> None: + self.keyring.set_password(url, username, password) + + +class KeyRingCliProvider(KeyRingBaseProvider): + """Provider which uses `keyring` cli + + Instead of calling the keyring package installed alongside pip + we call keyring on the command line which will enable pip to + use which ever installation of keyring is available first in + PATH. + """ + + def __init__(self, cmd: str) -> None: + self.keyring = cmd + + def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: + # This is the default implementation of keyring.get_credential + # https://github.com/jaraco/keyring/blob/97689324abcf01bd1793d49063e7ca01e03d7d07/keyring/backend.py#L134-L139 + if username is not None: + password = self._get_password(url, username) + if password is not None: + return username, password + return None + + def save_auth_info(self, url: str, username: str, password: str) -> None: + return self._set_password(url, username, password) + + def _get_password(self, service_name: str, username: str) -> Optional[str]: + """Mirror the implementation of keyring.get_password using cli""" + if self.keyring is None: + return None + + cmd = [self.keyring, "get", service_name, username] + env = os.environ.copy() + env["PYTHONIOENCODING"] = "utf-8" + res = subprocess.run( + cmd, + stdin=subprocess.DEVNULL, + capture_output=True, + env=env, + ) + if res.returncode: + return None + return res.stdout.decode("utf-8").strip(os.linesep) + + def _set_password(self, service_name: str, username: str, password: str) -> None: + """Mirror the implementation of keyring.set_password using cli""" + if self.keyring is None: + return None + + cmd = [self.keyring, "set", service_name, username] + input_ = (password + os.linesep).encode("utf-8") + env = os.environ.copy() + env["PYTHONIOENCODING"] = "utf-8" + res = subprocess.run(cmd, input=input_, env=env) + res.check_returncode() + return None + + +def get_keyring_provider() -> KeyRingBaseProvider: + # keyring has previously failed and been disabled + if not KEYRING_DISABLED: + # Default to trying to use Python provider + try: + return KeyRingPythonProvider() + except ImportError: + pass + except Exception as exc: + # In the event of an unexpected exception + # we should warn the user + logger.warning( + "Installed copy of keyring fails with exception %s, " + "trying to find a keyring executable as a fallback", + str(exc), + ) + + # Fallback to Cli Provider if `keyring` isn't installed + cli = shutil.which("keyring") + if cli: + return KeyRingCliProvider(cli) + + return KeyRingNullProvider() + + +def get_keyring_auth(url: Optional[str], username: Optional[str]) -> Optional[AuthInfo]: + """Return the tuple auth for a given url from keyring.""" + # Do nothing if no url was provided + if not url: + return None + + keyring = get_keyring_provider() + try: + return keyring.get_auth_info(url, username) + except Exception as exc: + logger.warning( + "Keyring is skipped due to an exception: %s", + str(exc), + ) + global KEYRING_DISABLED + KEYRING_DISABLED = True + return None + + +class MultiDomainBasicAuth(AuthBase): + def __init__( + self, prompting: bool = True, index_urls: Optional[List[str]] = None + ) -> None: + self.prompting = prompting + self.index_urls = index_urls + self.passwords: Dict[str, AuthInfo] = {} + # When the user is prompted to enter credentials and keyring is + # available, we will offer to save them. If the user accepts, + # this value is set to the credentials they entered. After the + # request authenticates, the caller should call + # ``save_credentials`` to save these. + self._credentials_to_save: Optional[Credentials] = None + + def _get_index_url(self, url: str) -> Optional[str]: + """Return the original index URL matching the requested URL. + + Cached or dynamically generated credentials may work against + the original index URL rather than just the netloc. + + The provided url should have had its username and password + removed already. If the original index url had credentials then + they will be included in the return value. + + Returns None if no matching index was found, or if --no-index + was specified by the user. + """ + if not url or not self.index_urls: + return None + + for u in self.index_urls: + prefix = remove_auth_from_url(u).rstrip("/") + "/" + if url.startswith(prefix): + return u + return None + + def _get_new_credentials( + self, + original_url: str, + allow_netrc: bool = True, + allow_keyring: bool = False, + ) -> AuthInfo: + """Find and return credentials for the specified URL.""" + # Split the credentials and netloc from the url. + url, netloc, url_user_password = split_auth_netloc_from_url( + original_url, + ) + + # Start with the credentials embedded in the url + username, password = url_user_password + if username is not None and password is not None: + logger.debug("Found credentials in url for %s", netloc) + return url_user_password + + # Find a matching index url for this request + index_url = self._get_index_url(url) + if index_url: + # Split the credentials from the url. + index_info = split_auth_netloc_from_url(index_url) + if index_info: + index_url, _, index_url_user_password = index_info + logger.debug("Found index url %s", index_url) + + # If an index URL was found, try its embedded credentials + if index_url and index_url_user_password[0] is not None: + username, password = index_url_user_password + if username is not None and password is not None: + logger.debug("Found credentials in index url for %s", netloc) + return index_url_user_password + + # Get creds from netrc if we still don't have them + if allow_netrc: + netrc_auth = get_netrc_auth(original_url) + if netrc_auth: + logger.debug("Found credentials in netrc for %s", netloc) + return netrc_auth + + # If we don't have a password and keyring is available, use it. + if allow_keyring: + # The index url is more specific than the netloc, so try it first + # fmt: off + kr_auth = ( + get_keyring_auth(index_url, username) or + get_keyring_auth(netloc, username) + ) + # fmt: on + if kr_auth: + logger.debug("Found credentials in keyring for %s", netloc) + return kr_auth + + return username, password + + def _get_url_and_credentials( + self, original_url: str + ) -> Tuple[str, Optional[str], Optional[str]]: + """Return the credentials to use for the provided URL. + + If allowed, netrc and keyring may be used to obtain the + correct credentials. + + Returns (url_without_credentials, username, password). Note + that even if the original URL contains credentials, this + function may return a different username and password. + """ + url, netloc, _ = split_auth_netloc_from_url(original_url) + + # Try to get credentials from original url + username, password = self._get_new_credentials(original_url) + + # If credentials not found, use any stored credentials for this netloc. + # Do this if either the username or the password is missing. + # This accounts for the situation in which the user has specified + # the username in the index url, but the password comes from keyring. + if (username is None or password is None) and netloc in self.passwords: + un, pw = self.passwords[netloc] + # It is possible that the cached credentials are for a different username, + # in which case the cache should be ignored. + if username is None or username == un: + username, password = un, pw + + if username is not None or password is not None: + # Convert the username and password if they're None, so that + # this netloc will show up as "cached" in the conditional above. + # Further, HTTPBasicAuth doesn't accept None, so it makes sense to + # cache the value that is going to be used. + username = username or "" + password = password or "" + + # Store any acquired credentials. + self.passwords[netloc] = (username, password) + + assert ( + # Credentials were found + (username is not None and password is not None) + # Credentials were not found + or (username is None and password is None) + ), f"Could not load credentials from url: {original_url}" + + return url, username, password + + def __call__(self, req: Request) -> Request: + # Get credentials for this request + url, username, password = self._get_url_and_credentials(req.url) + + # Set the url of the request to the url without any credentials + req.url = url + + if username is not None and password is not None: + # Send the basic auth with this request + req = HTTPBasicAuth(username, password)(req) + + # Attach a hook to handle 401 responses + req.register_hook("response", self.handle_401) + + return req + + # Factored out to allow for easy patching in tests + def _prompt_for_password( + self, netloc: str + ) -> Tuple[Optional[str], Optional[str], bool]: + username = ask_input(f"User for {netloc}: ") + if not username: + return None, None, False + auth = get_keyring_auth(netloc, username) + if auth and auth[0] is not None and auth[1] is not None: + return auth[0], auth[1], False + password = ask_password("Password: ") + return username, password, True + + # Factored out to allow for easy patching in tests + def _should_save_password_to_keyring(self) -> bool: + if get_keyring_provider() is None: + return False + return ask("Save credentials to keyring [y/N]: ", ["y", "n"]) == "y" + + def handle_401(self, resp: Response, **kwargs: Any) -> Response: + # 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) + + # Query the keyring for credentials: + username, password = self._get_new_credentials( + resp.url, + allow_netrc=False, + allow_keyring=True, + ) + + # Prompt the user for a new username and password + save = False + if not username and not password: + username, password, save = self._prompt_for_password(parsed.netloc) + + # Store the new username and password to use for future requests + self._credentials_to_save = None + if username is not None and password is not None: + self.passwords[parsed.netloc] = (username, password) + + # Prompt to save the password to keyring + if save and self._should_save_password_to_keyring(): + self._credentials_to_save = Credentials( + url=parsed.netloc, + username=username, + password=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) + req.register_hook("response", self.warn_on_401) + + # On successful request, save the credentials that were used to + # keyring. (Note that if the user responded "no" above, this member + # is not set and nothing will be saved.) + if self._credentials_to_save: + req.register_hook("response", self.save_credentials) + + # Send our new request + new_resp = resp.connection.send(req, **kwargs) + new_resp.history.append(resp) + + return new_resp + + def warn_on_401(self, resp: Response, **kwargs: Any) -> None: + """Response callback to warn about incorrect credentials.""" + if resp.status_code == 401: + logger.warning( + "401 Error, Credentials not correct for %s", + resp.request.url, + ) + + def save_credentials(self, resp: Response, **kwargs: Any) -> None: + """Response callback to save credentials on success.""" + keyring = get_keyring_provider() + assert not isinstance( + keyring, KeyRingNullProvider + ), "should never reach here without keyring" + + creds = self._credentials_to_save + self._credentials_to_save = None + if creds and resp.status_code < 400: + try: + logger.info("Saving credentials to keyring") + keyring.save_auth_info(creds.url, creds.username, creds.password) + except Exception: + logger.exception("Failed to save credentials") diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/cache.py b/venv/lib/python3.11/site-packages/pip/_internal/network/cache.py new file mode 100644 index 0000000..a81a239 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/network/cache.py @@ -0,0 +1,69 @@ +"""HTTP cache implementation. +""" + +import os +from contextlib import contextmanager +from typing import Generator, Optional + +from pip._vendor.cachecontrol.cache import BaseCache +from pip._vendor.cachecontrol.caches import FileCache +from pip._vendor.requests.models import Response + +from pip._internal.utils.filesystem import adjacent_tmp_file, replace +from pip._internal.utils.misc import ensure_dir + + +def is_from_cache(response: Response) -> bool: + return getattr(response, "from_cache", False) + + +@contextmanager +def suppressed_cache_errors() -> Generator[None, None, None]: + """If we can't access the cache then we can just skip caching and process + requests as if caching wasn't enabled. + """ + try: + yield + except OSError: + pass + + +class SafeFileCache(BaseCache): + """ + A file based cache which is safe to use even when the target directory may + not be accessible or writable. + """ + + def __init__(self, directory: str) -> None: + assert directory is not None, "Cache directory must not be None." + super().__init__() + self.directory = directory + + def _get_cache_path(self, name: str) -> str: + # From cachecontrol.caches.file_cache.FileCache._fn, brought into our + # class for backwards-compatibility and to avoid using a non-public + # method. + hashed = FileCache.encode(name) + parts = list(hashed[:5]) + [hashed] + return os.path.join(self.directory, *parts) + + def get(self, key: str) -> Optional[bytes]: + path = self._get_cache_path(key) + with suppressed_cache_errors(): + with open(path, "rb") as f: + return f.read() + + def set(self, key: str, value: bytes, expires: Optional[int] = None) -> None: + path = self._get_cache_path(key) + with suppressed_cache_errors(): + ensure_dir(os.path.dirname(path)) + + with adjacent_tmp_file(path) as f: + f.write(value) + + replace(f.name, path) + + def delete(self, key: str) -> None: + path = self._get_cache_path(key) + with suppressed_cache_errors(): + os.remove(path) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/download.py b/venv/lib/python3.11/site-packages/pip/_internal/network/download.py new file mode 100644 index 0000000..79b82a5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/network/download.py @@ -0,0 +1,186 @@ +"""Download files with progress indicators. +""" +import email.message +import logging +import mimetypes +import os +from typing import Iterable, Optional, Tuple + +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response + +from pip._internal.cli.progress_bars import get_download_progress_renderer +from pip._internal.exceptions import NetworkConnectionError +from pip._internal.models.index import PyPI +from pip._internal.models.link import Link +from pip._internal.network.cache import is_from_cache +from pip._internal.network.session import PipSession +from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks +from pip._internal.utils.misc import format_size, redact_auth_from_url, splitext + +logger = logging.getLogger(__name__) + + +def _get_http_response_size(resp: Response) -> Optional[int]: + try: + return int(resp.headers["content-length"]) + except (ValueError, KeyError, TypeError): + return None + + +def _prepare_download( + resp: Response, + link: Link, + progress_bar: str, +) -> Iterable[bytes]: + total_length = _get_http_response_size(resp) + + if link.netloc == PyPI.file_storage_domain: + url = link.show_url + else: + url = link.url_without_fragment + + logged_url = redact_auth_from_url(url) + + if total_length: + logged_url = "{} ({})".format(logged_url, format_size(total_length)) + + if is_from_cache(resp): + logger.info("Using cached %s", logged_url) + else: + logger.info("Downloading %s", logged_url) + + if logger.getEffectiveLevel() > logging.INFO: + show_progress = False + elif is_from_cache(resp): + show_progress = False + elif not total_length: + show_progress = True + elif total_length > (40 * 1000): + show_progress = True + else: + show_progress = False + + chunks = response_chunks(resp, CONTENT_CHUNK_SIZE) + + if not show_progress: + return chunks + + renderer = get_download_progress_renderer(bar_type=progress_bar, size=total_length) + return renderer(chunks) + + +def sanitize_content_filename(filename: str) -> str: + """ + Sanitize the "filename" value from a Content-Disposition header. + """ + return os.path.basename(filename) + + +def parse_content_disposition(content_disposition: str, default_filename: str) -> str: + """ + Parse the "filename" value from a Content-Disposition header, and + return the default filename if the result is empty. + """ + m = email.message.Message() + m["content-type"] = content_disposition + filename = m.get_param("filename") + if filename: + # We need to sanitize the filename to prevent directory traversal + # in case the filename contains ".." path parts. + filename = sanitize_content_filename(str(filename)) + return filename or default_filename + + +def _get_http_response_filename(resp: Response, link: Link) -> str: + """Get an ideal filename from the given HTTP response, falling back to + the link filename if not provided. + """ + 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: + filename = parse_content_disposition(content_disposition, filename) + ext: Optional[str] = splitext(filename)[1] + if not ext: + ext = mimetypes.guess_extension(resp.headers.get("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 + return filename + + +def _http_get_download(session: PipSession, link: Link) -> Response: + target_url = link.url.split("#", 1)[0] + resp = session.get(target_url, headers=HEADERS, stream=True) + raise_for_status(resp) + return resp + + +class Downloader: + def __init__( + self, + session: PipSession, + progress_bar: str, + ) -> None: + self._session = session + self._progress_bar = progress_bar + + def __call__(self, link: Link, location: str) -> Tuple[str, str]: + """Download the file given by link into location.""" + try: + resp = _http_get_download(self._session, link) + except NetworkConnectionError as e: + assert e.response is not None + logger.critical( + "HTTP error %s while getting %s", e.response.status_code, link + ) + raise + + filename = _get_http_response_filename(resp, link) + filepath = os.path.join(location, filename) + + chunks = _prepare_download(resp, link, self._progress_bar) + with open(filepath, "wb") as content_file: + for chunk in chunks: + content_file.write(chunk) + content_type = resp.headers.get("Content-Type", "") + return filepath, content_type + + +class BatchDownloader: + def __init__( + self, + session: PipSession, + progress_bar: str, + ) -> None: + self._session = session + self._progress_bar = progress_bar + + def __call__( + self, links: Iterable[Link], location: str + ) -> Iterable[Tuple[Link, Tuple[str, str]]]: + """Download the files given by links into location.""" + for link in links: + try: + resp = _http_get_download(self._session, link) + except NetworkConnectionError as e: + assert e.response is not None + logger.critical( + "HTTP error %s while getting %s", + e.response.status_code, + link, + ) + raise + + filename = _get_http_response_filename(resp, link) + filepath = os.path.join(location, filename) + + chunks = _prepare_download(resp, link, self._progress_bar) + with open(filepath, "wb") as content_file: + for chunk in chunks: + content_file.write(chunk) + content_type = resp.headers.get("Content-Type", "") + yield link, (filepath, content_type) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/lazy_wheel.py b/venv/lib/python3.11/site-packages/pip/_internal/network/lazy_wheel.py new file mode 100644 index 0000000..854a6fa --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/network/lazy_wheel.py @@ -0,0 +1,210 @@ +"""Lazy ZIP over HTTP""" + +__all__ = ["HTTPRangeRequestUnsupported", "dist_from_wheel_url"] + +from bisect import bisect_left, bisect_right +from contextlib import contextmanager +from tempfile import NamedTemporaryFile +from typing import Any, Dict, Generator, List, Optional, Tuple +from zipfile import BadZipfile, ZipFile + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response + +from pip._internal.metadata import BaseDistribution, MemoryWheel, get_wheel_distribution +from pip._internal.network.session import PipSession +from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks + + +class HTTPRangeRequestUnsupported(Exception): + pass + + +def dist_from_wheel_url(name: str, url: str, session: PipSession) -> BaseDistribution: + """Return a distribution object from the given wheel URL. + + This uses HTTP range requests to only fetch the portion of the wheel + containing metadata, just enough for the object to be constructed. + If such requests are not supported, HTTPRangeRequestUnsupported + is raised. + """ + with LazyZipOverHTTP(url, session) as zf: + # For read-only ZIP files, ZipFile only needs methods read, + # seek, seekable and tell, not the whole IO protocol. + wheel = MemoryWheel(zf.name, zf) # type: ignore + # After context manager exit, wheel.name + # is an invalid file by intention. + return get_wheel_distribution(wheel, canonicalize_name(name)) + + +class LazyZipOverHTTP: + """File-like object mapped to a ZIP file over HTTP. + + This uses HTTP range requests to lazily fetch the file's content, + which is supposed to be fed to ZipFile. If such requests are not + supported by the server, raise HTTPRangeRequestUnsupported + during initialization. + """ + + def __init__( + self, url: str, session: PipSession, chunk_size: int = CONTENT_CHUNK_SIZE + ) -> None: + head = session.head(url, headers=HEADERS) + raise_for_status(head) + assert head.status_code == 200 + self._session, self._url, self._chunk_size = session, url, chunk_size + self._length = int(head.headers["Content-Length"]) + self._file = NamedTemporaryFile() + self.truncate(self._length) + self._left: List[int] = [] + self._right: List[int] = [] + if "bytes" not in head.headers.get("Accept-Ranges", "none"): + raise HTTPRangeRequestUnsupported("range request is not supported") + self._check_zip() + + @property + def mode(self) -> str: + """Opening mode, which is always rb.""" + return "rb" + + @property + def name(self) -> str: + """Path to the underlying file.""" + return self._file.name + + def seekable(self) -> bool: + """Return whether random access is supported, which is True.""" + return True + + def close(self) -> None: + """Close the file.""" + self._file.close() + + @property + def closed(self) -> bool: + """Whether the file is closed.""" + return self._file.closed + + def read(self, size: int = -1) -> bytes: + """Read up to size bytes from the object and return them. + + As a convenience, if size is unspecified or -1, + all bytes until EOF are returned. Fewer than + size bytes may be returned if EOF is reached. + """ + download_size = max(size, self._chunk_size) + start, length = self.tell(), self._length + stop = length if size < 0 else min(start + download_size, length) + start = max(0, stop - download_size) + self._download(start, stop - 1) + return self._file.read(size) + + def readable(self) -> bool: + """Return whether the file is readable, which is True.""" + return True + + def seek(self, offset: int, whence: int = 0) -> int: + """Change stream position and return the new absolute position. + + Seek to offset relative position indicated by whence: + * 0: Start of stream (the default). pos should be >= 0; + * 1: Current position - pos may be negative; + * 2: End of stream - pos usually negative. + """ + return self._file.seek(offset, whence) + + def tell(self) -> int: + """Return the current position.""" + return self._file.tell() + + def truncate(self, size: Optional[int] = None) -> int: + """Resize the stream to the given size in bytes. + + If size is unspecified resize to the current position. + The current stream position isn't changed. + + Return the new file size. + """ + return self._file.truncate(size) + + def writable(self) -> bool: + """Return False.""" + return False + + def __enter__(self) -> "LazyZipOverHTTP": + self._file.__enter__() + return self + + def __exit__(self, *exc: Any) -> None: + self._file.__exit__(*exc) + + @contextmanager + def _stay(self) -> Generator[None, None, None]: + """Return a context manager keeping the position. + + At the end of the block, seek back to original position. + """ + pos = self.tell() + try: + yield + finally: + self.seek(pos) + + def _check_zip(self) -> None: + """Check and download until the file is a valid ZIP.""" + end = self._length - 1 + for start in reversed(range(0, end, self._chunk_size)): + self._download(start, end) + with self._stay(): + try: + # For read-only ZIP files, ZipFile only needs + # methods read, seek, seekable and tell. + ZipFile(self) # type: ignore + except BadZipfile: + pass + else: + break + + def _stream_response( + self, start: int, end: int, base_headers: Dict[str, str] = HEADERS + ) -> Response: + """Return HTTP response to a range request from start to end.""" + headers = base_headers.copy() + headers["Range"] = f"bytes={start}-{end}" + # TODO: Get range requests to be correctly cached + headers["Cache-Control"] = "no-cache" + return self._session.get(self._url, headers=headers, stream=True) + + def _merge( + self, start: int, end: int, left: int, right: int + ) -> Generator[Tuple[int, int], None, None]: + """Return a generator of intervals to be fetched. + + Args: + start (int): Start of needed interval + end (int): End of needed interval + left (int): Index of first overlapping downloaded data + right (int): Index after last overlapping downloaded data + """ + lslice, rslice = self._left[left:right], self._right[left:right] + i = start = min([start] + lslice[:1]) + end = max([end] + rslice[-1:]) + for j, k in zip(lslice, rslice): + if j > i: + yield i, j - 1 + i = k + 1 + if i <= end: + yield i, end + self._left[left:right], self._right[left:right] = [start], [end] + + def _download(self, start: int, end: int) -> None: + """Download bytes from start to end inclusively.""" + with self._stay(): + left = bisect_left(self._right, start) + right = bisect_right(self._left, end) + for start, end in self._merge(start, end, left, right): + response = self._stream_response(start, end) + response.raise_for_status() + self.seek(start) + for chunk in response_chunks(response, self._chunk_size): + self._file.write(chunk) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/session.py b/venv/lib/python3.11/site-packages/pip/_internal/network/session.py new file mode 100644 index 0000000..e512ac7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/network/session.py @@ -0,0 +1,518 @@ +"""PipSession and supporting code, containing all pip-specific +network request configuration and behavior. +""" + +import email.utils +import io +import ipaddress +import json +import logging +import mimetypes +import os +import platform +import shutil +import subprocess +import sys +import urllib.parse +import warnings +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Generator, + List, + Mapping, + Optional, + Sequence, + Tuple, + Union, +) + +from pip._vendor import requests, urllib3 +from pip._vendor.cachecontrol import CacheControlAdapter as _BaseCacheControlAdapter +from pip._vendor.requests.adapters import DEFAULT_POOLBLOCK, BaseAdapter +from pip._vendor.requests.adapters import HTTPAdapter as _BaseHTTPAdapter +from pip._vendor.requests.models import PreparedRequest, Response +from pip._vendor.requests.structures import CaseInsensitiveDict +from pip._vendor.urllib3.connectionpool import ConnectionPool +from pip._vendor.urllib3.exceptions import InsecureRequestWarning + +from pip import __version__ +from pip._internal.metadata import get_default_environment +from pip._internal.models.link import Link +from pip._internal.network.auth import MultiDomainBasicAuth +from pip._internal.network.cache import SafeFileCache + +# Import ssl from compat so the initial import occurs in only one place. +from pip._internal.utils.compat import has_tls +from pip._internal.utils.glibc import libc_ver +from pip._internal.utils.misc import build_url_from_netloc, parse_netloc +from pip._internal.utils.urls import url_to_path + +if TYPE_CHECKING: + from ssl import SSLContext + + from pip._vendor.urllib3.poolmanager import PoolManager + + +logger = logging.getLogger(__name__) + +SecureOrigin = Tuple[str, str, Optional[Union[int, str]]] + + +# Ignore warning raised when using --trusted-host. +warnings.filterwarnings("ignore", category=InsecureRequestWarning) + + +SECURE_ORIGINS: List[SecureOrigin] = [ + # 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", "*", "*"), +] + + +# These are environment variables present when running under various +# CI systems. For each variable, some CI systems that use the variable +# are indicated. The collection was chosen so that for each of a number +# of popular systems, at least one of the environment variables is used. +# This list is used to provide some indication of and lower bound for +# CI traffic to PyPI. Thus, it is okay if the list is not comprehensive. +# For more background, see: https://github.com/pypa/pip/issues/5499 +CI_ENVIRONMENT_VARIABLES = ( + # Azure Pipelines + "BUILD_BUILDID", + # Jenkins + "BUILD_ID", + # AppVeyor, CircleCI, Codeship, Gitlab CI, Shippable, Travis CI + "CI", + # Explicit environment variable. + "PIP_IS_CI", +) + + +def looks_like_ci() -> bool: + """ + Return whether it looks like pip is running under CI. + """ + # We don't use the method of checking for a tty (e.g. using isatty()) + # because some CI systems mimic a tty (e.g. Travis CI). Thus that + # method doesn't provide definitive information in either direction. + return any(name in os.environ for name in CI_ENVIRONMENT_VARIABLES) + + +def user_agent() -> str: + """ + Return a string representing the user agent. + """ + data: Dict[str, Any] = { + "installer": {"name": "pip", "version": __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": + pypy_version_info = sys.pypy_version_info # type: ignore + if pypy_version_info.releaselevel == "final": + pypy_version_info = pypy_version_info[:3] + 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 + + linux_distribution = distro.name(), distro.version(), distro.codename() + distro_infos: Dict[str, Any] = dict( + filter( + lambda x: x[1], + zip(["name", "version", "id"], 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(): + import _ssl as ssl + + data["openssl_version"] = ssl.OPENSSL_VERSION + + setuptools_dist = get_default_environment().get_distribution("setuptools") + if setuptools_dist is not None: + data["setuptools_version"] = str(setuptools_dist.version) + + if shutil.which("rustc") is not None: + # If for any reason `rustc --version` fails, silently ignore it + try: + rustc_output = subprocess.check_output( + ["rustc", "--version"], stderr=subprocess.STDOUT, timeout=0.5 + ) + except Exception: + pass + else: + if rustc_output.startswith(b"rustc "): + # The format of `rustc --version` is: + # `b'rustc 1.52.1 (9bc8c42bb 2021-05-09)\n'` + # We extract just the middle (1.52.1) part + data["rustc_version"] = rustc_output.split(b" ")[1].decode() + + # Use None rather than False so as not to give the impression that + # pip knows it is not being run under CI. Rather, it is a null or + # inconclusive result. Also, we include some value rather than no + # value to make it easier to know that the check has been run. + data["ci"] = True if looks_like_ci() else None + + user_data = os.environ.get("PIP_USER_AGENT_USER_DATA") + if user_data is not None: + data["user_data"] = user_data + + return "{data[installer][name]}/{data[installer][version]} {json}".format( + data=data, + json=json.dumps(data, separators=(",", ":"), sort_keys=True), + ) + + +class LocalFSAdapter(BaseAdapter): + def send( + self, + request: PreparedRequest, + stream: bool = False, + timeout: Optional[Union[float, Tuple[float, float]]] = None, + verify: Union[bool, str] = True, + cert: Optional[Union[str, Tuple[str, str]]] = None, + proxies: Optional[Mapping[str, str]] = None, + ) -> Response: + 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: + # format the exception raised as a io.BytesIO object, + # to return a better error message: + resp.status_code = 404 + resp.reason = type(exc).__name__ + resp.raw = io.BytesIO(f"{resp.reason}: {exc}".encode("utf8")) + 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) -> None: + pass + + +class _SSLContextAdapterMixin: + """Mixin to add the ``ssl_context`` constructor argument to HTTP adapters. + + The additional argument is forwarded directly to the pool manager. This allows us + to dynamically decide what SSL store to use at runtime, which is used to implement + the optional ``truststore`` backend. + """ + + def __init__( + self, + *, + ssl_context: Optional["SSLContext"] = None, + **kwargs: Any, + ) -> None: + self._ssl_context = ssl_context + super().__init__(**kwargs) + + def init_poolmanager( + self, + connections: int, + maxsize: int, + block: bool = DEFAULT_POOLBLOCK, + **pool_kwargs: Any, + ) -> "PoolManager": + if self._ssl_context is not None: + pool_kwargs.setdefault("ssl_context", self._ssl_context) + return super().init_poolmanager( # type: ignore[misc] + connections=connections, + maxsize=maxsize, + block=block, + **pool_kwargs, + ) + + +class HTTPAdapter(_SSLContextAdapterMixin, _BaseHTTPAdapter): + pass + + +class CacheControlAdapter(_SSLContextAdapterMixin, _BaseCacheControlAdapter): + pass + + +class InsecureHTTPAdapter(HTTPAdapter): + def cert_verify( + self, + conn: ConnectionPool, + url: str, + verify: Union[bool, str], + cert: Optional[Union[str, Tuple[str, str]]], + ) -> None: + super().cert_verify(conn=conn, url=url, verify=False, cert=cert) + + +class InsecureCacheControlAdapter(CacheControlAdapter): + def cert_verify( + self, + conn: ConnectionPool, + url: str, + verify: Union[bool, str], + cert: Optional[Union[str, Tuple[str, str]]], + ) -> None: + super().cert_verify(conn=conn, url=url, verify=False, cert=cert) + + +class PipSession(requests.Session): + + timeout: Optional[int] = None + + def __init__( + self, + *args: Any, + retries: int = 0, + cache: Optional[str] = None, + trusted_hosts: Sequence[str] = (), + index_urls: Optional[List[str]] = None, + ssl_context: Optional["SSLContext"] = None, + **kwargs: Any, + ) -> None: + """ + :param trusted_hosts: Domains not to emit warnings for when not using + HTTPS. + """ + super().__init__(*args, **kwargs) + + # Namespace the attribute with "pip_" just in case to prevent + # possible conflicts with the base class. + self.pip_trusted_origins: List[Tuple[str, Optional[int]]] = [] + + # Attach our User Agent to the request + self.headers["User-Agent"] = user_agent() + + # Attach our Authentication handler to the session + self.auth = MultiDomainBasicAuth(index_urls=index_urls) + + # 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, + ) # type: ignore + + # Our Insecure HTTPAdapter disables HTTPS validation. It does not + # support caching so we'll use it for all http:// URLs. + # If caching is disabled, we will also use it for + # https:// hosts that we've marked as ignoring + # TLS errors for (trusted-hosts). + insecure_adapter = InsecureHTTPAdapter(max_retries=retries) + + # We want to _only_ cache responses on securely fetched origins or when + # the host is specified as trusted. We do this because + # we can't validate the response of an insecurely/untrusted 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), + max_retries=retries, + ssl_context=ssl_context, + ) + self._trusted_host_adapter = InsecureCacheControlAdapter( + cache=SafeFileCache(cache), + max_retries=retries, + ) + else: + secure_adapter = HTTPAdapter(max_retries=retries, ssl_context=ssl_context) + self._trusted_host_adapter = insecure_adapter + + self.mount("https://", secure_adapter) + self.mount("http://", insecure_adapter) + + # Enable file:// urls + self.mount("file://", LocalFSAdapter()) + + for host in trusted_hosts: + self.add_trusted_host(host, suppress_logging=True) + + def update_index_urls(self, new_index_urls: List[str]) -> None: + """ + :param new_index_urls: New index urls to update the authentication + handler with. + """ + self.auth.index_urls = new_index_urls + + def add_trusted_host( + self, host: str, source: Optional[str] = None, suppress_logging: bool = False + ) -> None: + """ + :param host: It is okay to provide a host that has previously been + added. + :param source: An optional source string, for logging where the host + string came from. + """ + if not suppress_logging: + msg = f"adding trusted host: {host!r}" + if source is not None: + msg += f" (from {source})" + logger.info(msg) + + host_port = parse_netloc(host) + if host_port not in self.pip_trusted_origins: + self.pip_trusted_origins.append(host_port) + + self.mount( + build_url_from_netloc(host, scheme="http") + "/", self._trusted_host_adapter + ) + self.mount(build_url_from_netloc(host) + "/", self._trusted_host_adapter) + if not host_port[1]: + self.mount( + build_url_from_netloc(host, scheme="http") + ":", + self._trusted_host_adapter, + ) + # Mount wildcard ports for the same host. + self.mount(build_url_from_netloc(host) + ":", self._trusted_host_adapter) + + def iter_secure_origins(self) -> Generator[SecureOrigin, None, None]: + yield from SECURE_ORIGINS + for host, port in self.pip_trusted_origins: + yield ("*", host, "*" if port is None else port) + + def is_secure_origin(self, location: Link) -> bool: + # Determine if this url used a secure transport mechanism + parsed = urllib.parse.urlparse(str(location)) + origin_protocol, origin_host, origin_port = ( + 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.) + origin_protocol = origin_protocol.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 self.iter_secure_origins(): + secure_protocol, secure_host, secure_port = secure_origin + if origin_protocol != secure_protocol and secure_protocol != "*": + continue + + try: + addr = ipaddress.ip_address(origin_host or "") + network = ipaddress.ip_network(secure_host) + except ValueError: + # We don't have both a valid address or a valid network, so + # we'll check this origin against hostnames. + if ( + origin_host + and origin_host.lower() != secure_host.lower() + and secure_host != "*" + ): + 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 matches. + if ( + origin_port != secure_port + and secure_port != "*" + and secure_port 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'.", + origin_host, + origin_host, + ) + + return False + + def request(self, method: str, url: str, *args: Any, **kwargs: Any) -> Response: + # Allow setting a default timeout on a session + kwargs.setdefault("timeout", self.timeout) + # Allow setting a default proxies on a session + kwargs.setdefault("proxies", self.proxies) + + # Dispatch the actual request + return super().request(method, url, *args, **kwargs) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/utils.py b/venv/lib/python3.11/site-packages/pip/_internal/network/utils.py new file mode 100644 index 0000000..134848a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/network/utils.py @@ -0,0 +1,96 @@ +from typing import Dict, Generator + +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response + +from pip._internal.exceptions import NetworkConnectionError + +# The following comments and HTTP headers were originally added by +# Donald Stufft in git commit 22c562429a61bb77172039e480873fb239dd8c03. +# +# 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, adding 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: Dict[str, str] = {"Accept-Encoding": "identity"} + + +def raise_for_status(resp: Response) -> None: + http_error_msg = "" + if isinstance(resp.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. + try: + reason = resp.reason.decode("utf-8") + except UnicodeDecodeError: + reason = resp.reason.decode("iso-8859-1") + else: + reason = resp.reason + + if 400 <= resp.status_code < 500: + http_error_msg = ( + f"{resp.status_code} Client Error: {reason} for url: {resp.url}" + ) + + elif 500 <= resp.status_code < 600: + http_error_msg = ( + f"{resp.status_code} Server Error: {reason} for url: {resp.url}" + ) + + if http_error_msg: + raise NetworkConnectionError(http_error_msg, response=resp) + + +def response_chunks( + response: Response, chunk_size: int = CONTENT_CHUNK_SIZE +) -> Generator[bytes, None, None]: + """Given a requests Response, provide the data chunks.""" + try: + # Special case for urllib3. + for chunk in response.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 = response.raw.read(chunk_size) + if not chunk: + break + yield chunk diff --git a/venv/lib/python3.11/site-packages/pip/_internal/network/xmlrpc.py b/venv/lib/python3.11/site-packages/pip/_internal/network/xmlrpc.py new file mode 100644 index 0000000..4a7d55d --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/network/xmlrpc.py @@ -0,0 +1,60 @@ +"""xmlrpclib.Transport implementation +""" + +import logging +import urllib.parse +import xmlrpc.client +from typing import TYPE_CHECKING, Tuple + +from pip._internal.exceptions import NetworkConnectionError +from pip._internal.network.session import PipSession +from pip._internal.network.utils import raise_for_status + +if TYPE_CHECKING: + from xmlrpc.client import _HostType, _Marshallable + +logger = logging.getLogger(__name__) + + +class PipXmlrpcTransport(xmlrpc.client.Transport): + """Provide a `xmlrpclib.Transport` implementation via a `PipSession` + object. + """ + + def __init__( + self, index_url: str, session: PipSession, use_datetime: bool = False + ) -> None: + super().__init__(use_datetime) + index_parts = urllib.parse.urlparse(index_url) + self._scheme = index_parts.scheme + self._session = session + + def request( + self, + host: "_HostType", + handler: str, + request_body: bytes, + verbose: bool = False, + ) -> Tuple["_Marshallable", ...]: + assert isinstance(host, str) + 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, + ) + raise_for_status(response) + self.verbose = verbose + return self.parse_response(response.raw) + except NetworkConnectionError as exc: + assert exc.response + logger.critical( + "HTTP error %s while getting %s", + exc.response.status_code, + url, + ) + raise diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30905a51a51076992c293ac28d793a2a4bbfe5d0 GIT binary patch literal 208 zcmXwzK@Ng25Jg*w#+VRq;NFEyh+E?k+<1VdKm$c+Cv73&Bp$(d2XEsAFzi^_Ci)j| z{`|j~dBpLCc^;CeQI^l XHR5cR{$}{fZav0`QaX}9OysjKR|7Yr literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/check.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/check.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61d3a227dbe3ab828b15b25fb7c98462314a7649 GIT binary patch literal 6641 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 HsE+<0irIS? literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..331e1a6863213f26322b1d288d25342664c4c748 GIT binary patch literal 11604 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08481b007eeb21905f8b325c6c1f03148ec3a1a1 GIT binary patch literal 26388 zcmcJ1d2Ae4nqT$Z&F*G5**uze@sdc9Z0ewFos>lCurB(L#`bVM+uLH5q?Y^ORJAOL zLr&z0gXI{?nlsSE+*vP{NxWW7>|~W)FCgp=kg;ciY!V>pCJJGr5@HDiMz9DLXstb1 zWB$tTd(~Y>v+40HkYe+zSFhexuipE;?|Sto!C)PSqx+{%Z#b@T-2bMF$`LLHKL2|= z$Gyu5+$<;91bfOhYh!2oteu@5vkrE4&N^{+q+DtDtUK+Q^`yPC-n4JlXQO=1R9)IX z>t|tCDv%D&23gphs!xYzLoDn`h0_hQ4e7?&#&l#hl5U!9N;l6or(0%Q(ygF8{f zrSqoR((SYDEbL2lq&sIj(_OP&?7A-1o$i_KVPSuYPxsFDvTz{Pm+qhKXW?LKAU!xc znBFzJi(S{JcBhAChtk8d!|Xbg+LIoc9bw^cYBW7IJI2BdsaSe^cASM9Q+w0GKA!th(J*-Lu9uan0s>_MK(rrM~L zR3o+Y*O%ZEFB+}5UN4NGv>Ddw-6&^!D=klfUKm9$JkNSz480Jm>V+2s`xS0@@51m4 zk~p7`M4392$!oWB$!vzdo|X7yM$RQtsRTvT{VjFT%&=2+o=(o?RPXtmC?&3? zMAdl-`Bd-o^OP)+8n&qobBRnglblPWk_%!ylSqq*98M=*7vttS;;18Dt|Kmq-@cuc z#I%^nA#wA0t!hy?ZEDo8SM4~BM02^UbnhEd>bZn`^BWoY_WXQS%87y+poq&!Ii1MO z-PEqWk(p0sGPu`JE|ERV8A-}YYSU#gmk<)U#QDrzHY1}VRIawnh`Bpi>GkO>^3BmR zX{nphQ*R`*x8LF)B<5aE+z`(uGlD1$+tu(?LKe->qPE=- zbMbV!1(tq6e*Y20@qFfb7MJMa%$+^wR2HNX}moWf>2Qs{nh-s}ddq z?YF6oMBuIgLq4FGIK+_q}r*Y zGP!svdjmr(fF{nT68GZsiQG-qcN3Z7*OM4)-kV85r0Uehq+A(0R3kc∋$*rswf) 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4dd2f7c3894aa84e4d1f47420fe53c13cfb1b526 GIT binary patch literal 8137 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17672fb585b7a98b9cbed934830ad1cf8cc8f6aa GIT binary patch literal 2285 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 Q6cm&FB<0Xc2s_>X0XG)RNdN!< literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba06b7c9235063304461e48f1810a97cc77a6026 GIT binary patch literal 1951 zcmZ`(|7#RS6n}fWd$)VvtkG02id{`2J)7J%*wiG55L=~{qN4r9gR)$1CwCk7cDJ*0 zi3ukJkrJfE9~DX=KUqo(^$+MT_Aj_dz+<5hDE*vXozJ|;CrGiHRQ4! z@sgcvq{=A)5e-cc=%Ob+xzK09UpW+Am0u_}Fz-@r<)HSVw~W_WKoFLg+pvp8f$|DkIexif*~E-*+<$7+ zFQ$W}?bd392C_-!nl;KH6&&=NbGyD7aWw>)$YUci8K{@;R7q4zflMfMX^?RJK;n)E z(t>L_#U$mqq$y7LH7HL8)zpl3Oz6JF$he39u{M3(vpn6f97ZVCxbAv{M)C9Y=uKlmbd`g!j3`r<~ew3#b~AgTF?bPC#w!r1e| zSm(XL&hTU?!_fFPh(q~ToUC05#XZSLe48J9)ji$Qvya=^+1a-fEq8Wary)BSLP9>= zBVCuyKK*(_nb}lk+R9Alz@as^#zGlIQQPYzWb@yjdwBlA`N#6(m5t1q&CHp$bjJS_ zqxIdaI6Do`)T6WG;Td8 zl582@*&5~VRB#N_STZo%rb{tfyHGId_(uDbzfQr4NMbM1r6#j%ztn?ljA6A#*jF*M z6(fS0VNjmoK=c`n^8E|E#5K?(NZu&t8?M>3$pv}}m;4R(e@7CEf*^DtzZ!iVP*sb!hF#raJU^YC|2_R7X}3A_d{2PC6HgIB(^KLm6kpP2qT$ d;+z861EI>fG$iwD)%)Ls8NP!5A@n5P`9I)c^hf{z literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a983ab35673bba9110500cb23244fb95fbca8cee GIT binary patch literal 2395 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 Generator[None, None, None]: + target = os.environ + + # Save values from the target and change them. + non_existent_marker = object() + saved_values: Dict[str, Union[object, str]] = {} + for name, new_value in changes.items(): + try: + saved_values[name] = target[name] + except KeyError: + saved_values[name] = non_existent_marker + target[name] = new_value + + try: + yield + finally: + # Restore original values in the target. + for name, original_value in saved_values.items(): + if original_value is non_existent_marker: + del target[name] + else: + assert isinstance(original_value, str) # for mypy + target[name] = original_value + + +@contextlib.contextmanager +def get_build_tracker() -> Generator["BuildTracker", None, None]: + root = os.environ.get("PIP_BUILD_TRACKER") + with contextlib.ExitStack() as ctx: + if root is None: + root = ctx.enter_context(TempDirectory(kind="build-tracker")).path + ctx.enter_context(update_env_context_manager(PIP_BUILD_TRACKER=root)) + logger.debug("Initialized build tracking at %s", root) + + with BuildTracker(root) as tracker: + yield tracker + + +class BuildTracker: + def __init__(self, root: str) -> None: + self._root = root + self._entries: Set[InstallRequirement] = set() + logger.debug("Created build tracker: %s", self._root) + + def __enter__(self) -> "BuildTracker": + logger.debug("Entered build tracker: %s", self._root) + return self + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + self.cleanup() + + def _entry_path(self, link: Link) -> str: + hashed = hashlib.sha224(link.url_without_fragment.encode()).hexdigest() + return os.path.join(self._root, hashed) + + def add(self, req: InstallRequirement) -> None: + """Add an InstallRequirement to build tracking.""" + + assert req.link + # Get the file to write information about this requirement. + entry_path = self._entry_path(req.link) + + # Try reading from the file. If it exists and can be read from, a build + # is already in progress, so a LookupError is raised. + try: + with open(entry_path) as fp: + contents = fp.read() + except FileNotFoundError: + pass + else: + message = "{} is already being built: {}".format(req.link, contents) + raise LookupError(message) + + # If we're here, req should really not be building already. + assert req not in self._entries + + # Start tracking this requirement. + with open(entry_path, "w", encoding="utf-8") as fp: + fp.write(str(req)) + self._entries.add(req) + + logger.debug("Added %s to build tracker %r", req, self._root) + + def remove(self, req: InstallRequirement) -> None: + """Remove an InstallRequirement from build tracking.""" + + assert req.link + # Delete the created file and the corresponding entries. + os.unlink(self._entry_path(req.link)) + self._entries.remove(req) + + logger.debug("Removed %s from build tracker %r", req, self._root) + + def cleanup(self) -> None: + for req in set(self._entries): + self.remove(req) + + logger.debug("Removed build tracker: %r", self._root) + + @contextlib.contextmanager + def track(self, req: InstallRequirement) -> Generator[None, None, None]: + self.add(req) + yield + self.remove(req) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata.py new file mode 100644 index 0000000..c66ac35 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata.py @@ -0,0 +1,39 @@ +"""Metadata generation logic for source distributions. +""" + +import os + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller + +from pip._internal.build_env import BuildEnvironment +from pip._internal.exceptions import ( + InstallationSubprocessError, + MetadataGenerationFailed, +) +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory + + +def generate_metadata( + build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str +) -> str: + """Generate metadata using mechanisms described in PEP 517. + + Returns the generated metadata directory. + """ + metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) + + metadata_dir = metadata_tmpdir.path + + with build_env: + # Note that BuildBackendHookCaller implements a fallback for + # prepare_metadata_for_build_wheel, so we don't have to + # consider the possibility that this hook doesn't exist. + runner = runner_with_spinner_message("Preparing metadata (pyproject.toml)") + with backend.subprocess_runner(runner): + try: + distinfo_dir = backend.prepare_metadata_for_build_wheel(metadata_dir) + except InstallationSubprocessError as error: + raise MetadataGenerationFailed(package_details=details) from error + + return os.path.join(metadata_dir, distinfo_dir) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_editable.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_editable.py new file mode 100644 index 0000000..27c69f0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_editable.py @@ -0,0 +1,41 @@ +"""Metadata generation logic for source distributions. +""" + +import os + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller + +from pip._internal.build_env import BuildEnvironment +from pip._internal.exceptions import ( + InstallationSubprocessError, + MetadataGenerationFailed, +) +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory + + +def generate_editable_metadata( + build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str +) -> str: + """Generate metadata using mechanisms described in PEP 660. + + Returns the generated metadata directory. + """ + metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) + + metadata_dir = metadata_tmpdir.path + + with build_env: + # Note that BuildBackendHookCaller implements a fallback for + # prepare_metadata_for_build_wheel/editable, so we don't have to + # consider the possibility that this hook doesn't exist. + runner = runner_with_spinner_message( + "Preparing editable metadata (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + try: + distinfo_dir = backend.prepare_metadata_for_build_editable(metadata_dir) + except InstallationSubprocessError as error: + raise MetadataGenerationFailed(package_details=details) from error + + return os.path.join(metadata_dir, distinfo_dir) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_legacy.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_legacy.py new file mode 100644 index 0000000..e60988d --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_legacy.py @@ -0,0 +1,74 @@ +"""Metadata generation logic for legacy source distributions. +""" + +import logging +import os + +from pip._internal.build_env import BuildEnvironment +from pip._internal.cli.spinners import open_spinner +from pip._internal.exceptions import ( + InstallationError, + InstallationSubprocessError, + MetadataGenerationFailed, +) +from pip._internal.utils.setuptools_build import make_setuptools_egg_info_args +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +def _find_egg_info(directory: str) -> str: + """Find an .egg-info subdirectory in `directory`.""" + filenames = [f for f in os.listdir(directory) if f.endswith(".egg-info")] + + if not filenames: + raise InstallationError(f"No .egg-info directory found in {directory}") + + if len(filenames) > 1: + raise InstallationError( + "More than one .egg-info directory found in {}".format(directory) + ) + + return os.path.join(directory, filenames[0]) + + +def generate_metadata( + build_env: BuildEnvironment, + setup_py_path: str, + source_dir: str, + isolated: bool, + details: str, +) -> str: + """Generate metadata using setup.py-based defacto mechanisms. + + Returns the generated metadata directory. + """ + logger.debug( + "Running setup.py (path:%s) egg_info for package %s", + setup_py_path, + details, + ) + + egg_info_dir = TempDirectory(kind="pip-egg-info", globally_managed=True).path + + args = make_setuptools_egg_info_args( + setup_py_path, + egg_info_dir=egg_info_dir, + no_user_config=isolated, + ) + + with build_env: + with open_spinner("Preparing metadata (setup.py)") as spinner: + try: + call_subprocess( + args, + cwd=source_dir, + command_desc="python setup.py egg_info", + spinner=spinner, + ) + except InstallationSubprocessError as error: + raise MetadataGenerationFailed(package_details=details) from error + + # Return the .egg-info directory. + return _find_egg_info(egg_info_dir) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel.py new file mode 100644 index 0000000..064811a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel.py @@ -0,0 +1,37 @@ +import logging +import os +from typing import Optional + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller + +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +def build_wheel_pep517( + name: str, + backend: BuildBackendHookCaller, + metadata_directory: str, + tempd: str, +) -> Optional[str]: + """Build one InstallRequirement using the PEP 517 build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + assert metadata_directory is not None + try: + logger.debug("Destination directory: %s", tempd) + + runner = runner_with_spinner_message( + f"Building wheel for {name} (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + wheel_name = backend.build_wheel( + tempd, + metadata_directory=metadata_directory, + ) + except Exception: + logger.error("Failed building wheel for %s", name) + return None + return os.path.join(tempd, wheel_name) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_editable.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_editable.py new file mode 100644 index 0000000..719d69d --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_editable.py @@ -0,0 +1,46 @@ +import logging +import os +from typing import Optional + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller, HookMissing + +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +def build_wheel_editable( + name: str, + backend: BuildBackendHookCaller, + metadata_directory: str, + tempd: str, +) -> Optional[str]: + """Build one InstallRequirement using the PEP 660 build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + assert metadata_directory is not None + try: + logger.debug("Destination directory: %s", tempd) + + runner = runner_with_spinner_message( + f"Building editable for {name} (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + try: + wheel_name = backend.build_editable( + tempd, + metadata_directory=metadata_directory, + ) + except HookMissing as e: + logger.error( + "Cannot build editable %s because the build " + "backend does not have the %s hook", + name, + e, + ) + return None + except Exception: + logger.error("Failed building editable for %s", name) + return None + return os.path.join(tempd, wheel_name) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_legacy.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_legacy.py new file mode 100644 index 0000000..c5f0492 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_legacy.py @@ -0,0 +1,102 @@ +import logging +import os.path +from typing import List, Optional + +from pip._internal.cli.spinners import open_spinner +from pip._internal.utils.setuptools_build import make_setuptools_bdist_wheel_args +from pip._internal.utils.subprocess import call_subprocess, format_command_args + +logger = logging.getLogger(__name__) + + +def format_command_result( + command_args: List[str], + command_output: str, +) -> str: + """Format command information for logging.""" + command_desc = format_command_args(command_args) + text = f"Command arguments: {command_desc}\n" + + if not command_output: + text += "Command output: None" + elif logger.getEffectiveLevel() > logging.DEBUG: + text += "Command output: [use --verbose to show]" + else: + if not command_output.endswith("\n"): + command_output += "\n" + text += f"Command output:\n{command_output}" + + return text + + +def get_legacy_build_wheel_path( + names: List[str], + temp_dir: str, + name: str, + command_args: List[str], + command_output: str, +) -> Optional[str]: + """Return the path to the wheel in the temporary build directory.""" + # Sort for determinism. + names = sorted(names) + if not names: + msg = ("Legacy build of wheel for {!r} created no files.\n").format(name) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + return None + + if len(names) > 1: + msg = ( + "Legacy build of wheel for {!r} created more than one file.\n" + "Filenames (choosing first): {}\n" + ).format(name, names) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + + return os.path.join(temp_dir, names[0]) + + +def build_wheel_legacy( + name: str, + setup_py_path: str, + source_dir: str, + global_options: List[str], + build_options: List[str], + tempd: str, +) -> Optional[str]: + """Build one unpacked package using the "legacy" build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + wheel_args = make_setuptools_bdist_wheel_args( + setup_py_path, + global_options=global_options, + build_options=build_options, + destination_dir=tempd, + ) + + spin_message = f"Building wheel for {name} (setup.py)" + with open_spinner(spin_message) as spinner: + logger.debug("Destination directory: %s", tempd) + + try: + output = call_subprocess( + wheel_args, + command_desc="python setup.py bdist_wheel", + cwd=source_dir, + spinner=spinner, + ) + except Exception: + spinner.finish("error") + logger.error("Failed building wheel for %s", name) + return None + + names = os.listdir(tempd) + wheel_path = get_legacy_build_wheel_path( + names=names, + temp_dir=tempd, + name=name, + command_args=wheel_args, + command_output=output, + ) + return wheel_path diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/check.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/check.py new file mode 100644 index 0000000..e3bce69 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/check.py @@ -0,0 +1,149 @@ +"""Validation of dependencies of packages +""" + +import logging +from typing import Callable, Dict, List, NamedTuple, Optional, Set, Tuple + +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name + +from pip._internal.distributions import make_distribution_for_install_requirement +from pip._internal.metadata import get_default_environment +from pip._internal.metadata.base import DistributionVersion +from pip._internal.req.req_install import InstallRequirement + +logger = logging.getLogger(__name__) + + +class PackageDetails(NamedTuple): + version: DistributionVersion + dependencies: List[Requirement] + + +# Shorthands +PackageSet = Dict[NormalizedName, PackageDetails] +Missing = Tuple[NormalizedName, Requirement] +Conflicting = Tuple[NormalizedName, DistributionVersion, Requirement] + +MissingDict = Dict[NormalizedName, List[Missing]] +ConflictingDict = Dict[NormalizedName, List[Conflicting]] +CheckResult = Tuple[MissingDict, ConflictingDict] +ConflictDetails = Tuple[PackageSet, CheckResult] + + +def create_package_set_from_installed() -> Tuple[PackageSet, bool]: + """Converts a list of distributions into a PackageSet.""" + package_set = {} + problems = False + env = get_default_environment() + for dist in env.iter_installed_distributions(local_only=False, skip=()): + name = dist.canonical_name + try: + dependencies = list(dist.iter_dependencies()) + package_set[name] = PackageDetails(dist.version, dependencies) + except (OSError, ValueError) as e: + # Don't crash on unreadable or broken metadata. + logger.warning("Error parsing requirements for %s: %s", name, e) + problems = True + return package_set, problems + + +def check_package_set( + package_set: PackageSet, should_ignore: Optional[Callable[[str], bool]] = None +) -> CheckResult: + """Check if a package set is consistent + + If should_ignore is passed, it should be a callable that takes a + package name and returns a boolean. + """ + + missing = {} + conflicting = {} + + for package_name, package_detail in package_set.items(): + # Info about dependencies of package_name + missing_deps: Set[Missing] = set() + conflicting_deps: Set[Conflicting] = set() + + if should_ignore and should_ignore(package_name): + continue + + for req in package_detail.dependencies: + name = canonicalize_name(req.name) + + # Check if it's missing + if name not in package_set: + missed = True + if req.marker is not None: + missed = req.marker.evaluate({"extra": ""}) + if missed: + missing_deps.add((name, req)) + continue + + # Check if there's a conflict + version = package_set[name].version + if not req.specifier.contains(version, prereleases=True): + conflicting_deps.add((name, version, req)) + + if missing_deps: + missing[package_name] = sorted(missing_deps, key=str) + if conflicting_deps: + conflicting[package_name] = sorted(conflicting_deps, key=str) + + return missing, conflicting + + +def check_install_conflicts(to_install: List[InstallRequirement]) -> ConflictDetails: + """For checking if the dependency graph would be consistent after \ + installing given requirements + """ + # Start from the current state + package_set, _ = create_package_set_from_installed() + # Install packages + would_be_installed = _simulate_installation_of(to_install, package_set) + + # Only warn about directly-dependent packages; create a whitelist of them + whitelist = _create_whitelist(would_be_installed, package_set) + + return ( + package_set, + check_package_set( + package_set, should_ignore=lambda name: name not in whitelist + ), + ) + + +def _simulate_installation_of( + to_install: List[InstallRequirement], package_set: PackageSet +) -> Set[NormalizedName]: + """Computes the version of packages after installing to_install.""" + # Keep track of packages that were installed + installed = set() + + # Modify it as installing requirement_set would (assuming no errors) + for inst_req in to_install: + abstract_dist = make_distribution_for_install_requirement(inst_req) + dist = abstract_dist.get_metadata_distribution() + name = dist.canonical_name + package_set[name] = PackageDetails(dist.version, list(dist.iter_dependencies())) + + installed.add(name) + + return installed + + +def _create_whitelist( + would_be_installed: Set[NormalizedName], package_set: PackageSet +) -> Set[NormalizedName]: + packages_affected = set(would_be_installed) + + for package_name in package_set: + if package_name in packages_affected: + continue + + for req in package_set[package_name].dependencies: + if canonicalize_name(req.name) in packages_affected: + packages_affected.add(package_name) + break + + return packages_affected diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/freeze.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/freeze.py new file mode 100644 index 0000000..930d4c6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/freeze.py @@ -0,0 +1,254 @@ +import collections +import logging +import os +from typing import Container, Dict, Generator, Iterable, List, NamedTuple, Optional, Set + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import Version + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.metadata import BaseDistribution, get_environment +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, +) +from pip._internal.req.req_file import COMMENT_RE +from pip._internal.utils.direct_url_helpers import direct_url_as_pep440_direct_reference + +logger = logging.getLogger(__name__) + + +class _EditableInfo(NamedTuple): + requirement: str + comments: List[str] + + +def freeze( + requirement: Optional[List[str]] = None, + local_only: bool = False, + user_only: bool = False, + paths: Optional[List[str]] = None, + isolated: bool = False, + exclude_editable: bool = False, + skip: Container[str] = (), +) -> Generator[str, None, None]: + installations: Dict[str, FrozenRequirement] = {} + + dists = get_environment(paths).iter_installed_distributions( + local_only=local_only, + skip=(), + user_only=user_only, + ) + for dist in dists: + req = FrozenRequirement.from_dist(dist) + if exclude_editable and req.editable: + continue + installations[req.canonical_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[str] = 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: Dict[str, List[str]] = 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 line.startswith( + ( + "-r", + "--requirement", + "-f", + "--find-links", + "-i", + "--index-url", + "--pre", + "--trusted-host", + "--process-dependency-links", + "--extra-index-url", + "--use-feature", + ) + ) + ): + 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 = install_req_from_editable( + line, + isolated=isolated, + ) + else: + line_req = install_req_from_line( + COMMENT_RE.sub("", line).strip(), + isolated=isolated, + ) + + 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)" + ) + else: + line_req_canonical_name = canonicalize_name(line_req.name) + if line_req_canonical_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 " + "package %r is not installed", + req_file_path, + COMMENT_RE.sub("", line).strip(), + line_req.name, + ) + else: + req_files[line_req.name].append(req_file_path) + else: + yield str(installations[line_req_canonical_name]).rstrip() + del installations[line_req_canonical_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 req_files.items(): + 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 installation.canonical_name not in skip: + yield str(installation).rstrip() + + +def _format_as_name_version(dist: BaseDistribution) -> str: + if isinstance(dist.version, Version): + return f"{dist.raw_name}=={dist.version}" + return f"{dist.raw_name}==={dist.version}" + + +def _get_editable_info(dist: BaseDistribution) -> _EditableInfo: + """ + Compute and return values (req, comments) for use in + FrozenRequirement.from_dist(). + """ + editable_project_location = dist.editable_project_location + assert editable_project_location + location = os.path.normcase(os.path.abspath(editable_project_location)) + + from pip._internal.vcs import RemoteNotFoundError, RemoteNotValidError, vcs + + vcs_backend = vcs.get_backend_for_dir(location) + + if vcs_backend is None: + display = _format_as_name_version(dist) + logger.debug( + 'No VCS found for editable requirement "%s" in: %r', + display, + location, + ) + return _EditableInfo( + requirement=location, + comments=[f"# Editable install with no version control ({display})"], + ) + + vcs_name = type(vcs_backend).__name__ + + try: + req = vcs_backend.get_src_requirement(location, dist.raw_name) + except RemoteNotFoundError: + display = _format_as_name_version(dist) + return _EditableInfo( + requirement=location, + comments=[f"# Editable {vcs_name} install with no remote ({display})"], + ) + except RemoteNotValidError as ex: + display = _format_as_name_version(dist) + return _EditableInfo( + requirement=location, + comments=[ + f"# Editable {vcs_name} install ({display}) with either a deleted " + f"local remote or invalid URI:", + f"# '{ex.url}'", + ], + ) + except BadCommand: + logger.warning( + "cannot determine version of editable source in %s " + "(%s command not found in path)", + location, + vcs_backend.name, + ) + return _EditableInfo(requirement=location, comments=[]) + except InstallationError as exc: + logger.warning("Error when trying to get requirement for VCS system %s", exc) + else: + return _EditableInfo(requirement=req, comments=[]) + + logger.warning("Could not determine repository location of %s", location) + + return _EditableInfo( + requirement=location, + comments=["## !! Could not determine repository location"], + ) + + +class FrozenRequirement: + def __init__( + self, + name: str, + req: str, + editable: bool, + comments: Iterable[str] = (), + ) -> None: + self.name = name + self.canonical_name = canonicalize_name(name) + self.req = req + self.editable = editable + self.comments = comments + + @classmethod + def from_dist(cls, dist: BaseDistribution) -> "FrozenRequirement": + editable = dist.editable + if editable: + req, comments = _get_editable_info(dist) + else: + comments = [] + direct_url = dist.direct_url + if direct_url: + # if PEP 610 metadata is present, use it + req = direct_url_as_pep440_direct_reference(direct_url, dist.raw_name) + else: + # name==version requirement + req = _format_as_name_version(dist) + + return cls(dist.raw_name, req, editable, comments=comments) + + def __str__(self) -> str: + req = self.req + if self.editable: + req = f"-e {req}" + return "\n".join(list(self.comments) + [str(req)]) + "\n" diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/install/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/__init__.py new file mode 100644 index 0000000..24d6a5d --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/__init__.py @@ -0,0 +1,2 @@ +"""For modules related to installing packages. +""" diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a740ba267baef2111cd48f0f6b5ce4fd36c3b49 GIT binary patch literal 282 zcmY*UJ5B>J5Vb=DC{hkUgWN`f9YtvoB_$0V&B$4gHcq@A%XU@@7vTtqJ8%+OF0d$F zD!d{o@`^Vzdh>bnF`Z6C!R^;?vncUrC{B>aWIwdL3nN~IkuPF4db@k#s9H8#M@dC; zI+IbEmGvoW=d5p3(Dg<)l&Z<|OnzS>8m_<|LdvQi_T+~12h*9SN literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94f2b61a78dd4872a096d800c992d3d984e56090 GIT binary patch literal 2278 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 A6aWAK literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e743d16288bb6ac5b11ec7d173cf844cfab7f475 GIT binary patch literal 40004 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/install/editable_legacy.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/editable_legacy.py new file mode 100644 index 0000000..bb548cd --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/editable_legacy.py @@ -0,0 +1,47 @@ +"""Legacy editable installation process, i.e. `setup.py develop`. +""" +import logging +from typing import List, Optional, Sequence + +from pip._internal.build_env import BuildEnvironment +from pip._internal.utils.logging import indent_log +from pip._internal.utils.setuptools_build import make_setuptools_develop_args +from pip._internal.utils.subprocess import call_subprocess + +logger = logging.getLogger(__name__) + + +def install_editable( + install_options: List[str], + global_options: Sequence[str], + prefix: Optional[str], + home: Optional[str], + use_user_site: bool, + name: str, + setup_py_path: str, + isolated: bool, + build_env: BuildEnvironment, + unpacked_source_directory: str, +) -> None: + """Install a package in editable mode. Most arguments are pass-through + to setuptools. + """ + logger.info("Running setup.py develop for %s", name) + + args = make_setuptools_develop_args( + setup_py_path, + global_options=global_options, + install_options=install_options, + no_user_config=isolated, + prefix=prefix, + home=home, + use_user_site=use_user_site, + ) + + with indent_log(): + with build_env: + call_subprocess( + args, + command_desc="python setup.py develop", + cwd=unpacked_source_directory, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/install/legacy.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/legacy.py new file mode 100644 index 0000000..290967d --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/legacy.py @@ -0,0 +1,120 @@ +"""Legacy installation process, i.e. `setup.py install`. +""" + +import logging +import os +from typing import List, Optional, Sequence + +from pip._internal.build_env import BuildEnvironment +from pip._internal.exceptions import InstallationError, LegacyInstallFailure +from pip._internal.locations.base import change_root +from pip._internal.models.scheme import Scheme +from pip._internal.utils.misc import ensure_dir +from pip._internal.utils.setuptools_build import make_setuptools_install_args +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +def write_installed_files_from_setuptools_record( + record_lines: List[str], + root: Optional[str], + req_description: str, +) -> None: + def prepend_root(path: str) -> str: + if root is None or not os.path.isabs(path): + return path + else: + return change_root(root, path) + + for line in record_lines: + directory = os.path.dirname(line) + if directory.endswith(".egg-info"): + egg_info_dir = prepend_root(directory) + break + else: + message = ( + "{} did not indicate that it installed an " + ".egg-info directory. Only setup.py projects " + "generating .egg-info directories are supported." + ).format(req_description) + raise InstallationError(message) + + new_lines = [] + for line in record_lines: + 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 install( + install_options: List[str], + global_options: Sequence[str], + root: Optional[str], + home: Optional[str], + prefix: Optional[str], + use_user_site: bool, + pycompile: bool, + scheme: Scheme, + setup_py_path: str, + isolated: bool, + req_name: str, + build_env: BuildEnvironment, + unpacked_source_directory: str, + req_description: str, +) -> bool: + + header_dir = scheme.headers + + with TempDirectory(kind="record") as temp_dir: + try: + record_filename = os.path.join(temp_dir.path, "install-record.txt") + install_args = make_setuptools_install_args( + setup_py_path, + global_options=global_options, + install_options=install_options, + record_filename=record_filename, + root=root, + prefix=prefix, + header_dir=header_dir, + home=home, + use_user_site=use_user_site, + no_user_config=isolated, + pycompile=pycompile, + ) + + runner = runner_with_spinner_message( + f"Running setup.py install for {req_name}" + ) + with build_env: + runner( + cmd=install_args, + cwd=unpacked_source_directory, + ) + + if not os.path.exists(record_filename): + logger.debug("Record file %s not found", record_filename) + # Signal to the caller that we didn't install the new package + return False + + except Exception as e: + # Signal to the caller that we didn't install the new package + raise LegacyInstallFailure(package_details=req_name) from e + + # At this point, we have successfully installed the requirement. + + # We intentionally do not use any encoding to read the file because + # setuptools writes the file using distutils.file_util.write_file, + # which does not specify an encoding. + with open(record_filename) as f: + record_lines = f.read().splitlines() + + write_installed_files_from_setuptools_record(record_lines, root, req_description) + return True diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py new file mode 100644 index 0000000..c799413 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py @@ -0,0 +1,738 @@ +"""Support for installing and building the "wheel" binary package format. +""" + +import collections +import compileall +import contextlib +import csv +import importlib +import logging +import os.path +import re +import shutil +import sys +import warnings +from base64 import urlsafe_b64encode +from email.message import Message +from itertools import chain, filterfalse, starmap +from typing import ( + IO, + TYPE_CHECKING, + Any, + BinaryIO, + Callable, + Dict, + Generator, + Iterable, + Iterator, + List, + NewType, + Optional, + Sequence, + Set, + Tuple, + Union, + cast, +) +from zipfile import ZipFile, ZipInfo + +from pip._vendor.distlib.scripts import ScriptMaker +from pip._vendor.distlib.util import get_export_entry +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import InstallationError +from pip._internal.locations import get_major_minor_version +from pip._internal.metadata import ( + BaseDistribution, + FilesystemWheel, + get_wheel_distribution, +) +from pip._internal.models.direct_url import DIRECT_URL_METADATA_NAME, DirectUrl +from pip._internal.models.scheme import SCHEME_KEYS, Scheme +from pip._internal.utils.filesystem import adjacent_tmp_file, replace +from pip._internal.utils.misc import captured_stdout, ensure_dir, hash_file, partition +from pip._internal.utils.unpacking import ( + current_umask, + is_within_directory, + set_extracted_file_to_default_mode_plus_executable, + zip_item_is_executable, +) +from pip._internal.utils.wheel import parse_wheel + +if TYPE_CHECKING: + from typing import Protocol + + class File(Protocol): + src_record_path: "RecordPath" + dest_path: str + changed: bool + + def save(self) -> None: + pass + + +logger = logging.getLogger(__name__) + +RecordPath = NewType("RecordPath", str) +InstalledCSVRow = Tuple[RecordPath, str, Union[int, str]] + + +def rehash(path: str, blocksize: int = 1 << 20) -> Tuple[str, str]: + """Return (encoded_digest, length) for path using hashlib.sha256()""" + h, length = hash_file(path, blocksize) + digest = "sha256=" + urlsafe_b64encode(h.digest()).decode("latin1").rstrip("=") + return (digest, str(length)) + + +def csv_io_kwargs(mode: str) -> Dict[str, Any]: + """Return keyword arguments to properly open a CSV file + in the given mode. + """ + return {"mode": mode, "newline": "", "encoding": "utf-8"} + + +def fix_script(path: str) -> bool: + """Replace #!python with #!/path/to/python + Return True if file was changed. + """ + # XXX RECORD hashes will need to be updated + assert 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 + + +def wheel_root_is_purelib(metadata: Message) -> bool: + return metadata.get("Root-Is-Purelib", "").lower() == "true" + + +def get_entrypoints(dist: BaseDistribution) -> Tuple[Dict[str, str], Dict[str, str]]: + console_scripts = {} + gui_scripts = {} + for entry_point in dist.iter_entry_points(): + if entry_point.group == "console_scripts": + console_scripts[entry_point.name] = entry_point.value + elif entry_point.group == "gui_scripts": + gui_scripts[entry_point.name] = entry_point.value + return console_scripts, gui_scripts + + +def message_about_scripts_not_on_PATH(scripts: Sequence[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: Dict[str, Set[str]] = collections.defaultdict(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).rstrip(os.sep) + for i in os.environ.get("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: Dict[str, Set[str]] = { + 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, dir_scripts in warn_for.items(): + sorted_scripts: List[str] = sorted(dir_scripts) + if len(sorted_scripts) == 1: + start_text = "script {} is".format(sorted_scripts[0]) + else: + start_text = "scripts {} are".format( + ", ".join(sorted_scripts[:-1]) + " and " + sorted_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")) + + # Add a note if any directory starts with ~ + warn_for_tilde = any( + i[0] == "~" for i in os.environ.get("PATH", "").split(os.pathsep) if i + ) + if warn_for_tilde: + tilde_warning_msg = ( + "NOTE: The current PATH contains path(s) starting with `~`, " + "which may not be expanded by all applications." + ) + msg_lines.append(tilde_warning_msg) + + # Returns the formatted multiline message + return "\n".join(msg_lines) + + +def _normalized_outrows( + outrows: Iterable[InstalledCSVRow], +) -> List[Tuple[str, str, str]]: + """Normalize the given rows of a RECORD file. + + Items in each row are converted into str. Rows are then sorted to make + the value more predictable for tests. + + Each row is a 3-tuple (path, hash, size) and corresponds to a record of + a RECORD file (see PEP 376 and PEP 427 for details). For the rows + passed to this function, the size can be an integer as an int or string, + or the empty string. + """ + # Normally, there should only be one row per path, in which case the + # second and third elements don't come into play when sorting. + # However, in cases in the wild where a path might happen to occur twice, + # we don't want the sort operation to trigger an error (but still want + # determinism). Since the third element can be an int or string, we + # coerce each element to a string to avoid a TypeError in this case. + # For additional background, see-- + # https://github.com/pypa/pip/issues/5868 + return sorted( + (record_path, hash_, str(size)) for record_path, hash_, size in outrows + ) + + +def _record_to_fs_path(record_path: RecordPath, lib_dir: str) -> str: + return os.path.join(lib_dir, record_path) + + +def _fs_to_record_path(path: str, lib_dir: str) -> RecordPath: + # On Windows, do not handle relative paths if they belong to different + # logical disks + if os.path.splitdrive(path)[0].lower() == os.path.splitdrive(lib_dir)[0].lower(): + path = os.path.relpath(path, lib_dir) + + path = path.replace(os.path.sep, "/") + return cast("RecordPath", path) + + +def get_csv_rows_for_installed( + old_csv_rows: List[List[str]], + installed: Dict[RecordPath, RecordPath], + changed: Set[RecordPath], + generated: List[str], + lib_dir: str, +) -> List[InstalledCSVRow]: + """ + :param installed: A map from archive RECORD path to installation RECORD + path. + """ + installed_rows: List[InstalledCSVRow] = [] + for row in old_csv_rows: + if len(row) > 3: + logger.warning("RECORD line has more than three elements: %s", row) + old_record_path = cast("RecordPath", row[0]) + new_record_path = installed.pop(old_record_path, old_record_path) + if new_record_path in changed: + digest, length = rehash(_record_to_fs_path(new_record_path, lib_dir)) + else: + digest = row[1] if len(row) > 1 else "" + length = row[2] if len(row) > 2 else "" + installed_rows.append((new_record_path, digest, length)) + for f in generated: + path = _fs_to_record_path(f, lib_dir) + digest, length = rehash(f) + installed_rows.append((path, digest, length)) + for installed_record_path in installed.values(): + installed_rows.append((installed_record_path, "", "")) + return installed_rows + + +def get_console_script_specs(console: Dict[str, str]) -> List[str]: + """ + Given the mapping from entrypoint name to callable, return the relevant + console script specs. + """ + # Don't mutate caller's version + console = console.copy() + + scripts_to_generate = [] + + # 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: + scripts_to_generate.append("pip = " + pip_script) + + if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": + scripts_to_generate.append( + "pip{} = {}".format(sys.version_info[0], pip_script) + ) + + scripts_to_generate.append(f"pip{get_major_minor_version()} = {pip_script}") + # 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: + scripts_to_generate.append("easy_install = " + easy_install_script) + + scripts_to_generate.append( + "easy_install-{} = {}".format( + get_major_minor_version(), easy_install_script + ) + ) + # 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 entry points specified in the wheel + scripts_to_generate.extend(starmap("{} = {}".format, console.items())) + + return scripts_to_generate + + +class ZipBackedFile: + def __init__( + self, src_record_path: RecordPath, dest_path: str, zip_file: ZipFile + ) -> None: + self.src_record_path = src_record_path + self.dest_path = dest_path + self._zip_file = zip_file + self.changed = False + + def _getinfo(self) -> ZipInfo: + return self._zip_file.getinfo(self.src_record_path) + + def save(self) -> None: + # directory creation is lazy and after file filtering + # to ensure we don't install empty dirs; empty dirs can't be + # uninstalled. + parent_dir = os.path.dirname(self.dest_path) + ensure_dir(parent_dir) + + # When we open the output file below, any existing file is truncated + # before we start writing the new contents. This is fine in most + # cases, but can cause a segfault if pip has loaded a shared + # object (e.g. from pyopenssl through its vendored urllib3) + # Since the shared object is mmap'd an attempt to call a + # symbol in it will then cause a segfault. Unlinking the file + # allows writing of new contents while allowing the process to + # continue to use the old copy. + if os.path.exists(self.dest_path): + os.unlink(self.dest_path) + + zipinfo = self._getinfo() + + with self._zip_file.open(zipinfo) as f: + with open(self.dest_path, "wb") as dest: + shutil.copyfileobj(f, dest) + + if zip_item_is_executable(zipinfo): + set_extracted_file_to_default_mode_plus_executable(self.dest_path) + + +class ScriptFile: + def __init__(self, file: "File") -> None: + self._file = file + self.src_record_path = self._file.src_record_path + self.dest_path = self._file.dest_path + self.changed = False + + def save(self) -> None: + self._file.save() + self.changed = fix_script(self.dest_path) + + +class MissingCallableSuffix(InstallationError): + def __init__(self, entry_point: str) -> None: + super().__init__( + "Invalid script entry point: {} - A callable " + "suffix is required. Cf https://packaging.python.org/" + "specifications/entry-points/#use-for-scripts for more " + "information.".format(entry_point) + ) + + +def _raise_for_invalid_entrypoint(specification: str) -> None: + entry = get_export_entry(specification) + if entry is not None and entry.suffix is None: + raise MissingCallableSuffix(str(entry)) + + +class PipScriptMaker(ScriptMaker): + def make( + self, specification: str, options: Optional[Dict[str, Any]] = None + ) -> List[str]: + _raise_for_invalid_entrypoint(specification) + return super().make(specification, options) + + +def _install_wheel( + name: str, + wheel_zip: ZipFile, + wheel_path: str, + scheme: Scheme, + pycompile: bool = True, + warn_script_location: bool = True, + direct_url: Optional[DirectUrl] = None, + requested: bool = False, +) -> None: + """Install a wheel. + + :param name: Name of the project to install + :param wheel_zip: open ZipFile for wheel being installed + :param scheme: Distutils scheme dictating the install directories + :param req_description: String used in place of the requirement, for + logging + :param pycompile: Whether to byte-compile installed Python files + :param warn_script_location: Whether to check that scripts are installed + into a directory on PATH + :raises UnsupportedWheel: + * when the directory holds an unpacked wheel with incompatible + Wheel-Version + * when the .dist-info dir does not match the wheel + """ + info_dir, metadata = parse_wheel(wheel_zip, name) + + if wheel_root_is_purelib(metadata): + lib_dir = scheme.purelib + else: + lib_dir = scheme.platlib + + # 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: Dict[RecordPath, RecordPath] = {} + changed: Set[RecordPath] = set() + generated: List[str] = [] + + def record_installed( + srcfile: RecordPath, destfile: str, modified: bool = False + ) -> None: + """Map archive RECORD paths to installation RECORD paths.""" + newpath = _fs_to_record_path(destfile, lib_dir) + installed[srcfile] = newpath + if modified: + changed.add(newpath) + + def is_dir_path(path: RecordPath) -> bool: + return path.endswith("/") + + def assert_no_path_traversal(dest_dir_path: str, target_path: str) -> None: + if not is_within_directory(dest_dir_path, target_path): + message = ( + "The wheel {!r} has a file {!r} trying to install" + " outside the target directory {!r}" + ) + raise InstallationError( + message.format(wheel_path, target_path, dest_dir_path) + ) + + def root_scheme_file_maker( + zip_file: ZipFile, dest: str + ) -> Callable[[RecordPath], "File"]: + def make_root_scheme_file(record_path: RecordPath) -> "File": + normed_path = os.path.normpath(record_path) + dest_path = os.path.join(dest, normed_path) + assert_no_path_traversal(dest, dest_path) + return ZipBackedFile(record_path, dest_path, zip_file) + + return make_root_scheme_file + + def data_scheme_file_maker( + zip_file: ZipFile, scheme: Scheme + ) -> Callable[[RecordPath], "File"]: + scheme_paths = {key: getattr(scheme, key) for key in SCHEME_KEYS} + + def make_data_scheme_file(record_path: RecordPath) -> "File": + normed_path = os.path.normpath(record_path) + try: + _, scheme_key, dest_subpath = normed_path.split(os.path.sep, 2) + except ValueError: + message = ( + "Unexpected file in {}: {!r}. .data directory contents" + " should be named like: '/'." + ).format(wheel_path, record_path) + raise InstallationError(message) + + try: + scheme_path = scheme_paths[scheme_key] + except KeyError: + valid_scheme_keys = ", ".join(sorted(scheme_paths)) + message = ( + "Unknown scheme key used in {}: {} (for file {!r}). .data" + " directory contents should be in subdirectories named" + " with a valid scheme key ({})" + ).format(wheel_path, scheme_key, record_path, valid_scheme_keys) + raise InstallationError(message) + + dest_path = os.path.join(scheme_path, dest_subpath) + assert_no_path_traversal(scheme_path, dest_path) + return ZipBackedFile(record_path, dest_path, zip_file) + + return make_data_scheme_file + + def is_data_scheme_path(path: RecordPath) -> bool: + return path.split("/", 1)[0].endswith(".data") + + paths = cast(List[RecordPath], wheel_zip.namelist()) + file_paths = filterfalse(is_dir_path, paths) + root_scheme_paths, data_scheme_paths = partition(is_data_scheme_path, file_paths) + + make_root_scheme_file = root_scheme_file_maker(wheel_zip, lib_dir) + files: Iterator[File] = map(make_root_scheme_file, root_scheme_paths) + + def is_script_scheme_path(path: RecordPath) -> bool: + parts = path.split("/", 2) + return len(parts) > 2 and parts[0].endswith(".data") and parts[1] == "scripts" + + other_scheme_paths, script_scheme_paths = partition( + is_script_scheme_path, data_scheme_paths + ) + + make_data_scheme_file = data_scheme_file_maker(wheel_zip, scheme) + other_scheme_files = map(make_data_scheme_file, other_scheme_paths) + files = chain(files, other_scheme_files) + + # Get the defined entry points + distribution = get_wheel_distribution( + FilesystemWheel(wheel_path), + canonicalize_name(name), + ) + console, gui = get_entrypoints(distribution) + + def is_entrypoint_wrapper(file: "File") -> bool: + # EP, EP.exe and EP-script.py are scripts generated for + # entry point EP by setuptools + path = file.dest_path + name = os.path.basename(path) + 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 + + script_scheme_files: Iterator[File] = map( + make_data_scheme_file, script_scheme_paths + ) + script_scheme_files = filterfalse(is_entrypoint_wrapper, script_scheme_files) + script_scheme_files = map(ScriptFile, script_scheme_files) + files = chain(files, script_scheme_files) + + for file in files: + file.save() + record_installed(file.src_record_path, file.dest_path, file.changed) + + def pyc_source_file_paths() -> Generator[str, None, None]: + # We de-duplicate installation paths, since there can be overlap (e.g. + # file in .data maps to same location as file in wheel root). + # Sorting installation paths makes it easier to reproduce and debug + # issues related to permissions on existing files. + for installed_path in sorted(set(installed.values())): + full_installed_path = os.path.join(lib_dir, installed_path) + if not os.path.isfile(full_installed_path): + continue + if not full_installed_path.endswith(".py"): + continue + yield full_installed_path + + def pyc_output_path(path: str) -> str: + """Return the path the pyc file would have been written to.""" + return importlib.util.cache_from_source(path) + + # Compile all of the pyc files for the installed files + if pycompile: + with captured_stdout() as stdout: + with warnings.catch_warnings(): + warnings.filterwarnings("ignore") + for path in pyc_source_file_paths(): + success = compileall.compile_file(path, force=True, quiet=True) + if success: + pyc_path = pyc_output_path(path) + assert os.path.exists(pyc_path) + pyc_record_path = cast( + "RecordPath", pyc_path.replace(os.path.sep, "/") + ) + record_installed(pyc_record_path, pyc_path) + logger.debug(stdout.getvalue()) + + maker = PipScriptMaker(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 + + # Generate the console and GUI entry points specified in the wheel + scripts_to_generate = get_console_script_specs(console) + + gui_scripts_to_generate = list(starmap("{} = {}".format, gui.items())) + + generated_console_scripts = maker.make_multiple(scripts_to_generate) + generated.extend(generated_console_scripts) + + generated.extend(maker.make_multiple(gui_scripts_to_generate, {"gui": True})) + + if warn_script_location: + msg = message_about_scripts_not_on_PATH(generated_console_scripts) + if msg is not None: + logger.warning(msg) + + generated_file_mode = 0o666 & ~current_umask() + + @contextlib.contextmanager + def _generate_file(path: str, **kwargs: Any) -> Generator[BinaryIO, None, None]: + with adjacent_tmp_file(path, **kwargs) as f: + yield f + os.chmod(f.name, generated_file_mode) + replace(f.name, path) + + dest_info_dir = os.path.join(lib_dir, info_dir) + + # Record pip as the installer + installer_path = os.path.join(dest_info_dir, "INSTALLER") + with _generate_file(installer_path) as installer_file: + installer_file.write(b"pip\n") + generated.append(installer_path) + + # Record the PEP 610 direct URL reference + if direct_url is not None: + direct_url_path = os.path.join(dest_info_dir, DIRECT_URL_METADATA_NAME) + with _generate_file(direct_url_path) as direct_url_file: + direct_url_file.write(direct_url.to_json().encode("utf-8")) + generated.append(direct_url_path) + + # Record the REQUESTED file + if requested: + requested_path = os.path.join(dest_info_dir, "REQUESTED") + with open(requested_path, "wb"): + pass + generated.append(requested_path) + + record_text = distribution.read_text("RECORD") + record_rows = list(csv.reader(record_text.splitlines())) + + rows = get_csv_rows_for_installed( + record_rows, + installed=installed, + changed=changed, + generated=generated, + lib_dir=lib_dir, + ) + + # Record details of all files installed + record_path = os.path.join(dest_info_dir, "RECORD") + + with _generate_file(record_path, **csv_io_kwargs("w")) as record_file: + # Explicitly cast to typing.IO[str] as a workaround for the mypy error: + # "writer" has incompatible type "BinaryIO"; expected "_Writer" + writer = csv.writer(cast("IO[str]", record_file)) + writer.writerows(_normalized_outrows(rows)) + + +@contextlib.contextmanager +def req_error_context(req_description: str) -> Generator[None, None, None]: + try: + yield + except InstallationError as e: + message = "For req: {}. {}".format(req_description, e.args[0]) + raise InstallationError(message) from e + + +def install_wheel( + name: str, + wheel_path: str, + scheme: Scheme, + req_description: str, + pycompile: bool = True, + warn_script_location: bool = True, + direct_url: Optional[DirectUrl] = None, + requested: bool = False, +) -> None: + with ZipFile(wheel_path, allowZip64=True) as z: + with req_error_context(req_description): + _install_wheel( + name=name, + wheel_zip=z, + wheel_path=wheel_path, + scheme=scheme, + pycompile=pycompile, + warn_script_location=warn_script_location, + direct_url=direct_url, + requested=requested, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/operations/prepare.py b/venv/lib/python3.11/site-packages/pip/_internal/operations/prepare.py new file mode 100644 index 0000000..4bf414c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/operations/prepare.py @@ -0,0 +1,667 @@ +"""Prepares a distribution for installation +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import logging +import mimetypes +import os +import shutil +from typing import Dict, Iterable, List, Optional + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.distributions import make_distribution_for_install_requirement +from pip._internal.distributions.installed import InstalledDistribution +from pip._internal.exceptions import ( + DirectoryUrlHashUnsupported, + HashMismatch, + HashUnpinned, + InstallationError, + MetadataInconsistent, + NetworkConnectionError, + PreviousBuildDirError, + VcsHashUnsupported, +) +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution, get_metadata_distribution +from pip._internal.models.direct_url import ArchiveInfo +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.network.download import BatchDownloader, Downloader +from pip._internal.network.lazy_wheel import ( + HTTPRangeRequestUnsupported, + dist_from_wheel_url, +) +from pip._internal.network.session import PipSession +from pip._internal.operations.build.build_tracker import BuildTracker +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.direct_url_helpers import ( + direct_url_for_editable, + direct_url_from_link, +) +from pip._internal.utils.hashes import Hashes, MissingHashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + display_path, + hash_file, + hide_url, + is_installable_dir, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.unpacking import unpack_file +from pip._internal.vcs import vcs + +logger = logging.getLogger(__name__) + + +def _get_prepared_distribution( + req: InstallRequirement, + build_tracker: BuildTracker, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, +) -> BaseDistribution: + """Prepare a distribution for installation.""" + abstract_dist = make_distribution_for_install_requirement(req) + with build_tracker.track(req): + abstract_dist.prepare_distribution_metadata( + finder, build_isolation, check_build_deps + ) + return abstract_dist.get_metadata_distribution() + + +def unpack_vcs_link(link: Link, location: str, verbosity: int) -> None: + vcs_backend = vcs.get_backend_for_scheme(link.scheme) + assert vcs_backend is not None + vcs_backend.unpack(location, url=hide_url(link.url), verbosity=verbosity) + + +class File: + def __init__(self, path: str, content_type: Optional[str]) -> None: + self.path = path + if content_type is None: + self.content_type = mimetypes.guess_type(path)[0] + else: + self.content_type = content_type + + +def get_http_url( + link: Link, + download: Downloader, + download_dir: Optional[str] = None, + hashes: Optional[Hashes] = None, +) -> File: + temp_dir = TempDirectory(kind="unpack", globally_managed=True) + # 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 = None + else: + # let's download to a tmp dir + from_path, content_type = download(link, temp_dir.path) + if hashes: + hashes.check_against_path(from_path) + + return File(from_path, content_type) + + +def get_file_url( + link: Link, download_dir: Optional[str] = None, hashes: Optional[Hashes] = None +) -> File: + """Get file and optionally check its hash.""" + # 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.file_path + + # 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(from_path) + return File(from_path, None) + + +def unpack_url( + link: Link, + location: str, + download: Downloader, + verbosity: int, + download_dir: Optional[str] = None, + hashes: Optional[Hashes] = None, +) -> Optional[File]: + """Unpack link into location, downloading if required. + + :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 link.is_vcs: + unpack_vcs_link(link, location, verbosity=verbosity) + return None + + assert not link.is_existing_dir() + + # file urls + if link.is_file: + file = get_file_url(link, download_dir, hashes=hashes) + + # http urls + else: + file = get_http_url( + link, + download, + download_dir, + hashes=hashes, + ) + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies, except wheels + if not link.is_wheel: + unpack_file(file.path, location, file.content_type) + + return file + + +def _check_download_dir( + link: Link, download_dir: str, hashes: Optional[Hashes] +) -> Optional[str]: + """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 not os.path.exists(download_path): + return None + + # 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 + + +class RequirementPreparer: + """Prepares a Requirement""" + + def __init__( + self, + build_dir: str, + download_dir: Optional[str], + src_dir: str, + build_isolation: bool, + check_build_deps: bool, + build_tracker: BuildTracker, + session: PipSession, + progress_bar: str, + finder: PackageFinder, + require_hashes: bool, + use_user_site: bool, + lazy_wheel: bool, + verbosity: int, + ) -> None: + super().__init__() + + self.src_dir = src_dir + self.build_dir = build_dir + self.build_tracker = build_tracker + self._session = session + self._download = Downloader(session, progress_bar) + self._batch_download = BatchDownloader(session, progress_bar) + self.finder = finder + + # 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 + + # Is build isolation allowed? + self.build_isolation = build_isolation + + # Should check build dependencies? + self.check_build_deps = check_build_deps + + # Should hash-checking be required? + self.require_hashes = require_hashes + + # Should install in user site-packages? + self.use_user_site = use_user_site + + # Should wheels be downloaded lazily? + self.use_lazy_wheel = lazy_wheel + + # How verbose should underlying tooling be? + self.verbosity = verbosity + + # Memoized downloaded files, as mapping of url: path. + self._downloaded: Dict[str, str] = {} + + # Previous "header" printed for a link-based InstallRequirement + self._previous_requirement_header = ("", "") + + def _log_preparing_link(self, req: InstallRequirement) -> None: + """Provide context for the requirement being prepared.""" + if req.link.is_file and not req.original_link_is_in_wheel_cache: + message = "Processing %s" + information = str(display_path(req.link.file_path)) + else: + message = "Collecting %s" + information = str(req.req or req) + + if (message, information) != self._previous_requirement_header: + self._previous_requirement_header = (message, information) + logger.info(message, information) + + if req.original_link_is_in_wheel_cache: + with indent_log(): + logger.info("Using cached %s", req.link.filename) + + def _ensure_link_req_src_dir( + self, req: InstallRequirement, parallel_builds: bool + ) -> None: + """Ensure source_dir of a linked InstallRequirement.""" + # Since source_dir is only set for editable requirements. + if req.link.is_wheel: + # We don't need to unpack wheels, so no need for a source + # directory. + return + assert req.source_dir is None + if req.link.is_existing_dir(): + # build local directories in-tree + req.source_dir = req.link.file_path + return + + # We always delete unpacked sdists after pip runs. + req.ensure_has_source_dir( + self.build_dir, + autodelete=True, + parallel_builds=parallel_builds, + ) + + # 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` + # TODO: this check is now probably dead code + if is_installable_dir(req.source_dir): + raise PreviousBuildDirError( + "pip can't proceed with requirements '{}' due to a" + "pre-existing build directory ({}). 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.".format(req, req.source_dir) + ) + + def _get_linked_req_hashes(self, req: InstallRequirement) -> Hashes: + # By the time this is called, the requirement's link should have + # been checked so we can tell what kind of requirements req is + # and raise some more informative errors than otherwise. + # (For example, we can raise VcsHashUnsupported for a VCS URL + # rather than HashMissing.) + if not self.require_hashes: + return req.hashes(trust_internet=True) + + # 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 req.link.is_vcs: + raise VcsHashUnsupported() + if req.link.is_existing_dir(): + raise DirectoryUrlHashUnsupported() + + # 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. + if req.original_link is None and not req.is_pinned: + raise HashUnpinned() + + # If known-good hashes are missing for this requirement, + # 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. + return req.hashes(trust_internet=False) or MissingHashes() + + def _fetch_metadata_only( + self, + req: InstallRequirement, + ) -> Optional[BaseDistribution]: + if self.require_hashes: + logger.debug( + "Metadata-only fetching is not used as hash checking is required", + ) + return None + # Try PEP 658 metadata first, then fall back to lazy wheel if unavailable. + return self._fetch_metadata_using_link_data_attr( + req + ) or self._fetch_metadata_using_lazy_wheel(req.link) + + def _fetch_metadata_using_link_data_attr( + self, + req: InstallRequirement, + ) -> Optional[BaseDistribution]: + """Fetch metadata from the data-dist-info-metadata attribute, if possible.""" + # (1) Get the link to the metadata file, if provided by the backend. + metadata_link = req.link.metadata_link() + if metadata_link is None: + return None + assert req.req is not None + logger.info( + "Obtaining dependency information for %s from %s", + req.req, + metadata_link, + ) + # (2) Download the contents of the METADATA file, separate from the dist itself. + metadata_file = get_http_url( + metadata_link, + self._download, + hashes=metadata_link.as_hashes(), + ) + with open(metadata_file.path, "rb") as f: + metadata_contents = f.read() + # (3) Generate a dist just from those file contents. + metadata_dist = get_metadata_distribution( + metadata_contents, + req.link.filename, + req.req.name, + ) + # (4) Ensure the Name: field from the METADATA file matches the name from the + # install requirement. + # + # NB: raw_name will fall back to the name from the install requirement if + # the Name: field is not present, but it's noted in the raw_name docstring + # that that should NEVER happen anyway. + if metadata_dist.raw_name != req.req.name: + raise MetadataInconsistent( + req, "Name", req.req.name, metadata_dist.raw_name + ) + return metadata_dist + + def _fetch_metadata_using_lazy_wheel( + self, + link: Link, + ) -> Optional[BaseDistribution]: + """Fetch metadata using lazy wheel, if possible.""" + # --use-feature=fast-deps must be provided. + if not self.use_lazy_wheel: + return None + if link.is_file or not link.is_wheel: + logger.debug( + "Lazy wheel is not used as %r does not point to a remote wheel", + link, + ) + return None + + wheel = Wheel(link.filename) + name = canonicalize_name(wheel.name) + logger.info( + "Obtaining dependency information from %s %s", + name, + wheel.version, + ) + url = link.url.split("#", 1)[0] + try: + return dist_from_wheel_url(name, url, self._session) + except HTTPRangeRequestUnsupported: + logger.debug("%s does not support range requests", url) + return None + + def _complete_partial_requirements( + self, + partially_downloaded_reqs: Iterable[InstallRequirement], + parallel_builds: bool = False, + ) -> None: + """Download any requirements which were only fetched by metadata.""" + # Download to a temporary directory. These will be copied over as + # needed for downstream 'download', 'wheel', and 'install' commands. + temp_dir = TempDirectory(kind="unpack", globally_managed=True).path + + # Map each link to the requirement that owns it. This allows us to set + # `req.local_file_path` on the appropriate requirement after passing + # all the links at once into BatchDownloader. + links_to_fully_download: Dict[Link, InstallRequirement] = {} + for req in partially_downloaded_reqs: + assert req.link + links_to_fully_download[req.link] = req + + batch_download = self._batch_download( + links_to_fully_download.keys(), + temp_dir, + ) + for link, (filepath, _) in batch_download: + logger.debug("Downloading link %s to %s", link, filepath) + req = links_to_fully_download[link] + req.local_file_path = filepath + + # This step is necessary to ensure all lazy wheels are processed + # successfully by the 'download', 'wheel', and 'install' commands. + for req in partially_downloaded_reqs: + self._prepare_linked_requirement(req, parallel_builds) + + def prepare_linked_requirement( + self, req: InstallRequirement, parallel_builds: bool = False + ) -> BaseDistribution: + """Prepare a requirement to be obtained from req.link.""" + assert req.link + self._log_preparing_link(req) + with indent_log(): + # Check if the relevant file is already available + # in the download directory + file_path = None + if self.download_dir is not None and req.link.is_wheel: + hashes = self._get_linked_req_hashes(req) + file_path = _check_download_dir(req.link, self.download_dir, hashes) + + if file_path is not None: + # The file is already available, so mark it as downloaded + self._downloaded[req.link.url] = file_path + else: + # The file is not available, attempt to fetch only metadata + metadata_dist = self._fetch_metadata_only(req) + if metadata_dist is not None: + req.needs_more_preparation = True + return metadata_dist + + # None of the optimizations worked, fully prepare the requirement + return self._prepare_linked_requirement(req, parallel_builds) + + def prepare_linked_requirements_more( + self, reqs: Iterable[InstallRequirement], parallel_builds: bool = False + ) -> None: + """Prepare linked requirements more, if needed.""" + reqs = [req for req in reqs if req.needs_more_preparation] + for req in reqs: + # Determine if any of these requirements were already downloaded. + if self.download_dir is not None and req.link.is_wheel: + hashes = self._get_linked_req_hashes(req) + file_path = _check_download_dir(req.link, self.download_dir, hashes) + if file_path is not None: + self._downloaded[req.link.url] = file_path + req.needs_more_preparation = False + + # Prepare requirements we found were already downloaded for some + # reason. The other downloads will be completed separately. + partially_downloaded_reqs: List[InstallRequirement] = [] + for req in reqs: + if req.needs_more_preparation: + partially_downloaded_reqs.append(req) + else: + self._prepare_linked_requirement(req, parallel_builds) + + # TODO: separate this part out from RequirementPreparer when the v1 + # resolver can be removed! + self._complete_partial_requirements( + partially_downloaded_reqs, + parallel_builds=parallel_builds, + ) + + def _prepare_linked_requirement( + self, req: InstallRequirement, parallel_builds: bool + ) -> BaseDistribution: + assert req.link + link = req.link + + self._ensure_link_req_src_dir(req, parallel_builds) + hashes = self._get_linked_req_hashes(req) + + if link.is_existing_dir(): + local_file = None + elif link.url not in self._downloaded: + try: + local_file = unpack_url( + link, + req.source_dir, + self._download, + self.verbosity, + self.download_dir, + hashes, + ) + except NetworkConnectionError as exc: + raise InstallationError( + "Could not install requirement {} because of HTTP " + "error {} for URL {}".format(req, exc, link) + ) + else: + file_path = self._downloaded[link.url] + if hashes: + hashes.check_against_path(file_path) + local_file = File(file_path, content_type=None) + + # If download_info is set, we got it from the wheel cache. + if req.download_info is None: + # Editables don't go through this function (see + # prepare_editable_requirement). + assert not req.editable + req.download_info = direct_url_from_link(link, req.source_dir) + # Make sure we have a hash in download_info. If we got it as part of the + # URL, it will have been verified and we can rely on it. Otherwise we + # compute it from the downloaded file. + if ( + isinstance(req.download_info.info, ArchiveInfo) + and not req.download_info.info.hash + and local_file + ): + hash = hash_file(local_file.path)[0].hexdigest() + req.download_info.info.hash = f"sha256={hash}" + + # For use in later processing, + # preserve the file path on the requirement. + if local_file: + req.local_file_path = local_file.path + + dist = _get_prepared_distribution( + req, + self.build_tracker, + self.finder, + self.build_isolation, + self.check_build_deps, + ) + return dist + + def save_linked_requirement(self, req: InstallRequirement) -> None: + assert self.download_dir is not None + assert req.link is not None + link = req.link + if link.is_vcs or (link.is_existing_dir() and req.editable): + # Make a .zip of the source_dir we already created. + req.archive(self.download_dir) + return + + if link.is_existing_dir(): + logger.debug( + "Not copying link to destination directory " + "since it is a directory: %s", + link, + ) + return + if req.local_file_path is None: + # No distribution was downloaded for this requirement. + return + + download_location = os.path.join(self.download_dir, link.filename) + if not os.path.exists(download_location): + shutil.copy(req.local_file_path, download_location) + download_path = display_path(download_location) + logger.info("Saved %s", download_path) + + def prepare_editable_requirement( + self, + req: InstallRequirement, + ) -> BaseDistribution: + """Prepare an editable requirement.""" + assert req.editable, "cannot prepare a non-editable req as editable" + + logger.info("Obtaining %s", req) + + with indent_log(): + if self.require_hashes: + raise InstallationError( + "The editable requirement {} cannot be installed when " + "requiring hashes, because there is no single file to " + "hash.".format(req) + ) + req.ensure_has_source_dir(self.src_dir) + req.update_editable() + assert req.source_dir + req.download_info = direct_url_for_editable(req.unpacked_source_directory) + + dist = _get_prepared_distribution( + req, + self.build_tracker, + self.finder, + self.build_isolation, + self.check_build_deps, + ) + + req.check_if_exists(self.use_user_site) + + return dist + + def prepare_installed_requirement( + self, + req: InstallRequirement, + skip_reason: str, + ) -> BaseDistribution: + """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 {}".format(req.satisfied_by) + ) + logger.info( + "Requirement %s: %s (%s)", skip_reason, req, req.satisfied_by.version + ) + with indent_log(): + if self.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." + ) + return InstalledDistribution(req).get_metadata_distribution() diff --git a/venv/lib/python3.11/site-packages/pip/_internal/pyproject.py b/venv/lib/python3.11/site-packages/pip/_internal/pyproject.py new file mode 100644 index 0000000..1de9f0f --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/pyproject.py @@ -0,0 +1,174 @@ +import importlib.util +import os +from collections import namedtuple +from typing import Any, List, Optional + +from pip._vendor import tomli +from pip._vendor.packaging.requirements import InvalidRequirement, Requirement + +from pip._internal.exceptions import ( + InstallationError, + InvalidPyProjectBuildRequires, + MissingPyProjectBuildRequires, +) + + +def _is_list_of_str(obj: Any) -> bool: + return isinstance(obj, list) and all(isinstance(item, str) for item in obj) + + +def make_pyproject_path(unpacked_source_directory: str) -> str: + return os.path.join(unpacked_source_directory, "pyproject.toml") + + +BuildSystemDetails = namedtuple( + "BuildSystemDetails", ["requires", "backend", "check", "backend_path"] +) + + +def load_pyproject_toml( + use_pep517: Optional[bool], pyproject_toml: str, setup_py: str, req_name: str +) -> Optional[BuildSystemDetails]: + """Load the pyproject.toml file. + + Parameters: + use_pep517 - Has the user requested PEP 517 processing? None + means the user hasn't explicitly specified. + pyproject_toml - Location of the project's pyproject.toml file + setup_py - Location of the project's setup.py file + req_name - The name of the requirement we're processing (for + error reporting) + + Returns: + None if we should use the legacy code path, otherwise a tuple + ( + requirements from pyproject.toml, + name of PEP 517 backend, + requirements we should check are installed after setting + up the build environment + directory paths to import the backend from (backend-path), + relative to the project root. + ) + """ + has_pyproject = os.path.isfile(pyproject_toml) + has_setup = os.path.isfile(setup_py) + + if not has_pyproject and not has_setup: + raise InstallationError( + f"{req_name} does not appear to be a Python project: " + f"neither 'setup.py' nor 'pyproject.toml' found." + ) + + if has_pyproject: + with open(pyproject_toml, encoding="utf-8") as f: + pp_toml = tomli.loads(f.read()) + build_system = pp_toml.get("build-system") + else: + build_system = None + + # The following cases must use PEP 517 + # We check for use_pep517 being non-None and falsey because that means + # the user explicitly requested --no-use-pep517. The value 0 as + # opposed to False can occur when the value is provided via an + # environment variable or config file option (due to the quirk of + # strtobool() returning an integer in pip's configuration code). + if has_pyproject and not has_setup: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project does not have a setup.py" + ) + use_pep517 = True + elif build_system and "build-backend" in build_system: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project specifies a build backend of {} " + "in pyproject.toml".format(build_system["build-backend"]) + ) + use_pep517 = True + + # If we haven't worked out whether to use PEP 517 yet, + # and the user hasn't explicitly stated a preference, + # we do so if the project has a pyproject.toml file + # or if we cannot import setuptools. + + # We fallback to PEP 517 when without setuptools, + # so setuptools can be installed as a default build backend. + # For more info see: + # https://discuss.python.org/t/pip-without-setuptools-could-the-experience-be-improved/11810/9 + elif use_pep517 is None: + use_pep517 = has_pyproject or not importlib.util.find_spec("setuptools") + + # At this point, we know whether we're going to use PEP 517. + assert use_pep517 is not None + + # If we're using the legacy code path, there is nothing further + # for us to do here. + if not use_pep517: + return None + + if build_system is None: + # Either the user has a pyproject.toml with no build-system + # section, or the user has no pyproject.toml, but has opted in + # explicitly via --use-pep517. + # In the absence of any explicit backend specification, we + # assume the setuptools backend that most closely emulates the + # traditional direct setup.py execution, and require wheel and + # a version of setuptools that supports that backend. + + build_system = { + "requires": ["setuptools>=40.8.0", "wheel"], + "build-backend": "setuptools.build_meta:__legacy__", + } + + # If we're using PEP 517, we have build system information (either + # from pyproject.toml, or defaulted by the code above). + # Note that at this point, we do not know if the user has actually + # specified a backend, though. + assert build_system is not None + + # Ensure that the build-system section in pyproject.toml conforms + # to PEP 518. + + # Specifying the build-system table but not the requires key is invalid + if "requires" not in build_system: + raise MissingPyProjectBuildRequires(package=req_name) + + # Error out if requires is not a list of strings + requires = build_system["requires"] + if not _is_list_of_str(requires): + raise InvalidPyProjectBuildRequires( + package=req_name, + reason="It is not a list of strings.", + ) + + # Each requirement must be valid as per PEP 508 + for requirement in requires: + try: + Requirement(requirement) + except InvalidRequirement as error: + raise InvalidPyProjectBuildRequires( + package=req_name, + reason=f"It contains an invalid requirement: {requirement!r}", + ) from error + + backend = build_system.get("build-backend") + backend_path = build_system.get("backend-path", []) + check: List[str] = [] + if backend is None: + # If the user didn't specify a backend, we assume they want to use + # the setuptools backend. But we can't be sure they have included + # a version of setuptools which supplies the backend. So we + # make a note to check that this requirement is present once + # we have set up the environment. + # This is quite a lot of work to check for a very specific case. But + # the problem is, that case is potentially quite common - projects that + # adopted PEP 518 early for the ability to specify requirements to + # execute setup.py, but never considered needing to mention the build + # tools themselves. The original PEP 518 code had a similar check (but + # implemented in a different way). + backend = "setuptools.build_meta:__legacy__" + check = ["setuptools>=40.8.0"] + + return BuildSystemDetails(requires, backend, check, backend_path) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/req/__init__.py new file mode 100644 index 0000000..8d56359 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/req/__init__.py @@ -0,0 +1,94 @@ +import collections +import logging +from typing import Generator, List, Optional, Sequence, Tuple + +from pip._internal.utils.logging import indent_log + +from .req_file import parse_requirements +from .req_install import InstallRequirement +from .req_set import RequirementSet + +__all__ = [ + "RequirementSet", + "InstallRequirement", + "parse_requirements", + "install_given_reqs", +] + +logger = logging.getLogger(__name__) + + +class InstallationResult: + def __init__(self, name: str) -> None: + self.name = name + + def __repr__(self) -> str: + return f"InstallationResult(name={self.name!r})" + + +def _validate_requirements( + requirements: List[InstallRequirement], +) -> Generator[Tuple[str, InstallRequirement], None, None]: + for req in requirements: + assert req.name, f"invalid to-be-installed requirement: {req}" + yield req.name, req + + +def install_given_reqs( + requirements: List[InstallRequirement], + install_options: List[str], + global_options: Sequence[str], + root: Optional[str], + home: Optional[str], + prefix: Optional[str], + warn_script_location: bool, + use_user_site: bool, + pycompile: bool, +) -> List[InstallationResult]: + """ + Install everything in the given list. + + (to be called after having downloaded and unpacked the packages) + """ + to_install = collections.OrderedDict(_validate_requirements(requirements)) + + if to_install: + logger.info( + "Installing collected packages: %s", + ", ".join(to_install.keys()), + ) + + installed = [] + + with indent_log(): + for req_name, requirement in to_install.items(): + if requirement.should_reinstall: + logger.info("Attempting uninstall: %s", req_name) + with indent_log(): + uninstalled_pathset = requirement.uninstall(auto_confirm=True) + else: + uninstalled_pathset = None + + try: + requirement.install( + install_options, + global_options, + root=root, + home=home, + prefix=prefix, + warn_script_location=warn_script_location, + use_user_site=use_user_site, + pycompile=pycompile, + ) + except Exception: + # if install did not succeed, rollback previous uninstall + if uninstalled_pathset and not requirement.install_succeeded: + uninstalled_pathset.rollback() + raise + else: + if uninstalled_pathset and requirement.install_succeeded: + uninstalled_pathset.commit() + + installed.append(InstallationResult(req_name)) + + return installed diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0671c880b4550051b43397bddb280f42ca675706 GIT binary patch literal 4454 zcmb6cTWlN0aqoCX^7tlolpm68IavI6Dez`0MG_Ua` zPu5csvO-DBiY0H>Tk>Un9Ljh!e@V(pfD5Xq1xmqe(8ax4s1(kIUEHTdO3`eTBTGc} z|B=hactW|AcxM4LaR+Ap1X`4d z3w$4!Q@MhtM;8P&{Em ztPaB(_Nv?>N$>d%cd(EaZRsVdQMGSOMKhMZLwf-$QO+@wDhyo&rR$5>oP{M); z@PgQhVr!VPRJ=lURBGmd-z`ELdpHfqEkX(2k1Vfp)T8pM2kb1s9tD-Bo&v9mfQzaJ z_Ur8~D2JQ7K+TF~*@B)cQQOO?Rbl!QGJ8KZPXxtzJ^oJ0ofkWqjvT8c7TzHa+F#Og@f&VAdO?Q{;q zQp_-bb<&jgZU~#w27C{JLGseD}c4ihrG&vgeLSXtnS@C*%X@a z*&nzx8v^+>$IxCTYELnAY+Nd%Wu_=UveZ^5UQ-k0VX4uRcMpG>u0>C_tN$e113hqt zpbMu{6g!|OB}1)fh=&yAtx8U7_jpW;G2A)Z58z|sj&+y9qR2&n6PdpPu-^R~o)h=o zUUUfjY+ZDJb^<6J|rLUcR=zJXsz=0fLxU;@V_CqIF4*S;a*REVRfRYU&(1jHDwt` zFVmxK*P?2wZ)K-at%KuP3e?&j^tjd)ZXMsS;;P75gC5Rs>0{8$Ujz6TeCx#VlGvz2 zc(DaGJk4lg^IFY+7VEyVUkm|&TKAuAxV&a0zPWtcvr($~N4nJ!JL6qb+R;uxFx;qQ z+L0yAxSZ3J4lOXl08d75v%O_T3&m@;d^N{(#muu}8ADaxbq+gRfiMM)Dd=jpRKA`! zO68(P^AhZ#Q!pU8&M*b=7P0yqWu=Q-Vn>|7sSRe2L26B^O6-@GwzxoXT(Y zY3&JArLDfvJ^tWr7@T!5Yhm773s`t7+huU<3AlYQi@(#`|2rrN_tUuq*JCZX7OI9; zx^`o~{RuntRD(O$^*`1W+QOu;tEj@K;^2PQ!m1a)o%;3QI5|d4;VOU4^9H#J-th+P zl_NT@de_1dsfM;N_v|VV?)j>xDpbX)x9Y3wMC+5ZEisM!*7iTin9rYIqA{ z?XEItL74l zq#$~1OXUBvWi%8rlh|GeTcx69OD|r_Q#UHweg<2|w}tJ^ zmCICD-87euxIvvA#-&dn_^%tY17L;Dyiyy1`TUR*+`MZC`x1ve)LkuAm2%EnHmPMs zU>3Xwz0yj(=ot(FF2l@02w5lJr$}O~5uf@defo<~J$=5BK3|V7G~x^EuRQR@9U_Q< zZ~c+?g6{^Kp-eLrd+*%4=WeXrGCnZs!;_8S$$Dt25t`Z-JyPHi0pPeGK;lE|=l&@T z{b6(y6499Wj0>6*nfntb?oFJiPdwe2c-kSO5_ABlhYoGLeB;e#bbli{;}9`C^KESS zR`7#hZS?1#`|GhYjo6u5?98{xgYRFuc?lAKe35Ix=JbjC)2HuEpZ@#B+VtuA^o7Rs zg_=C+czPl&!EJZYqrRd2YIfs~A3xsBY;hh#lAWBX#l{^W5kA(8jogoo-;0emWvEXy z_l;p4In+!)+k7I^JTU3RN&N6Ok>ZI*2pkur2rLp7bL{RjjhUBStSL|4muK(Evvql{ zA!DMP(5aeRoq0S5Pv?}}quRzpd(=I--Wl$|Tr&-f zYzaI^LdlvSo3F!F`^(SH1kUJx^M`z2CPRRKc}RGEBKYNm2k|Km@w6B5xv>{! zgs;K}0RL(x{i5vqoBSl;U;Bi!LEqOA4q$p8n+2`54?P@WiS4znm*JP;i-BQcXPCp8 z7l99eJpvE;+3rJrwqg}EbGALY6%JhYD!?dL2mdcx@8{>(tH8sDjrlo1 zxV#+KB#Bz5Hc4dN{hH+2+E1$w$nn}>eL$vagSAO!YJ;^&#%qJs5yT)59@z%#J|{u~ zBO7}f(*D~g>(b$dba>tCctsALQ2yjpKKf7x!f&c&j literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9635a5a04ee49feeb2bde41b809df421968cd31 GIT binary patch literal 20713 zcmcJ1X>1(lnPyer7umdTQpH0gTOymJZc&shi8}1DO*@j3tZ94NEmo0ist=~Bse^9X zw4oWdyaLSeDk~9(Rk=7^UBCHs?q5%G+`rOG@oFjrK6~53ad$b9o90Ab zG==$To;^*|CiXN>oAES!mTVL2^oCl3f~WEv3wwbYY9wc+)byPi!*gK{ZEe%dvCxX|WdxbxC9T@s;}__9FeL?!8YsD(*&{4ZXKMqD(*X4B$72pRbVjQS~=S zU9%11o}1R`ad9sj+fnp*2t7W=Rziz2%-gI@97g&C%kM}1x>dpo97g&G(vKU*>*U0v ztb{h=F|?~&QQZjt+7Vawgl6FDjeZoPKT+S0g`f}#E}+(#`K9O;AvU{n^-5@2aw)MPAriYv-9i-+ zAs7_}WodCSCdbjPC<&q@hGv3s)EbXzSz=3Z1s$MzS<^G&prW|urSKxUDoe<#urXbh z;&Dk9mZG90V{}n5csUdf#c!}gG$zQB64z>xSX+KJI1D3*fkmWX6vK)MmnC6ILGw~r zk*={ZUkkGa9el z9mwhpDS@CoGatGt1!hBG2~l;3V)GCV2QP=EfEc2_c;}>eKrZhrM7bA(@%cbJ7Fd$Q z=$H-V5Xzaa&L}=}uC-7H6$;GCu}A=WAWk*r8n-2dLs2PLy-3|IXR}cKIh!oSm*nV7 zi2`8(K%Y4?exLn&fV*5=m$py}i+qAJV(=ASfRrzZA_6##x{ur z<1_O)>zo{0TJ%}uP9){{NX{l*kIO-YCIyomjRmxKg@!KRdic`Fd@Lf3EQlkEa%@4G zi7O+q$ko7QpogW!k*iYl>PR?rd1UcMd_ET4?;jf*Q9^NPcoFHrIY}A8#vj2t<8Wc; zj$n~S^ccdwcq3O80Ky0@7Fw2lXn7BQ$~OR3xh;q5wj*8JzhTKZhE>P#>Zxp1?drL# z-I3=k)~;-8+Yg(+-<+!bUfaF4WOcT-?r!tj&Fi)Q&~~RSX-nE3w00(|AGllB52fAR zX-oHKsFaiY0Sqf`MFd;vI0ARM1gBK%SKG*GT;$@Ew{X$=@4U*!Qp?D1T+4-0Em%j> z6gGM|I3vx+!oWd3OU|rFahaIKoHZP~CdsVVKAt@kT3FGR=L? zQ#?d;tPC?{M>3l!f;3Yryndz#U=OaCR?KnTIanx#Q>7U|t)(kbaXMsg+*wNG zDpPUNOetEwZI^NWQ?_jx5Fu9dSH2kcmh)A%wcseGtymIfc_?8?nBw)tIMilJn7>Y6 zcGwF{UZ9$0%@;XVZ*#d`<47n+yrrCahI{egiWL~-ubzd3^#`12ey4KYoh;sx;D5lq zV_xBTF3R6NWSF0d*;}zCYztMzo+$@JYpS~Vrhn>tzfhWQRWLxmfISP=5Y$aQVf4W$7~LFtB_~zHuB# zMFDRS&>~Ac@ISABB52s=MHahkC7M1i4`FT}^5YNrz00N{Vfj16@I_;B44CmFJI;<@ zcp@$+^RcBcxF+yQV8Xye1qGr<#4!bhaBLd*WMy{a<52hG=NpOyMXok)i0+)xW z2+0VHp#d+Gvn<3y(VQEcbwHT`dn+k29i^O&80BEx=a5I~)lAG!6+oFfi^>n6XpW3o7S@po) z@Ugw^BYRuM-l5t%KDG~hWFOeDXY8Y@eKgNGt%tUn+t;7YH1ARAKAiM0YGrpGdQj7m zt?AsV*_Eo=wEf!i3(r4R|FSwGoXFHXrqX>bZ?`m5g9WIn&U?59A=UXS^FLaDX-(H3 zOnVM~(%zNl%+@*vlHRPl`mLjH9=&z!_OXxM-5#0qi&0CT9g@g0dteI~ey?u1`%mcUg_OU!?v%0eN&3BK!ee|7+_X3&v zVYPlZ>Da2?mG!ox#;PF(9_$)G4TTpL^Qqb5b$!kOU;s`R4WLD>?^}H;>ux5l#)T^K zCcbLVf8R6u)Beql%$^hKo)e#1%~T2i!$K)^sAawWotf`R_oTGDH*M+FXt#q7Bkk6m z>Gs=LS0gW*VEU&I&F`6k4e`^igP`o91^Nl=O)kNo;fyq>@|~zK=+J8`W?*UaRZi|q zm_<9NAzIshi8dpy{X3mJPrU8U{FLZ0mXe354biDDy)#E)?7NYh5M4&@ooF-o6?eJU zi3%Q^2hK;k_%oKI*o)BBJUXqH8{-tqHPdzTbKEta=bl4NS}C79C}654=cSn|LTFZ? zH6-*&vI+?^LJ;&tkH{dlA`7HYI>VRdkrns66ucS=-w-YXr-?vj!b>kLUYP?ArvQ^d z-1KXrkDf-n^wN-Uc`44SQApS)sgTLf3rmoAfr!u{5`bqz5R93m3v@fX6c$LBDzrZ? z2SW;^+3kYoxbOr?-j66Q%mkx^r-AWV&%_duq2WgL}D3;#gnoT;UV^&q3W&h~0jP6@0;FYl8n4cNgn* zyG!JWSAWR&PJt6AF8h5`&g36u*i}-9u`OWJht7#PDJorGlus=0W3vds7c;0AZXp*j zY1lu(Xq{@Z#}Rd-hq_6fB4MzpV^qqbd0JU zqbxS-smYs*xy$9sA%-OkvqWc}&C&@3O0(2Lvy?*2_RDyl3Ukvcau>Pxc}z^s$|O4Z z36#{&iTo5I{+iiXrHV)}(Pksvasc;6-+IFj+rHoSy^ebwT8tjDQ7)T=-l>QD3xE7S zfBMs(avbz2me`^c%~@tcQIWQes8Q-?P<76N)r!k>?jawarWk$}q8E0#B0q`Ol1!|L zUAz9wqRP)v8TviTDCrk{W;Ie~JV7OJ8C)fy5Woq2}} zzWnmb$|{Yylse4pzdK!hdcyqA6P8KN{-4b}V9s1Aua+eH|Aqpfdw|8Oti#!v-c-s5 zij8D_NFb(nAc2XHh@4!U*HkDRN^J+ zkK-O8r`jsDOhi4RmTR0wOA>^a?8`SVFfA5Qg76|C>4*XqZWMSHOs*d7YXnA&0cjHg zmad1C_z**}q>8P;%0(;>936}(RL{6@p)BBNq=<3s8j`jP=ZJg_EY}VQ#wPsBO(0f; z?ZK_HB-XNDSZ=52pggxke6j$}n>hZfP~D2c;PQ2!5L{f8Knn{>)}2V9Mroj41|cMh zLt`Eybu4=u7?uZw*>Di5KIBphQKyDJ$aL*YG1ad9)zN5A1Ffsd}_8iT}gA&{N)#R&ciA` z!&CJ|xaFvR%k!ou-FW=Il5tF`j>&ZK&YLM4o!bV^<6Zq5g+%W6y{Amv?@YT-?J@t( z#{$x}Ewg$!0mXZu#VsXgg<*Fx|Pr1gROl8igo2k;l)7G=g~m0tg_aT?wdS10@C* zDp@X2Qf)zbzy+uzyNEQ(QwV~z&>XO4WsySt6l={{6e&ErQ<_5E0gqSUD{_ti*oII% z5Lj-l9GSnE^gfCxy8*yCRC65zNsH=e$u_hkEw`Q7<}N%u*`^LW+)4Z~QaR;wQPm_j z1Oho%AP|X(OHj)Pa-KloJ4?Z^mLgMc7?EV+txRhu+W?@hjLY&ILho~|LQST;Oz8wR z@Kas_SS|hKO)hKagT~JFD{AAOycI9tXuQp9@!Qe7o!%T=UE6xUTHBp>(yNQBZCIPU zwFP=!(L!9N+rgeD^`O%Vo6v<4pIqP{h-t`HoJN1 zVN-zx*Q2O$Vc;P@;InB0J~229D>3bYwu&@cNN4&53oW!vDuA3<(>(=Z&?U$~#SCq+ zt*g*#9rzIuPII1M|}S=OfmJrR#$PdLlAg@hGo z%ABysO$ke?v|Fgj;w75qDlAx0ehxb5uP9;ui%VES+u8_m2?u&wLbo4U--EXJgObJ= zJK8pN3ARJcq8KPnef3-z8q09$-8LUoU{Ur}$;58U*8#xW7qq1E4T?KS;2Hs90OchD z2?8qsIS*A(tWG8cfQFTAZ1>9b6fr~KBtXs#6Q!2!VkbsxwOsF2%E{WIo@nh;ojEJc zNF3H@gtenXP(zb#l#{@J!B6=Q03h`(TvcD{sf=e#^^C2a{lwjwbyTU2)@*%ewy8H; z+nC*TFk4l3dzvC}*S2O)oK3epy>9=Z`}^*6-@#2e(=x8MjHg@1|7BlxVlv(QQ*u`ko;R~!B5M*n>|+cJ># zHr!6+JG~y;ryRiN1oE8MYSS?7B06ipw6u%aPW~wZkK(v>dzOQ?2t*$?4dgFgW!}8J zlV5B6b2$>Fx?q#rd9PRCV6A1*g1u%9UMXr|6ahyTJfzGxL=tA9VeSdXVpkNXJ+4SS zLP0?d6$`PNq>52)C~+yGSICrDUrmXkuM$dP>>?pJ69;95!bam5hoG{-%fga4hdN=) zrpg&ht#QBPGEius$mhe=0(zoZC`+KcE@)a}Vb}|)$G|r@1yJELPwadpQg;Y1kv1o&S%xJ&Sq4evuTYm^$N5sw88ZD&YA#QhyX1FwDVB3 zzkwWoq+AyPaBvzphwJ9Gn=h}4X?q)PC`^*^EmBwCd?jt~{_*8^=iZIpx1{?gaI?g$ z-TlU^ufMvcWbEy#9m-qYN@|v5JnODW9%LJR#)Qg?7vU_n$LkPVfvqbz1o_#&$o5&G zdy>Ztd_iTZ*T5H4q~b)CY;k1i1Q%l3i3>4U^eXC5Od?qubz?7|+>}m^ElvzLq>36~ zy(N~Ta8;(l*2$;zbg-C_6D^|Es9#+%#T!e>+w8!i?FyqLa`-Q1;OSfA^JRf?e=Q;1YI7&XLw{NC*{lsb$mx6jGFMnK+D71eK@G zC8m5}U?iJG4XnP9GK2$0zAD=3Vy9G710&OH5S~Xv1+^{k0%0dz?FAnkP5K{HmT*{^ zV%dLfK3qJNgwK|uGtAwKVJ={gii%iy)~P~!`V1hZtfLsrNjC0lAriI8*@|X?wfF4V zXN3a?Mwt;$CyikO$bw0OEA_mf_;sBr+9ieMNy0d!w$M$MUzjRjt^x2@ON;O<89*Lc z7+AbfupRp2u}Bz70K#*A;GUDRfJK(O3D5>#KBW_=gxxYMk41zJL`OKDSYxIxFJb)( z{RVgtLPlkbCLg3%+P0dJkPf8W06=CxsuH?VaEb4FBak zF!*7jfbWQfAk82F7>UVmjxETh@(EpHpLdIi-hq#Xj;)5hN( zU!O^hW$JgU^}AP}+OoTn6B&DpYHwLT^^v_ZZSVX;|DnyqZ%_U5)lC0+wf{U~!0*>I z0LfciZ%n;Dm32Isb$DPfvw~d#AUmLqdIjM!fzZ z7n#TuGYO5+I=!G-X{bWFiE@2C2c;FbqC?QsA@wqAzOz#D5qWi@Z?VVQ$$}9Tuh`JG z9Y2Qwc~{PHO5QAtWx?9u&tXPiWZk&(@@6D{b8h_h0yy5dT>Uh^8-aaHuyp0LZm zO4t`lBtW!WVFXfMikE2(S9XLEt;k&xYm6%|Kd)~qzN>cl%+fS{94 zX6u^L-eKJ9FKbVNj$sX>RuP>FD$J`hI%gOhF=%XX|Ad;q%fA8E8R|71j=WWI;>iSA z76sv8a12afNnwD!P~o!1oCgSNZ@acR`ZbcX9;VccU1wCjZF4WXJrVtTDEV|o8Yua0 zfC<#GiwmW*R(3_ZMdE0qXn}K{Rgak}N6Ab>)~HXkvJ$;|43*@tD{VI&aUGjl>3m__ zrJxLUIya(Y#cJYi*+l0p?gyqy=RQyctL#WvL>D>vy<=j1_%riRR97-%lN%h=i_1-C zng6g5oF(`9g3l2wKc)fyaw9yu3@j95RUh)l4SRxCi_X($0>F3qlKI&|Yk$jhl`EK+ zoh2Q*w$;t@-=F|ou@>cZ1PVNnw%;{F^Qo`g=fp}u!$+G{6YzJi!cWryIEvc8ESlj> z``~m0kR9B!W?GA+YkKqMVjN4T0PILC4;?RZtVLHin4y{A?HA63L}u=yZwQ3r$A!n_ z3uq9Nr#bP19WHqijtk3n*W=JQjtf4I<{IqOJlEjJFJD11`I`h7lS#W($A|tMy}ksH zGecL9a~3x{Ei3_W4U-J_VtGTWYt>r;JC<#GZ1YIE?J@0Mo7`&K3onVbQMGL}-7pG& ztlBY{)~m+8{9=HsfknK^iE>4-<*mJa?e@#-k+gR&?rhuGnmt?7{D=18jYy__LT#VO z)J&||5n0=?UX`xhjr(Ua6)VqPxBQ3M{`i!`Ci$EILL(F!sYW4it?f_nRMUgD4pdjy zxwbdmb$&AffICz7xLWr(ywJQ&#A^@1VwY~-n;HPXovGQoW`-&}HJPa!RO<%Qp22)O zhCtfyQLd&w=~4(k-SnPn=6=_F+C152_O;0^h?4&;0djiK>^BD}#J&h{Kw^r}F~y=^ zR+uP3RGxV~$|O|eYzkyT7zlc_7uaNH=9#sC$v31a*VNrIacazsLK9%@1>7JXruY#8 zY{L>0#SBEg8kUjKuAECV$U#-Un5!)q=gKriGn}zqOTCs)0_186#)=Z<$?=Pt8NCZHcs7)jE{-CZYY0tX7Z;ih> zerw|P#OfIs^;VzWa#!6x{IR?JBX|2dr|+F-E*L zE`;&i}=7PHm=4g_30eylxMct_xBx7Pm*-Yt0i3R*!t9u3Ah zM`PM9WOpA*?>@A-lG%M$-F=p<=?|*w$P%TQpRR4%GVa5w`*7NFSko)&wO?LrFeY@? zVV6}3oDgWR?aErHue1Z{EkMo%;wsstvjyqcsA4K<3BSU!vvY~BvL5YR!u$wZkQLUT zl6aG_e`t9RlSdR;*q6MdXIII_}2BM_Q$f3(r zDbNtU6(o%uArq!GhmK$Kx*_aC-&T^N2<2T|k{4s-QdxA~fpQ+m0Qyg8t-{Ks)$5VIAy<_o7Wt6=tt`JJ z?2umu_41ZzPU+EAaR^Z2FVJeUs}fCBjzRxPO~M9~H8W2qtT^r%)d!`K(Q%)Wqo`Ak z0W4p6w(w11QSA#)Ehhca_o+pnHBo|pCv$x+`E_Y1fIibDl`-_=F=0LiTOG?qW&N&~ zSMaF_6~qU*Q2}po(^;a1*;X%Y>jKlQ^PV83POhFrd$7wfeC2`fSYr_&5t%T##uuHW zJhrG5hm)^-jG`9_kQ|I}I(|W6cC2=2P-DvLwJH^S@DUHdT!@bWMTIt<;b`UBi*|C_ zri^DP?^pTP$bOHG-2XxVOm>ag`Z&K;-MPL{r0nqeg8rAZwU0BOuOh^^2x;Nm{WbvY z&QzaQtIww$=gH;kadNhRX4MJHw6NuXK?f)K9n8ee@1}3 z#24_?E~vLCrEnpoba)XirI6CMeCV*P;dAjJ{~iw62c?4sv3$&EIeKJWa5O6)SwqcS z`QWlPOz+`Heo#7=q-ob z6MZr>ko7cSGi95*)#f3m$SuhEP~IIX=})|zM5ktt*A^(DbpI}I`Q?qKY)+y#h4783Vl+KLjIz+ zDy?mcChKlaItOeTiH{FJ&`%uv`T zY!g=IS&E0yRifBf0esofu)}b*JdqGM_r@KX(UMEcp()}jW=zWiqpYIoMQV+6f$u#v zO$^zKXrs_qpMjhcmfWY9tGGOm1kE1of@hkhEW|gWSEL(?oT4RmxY*w9Z>qj!qKGoT`YRh^WRgdtoXZJ^*-5Jk->KRyd=50>CXWfjCZ26v) zH8rzwWOMSvgc-ycbjJgNGgVo8-C%D3|M8_<>Fu_>}gB{y7DMW1IWayAG+Xht--Rc`IeIakZ`M4R@;Zc6xKb^EmIM zkc+EsS`*jzr_Ad|?nKq9-FY`fd$`)hd=-VN@!@aYOQ9NQt@5=Ls^glv*2UER4Rh+q zy{OtataYS;v$fq}Tbyelfc(RFHSJHil zbQ4LL$`eU%+C)-lhl!+UZ6YaDO8*yQwU$CVOeRHZlSv`!mJUFIA3Z>O zq15@R-IM`LQ3k3_2To%L bVQs4OW_p6@q2~i@bKZ(4?WG+7qZ0oYocSIx literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b3f288d1542af7d4d33ca71e54cc4995538bf39 GIT binary patch literal 22442 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 V=U2bz{rt7x{3&~VCSaoC{{#6zw6_2N literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a38bdb61419f31cf26d851197d04167c19b45d0 GIT binary patch literal 40354 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 X?A=~*lFh|6cq(qPaa$M+{rvv`Y;*us literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ea1f0356a8e3d8edf9eea114ea9eef67b2fa28d GIT binary patch literal 6010 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 Tuple[str, Optional[str]]: + 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 + + +def convert_extras(extras: Optional[str]) -> Set[str]: + if not extras: + return set() + return get_requirement("placeholder" + extras.lower()).extras + + +def parse_editable(editable_req: str) -> Tuple[Optional[str], str, Set[str]]: + """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] + """ + + 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): + # 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, + get_requirement("placeholder" + extras.lower()).extras, + ) + else: + return package_name, url_no_extras, set() + + for version_control in vcs: + if url.lower().startswith(f"{version_control}:"): + url = f"{version_control}+{url}" + break + + link = Link(url) + + if not link.is_vcs: + backends = ", ".join(vcs.all_schemes) + raise InstallationError( + f"{editable_req} is not a valid editable requirement. " + f"It should either be a path to a local project or a VCS URL " + f"(beginning with {backends})." + ) + + package_name = link.egg_fragment + if not package_name: + raise InstallationError( + "Could not detect requirement name for '{}', please specify one " + "with #egg=your_package_name".format(editable_req) + ) + return package_name, url, set() + + +def check_first_requirement_in_file(filename: str) -> None: + """Check if file is parsable as a requirements file. + + This is heavily based on ``pkg_resources.parse_requirements``, but + simplified to just check the first meaningful line. + + :raises InvalidRequirement: If the first meaningful line cannot be parsed + as an requirement. + """ + with open(filename, encoding="utf-8", errors="ignore") as f: + # Create a steppable iterator, so we can handle \-continuations. + lines = ( + line + for line in (line.strip() for line in f) + if line and not line.startswith("#") # Skip blank lines/comments. + ) + + 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() + next(lines, "") + Requirement(line) + return + + +def deduce_helpful_msg(req: str) -> str: + """Returns helpful msg in case requirements file does not exist, + or cannot be parsed. + + :params req: Requirements file path + """ + if not os.path.exists(req): + return f" File '{req}' does not exist." + msg = " The path does exist. " + # Try to parse and check if it is a requirements file. + try: + check_first_requirement_in_file(req) + except InvalidRequirement: + logger.debug("Cannot parse '%s' as requirements file", req) + else: + msg += ( + f"The argument you provided " + f"({req}) appears to be a" + f" requirements file. If that is the" + f" case, use the '-r' flag to install" + f" the packages specified within it." + ) + return msg + + +class RequirementParts: + def __init__( + self, + requirement: Optional[Requirement], + link: Optional[Link], + markers: Optional[Marker], + extras: Set[str], + ): + self.requirement = requirement + self.link = link + self.markers = markers + self.extras = extras + + +def parse_req_from_editable(editable_req: str) -> RequirementParts: + name, url, extras_override = parse_editable(editable_req) + + if name is not None: + try: + req: Optional[Requirement] = Requirement(name) + except InvalidRequirement: + raise InstallationError(f"Invalid requirement: '{name}'") + else: + req = None + + link = Link(url) + + return RequirementParts(req, link, None, extras_override) + + +# ---- The actual constructors follow ---- + + +def install_req_from_editable( + editable_req: str, + comes_from: Optional[Union[InstallRequirement, str]] = None, + use_pep517: Optional[bool] = None, + isolated: bool = False, + options: Optional[Dict[str, Any]] = None, + constraint: bool = False, + user_supplied: bool = False, + permit_editable_wheels: bool = False, + config_settings: Optional[Dict[str, str]] = None, +) -> InstallRequirement: + + parts = parse_req_from_editable(editable_req) + + return InstallRequirement( + parts.requirement, + comes_from=comes_from, + user_supplied=user_supplied, + editable=True, + permit_editable_wheels=permit_editable_wheels, + link=parts.link, + constraint=constraint, + use_pep517=use_pep517, + isolated=isolated, + install_options=options.get("install_options", []) if options else [], + global_options=options.get("global_options", []) if options else [], + hash_options=options.get("hashes", {}) if options else {}, + config_settings=config_settings, + extras=parts.extras, + ) + + +def _looks_like_path(name: str) -> bool: + """Checks whether the string "looks like" a path on the filesystem. + + This does not check whether the target actually exists, only judge from the + appearance. + + Returns true if any of the following conditions is true: + * a path separator is found (either os.path.sep or os.path.altsep); + * a dot is found (which represents the current directory). + """ + if os.path.sep in name: + return True + if os.path.altsep is not None and os.path.altsep in name: + return True + if name.startswith("."): + return True + return False + + +def _get_url_from_path(path: str, name: str) -> Optional[str]: + """ + First, it checks whether a provided path is an installable directory. If it + is, returns the path. + + If false, check if the path is an archive file (such as a .whl). + The function checks if the path is a file. If false, if the path has + an @, it will treat it as a PEP 440 URL requirement and return the path. + """ + if _looks_like_path(name) and os.path.isdir(path): + if is_installable_dir(path): + return path_to_url(path) + # TODO: The is_installable_dir test here might not be necessary + # now that it is done in load_pyproject_toml too. + raise InstallationError( + f"Directory {name!r} is not installable. Neither 'setup.py' " + "nor 'pyproject.toml' found." + ) + if not is_archive_file(path): + return None + if os.path.isfile(path): + return path_to_url(path) + urlreq_parts = name.split("@", 1) + if len(urlreq_parts) >= 2 and not _looks_like_path(urlreq_parts[0]): + # If the path contains '@' and the part before it does not look + # like a path, try to treat it as a PEP 440 URL req instead. + return None + logger.warning( + "Requirement %r looks like a filename, but the file does not exist", + name, + ) + return path_to_url(path) + + +def parse_req_from_line(name: str, line_source: Optional[str]) -> RequirementParts: + if is_url(name): + marker_sep = "; " + else: + marker_sep = ";" + if marker_sep in name: + name, markers_as_string = name.split(marker_sep, 1) + markers_as_string = markers_as_string.strip() + if not markers_as_string: + markers = None + else: + markers = Marker(markers_as_string) + else: + markers = None + name = name.strip() + req_as_string = None + path = os.path.normpath(os.path.abspath(name)) + link = None + extras_as_string = None + + if is_url(name): + link = Link(name) + else: + p, extras_as_string = _strip_extras(path) + url = _get_url_from_path(p, name) + if url is not None: + link = Link(url) + + # 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_as_string = f"{wheel.name}=={wheel.version}" + else: + # set the req to the egg fragment. when it's not there, this + # will become an 'unnamed' requirement + req_as_string = link.egg_fragment + + # a requirement specifier + else: + req_as_string = name + + extras = convert_extras(extras_as_string) + + def with_source(text: str) -> str: + if not line_source: + return text + return f"{text} (from {line_source})" + + def _parse_req_string(req_as_string: str) -> Requirement: + try: + req = get_requirement(req_as_string) + except InvalidRequirement: + if os.path.sep in req_as_string: + add_msg = "It looks like a path." + add_msg += deduce_helpful_msg(req_as_string) + elif "=" in req_as_string and not any( + op in req_as_string for op in operators + ): + add_msg = "= is not a valid operator. Did you mean == ?" + else: + add_msg = "" + msg = with_source(f"Invalid requirement: {req_as_string!r}") + if add_msg: + msg += f"\nHint: {add_msg}" + raise InstallationError(msg) + else: + # Deprecate extras after specifiers: "name>=1.0[extras]" + # This currently works by accident because _strip_extras() parses + # any extras in the end of the string and those are saved in + # RequirementParts + for spec in req.specifier: + spec_str = str(spec) + if spec_str.endswith("]"): + msg = f"Extras after version '{spec_str}'." + raise InstallationError(msg) + return req + + if req_as_string is not None: + req: Optional[Requirement] = _parse_req_string(req_as_string) + else: + req = None + + return RequirementParts(req, link, markers, extras) + + +def install_req_from_line( + name: str, + comes_from: Optional[Union[str, InstallRequirement]] = None, + use_pep517: Optional[bool] = None, + isolated: bool = False, + options: Optional[Dict[str, Any]] = None, + constraint: bool = False, + line_source: Optional[str] = None, + user_supplied: bool = False, + config_settings: Optional[Dict[str, str]] = None, +) -> InstallRequirement: + """Creates an InstallRequirement from a name, which might be a + requirement, directory containing 'setup.py', filename, or URL. + + :param line_source: An optional string describing where the line is from, + for logging purposes in case of an error. + """ + parts = parse_req_from_line(name, line_source) + + return InstallRequirement( + parts.requirement, + comes_from, + link=parts.link, + markers=parts.markers, + use_pep517=use_pep517, + isolated=isolated, + install_options=options.get("install_options", []) if options else [], + global_options=options.get("global_options", []) if options else [], + hash_options=options.get("hashes", {}) if options else {}, + config_settings=config_settings, + constraint=constraint, + extras=parts.extras, + user_supplied=user_supplied, + ) + + +def install_req_from_req_string( + req_string: str, + comes_from: Optional[InstallRequirement] = None, + isolated: bool = False, + use_pep517: Optional[bool] = None, + user_supplied: bool = False, + config_settings: Optional[Dict[str, str]] = None, +) -> InstallRequirement: + try: + req = get_requirement(req_string) + except InvalidRequirement: + raise InstallationError(f"Invalid requirement: '{req_string}'") + + domains_not_allowed = [ + PyPI.file_storage_domain, + TestPyPI.file_storage_domain, + ] + if ( + req.url + and comes_from + and comes_from.link + and comes_from.link.netloc in domains_not_allowed + ): + # Explicitly disallow pypi packages that depend on external urls + raise InstallationError( + "Packages installed from PyPI cannot depend on packages " + "which are not also hosted on PyPI.\n" + "{} depends on {} ".format(comes_from.name, req) + ) + + return InstallRequirement( + req, + comes_from, + isolated=isolated, + use_pep517=use_pep517, + user_supplied=user_supplied, + config_settings=config_settings, + ) + + +def install_req_from_parsed_requirement( + parsed_req: ParsedRequirement, + isolated: bool = False, + use_pep517: Optional[bool] = None, + user_supplied: bool = False, + config_settings: Optional[Dict[str, str]] = None, +) -> InstallRequirement: + if parsed_req.is_editable: + req = install_req_from_editable( + parsed_req.requirement, + comes_from=parsed_req.comes_from, + use_pep517=use_pep517, + constraint=parsed_req.constraint, + isolated=isolated, + user_supplied=user_supplied, + config_settings=config_settings, + ) + + else: + req = install_req_from_line( + parsed_req.requirement, + comes_from=parsed_req.comes_from, + use_pep517=use_pep517, + isolated=isolated, + options=parsed_req.options, + constraint=parsed_req.constraint, + line_source=parsed_req.line_source, + user_supplied=user_supplied, + config_settings=config_settings, + ) + return req + + +def install_req_from_link_and_ireq( + link: Link, ireq: InstallRequirement +) -> InstallRequirement: + return InstallRequirement( + req=ireq.req, + comes_from=ireq.comes_from, + editable=ireq.editable, + link=link, + markers=ireq.markers, + use_pep517=ireq.use_pep517, + isolated=ireq.isolated, + install_options=ireq.install_options, + global_options=ireq.global_options, + hash_options=ireq.hash_options, + config_settings=ireq.config_settings, + user_supplied=ireq.user_supplied, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/req_file.py b/venv/lib/python3.11/site-packages/pip/_internal/req/req_file.py new file mode 100644 index 0000000..11ec699 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/req/req_file.py @@ -0,0 +1,544 @@ +""" +Requirements file parsing +""" + +import optparse +import os +import re +import shlex +import urllib.parse +from optparse import Values +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Generator, + Iterable, + List, + Optional, + Tuple, +) + +from pip._internal.cli import cmdoptions +from pip._internal.exceptions import InstallationError, RequirementsFileParseError +from pip._internal.models.search_scope import SearchScope +from pip._internal.network.session import PipSession +from pip._internal.network.utils import raise_for_status +from pip._internal.utils.encoding import auto_decode +from pip._internal.utils.urls import get_url_scheme + +if TYPE_CHECKING: + # NoReturn introduced in 3.6.2; imported only for type checking to maintain + # pip compatibility with older patch versions of Python 3.6 + from typing import NoReturn + + from pip._internal.index.package_finder import PackageFinder + +__all__ = ["parse_requirements"] + +ReqFileLines = Iterable[Tuple[int, str]] + +LineParser = Callable[[str], Tuple[str, Values]] + +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: List[Callable[..., optparse.Option]] = [ + cmdoptions.index_url, + cmdoptions.extra_index_url, + cmdoptions.no_index, + cmdoptions.constraints, + cmdoptions.requirements, + cmdoptions.editable, + cmdoptions.find_links, + cmdoptions.no_binary, + cmdoptions.only_binary, + cmdoptions.prefer_binary, + cmdoptions.require_hashes, + cmdoptions.pre, + cmdoptions.trusted_host, + cmdoptions.use_new_feature, +] + +# options to be passed to requirements +SUPPORTED_OPTIONS_REQ: List[Callable[..., optparse.Option]] = [ + cmdoptions.install_options, + cmdoptions.global_options, + cmdoptions.hash, +] + +# the 'dest' string values +SUPPORTED_OPTIONS_REQ_DEST = [str(o().dest) for o in SUPPORTED_OPTIONS_REQ] + + +class ParsedRequirement: + def __init__( + self, + requirement: str, + is_editable: bool, + comes_from: str, + constraint: bool, + options: Optional[Dict[str, Any]] = None, + line_source: Optional[str] = None, + ) -> None: + self.requirement = requirement + self.is_editable = is_editable + self.comes_from = comes_from + self.options = options + self.constraint = constraint + self.line_source = line_source + + +class ParsedLine: + def __init__( + self, + filename: str, + lineno: int, + args: str, + opts: Values, + constraint: bool, + ) -> None: + self.filename = filename + self.lineno = lineno + self.opts = opts + self.constraint = constraint + + if args: + self.is_requirement = True + self.is_editable = False + self.requirement = args + elif opts.editables: + self.is_requirement = True + self.is_editable = True + # We don't support multiple -e on one line + self.requirement = opts.editables[0] + else: + self.is_requirement = False + + +def parse_requirements( + filename: str, + session: PipSession, + finder: Optional["PackageFinder"] = None, + options: Optional[optparse.Values] = None, + constraint: bool = False, +) -> Generator[ParsedRequirement, None, None]: + """Parse a requirements file and yield ParsedRequirement instances. + + :param filename: Path or url of requirements file. + :param session: PipSession instance. + :param finder: Instance of pip.index.PackageFinder. + :param options: cli options. + :param constraint: If true, parsing a constraint file rather than + requirements file. + """ + line_parser = get_line_parser(finder) + parser = RequirementsFileParser(session, line_parser) + + for parsed_line in parser.parse(filename, constraint): + parsed_req = handle_line( + parsed_line, options=options, finder=finder, session=session + ) + if parsed_req is not None: + yield parsed_req + + +def preprocess(content: str) -> ReqFileLines: + """Split, filter, and join lines, and return a line iterator + + :param content: the content of the requirements file + """ + lines_enum: ReqFileLines = enumerate(content.splitlines(), start=1) + lines_enum = join_lines(lines_enum) + lines_enum = ignore_comments(lines_enum) + lines_enum = expand_env_variables(lines_enum) + return lines_enum + + +def handle_requirement_line( + line: ParsedLine, + options: Optional[optparse.Values] = None, +) -> ParsedRequirement: + + # preserve for the nested code path + line_comes_from = "{} {} (line {})".format( + "-c" if line.constraint else "-r", + line.filename, + line.lineno, + ) + + assert line.is_requirement + + if line.is_editable: + # For editable requirements, we don't support per-requirement + # options, so just return the parsed requirement. + return ParsedRequirement( + requirement=line.requirement, + is_editable=line.is_editable, + comes_from=line_comes_from, + constraint=line.constraint, + ) + else: + # get the options that apply to requirements + req_options = {} + for dest in SUPPORTED_OPTIONS_REQ_DEST: + if dest in line.opts.__dict__ and line.opts.__dict__[dest]: + req_options[dest] = line.opts.__dict__[dest] + + line_source = f"line {line.lineno} of {line.filename}" + return ParsedRequirement( + requirement=line.requirement, + is_editable=line.is_editable, + comes_from=line_comes_from, + constraint=line.constraint, + options=req_options, + line_source=line_source, + ) + + +def handle_option_line( + opts: Values, + filename: str, + lineno: int, + finder: Optional["PackageFinder"] = None, + options: Optional[optparse.Values] = None, + session: Optional[PipSession] = None, +) -> None: + + if options: + # percolate options upward + if opts.require_hashes: + options.require_hashes = opts.require_hashes + if opts.features_enabled: + options.features_enabled.extend( + f for f in opts.features_enabled if f not in options.features_enabled + ) + + # set finder options + if finder: + find_links = finder.find_links + index_urls = finder.index_urls + no_index = finder.search_scope.no_index + if opts.no_index is True: + no_index = True + index_urls = [] + if opts.index_url and not no_index: + index_urls = [opts.index_url] + if opts.extra_index_urls and not no_index: + 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 + find_links.append(value) + + if session: + # We need to update the auth urls in session + session.update_index_urls(index_urls) + + search_scope = SearchScope( + find_links=find_links, + index_urls=index_urls, + no_index=no_index, + ) + finder.search_scope = search_scope + + if opts.pre: + finder.set_allow_all_prereleases() + + if opts.prefer_binary: + finder.set_prefer_binary() + + if session: + for host in opts.trusted_hosts or []: + source = f"line {lineno} of {filename}" + session.add_trusted_host(host, source=source) + + +def handle_line( + line: ParsedLine, + options: Optional[optparse.Values] = None, + finder: Optional["PackageFinder"] = None, + session: Optional[PipSession] = None, +) -> Optional[ParsedRequirement]: + """Handle a single parsed requirements line; This can result in + creating/yielding requirements, or updating the finder. + + :param line: The parsed line to be processed. + :param options: CLI options. + :param finder: The finder - updated by non-requirement lines. + :param session: The session - updated by non-requirement lines. + + Returns a ParsedRequirement object if the line is a requirement line, + otherwise returns None. + + 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. + """ + + if line.is_requirement: + parsed_req = handle_requirement_line(line, options) + return parsed_req + else: + handle_option_line( + line.opts, + line.filename, + line.lineno, + finder, + options, + session, + ) + return None + + +class RequirementsFileParser: + def __init__( + self, + session: PipSession, + line_parser: LineParser, + ) -> None: + self._session = session + self._line_parser = line_parser + + def parse( + self, filename: str, constraint: bool + ) -> Generator[ParsedLine, None, None]: + """Parse a given file, yielding parsed lines.""" + yield from self._parse_and_recurse(filename, constraint) + + def _parse_and_recurse( + self, filename: str, constraint: bool + ) -> Generator[ParsedLine, None, None]: + for line in self._parse_file(filename, constraint): + if not line.is_requirement and ( + line.opts.requirements or line.opts.constraints + ): + # parse a nested requirements file + if line.opts.requirements: + req_path = line.opts.requirements[0] + nested_constraint = False + else: + req_path = line.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, + ) + + yield from self._parse_and_recurse(req_path, nested_constraint) + else: + yield line + + def _parse_file( + self, filename: str, constraint: bool + ) -> Generator[ParsedLine, None, None]: + _, content = get_file_content(filename, self._session) + + lines_enum = preprocess(content) + + for line_number, line in lines_enum: + try: + args_str, opts = self._line_parser(line) + except OptionParsingError as e: + # add offending line + msg = f"Invalid requirement: {line}\n{e.msg}" + raise RequirementsFileParseError(msg) + + yield ParsedLine( + filename, + line_number, + args_str, + opts, + constraint, + ) + + +def get_line_parser(finder: Optional["PackageFinder"]) -> LineParser: + def parse_line(line: str) -> Tuple[str, Values]: + # Build new parser for each line since it accumulates appendable + # options. + parser = build_parser() + defaults = parser.get_default_values() + defaults.index_url = None + if finder: + defaults.format_control = finder.format_control + + args_str, options_str = break_args_options(line) + + try: + options = shlex.split(options_str) + except ValueError as e: + raise OptionParsingError(f"Could not split options: {options_str}") from e + + opts, _ = parser.parse_args(options, defaults) + + return args_str, opts + + return parse_line + + +def break_args_options(line: str) -> Tuple[str, str]: + """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) + + +class OptionParsingError(Exception): + def __init__(self, msg: str) -> None: + self.msg = msg + + +def build_parser() -> optparse.OptionParser: + """ + 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: Any, msg: str) -> "NoReturn": + raise OptionParsingError(msg) + + # NOTE: mypy disallows assigning to a method + # https://github.com/python/mypy/issues/2427 + parser.exit = parser_exit # type: ignore + + return parser + + +def join_lines(lines_enum: ReqFileLines) -> ReqFileLines: + """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: List[str] = [] + 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) + assert primary_line_number is not None + 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: + assert primary_line_number is not None + yield primary_line_number, "".join(new_line) + + # TODO: handle space after '\'. + + +def ignore_comments(lines_enum: ReqFileLines) -> ReqFileLines: + """ + 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 expand_env_variables(lines_enum: ReqFileLines) -> ReqFileLines: + """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 discussion 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 + + +def get_file_content(url: str, session: PipSession) -> Tuple[str, str]: + """Gets the content of a file; it may be a filename, file: URL, or + http: URL. Returns (location, content). Content is unicode. + Respects # -*- coding: declarations on the retrieved files. + + :param url: File path or url. + :param session: PipSession instance. + """ + scheme = get_url_scheme(url) + + # Pip has special support for file:// URLs (LocalFSAdapter). + if scheme in ["http", "https", "file"]: + resp = session.get(url) + raise_for_status(resp) + return resp.url, resp.text + + # Assume this is a bare path. + try: + with open(url, "rb") as f: + content = auto_decode(f.read()) + except OSError as exc: + raise InstallationError(f"Could not open requirements file: {exc}") + return url, content diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/req_install.py b/venv/lib/python3.11/site-packages/pip/_internal/req/req_install.py new file mode 100644 index 0000000..bb38ec0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/req/req_install.py @@ -0,0 +1,946 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import functools +import logging +import os +import shutil +import sys +import uuid +import zipfile +from enum import Enum +from optparse import Values +from typing import Any, Collection, Dict, Iterable, List, Optional, Sequence, Union + +from pip._vendor.packaging.markers import Marker +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import Version +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.pyproject_hooks import BuildBackendHookCaller + +from pip._internal.build_env import BuildEnvironment, NoOpBuildEnvironment +from pip._internal.exceptions import InstallationError, LegacyInstallFailure +from pip._internal.locations import get_scheme +from pip._internal.metadata import ( + BaseDistribution, + get_default_environment, + get_directory_distribution, + get_wheel_distribution, +) +from pip._internal.metadata.base import FilesystemWheel +from pip._internal.models.direct_url import DirectUrl +from pip._internal.models.link import Link +from pip._internal.operations.build.metadata import generate_metadata +from pip._internal.operations.build.metadata_editable import generate_editable_metadata +from pip._internal.operations.build.metadata_legacy import ( + generate_metadata as generate_metadata_legacy, +) +from pip._internal.operations.install.editable_legacy import ( + install_editable as install_editable_legacy, +) +from pip._internal.operations.install.legacy import install as install_legacy +from pip._internal.operations.install.wheel import install_wheel +from pip._internal.pyproject import load_pyproject_toml, make_pyproject_path +from pip._internal.req.req_uninstall import UninstallPathSet +from pip._internal.utils.deprecation import LegacyInstallReason, deprecated +from pip._internal.utils.direct_url_helpers import ( + direct_url_for_editable, + direct_url_from_link, +) +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.misc import ( + ConfiguredBuildBackendHookCaller, + ask_path_exists, + backup_dir, + display_path, + hide_url, + redact_auth_from_url, +) +from pip._internal.utils.packaging import safe_extra +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds +from pip._internal.utils.virtualenv import running_under_virtualenv +from pip._internal.vcs import vcs + +logger = logging.getLogger(__name__) + + +class InstallRequirement: + """ + Represents something that may be installed later on, may have information + about where to fetch the relevant requirement and also contains logic for + installing the said requirement. + """ + + def __init__( + self, + req: Optional[Requirement], + comes_from: Optional[Union[str, "InstallRequirement"]], + editable: bool = False, + link: Optional[Link] = None, + markers: Optional[Marker] = None, + use_pep517: Optional[bool] = None, + isolated: bool = False, + install_options: Optional[List[str]] = None, + global_options: Optional[List[str]] = None, + hash_options: Optional[Dict[str, List[str]]] = None, + config_settings: Optional[Dict[str, str]] = None, + constraint: bool = False, + extras: Collection[str] = (), + user_supplied: bool = False, + permit_editable_wheels: bool = False, + ) -> None: + assert req is None or isinstance(req, Requirement), req + self.req = req + self.comes_from = comes_from + self.constraint = constraint + self.editable = editable + self.permit_editable_wheels = permit_editable_wheels + self.legacy_install_reason: Optional[LegacyInstallReason] = None + + # source_dir is the local directory where the linked requirement is + # located, or unpacked. In case unpacking is needed, creating and + # populating source_dir is done by the RequirementPreparer. Note this + # is not necessarily the directory where pyproject.toml or setup.py is + # located - that one is obtained via unpacked_source_directory. + self.source_dir: Optional[str] = None + if self.editable: + assert link + if link.is_file: + self.source_dir = os.path.normpath(os.path.abspath(link.file_path)) + + if link is None and req and req.url: + # PEP 508 URL requirement + link = Link(req.url) + self.link = self.original_link = link + self.original_link_is_in_wheel_cache = False + + # Information about the location of the artifact that was downloaded . This + # property is guaranteed to be set in resolver results. + self.download_info: Optional[DirectUrl] = None + + # Path to any downloaded or already-existing package. + self.local_file_path: Optional[str] = None + if self.link and self.link.is_file: + self.local_file_path = self.link.file_path + + if extras: + self.extras = extras + elif req: + self.extras = {safe_extra(extra) for extra in req.extras} + else: + self.extras = set() + if markers is None and req: + markers = req.marker + self.markers = markers + + # This holds the Distribution object if this requirement is already installed. + self.satisfied_by: Optional[BaseDistribution] = None + # Whether the installation process should try to uninstall an existing + # distribution before installing this requirement. + self.should_reinstall = False + # Temporary build location + self._temp_build_dir: Optional[TempDirectory] = None + # Set to True after successful installation + self.install_succeeded: Optional[bool] = None + # Supplied options + self.install_options = install_options if install_options else [] + self.global_options = global_options if global_options else [] + self.hash_options = hash_options if hash_options else {} + self.config_settings = config_settings + # Set to True after successful preparation of this requirement + self.prepared = False + # User supplied requirement are explicitly requested for installation + # by the user via CLI arguments or requirements files, as opposed to, + # e.g. dependencies, extras or constraints. + self.user_supplied = user_supplied + + self.isolated = isolated + self.build_env: BuildEnvironment = NoOpBuildEnvironment() + + # For PEP 517, the directory where we request the project metadata + # gets stored. We need this to pass to build_wheel, so the backend + # can ensure that the wheel matches the metadata (see the PEP for + # details). + self.metadata_directory: Optional[str] = None + + # The static build requirements (from pyproject.toml) + self.pyproject_requires: Optional[List[str]] = None + + # Build requirements that we will check are available + self.requirements_to_check: List[str] = [] + + # The PEP 517 backend we should use to build the project + self.pep517_backend: Optional[BuildBackendHookCaller] = None + + # Are we using PEP 517 for this requirement? + # After pyproject.toml has been loaded, the only valid values are True + # and False. Before loading, None is valid (meaning "use the default"). + # Setting an explicit value before loading pyproject.toml is supported, + # but after loading this flag should be treated as read only. + self.use_pep517 = use_pep517 + + # This requirement needs more preparation before it can be built + self.needs_more_preparation = False + + def __str__(self) -> str: + if self.req: + s = str(self.req) + if self.link: + s += " from {}".format(redact_auth_from_url(self.link.url)) + elif self.link: + s = redact_auth_from_url(self.link.url) + else: + s = "" + if self.satisfied_by is not None: + if self.satisfied_by.location is not None: + location = display_path(self.satisfied_by.location) + else: + location = "" + s += f" in {location}" + if self.comes_from: + if isinstance(self.comes_from, str): + comes_from: Optional[str] = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += f" (from {comes_from})" + return s + + def __repr__(self) -> str: + return "<{} object: {} editable={!r}>".format( + self.__class__.__name__, str(self), self.editable + ) + + def format_debug(self) -> str: + """An un-tested helper for getting state, for debugging.""" + attributes = vars(self) + names = sorted(attributes) + + state = ("{}={!r}".format(attr, attributes[attr]) for attr in sorted(names)) + return "<{name} object: {{{state}}}>".format( + name=self.__class__.__name__, + state=", ".join(state), + ) + + # Things that are valid for all kinds of requirements? + @property + def name(self) -> Optional[str]: + if self.req is None: + return None + return self.req.name + + @functools.lru_cache() # use cached_property in python 3.8+ + def supports_pyproject_editable(self) -> bool: + if not self.use_pep517: + return False + assert self.pep517_backend + with self.build_env: + runner = runner_with_spinner_message( + "Checking if build backend supports build_editable" + ) + with self.pep517_backend.subprocess_runner(runner): + return "build_editable" in self.pep517_backend._supported_features() + + @property + def specifier(self) -> SpecifierSet: + return self.req.specifier + + @property + def is_pinned(self) -> bool: + """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 match_markers(self, extras_requested: Optional[Iterable[str]] = None) -> bool: + 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 + + @property + def has_hash_options(self) -> bool: + """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.hash_options) + + def hashes(self, trust_internet: bool = True) -> Hashes: + """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.hash_options.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 from_path(self) -> Optional[str]: + """Format a nice indicator to show where this "comes from" """ + if self.req is None: + return None + s = str(self.req) + if self.comes_from: + if isinstance(self.comes_from, str): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += "->" + comes_from + return s + + def ensure_build_location( + self, build_dir: str, autodelete: bool, parallel_builds: bool + ) -> str: + assert build_dir is not None + if self._temp_build_dir is not None: + assert self._temp_build_dir.path + return self._temp_build_dir.path + if self.req is None: + # 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 = TempDirectory( + kind=tempdir_kinds.REQ_BUILD, globally_managed=True + ) + + return self._temp_build_dir.path + + # This is the only remaining place where we manually determine the path + # for the temporary directory. It is only needed for editables where + # it is the value of the --src option. + + # When parallel builds are enabled, add a UUID to the build directory + # name so multiple builds do not interfere with each other. + dir_name: str = canonicalize_name(self.name) + if parallel_builds: + dir_name = f"{dir_name}_{uuid.uuid4().hex}" + + # 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) + os.makedirs(build_dir) + actual_build_dir = os.path.join(build_dir, dir_name) + # `None` indicates that we respect the globally-configured deletion + # settings, which is what we actually want when auto-deleting. + delete_arg = None if autodelete else False + return TempDirectory( + path=actual_build_dir, + delete=delete_arg, + kind=tempdir_kinds.REQ_BUILD, + globally_managed=True, + ).path + + def _set_requirement(self) -> None: + """Set requirement after generating metadata.""" + assert self.req is None + assert self.metadata is not None + assert self.source_dir is not None + + # Construct a Requirement object from the generated metadata + if isinstance(parse_version(self.metadata["Version"]), Version): + op = "==" + else: + op = "===" + + self.req = Requirement( + "".join( + [ + self.metadata["Name"], + op, + self.metadata["Version"], + ] + ) + ) + + def warn_on_mismatching_name(self) -> None: + metadata_name = canonicalize_name(self.metadata["Name"]) + if canonicalize_name(self.req.name) == metadata_name: + # Everything is fine. + return + + # If we're here, there's a mismatch. Log a warning about it. + logger.warning( + "Generating metadata for package %s " + "produced metadata for project name %s. Fix your " + "#egg=%s fragments.", + self.name, + metadata_name, + self.name, + ) + self.req = Requirement(metadata_name) + + def check_if_exists(self, use_user_site: bool) -> None: + """Find an installed distribution that satisfies or conflicts + with this requirement, and set self.satisfied_by or + self.should_reinstall appropriately. + """ + if self.req is None: + return + existing_dist = get_default_environment().get_distribution(self.req.name) + if not existing_dist: + return + + version_compatible = self.req.specifier.contains( + existing_dist.version, + prereleases=True, + ) + if not version_compatible: + self.satisfied_by = None + if use_user_site: + if existing_dist.in_usersite: + self.should_reinstall = True + elif running_under_virtualenv() and existing_dist.in_site_packages: + raise InstallationError( + f"Will not install to the user site because it will " + f"lack sys.path precedence to {existing_dist.raw_name} " + f"in {existing_dist.location}" + ) + else: + self.should_reinstall = True + else: + if self.editable: + self.should_reinstall = True + # when installing editables, nothing pre-existing should ever + # satisfy + self.satisfied_by = None + else: + self.satisfied_by = existing_dist + + # Things valid for wheels + @property + def is_wheel(self) -> bool: + if not self.link: + return False + return self.link.is_wheel + + # Things valid for sdists + @property + def unpacked_source_directory(self) -> str: + return os.path.join( + self.source_dir, self.link and self.link.subdirectory_fragment or "" + ) + + @property + def setup_py_path(self) -> str: + assert self.source_dir, f"No source dir for {self}" + setup_py = os.path.join(self.unpacked_source_directory, "setup.py") + + return setup_py + + @property + def setup_cfg_path(self) -> str: + assert self.source_dir, f"No source dir for {self}" + setup_cfg = os.path.join(self.unpacked_source_directory, "setup.cfg") + + return setup_cfg + + @property + def pyproject_toml_path(self) -> str: + assert self.source_dir, f"No source dir for {self}" + return make_pyproject_path(self.unpacked_source_directory) + + def load_pyproject_toml(self) -> None: + """Load the pyproject.toml file. + + After calling this routine, all of the attributes related to PEP 517 + processing for this requirement have been set. In particular, the + use_pep517 attribute can be used to determine whether we should + follow the PEP 517 or legacy (setup.py) code path. + """ + pyproject_toml_data = load_pyproject_toml( + self.use_pep517, self.pyproject_toml_path, self.setup_py_path, str(self) + ) + + if pyproject_toml_data is None: + self.use_pep517 = False + return + + self.use_pep517 = True + requires, backend, check, backend_path = pyproject_toml_data + self.requirements_to_check = check + self.pyproject_requires = requires + self.pep517_backend = ConfiguredBuildBackendHookCaller( + self, + self.unpacked_source_directory, + backend, + backend_path=backend_path, + ) + + def isolated_editable_sanity_check(self) -> None: + """Check that an editable requirement if valid for use with PEP 517/518. + + This verifies that an editable that has a pyproject.toml either supports PEP 660 + or as a setup.py or a setup.cfg + """ + if ( + self.editable + and self.use_pep517 + and not self.supports_pyproject_editable() + and not os.path.isfile(self.setup_py_path) + and not os.path.isfile(self.setup_cfg_path) + ): + raise InstallationError( + f"Project {self} has a 'pyproject.toml' and its build " + f"backend is missing the 'build_editable' hook. Since it does not " + f"have a 'setup.py' nor a 'setup.cfg', " + f"it cannot be installed in editable mode. " + f"Consider using a build backend that supports PEP 660." + ) + + def prepare_metadata(self) -> None: + """Ensure that project metadata is available. + + Under PEP 517 and PEP 660, call the backend hook to prepare the metadata. + Under legacy processing, call setup.py egg-info. + """ + assert self.source_dir + details = self.name or f"from {self.link}" + + if self.use_pep517: + assert self.pep517_backend is not None + if ( + self.editable + and self.permit_editable_wheels + and self.supports_pyproject_editable() + ): + self.metadata_directory = generate_editable_metadata( + build_env=self.build_env, + backend=self.pep517_backend, + details=details, + ) + else: + self.metadata_directory = generate_metadata( + build_env=self.build_env, + backend=self.pep517_backend, + details=details, + ) + else: + self.metadata_directory = generate_metadata_legacy( + build_env=self.build_env, + setup_py_path=self.setup_py_path, + source_dir=self.unpacked_source_directory, + isolated=self.isolated, + details=details, + ) + + # Act on the newly generated metadata, based on the name and version. + if not self.name: + self._set_requirement() + else: + self.warn_on_mismatching_name() + + self.assert_source_matches_version() + + @property + def metadata(self) -> Any: + if not hasattr(self, "_metadata"): + self._metadata = self.get_dist().metadata + + return self._metadata + + def get_dist(self) -> BaseDistribution: + if self.metadata_directory: + return get_directory_distribution(self.metadata_directory) + elif self.local_file_path and self.is_wheel: + return get_wheel_distribution( + FilesystemWheel(self.local_file_path), canonicalize_name(self.name) + ) + raise AssertionError( + f"InstallRequirement {self} has no metadata directory and no wheel: " + f"can't make a distribution." + ) + + def assert_source_matches_version(self) -> None: + assert self.source_dir + version = self.metadata["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, + ) + + # For both source distributions and editables + def ensure_has_source_dir( + self, + parent_dir: str, + autodelete: bool = False, + parallel_builds: bool = False, + ) -> None: + """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.ensure_build_location( + parent_dir, + autodelete=autodelete, + parallel_builds=parallel_builds, + ) + + # For editable installations + def update_editable(self) -> None: + 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 + vcs_backend = vcs.get_backend_for_scheme(self.link.scheme) + # Editable requirements are validated in Requirement constructors. + # So here, if it's neither a path nor a valid VCS URL, it's a bug. + assert vcs_backend, f"Unsupported VCS URL {self.link.url}" + hidden_url = hide_url(self.link.url) + vcs_backend.obtain(self.source_dir, url=hidden_url, verbosity=0) + + # Top-level Actions + def uninstall( + self, auto_confirm: bool = False, verbose: bool = False + ) -> Optional[UninstallPathSet]: + """ + 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. + + """ + assert self.req + dist = get_default_environment().get_distribution(self.req.name) + if not dist: + logger.warning("Skipping %s as it is not installed.", self.name) + return None + logger.info("Found existing installation: %s", dist) + + uninstalled_pathset = UninstallPathSet.from_dist(dist) + uninstalled_pathset.remove(auto_confirm, verbose) + return uninstalled_pathset + + def _get_archive_name(self, path: str, parentdir: str, rootdir: str) -> str: + def _clean_zip_name(name: str, prefix: str) -> str: + assert name.startswith( + prefix + os.path.sep + ), f"name {name!r} doesn't start with prefix {prefix!r}" + name = name[len(prefix) + 1 :] + name = name.replace(os.path.sep, "/") + return name + + path = os.path.join(parentdir, path) + name = _clean_zip_name(path, rootdir) + return self.name + "/" + name + + def archive(self, build_dir: Optional[str]) -> None: + """Saves archive to provided build_dir. + + Used for saving downloaded VCS requirements as part of `pip download`. + """ + assert self.source_dir + if build_dir is None: + return + + create_archive = True + archive_name = "{}-{}.zip".format(self.name, self.metadata["version"]) + archive_path = os.path.join(build_dir, archive_name) + + if os.path.exists(archive_path): + response = ask_path_exists( + "The file {} exists. (i)gnore, (w)ipe, " + "(b)ackup, (a)bort ".format(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 not create_archive: + return + + zip_output = zipfile.ZipFile( + archive_path, + "w", + zipfile.ZIP_DEFLATED, + allowZip64=True, + ) + with zip_output: + dir = os.path.normcase(os.path.abspath(self.unpacked_source_directory)) + for dirpath, dirnames, filenames in os.walk(dir): + for dirname in dirnames: + dir_arcname = self._get_archive_name( + dirname, + parentdir=dirpath, + rootdir=dir, + ) + zipdir = zipfile.ZipInfo(dir_arcname + "/") + zipdir.external_attr = 0x1ED << 16 # 0o755 + zip_output.writestr(zipdir, "") + for filename in filenames: + file_arcname = self._get_archive_name( + filename, + parentdir=dirpath, + rootdir=dir, + ) + filename = os.path.join(dirpath, filename) + zip_output.write(filename, file_arcname) + + logger.info("Saved %s", display_path(archive_path)) + + def install( + self, + install_options: List[str], + global_options: Optional[Sequence[str]] = None, + root: Optional[str] = None, + home: Optional[str] = None, + prefix: Optional[str] = None, + warn_script_location: bool = True, + use_user_site: bool = False, + pycompile: bool = True, + ) -> None: + scheme = get_scheme( + self.name, + user=use_user_site, + home=home, + root=root, + isolated=self.isolated, + prefix=prefix, + ) + + global_options = global_options if global_options is not None else [] + if self.editable and not self.is_wheel: + install_editable_legacy( + install_options, + global_options, + prefix=prefix, + home=home, + use_user_site=use_user_site, + name=self.name, + setup_py_path=self.setup_py_path, + isolated=self.isolated, + build_env=self.build_env, + unpacked_source_directory=self.unpacked_source_directory, + ) + self.install_succeeded = True + return + + if self.is_wheel: + assert self.local_file_path + direct_url = None + # TODO this can be refactored to direct_url = self.download_info + if self.editable: + direct_url = direct_url_for_editable(self.unpacked_source_directory) + elif self.original_link: + direct_url = direct_url_from_link( + self.original_link, + self.source_dir, + self.original_link_is_in_wheel_cache, + ) + install_wheel( + self.name, + self.local_file_path, + scheme=scheme, + req_description=str(self.req), + pycompile=pycompile, + warn_script_location=warn_script_location, + direct_url=direct_url, + requested=self.user_supplied, + ) + self.install_succeeded = True + return + + # TODO: Why don't we do this for editable installs? + + # 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.global_options + install_options = list(install_options) + self.install_options + + try: + if ( + self.legacy_install_reason is not None + and self.legacy_install_reason.emit_before_install + ): + self.legacy_install_reason.emit_deprecation(self.name) + success = install_legacy( + install_options=install_options, + global_options=global_options, + root=root, + home=home, + prefix=prefix, + use_user_site=use_user_site, + pycompile=pycompile, + scheme=scheme, + setup_py_path=self.setup_py_path, + isolated=self.isolated, + req_name=self.name, + build_env=self.build_env, + unpacked_source_directory=self.unpacked_source_directory, + req_description=str(self.req), + ) + except LegacyInstallFailure as exc: + self.install_succeeded = False + raise exc + except Exception: + self.install_succeeded = True + raise + + self.install_succeeded = success + + if ( + success + and self.legacy_install_reason is not None + and self.legacy_install_reason.emit_after_success + ): + self.legacy_install_reason.emit_deprecation(self.name) + + +def check_invalid_constraint_type(req: InstallRequirement) -> str: + + # Check for unsupported forms + problem = "" + if not req.name: + problem = "Unnamed requirements are not allowed as constraints" + elif req.editable: + problem = "Editable requirements are not allowed as constraints" + elif req.extras: + problem = "Constraints cannot have extras" + + if problem: + deprecated( + reason=( + "Constraints are only allowed to take the form of a package " + "name and a version specifier. Other forms were originally " + "permitted as an accident of the implementation, but were " + "undocumented. The new implementation of the resolver no " + "longer supports these forms." + ), + replacement="replacing the constraint with a requirement", + # No plan yet for when the new resolver becomes default + gone_in=None, + issue=8210, + ) + + return problem + + +def _has_option(options: Values, reqs: List[InstallRequirement], option: str) -> bool: + if getattr(options, option, None): + return True + for req in reqs: + if getattr(req, option, None): + return True + return False + + +def _install_option_ignored( + install_options: List[str], reqs: List[InstallRequirement] +) -> bool: + for req in reqs: + if (install_options or req.install_options) and not req.use_pep517: + return False + return True + + +class LegacySetupPyOptionsCheckMode(Enum): + INSTALL = 1 + WHEEL = 2 + DOWNLOAD = 3 + + +def check_legacy_setup_py_options( + options: Values, + reqs: List[InstallRequirement], + mode: LegacySetupPyOptionsCheckMode, +) -> None: + has_install_options = _has_option(options, reqs, "install_options") + has_build_options = _has_option(options, reqs, "build_options") + has_global_options = _has_option(options, reqs, "global_options") + legacy_setup_py_options_present = ( + has_install_options or has_build_options or has_global_options + ) + if not legacy_setup_py_options_present: + return + + options.format_control.disallow_binaries() + logger.warning( + "Implying --no-binary=:all: due to the presence of " + "--build-option / --global-option / --install-option. " + "Consider using --config-settings for more flexibility.", + ) + if mode == LegacySetupPyOptionsCheckMode.INSTALL and has_install_options: + if _install_option_ignored(options.install_options, reqs): + logger.warning( + "Ignoring --install-option when building using PEP 517", + ) + else: + deprecated( + reason=( + "--install-option is deprecated because " + "it forces pip to use the 'setup.py install' " + "command which is itself deprecated." + ), + issue=11358, + replacement="to use --config-settings", + gone_in="23.1", + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/req_set.py b/venv/lib/python3.11/site-packages/pip/_internal/req/req_set.py new file mode 100644 index 0000000..ec7a6e0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/req/req_set.py @@ -0,0 +1,82 @@ +import logging +from collections import OrderedDict +from typing import Dict, List + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.req.req_install import InstallRequirement + +logger = logging.getLogger(__name__) + + +class RequirementSet: + def __init__(self, check_supported_wheels: bool = True) -> None: + """Create a RequirementSet.""" + + self.requirements: Dict[str, InstallRequirement] = OrderedDict() + self.check_supported_wheels = check_supported_wheels + + self.unnamed_requirements: List[InstallRequirement] = [] + + def __str__(self) -> str: + requirements = sorted( + (req for req in self.requirements.values() if not req.comes_from), + key=lambda req: canonicalize_name(req.name or ""), + ) + return " ".join(str(req.req) for req in requirements) + + def __repr__(self) -> str: + requirements = sorted( + self.requirements.values(), + key=lambda req: canonicalize_name(req.name or ""), + ) + + format_string = "<{classname} object; {count} requirement(s): {reqs}>" + return format_string.format( + classname=self.__class__.__name__, + count=len(requirements), + reqs=", ".join(str(req.req) for req in requirements), + ) + + def add_unnamed_requirement(self, install_req: InstallRequirement) -> None: + assert not install_req.name + self.unnamed_requirements.append(install_req) + + def add_named_requirement(self, install_req: InstallRequirement) -> None: + assert install_req.name + + project_name = canonicalize_name(install_req.name) + self.requirements[project_name] = install_req + + def has_requirement(self, name: str) -> bool: + project_name = canonicalize_name(name) + + return ( + project_name in self.requirements + and not self.requirements[project_name].constraint + ) + + def get_requirement(self, name: str) -> InstallRequirement: + project_name = canonicalize_name(name) + + if project_name in self.requirements: + return self.requirements[project_name] + + raise KeyError(f"No project with the name {name!r}") + + @property + def all_requirements(self) -> List[InstallRequirement]: + return self.unnamed_requirements + list(self.requirements.values()) + + @property + def requirements_to_install(self) -> List[InstallRequirement]: + """Return the list of requirements that need to be installed. + + TODO remove this property together with the legacy resolver, since the new + resolver only returns requirements that need to be installed. + """ + return [ + install_req + for install_req in self.all_requirements + if not install_req.constraint and not install_req.satisfied_by + ] diff --git a/venv/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py b/venv/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py new file mode 100644 index 0000000..15b6738 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py @@ -0,0 +1,640 @@ +import functools +import os +import sys +import sysconfig +from importlib.util import cache_from_source +from typing import Any, Callable, Dict, Generator, Iterable, List, Optional, Set, Tuple + +from pip._internal.exceptions import UninstallationError +from pip._internal.locations import get_bin_prefix, get_bin_user +from pip._internal.metadata import BaseDistribution +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.egg_link import egg_link_path_from_location +from pip._internal.utils.logging import getLogger, indent_log +from pip._internal.utils.misc import ask, is_local, normalize_path, renames, rmtree +from pip._internal.utils.temp_dir import AdjacentTempDirectory, TempDirectory + +logger = getLogger(__name__) + + +def _script_names( + bin_dir: str, script_name: str, is_gui: bool +) -> Generator[str, None, None]: + """Create the fully qualified name of the files created by + {console,gui}_scripts for the given ``dist``. + Returns the list of file names + """ + exe_name = os.path.join(bin_dir, script_name) + yield exe_name + if not WINDOWS: + return + yield f"{exe_name}.exe" + yield f"{exe_name}.exe.manifest" + if is_gui: + yield f"{exe_name}-script.pyw" + else: + yield f"{exe_name}-script.py" + + +def _unique( + fn: Callable[..., Generator[Any, None, None]] +) -> Callable[..., Generator[Any, None, None]]: + @functools.wraps(fn) + def unique(*args: Any, **kw: Any) -> Generator[Any, None, None]: + seen: Set[Any] = set() + for item in fn(*args, **kw): + if item not in seen: + seen.add(item) + yield item + + return unique + + +@_unique +def uninstallation_paths(dist: BaseDistribution) -> Generator[str, None, None]: + """ + Yield all the uninstallation paths for dist based on RECORD-without-.py[co] + + Yield paths to all the files in RECORD. For each .py file in RECORD, add + the .pyc and .pyo in the same directory. + + UninstallPathSet.add() takes care of the __pycache__ .py[co]. + + If RECORD is not found, raises UninstallationError, + with possible information from the INSTALLER file. + + https://packaging.python.org/specifications/recording-installed-packages/ + """ + location = dist.location + assert location is not None, "not installed" + + entries = dist.iter_declared_entries() + if entries is None: + msg = "Cannot uninstall {dist}, RECORD file not found.".format(dist=dist) + installer = dist.installer + if not installer or installer == "pip": + dep = "{}=={}".format(dist.raw_name, dist.version) + msg += ( + " You might be able to recover from this via: " + "'pip install --force-reinstall --no-deps {}'.".format(dep) + ) + else: + msg += " Hint: The package was installed by {}.".format(installer) + raise UninstallationError(msg) + + for entry in entries: + path = os.path.join(location, entry) + yield path + if path.endswith(".py"): + dn, fn = os.path.split(path) + base = fn[:-3] + path = os.path.join(dn, base + ".pyc") + yield path + path = os.path.join(dn, base + ".pyo") + yield path + + +def compact(paths: Iterable[str]) -> Set[str]: + """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[str] = set() + for path in sorted(paths, key=len): + should_skip = any( + path.startswith(shortpath.rstrip("*")) + and path[len(shortpath.rstrip("*").rstrip(sep))] == sep + for shortpath in short_paths + ) + if not should_skip: + short_paths.add(path) + return short_paths + + +def compress_for_rename(paths: Iterable[str]) -> Set[str]: + """Returns a set containing the paths that need to be renamed. + + This set may include directories when the original sequence of paths + included every file on disk. + """ + case_map = {os.path.normcase(p): p for p in paths} + remaining = set(case_map) + unchecked = sorted({os.path.split(p)[0] for p in case_map.values()}, key=len) + wildcards: Set[str] = set() + + def norm_join(*a: str) -> str: + return os.path.normcase(os.path.join(*a)) + + for root in unchecked: + if any(os.path.normcase(root).startswith(w) for w in wildcards): + # This directory has already been handled. + continue + + all_files: Set[str] = set() + all_subdirs: Set[str] = set() + for dirname, subdirs, files in os.walk(root): + all_subdirs.update(norm_join(root, dirname, d) for d in subdirs) + all_files.update(norm_join(root, dirname, f) for f in files) + # If all the files we found are in our remaining set of files to + # remove, then remove them from the latter set and add a wildcard + # for the directory. + if not (all_files - remaining): + remaining.difference_update(all_files) + wildcards.add(root + os.sep) + + return set(map(case_map.__getitem__, remaining)) | wildcards + + +def compress_for_output_listing(paths: Iterable[str]) -> Tuple[Set[str], Set[str]]: + """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 = set(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) + + # probably this one https://github.com/python/mypy/issues/390 + _normcased_files = set(map(os.path.normcase, files)) # type: ignore + + 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.join(dirpath, fname) + if ( + os.path.isfile(file_) + and os.path.normcase(file_) not in _normcased_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 StashedUninstallPathSet: + """A set of file rename operations to stash files while + tentatively uninstalling them.""" + + def __init__(self) -> None: + # Mapping from source file root to [Adjacent]TempDirectory + # for files under that directory. + self._save_dirs: Dict[str, TempDirectory] = {} + # (old path, new path) tuples for each move that may need + # to be undone. + self._moves: List[Tuple[str, str]] = [] + + def _get_directory_stash(self, path: str) -> str: + """Stashes a directory. + + Directories are stashed adjacent to their original location if + possible, or else moved/copied into the user's temp dir.""" + + try: + save_dir: TempDirectory = AdjacentTempDirectory(path) + except OSError: + save_dir = TempDirectory(kind="uninstall") + self._save_dirs[os.path.normcase(path)] = save_dir + + return save_dir.path + + def _get_file_stash(self, path: str) -> str: + """Stashes a file. + + If no root has been provided, one will be created for the directory + in the user's temp directory.""" + path = os.path.normcase(path) + head, old_head = os.path.dirname(path), None + save_dir = None + + while head != old_head: + try: + save_dir = self._save_dirs[head] + break + except KeyError: + pass + head, old_head = os.path.dirname(head), head + else: + # Did not find any suitable root + head = os.path.dirname(path) + save_dir = TempDirectory(kind="uninstall") + self._save_dirs[head] = save_dir + + relpath = os.path.relpath(path, head) + if relpath and relpath != os.path.curdir: + return os.path.join(save_dir.path, relpath) + return save_dir.path + + def stash(self, path: str) -> str: + """Stashes the directory or file and returns its new location. + Handle symlinks as files to avoid modifying the symlink targets. + """ + path_is_dir = os.path.isdir(path) and not os.path.islink(path) + if path_is_dir: + new_path = self._get_directory_stash(path) + else: + new_path = self._get_file_stash(path) + + self._moves.append((path, new_path)) + if path_is_dir and os.path.isdir(new_path): + # If we're moving a directory, we need to + # remove the destination first or else it will be + # moved to inside the existing directory. + # We just created new_path ourselves, so it will + # be removable. + os.rmdir(new_path) + renames(path, new_path) + return new_path + + def commit(self) -> None: + """Commits the uninstall by removing stashed files.""" + for _, save_dir in self._save_dirs.items(): + save_dir.cleanup() + self._moves = [] + self._save_dirs = {} + + def rollback(self) -> None: + """Undoes the uninstall by moving stashed files back.""" + for p in self._moves: + logger.info("Moving to %s\n from %s", *p) + + for new_path, path in self._moves: + try: + logger.debug("Replacing %s from %s", new_path, path) + if os.path.isfile(new_path) or os.path.islink(new_path): + os.unlink(new_path) + elif os.path.isdir(new_path): + rmtree(new_path) + renames(path, new_path) + except OSError as ex: + logger.error("Failed to restore %s", new_path) + logger.debug("Exception: %s", ex) + + self.commit() + + @property + def can_rollback(self) -> bool: + return bool(self._moves) + + +class UninstallPathSet: + """A set of file paths to be removed in the uninstallation of a + requirement.""" + + def __init__(self, dist: BaseDistribution) -> None: + self._paths: Set[str] = set() + self._refuse: Set[str] = set() + self._pth: Dict[str, UninstallPthEntries] = {} + self._dist = dist + self._moved_paths = StashedUninstallPathSet() + + def _permitted(self, path: str) -> bool: + """ + Return True if the given path is one we are permitted to + remove/modify, False otherwise. + + """ + return is_local(path) + + def add(self, path: str) -> None: + 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": + self.add(cache_from_source(path)) + + def add_pth(self, pth_file: str, entry: str) -> None: + 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 remove(self, auto_confirm: bool = False, verbose: bool = False) -> None: + """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.raw_name, + ) + return + + dist_name_version = f"{self._dist.raw_name}-{self._dist.version}" + logger.info("Uninstalling %s:", dist_name_version) + + with indent_log(): + if auto_confirm or self._allowed_to_proceed(verbose): + moved = self._moved_paths + + for_rename = compress_for_rename(self._paths) + + for path in sorted(compact(for_rename)): + moved.stash(path) + logger.verbose("Removing file or directory %s", path) + + for pth in self._pth.values(): + pth.remove() + + logger.info("Successfully uninstalled %s", dist_name_version) + + def _allowed_to_proceed(self, verbose: bool) -> bool: + """Display which files would be deleted and prompt for confirmation""" + + def _display(msg: str, paths: Iterable[str]) -> None: + 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 = set(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) + if verbose: + _display("Will actually move:", compress_for_rename(self._paths)) + + return ask("Proceed (Y/n)? ", ("y", "n", "")) != "n" + + def rollback(self) -> None: + """Rollback the changes previously made by remove().""" + if not self._moved_paths.can_rollback: + logger.error( + "Can't roll back %s; was not uninstalled", + self._dist.raw_name, + ) + return + logger.info("Rolling back uninstall of %s", self._dist.raw_name) + self._moved_paths.rollback() + for pth in self._pth.values(): + pth.rollback() + + def commit(self) -> None: + """Remove temporary save dir: rollback will no longer be possible.""" + self._moved_paths.commit() + + @classmethod + def from_dist(cls, dist: BaseDistribution) -> "UninstallPathSet": + dist_location = dist.location + info_location = dist.info_location + if dist_location is None: + logger.info( + "Not uninstalling %s since it is not installed", + dist.canonical_name, + ) + return cls(dist) + + normalized_dist_location = normalize_path(dist_location) + if not dist.local: + logger.info( + "Not uninstalling %s at %s, outside environment %s", + dist.canonical_name, + normalized_dist_location, + sys.prefix, + ) + return cls(dist) + + if normalized_dist_location 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.canonical_name, + normalized_dist_location, + ) + return cls(dist) + + paths_to_remove = cls(dist) + develop_egg_link = egg_link_path_from_location(dist.raw_name) + + # Distribution is installed with metadata in a "flat" .egg-info + # directory. This means it is not a modern .dist-info installation, an + # egg, or legacy editable. + setuptools_flat_installation = ( + dist.installed_with_setuptools_egg_info + and info_location is not None + and os.path.exists(info_location) + # If dist is editable and the location points to a ``.egg-info``, + # we are in fact in the legacy editable case. + and not info_location.endswith(f"{dist.setuptools_filename}.egg-info") + ) + + # 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 setuptools_flat_installation: + if info_location is not None: + paths_to_remove.add(info_location) + installed_files = dist.iter_declared_entries() + if installed_files is not None: + for installed_file in installed_files: + paths_to_remove.add(os.path.join(dist_location, installed_file)) + # FIXME: need a test for this elif block + # occurs with --single-version-externally-managed/--record outside + # of pip + elif dist.is_file("top_level.txt"): + try: + namespace_packages = dist.read_text("namespace_packages.txt") + except FileNotFoundError: + namespaces = [] + else: + namespaces = namespace_packages.splitlines(keepends=False) + for top_level_pkg in [ + p + for p in dist.read_text("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(f"{path}.py") + paths_to_remove.add(f"{path}.pyc") + paths_to_remove.add(f"{path}.pyo") + + elif dist.installed_by_distutils: + 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.raw_name, + ) + ) + + elif dist.installed_as_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 dist.installed_with_dist_info: + for path in uninstallation_paths(dist): + paths_to_remove.add(path) + + elif develop_egg_link: + # PEP 660 modern editable is handled in the ``.dist-info`` case + # above, so this only covers the setuptools-style editable. + with open(develop_egg_link) as fh: + link_pointer = os.path.normcase(fh.readline().strip()) + normalized_link_pointer = normalize_path(link_pointer) + assert os.path.samefile( + normalized_link_pointer, normalized_dist_location + ), ( + f"Egg-link {link_pointer} does not match installed location of " + f"{dist.raw_name} (at {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, + ) + + if dist.in_usersite: + bin_dir = get_bin_user() + else: + bin_dir = get_bin_prefix() + + # find distutils scripts= scripts + try: + for script in dist.iter_distutils_script_names(): + paths_to_remove.add(os.path.join(bin_dir, script)) + if WINDOWS: + paths_to_remove.add(os.path.join(bin_dir, f"{script}.bat")) + except (FileNotFoundError, NotADirectoryError): + pass + + # find console_scripts and gui_scripts + def iter_scripts_to_remove( + dist: BaseDistribution, + bin_dir: str, + ) -> Generator[str, None, None]: + for entry_point in dist.iter_entry_points(): + if entry_point.group == "console_scripts": + yield from _script_names(bin_dir, entry_point.name, False) + elif entry_point.group == "gui_scripts": + yield from _script_names(bin_dir, entry_point.name, True) + + for s in iter_scripts_to_remove(dist, bin_dir): + paths_to_remove.add(s) + + return paths_to_remove + + +class UninstallPthEntries: + def __init__(self, pth_file: str) -> None: + self.file = pth_file + self.entries: Set[str] = set() + self._saved_lines: Optional[List[bytes]] = None + + def add(self, entry: str) -> None: + 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. + # os.path.splitdrive is used instead of os.path.isabs because isabs + # treats non-absolute paths with drive letter markings like c:foo\bar + # as absolute paths. It also does not recognize UNC paths if they don't + # have more than "\\sever\share". Valid examples: "\\server\share\" or + # "\\server\share\folder". + if WINDOWS and not os.path.splitdrive(entry)[0]: + entry = entry.replace("\\", "/") + self.entries.add(entry) + + def remove(self) -> None: + logger.verbose("Removing pth entries from %s:", self.file) + + # If the file doesn't exist, log a warning and return + if not os.path.isfile(self.file): + logger.warning("Cannot remove entries from nonexistent file %s", self.file) + return + 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.verbose("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) -> bool: + 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.11/site-packages/pip/_internal/resolution/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a75ba40eb4fc36702d8e82e3a06c44df15d949e GIT binary patch literal 208 zcmXwzO$x#=5QP(qB0}*7?p@fSxD}7!#sh@@gf=xzLXsAG5|1F>!P|I&N_Sm30ey>a z-n_S%dBpLCpmwiM73MqOFZwgn3eBCAi8sSnZi^TrO6f@cun}foTK6}z literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/base.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/__pycache__/base.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca40c7f302d699817f747e6113d073b521574d11 GIT binary patch literal 1379 zcmb7DOK;Oa5Z?7GPH0nTOQA@u0-->JsHxxv;s8R3hYEt5FP4*?rUt*V-UO8sLLB%9 z@C!f{e}Nxiq#mk0RpP`gC~)D#tdpjVCV&0{}JPge-8b@t8kif}f$Www za*r_MEn((I{PSmghs&)n>lta3zALezOZ$!=hJG^yX*>!tA??Sh2$I+j8&uBTk28Vh zr_kvJ93qGXYO9CDXCPXmz{O#Wguw%3-V-1$WyIAOMYzTRJce+Y4%UW+5DmA)Ot4U% z@Yyh!g*Ka&5Uwq!Zu=QLg)9ksz-5^yiSRgdGP%&&gw_i$>!xYK1u*aBCP0`;i-YL$ zxTPP$r>daj!Eyml&;#2?WIvC^H*}k>Z&Nw9o{0NV8Wy<&yUTgPv1mpH;RaW|<;Rd@ zDrT)#`|UZKNd(Sw=A=A%4lR*6N!0V2e(Oayb$Sr@oG@rQ>6X|`;%lpGYfcsjxRRpX zZ$sv!LF#xxEP!JJ9ImqMs%|(=}( z4EU@11l*&Yiiq`5f+jk2^oFZLtwJX!I)C}G`D@l&4H>H6W&!qqk6YV4%ZOp=h7 zlsu=%X(ZdjUq>g~xH$L9r}`$!eKJWZ z%IDO|$Y(mQ)^^HgkMtaWSY%c}SZ^GYme@*zxXsn{4D&FNlS?=StK%ua-geZxU)5o* zi%0ulbBh8`TP1l;YlyRh74=5q<*Z5UDW5deREjjTfB}sbvLpPNcuXZbeCMt z|GoFf&3tn2lI!{8-dkGPHSKqo^0}3r%7xsxm^W_Z#*Lr4wyfpkOutg5SmM9Q52gEg IgrPwG2g|oysQ>@~ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/base.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/base.py new file mode 100644 index 0000000..42dade1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/base.py @@ -0,0 +1,20 @@ +from typing import Callable, List, Optional + +from pip._internal.req.req_install import InstallRequirement +from pip._internal.req.req_set import RequirementSet + +InstallRequirementProvider = Callable[ + [str, Optional[InstallRequirement]], InstallRequirement +] + + +class BaseResolver: + def resolve( + self, root_reqs: List[InstallRequirement], check_supported_wheels: bool + ) -> RequirementSet: + raise NotImplementedError() + + def get_installation_order( + self, req_set: RequirementSet + ) -> List[InstallRequirement]: + raise NotImplementedError() diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f1f1197bd9872df50f655bfe16c01ef56bfb00f6 GIT binary patch literal 215 zcmXwzK@Ng25Jg*w#+VRq;NFEyh+E?k+<1Vdzyyk=ZQ4S@Nj!q_4&KHKVA!#;B>ER` z{>)$edBpLC1npj*a-Q!Qf6<>ASHav#L9S#^FHd3@VISvks-e;iLS2Bdy2ji)&`rlO zp5Iyn9jXqb$iVcz((0I`DLCQrU_#DIbYO%5CX`33xCDz%%hn66Kw`=B9#{y4XDl)O cv_3VuXeFNQGE~pcxoyA@QA!8$hmFGR3n^|oUH||9 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b7b6f9522461f631932a135cbd0f82429264fae GIT binary patch literal 23801 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 WLdXMB@$9fve9BUO^_+CJ@c%EXNR^HN literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/resolver.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/resolver.py new file mode 100644 index 0000000..fb49d41 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/resolver.py @@ -0,0 +1,600 @@ +"""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) +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import logging +import sys +from collections import defaultdict +from itertools import chain +from typing import DefaultDict, Iterable, List, Optional, Set, Tuple + +from pip._vendor.packaging import specifiers +from pip._vendor.packaging.requirements import Requirement + +from pip._internal.cache import WheelCache +from pip._internal.exceptions import ( + BestVersionAlreadyInstalled, + DistributionNotFound, + HashError, + HashErrors, + InstallationError, + NoneMetadataError, + UnsupportedPythonVersion, +) +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.req_install import ( + InstallRequirement, + check_invalid_constraint_type, +) +from pip._internal.req.req_set import RequirementSet +from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider +from pip._internal.utils import compatibility_tags +from pip._internal.utils.compatibility_tags import get_supported +from pip._internal.utils.direct_url_helpers import direct_url_from_link +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import normalize_version_info +from pip._internal.utils.packaging import check_requires_python + +logger = logging.getLogger(__name__) + +DiscoveredDependencies = DefaultDict[str, List[InstallRequirement]] + + +def _check_dist_requires_python( + dist: BaseDistribution, + version_info: Tuple[int, int, int], + ignore_requires_python: bool = False, +) -> None: + """ + Check whether the given Python version is compatible with a distribution's + "Requires-Python" value. + + :param version_info: A 3-tuple of ints representing the Python + major-minor-micro version to check. + :param ignore_requires_python: Whether to ignore the "Requires-Python" + value if the given Python version isn't compatible. + + :raises UnsupportedPythonVersion: When the given Python version isn't + compatible. + """ + # This idiosyncratically converts the SpecifierSet to str and let + # check_requires_python then parse it again into SpecifierSet. But this + # is the legacy resolver so I'm just not going to bother refactoring. + try: + requires_python = str(dist.requires_python) + except FileNotFoundError as e: + raise NoneMetadataError(dist, str(e)) + try: + is_compatible = check_requires_python( + requires_python, + version_info=version_info, + ) + except specifiers.InvalidSpecifier as exc: + logger.warning( + "Package %r has an invalid Requires-Python: %s", dist.raw_name, exc + ) + return + + if is_compatible: + return + + version = ".".join(map(str, version_info)) + if ignore_requires_python: + logger.debug( + "Ignoring failed Requires-Python check for package %r: %s not in %r", + dist.raw_name, + version, + requires_python, + ) + return + + raise UnsupportedPythonVersion( + "Package {!r} requires a different Python: {} not in {!r}".format( + dist.raw_name, version, requires_python + ) + ) + + +class Resolver(BaseResolver): + """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: RequirementPreparer, + finder: PackageFinder, + wheel_cache: Optional[WheelCache], + make_install_req: InstallRequirementProvider, + use_user_site: bool, + ignore_dependencies: bool, + ignore_installed: bool, + ignore_requires_python: bool, + force_reinstall: bool, + upgrade_strategy: str, + py_version_info: Optional[Tuple[int, ...]] = None, + ) -> None: + super().__init__() + assert upgrade_strategy in self._allowed_strategies + + if py_version_info is None: + py_version_info = sys.version_info[:3] + else: + py_version_info = normalize_version_info(py_version_info) + + self._py_version_info = py_version_info + + self.preparer = preparer + self.finder = finder + self.wheel_cache = wheel_cache + + self.upgrade_strategy = upgrade_strategy + self.force_reinstall = force_reinstall + 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._make_install_req = make_install_req + + self._discovered_dependencies: DiscoveredDependencies = defaultdict(list) + + def resolve( + self, root_reqs: List[InstallRequirement], check_supported_wheels: bool + ) -> RequirementSet: + """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. + """ + requirement_set = RequirementSet(check_supported_wheels=check_supported_wheels) + for req in root_reqs: + if req.constraint: + check_invalid_constraint_type(req) + self._add_requirement_to_set(requirement_set, req) + + # Actually prepare the files, and collect any exceptions. Most hash + # exceptions cannot be checked ahead of time, because + # _populate_link() needs to be called before we can make decisions + # based on link type. + discovered_reqs: List[InstallRequirement] = [] + hash_errors = HashErrors() + for req in chain(requirement_set.all_requirements, 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 + + return requirement_set + + def _add_requirement_to_set( + self, + requirement_set: RequirementSet, + install_req: InstallRequirement, + parent_req_name: Optional[str] = None, + extras_requested: Optional[Iterable[str]] = None, + ) -> Tuple[List[InstallRequirement], Optional[InstallRequirement]]: + """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. + """ + # If the markers do not match, ignore this requirement. + 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 + + # If the wheel is not supported, raise an error. + # Should check this after filtering out based on environment markers to + # allow specifying different wheels based on the environment/OS, in a + # single requirements file. + if install_req.link and install_req.link.is_wheel: + wheel = Wheel(install_req.link.filename) + tags = compatibility_tags.get_supported() + if requirement_set.check_supported_wheels and not wheel.supported(tags): + raise InstallationError( + "{} is not a supported wheel on this platform.".format( + wheel.filename + ) + ) + + # This next bit is really a sanity check. + assert ( + not install_req.user_supplied or parent_req_name is None + ), "a user supplied req shouldn't have a parent" + + # Unnamed requirements are scanned again and the requirement won't be + # added as a dependency until after scanning. + if not install_req.name: + requirement_set.add_unnamed_requirement(install_req) + return [install_req], None + + try: + existing_req: Optional[ + InstallRequirement + ] = requirement_set.get_requirement(install_req.name) + except KeyError: + existing_req = None + + has_conflicting_requirement = ( + parent_req_name is None + and existing_req + and not existing_req.constraint + and existing_req.extras == install_req.extras + and existing_req.req + and install_req.req + and existing_req.req.specifier != install_req.req.specifier + ) + if has_conflicting_requirement: + raise InstallationError( + "Double requirement given: {} (already in {}, name={!r})".format( + install_req, existing_req, install_req.name + ) + ) + + # When no existing requirement exists, add the requirement as a + # dependency and it will be scanned again after. + if not existing_req: + requirement_set.add_named_requirement(install_req) + # We'd want to rescan this requirement later + return [install_req], install_req + + # Assume there's no need to scan, and that we've already + # encountered this for scanning. + if install_req.constraint or not existing_req.constraint: + return [], existing_req + + does_not_satisfy_constraint = install_req.link and not ( + existing_req.link and install_req.link.path == existing_req.link.path + ) + if does_not_satisfy_constraint: + raise InstallationError( + "Could not satisfy constraints for '{}': " + "installation from path or url cannot be " + "constrained to a version".format(install_req.name) + ) + # If we're now installing a constraint, mark the existing + # object for real installation. + existing_req.constraint = False + # If we're now installing a user supplied requirement, + # mark the existing object as such. + if install_req.user_supplied: + existing_req.user_supplied = True + existing_req.extras = tuple( + sorted(set(existing_req.extras) | set(install_req.extras)) + ) + logger.debug( + "Setting %s extras to: %s", + existing_req, + existing_req.extras, + ) + # Return the existing requirement for addition to the parent and + # scanning again. + return [existing_req], existing_req + + def _is_upgrade_allowed(self, req: InstallRequirement) -> bool: + 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.user_supplied or req.constraint + + def _set_req_to_reinstall(self, req: InstallRequirement) -> None: + """ + 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 req.satisfied_by.in_usersite: + req.should_reinstall = True + req.satisfied_by = None + + def _check_skip_installed( + self, req_to_install: InstallRequirement + ) -> Optional[str]: + """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 "already satisfied, skipping upgrade" + 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 _find_requirement_link(self, req: InstallRequirement) -> Optional[Link]: + upgrade = self._is_upgrade_allowed(req) + best_candidate = self.finder.find_requirement(req, upgrade) + if not best_candidate: + return None + + # Log a warning per PEP 592 if necessary before returning. + link = best_candidate.link + if link.is_yanked: + reason = link.yanked_reason or "" + msg = ( + # Mark this as a unicode string to prevent + # "UnicodeEncodeError: 'ascii' codec can't encode character" + # in Python 2 when the reason contains non-ascii characters. + "The candidate selected for download or install is a " + "yanked version: {candidate}\n" + "Reason for being yanked: {reason}" + ).format(candidate=best_candidate, reason=reason) + logger.warning(msg) + + return link + + def _populate_link(self, req: InstallRequirement) -> None: + """Ensure that if a link can be found for this, that it is found. + + Note that req.link may still be None - if the requirement is already + installed and not needed to be upgraded based on the return value of + _is_upgrade_allowed(). + + If preparer.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 req.link is None: + req.link = self._find_requirement_link(req) + + if self.wheel_cache is None or self.preparer.require_hashes: + return + cache_entry = self.wheel_cache.get_cache_entry( + link=req.link, + package_name=req.name, + supported_tags=get_supported(), + ) + if cache_entry is not None: + logger.debug("Using cached wheel link: %s", cache_entry.link) + if req.link is req.original_link and cache_entry.persistent: + req.original_link_is_in_wheel_cache = True + if cache_entry.origin is not None: + req.download_info = cache_entry.origin + else: + # Legacy cache entry that does not have origin.json. + # download_info may miss the archive_info.hash field. + req.download_info = direct_url_from_link( + req.link, link_is_in_wheel_cache=cache_entry.persistent + ) + req.link = cache_entry.link + + def _get_dist_for(self, req: InstallRequirement) -> BaseDistribution: + """Takes a InstallRequirement and returns a single AbstractDist \ + representing a prepared variant of the same. + """ + if req.editable: + return self.preparer.prepare_editable_requirement(req) + + # 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, skip_reason) + + # We eagerly populate the link, since that's our "legacy" behavior. + self._populate_link(req) + dist = self.preparer.prepare_linked_requirement(req) + + # 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 dist + + def _resolve_one( + self, + requirement_set: RequirementSet, + req_to_install: InstallRequirement, + ) -> List[InstallRequirement]: + """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 + + # Parse and return dependencies + dist = self._get_dist_for(req_to_install) + # This will raise UnsupportedPythonVersion if the given Python + # version isn't compatible with the distribution's Requires-Python. + _check_dist_requires_python( + dist, + version_info=self._py_version_info, + ignore_requires_python=self.ignore_requires_python, + ) + + more_reqs: List[InstallRequirement] = [] + + def add_req(subreq: Requirement, extras_requested: Iterable[str]) -> None: + # This idiosyncratically converts the Requirement to str and let + # make_install_req then parse it again into Requirement. But this is + # the legacy resolver so I'm just not going to bother refactoring. + sub_install_req = self._make_install_req(str(subreq), req_to_install) + parent_req_name = req_to_install.name + to_scan_again, add_to_parent = self._add_requirement_to_set( + requirement_set, + 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 + # 'unnamed' requirements can only come from being directly + # provided by the user. + assert req_to_install.user_supplied + self._add_requirement_to_set( + requirement_set, 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.iter_provided_extras()) + ) + for missing in missing_requested: + logger.warning( + "%s %s does not provide the extra '%s'", + dist.raw_name, + dist.version, + missing, + ) + + available_requested = sorted( + set(dist.iter_provided_extras()) & set(req_to_install.extras) + ) + for subreq in dist.iter_dependencies(available_requested): + add_req(subreq, extras_requested=available_requested) + + return more_reqs + + def get_installation_order( + self, req_set: RequirementSet + ) -> List[InstallRequirement]: + """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[InstallRequirement] = set() + + def schedule(req: InstallRequirement) -> None: + 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.11/site-packages/pip/_internal/resolution/resolvelib/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4569d53ab0e855587dd2c8b90c8a31afb98dda5e GIT binary patch literal 219 zcmXv|OA5j;5KSzK2*n$?cVUO(Ry=|m4-onp+SE1)Nm}ShJc4)!Z{r0j-F0Px_ATDL znfHd7M;LC1!|wGde0_VGLH}Z0IdLaBxspA-Jc(Yoe)Q%fpp*?lm4niA=mtN%lM> literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7978649f1fe505e4426ba2da3bd2fcb7db88b037 GIT binary patch literal 9632 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 S_ij|UncP9%M;$6ysQectz>e+! literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bf466c07fd3523426acfe83fad2ab808dd46afc GIT binary patch literal 28842 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2fc43cf7abd30de5a459af0b09b2989f53936c7 GIT binary patch literal 31986 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∋er920v)u7rw=@}&U5VBs!&1Qu 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 Q*I=Yk&97fj&-ePj0s6@!X#fBK literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e191485c141bcb0692a8a187624c31e21c7553d GIT binary patch literal 4664 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 DXL3f* literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b00c5b57d77f62a5f3359f32d78d0da716b8610a GIT binary patch literal 12316 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 OUUgCq`<8%9?Ee7foX5ie literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py new file mode 100644 index 0000000..b206692 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py @@ -0,0 +1,141 @@ +from typing import FrozenSet, Iterable, Optional, Tuple, Union + +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import LegacyVersion, Version + +from pip._internal.models.link import Link, links_equivalent +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.hashes import Hashes + +CandidateLookup = Tuple[Optional["Candidate"], Optional[InstallRequirement]] +CandidateVersion = Union[LegacyVersion, Version] + + +def format_name(project: str, extras: FrozenSet[str]) -> str: + if not extras: + return project + canonical_extras = sorted(canonicalize_name(e) for e in extras) + return "{}[{}]".format(project, ",".join(canonical_extras)) + + +class Constraint: + def __init__( + self, specifier: SpecifierSet, hashes: Hashes, links: FrozenSet[Link] + ) -> None: + self.specifier = specifier + self.hashes = hashes + self.links = links + + @classmethod + def empty(cls) -> "Constraint": + return Constraint(SpecifierSet(), Hashes(), frozenset()) + + @classmethod + def from_ireq(cls, ireq: InstallRequirement) -> "Constraint": + links = frozenset([ireq.link]) if ireq.link else frozenset() + return Constraint(ireq.specifier, ireq.hashes(trust_internet=False), links) + + def __bool__(self) -> bool: + return bool(self.specifier) or bool(self.hashes) or bool(self.links) + + def __and__(self, other: InstallRequirement) -> "Constraint": + if not isinstance(other, InstallRequirement): + return NotImplemented + specifier = self.specifier & other.specifier + hashes = self.hashes & other.hashes(trust_internet=False) + links = self.links + if other.link: + links = links.union([other.link]) + return Constraint(specifier, hashes, links) + + def is_satisfied_by(self, candidate: "Candidate") -> bool: + # Reject if there are any mismatched URL constraints on this package. + if self.links and not all(_match_link(link, candidate) for link in self.links): + return False + # We can safely always allow prereleases here since PackageFinder + # already implements the prerelease logic, and would have filtered out + # prerelease candidates if the user does not expect them. + return self.specifier.contains(candidate.version, prereleases=True) + + +class Requirement: + @property + def project_name(self) -> NormalizedName: + """The "project name" of a requirement. + + This is different from ``name`` if this requirement contains extras, + in which case ``name`` would contain the ``[...]`` part, while this + refers to the name of the project. + """ + raise NotImplementedError("Subclass should override") + + @property + def name(self) -> str: + """The name identifying this requirement in the resolver. + + This is different from ``project_name`` if this requirement contains + extras, where ``project_name`` would not contain the ``[...]`` part. + """ + raise NotImplementedError("Subclass should override") + + def is_satisfied_by(self, candidate: "Candidate") -> bool: + return False + + def get_candidate_lookup(self) -> CandidateLookup: + raise NotImplementedError("Subclass should override") + + def format_for_error(self) -> str: + raise NotImplementedError("Subclass should override") + + +def _match_link(link: Link, candidate: "Candidate") -> bool: + if candidate.source_link: + return links_equivalent(link, candidate.source_link) + return False + + +class Candidate: + @property + def project_name(self) -> NormalizedName: + """The "project name" of the candidate. + + This is different from ``name`` if this candidate contains extras, + in which case ``name`` would contain the ``[...]`` part, while this + refers to the name of the project. + """ + raise NotImplementedError("Override in subclass") + + @property + def name(self) -> str: + """The name identifying this candidate in the resolver. + + This is different from ``project_name`` if this candidate contains + extras, where ``project_name`` would not contain the ``[...]`` part. + """ + raise NotImplementedError("Override in subclass") + + @property + def version(self) -> CandidateVersion: + raise NotImplementedError("Override in subclass") + + @property + def is_installed(self) -> bool: + raise NotImplementedError("Override in subclass") + + @property + def is_editable(self) -> bool: + raise NotImplementedError("Override in subclass") + + @property + def source_link(self) -> Optional[Link]: + raise NotImplementedError("Override in subclass") + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + raise NotImplementedError("Override in subclass") + + def get_install_requirement(self) -> Optional[InstallRequirement]: + raise NotImplementedError("Override in subclass") + + def format_for_error(self) -> str: + raise NotImplementedError("Subclass should override") diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py new file mode 100644 index 0000000..f5bc343 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py @@ -0,0 +1,556 @@ +import logging +import sys +from typing import TYPE_CHECKING, Any, FrozenSet, Iterable, Optional, Tuple, Union, cast + +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import Version + +from pip._internal.exceptions import ( + HashError, + InstallationSubprocessError, + MetadataInconsistent, +) +from pip._internal.metadata import BaseDistribution +from pip._internal.models.link import Link, links_equivalent +from pip._internal.models.wheel import Wheel +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, +) +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.direct_url_helpers import direct_url_from_link +from pip._internal.utils.misc import normalize_version_info + +from .base import Candidate, CandidateVersion, Requirement, format_name + +if TYPE_CHECKING: + from .factory import Factory + +logger = logging.getLogger(__name__) + +BaseCandidate = Union[ + "AlreadyInstalledCandidate", + "EditableCandidate", + "LinkCandidate", +] + +# Avoid conflicting with the PyPI package "Python". +REQUIRES_PYTHON_IDENTIFIER = cast(NormalizedName, "") + + +def as_base_candidate(candidate: Candidate) -> Optional[BaseCandidate]: + """The runtime version of BaseCandidate.""" + base_candidate_classes = ( + AlreadyInstalledCandidate, + EditableCandidate, + LinkCandidate, + ) + if isinstance(candidate, base_candidate_classes): + return candidate + return None + + +def make_install_req_from_link( + link: Link, template: InstallRequirement +) -> InstallRequirement: + assert not template.editable, "template is editable" + if template.req: + line = str(template.req) + else: + line = link.url + ireq = install_req_from_line( + line, + user_supplied=template.user_supplied, + comes_from=template.comes_from, + use_pep517=template.use_pep517, + isolated=template.isolated, + constraint=template.constraint, + options=dict( + install_options=template.install_options, + global_options=template.global_options, + hashes=template.hash_options, + ), + config_settings=template.config_settings, + ) + ireq.original_link = template.original_link + ireq.link = link + return ireq + + +def make_install_req_from_editable( + link: Link, template: InstallRequirement +) -> InstallRequirement: + assert template.editable, "template not editable" + return install_req_from_editable( + link.url, + user_supplied=template.user_supplied, + comes_from=template.comes_from, + use_pep517=template.use_pep517, + isolated=template.isolated, + constraint=template.constraint, + permit_editable_wheels=template.permit_editable_wheels, + options=dict( + install_options=template.install_options, + global_options=template.global_options, + hashes=template.hash_options, + ), + config_settings=template.config_settings, + ) + + +def _make_install_req_from_dist( + dist: BaseDistribution, template: InstallRequirement +) -> InstallRequirement: + if template.req: + line = str(template.req) + elif template.link: + line = f"{dist.canonical_name} @ {template.link.url}" + else: + line = f"{dist.canonical_name}=={dist.version}" + ireq = install_req_from_line( + line, + user_supplied=template.user_supplied, + comes_from=template.comes_from, + use_pep517=template.use_pep517, + isolated=template.isolated, + constraint=template.constraint, + options=dict( + install_options=template.install_options, + global_options=template.global_options, + hashes=template.hash_options, + ), + config_settings=template.config_settings, + ) + ireq.satisfied_by = dist + return ireq + + +class _InstallRequirementBackedCandidate(Candidate): + """A candidate backed by an ``InstallRequirement``. + + This represents a package request with the target not being already + in the environment, and needs to be fetched and installed. The backing + ``InstallRequirement`` is responsible for most of the leg work; this + class exposes appropriate information to the resolver. + + :param link: The link passed to the ``InstallRequirement``. The backing + ``InstallRequirement`` will use this link to fetch the distribution. + :param source_link: The link this candidate "originates" from. This is + different from ``link`` when the link is found in the wheel cache. + ``link`` would point to the wheel cache, while this points to the + found remote link (e.g. from pypi.org). + """ + + dist: BaseDistribution + is_installed = False + + def __init__( + self, + link: Link, + source_link: Link, + ireq: InstallRequirement, + factory: "Factory", + name: Optional[NormalizedName] = None, + version: Optional[CandidateVersion] = None, + ) -> None: + self._link = link + self._source_link = source_link + self._factory = factory + self._ireq = ireq + self._name = name + self._version = version + self.dist = self._prepare() + + def __str__(self) -> str: + return f"{self.name} {self.version}" + + def __repr__(self) -> str: + return "{class_name}({link!r})".format( + class_name=self.__class__.__name__, + link=str(self._link), + ) + + def __hash__(self) -> int: + return hash((self.__class__, self._link)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return links_equivalent(self._link, other._link) + return False + + @property + def source_link(self) -> Optional[Link]: + return self._source_link + + @property + def project_name(self) -> NormalizedName: + """The normalised name of the project the candidate refers to""" + if self._name is None: + self._name = self.dist.canonical_name + return self._name + + @property + def name(self) -> str: + return self.project_name + + @property + def version(self) -> CandidateVersion: + if self._version is None: + self._version = self.dist.version + return self._version + + def format_for_error(self) -> str: + return "{} {} (from {})".format( + self.name, + self.version, + self._link.file_path if self._link.is_file else self._link, + ) + + def _prepare_distribution(self) -> BaseDistribution: + raise NotImplementedError("Override in subclass") + + def _check_metadata_consistency(self, dist: BaseDistribution) -> None: + """Check for consistency of project name and version of dist.""" + if self._name is not None and self._name != dist.canonical_name: + raise MetadataInconsistent( + self._ireq, + "name", + self._name, + dist.canonical_name, + ) + if self._version is not None and self._version != dist.version: + raise MetadataInconsistent( + self._ireq, + "version", + str(self._version), + str(dist.version), + ) + + def _prepare(self) -> BaseDistribution: + try: + dist = self._prepare_distribution() + except HashError as e: + # Provide HashError the underlying ireq that caused it. This + # provides context for the resulting error message to show the + # offending line to the user. + e.req = self._ireq + raise + except InstallationSubprocessError as exc: + # The output has been presented already, so don't duplicate it. + exc.context = "See above for output." + raise + + self._check_metadata_consistency(dist) + return dist + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + requires = self.dist.iter_dependencies() if with_requires else () + for r in requires: + yield self._factory.make_requirement_from_spec(str(r), self._ireq) + yield self._factory.make_requires_python_requirement(self.dist.requires_python) + + def get_install_requirement(self) -> Optional[InstallRequirement]: + return self._ireq + + +class LinkCandidate(_InstallRequirementBackedCandidate): + is_editable = False + + def __init__( + self, + link: Link, + template: InstallRequirement, + factory: "Factory", + name: Optional[NormalizedName] = None, + version: Optional[CandidateVersion] = None, + ) -> None: + source_link = link + cache_entry = factory.get_wheel_cache_entry(link, name) + if cache_entry is not None: + logger.debug("Using cached wheel link: %s", cache_entry.link) + link = cache_entry.link + ireq = make_install_req_from_link(link, template) + assert ireq.link == link + if ireq.link.is_wheel and not ireq.link.is_file: + wheel = Wheel(ireq.link.filename) + wheel_name = canonicalize_name(wheel.name) + assert name == wheel_name, f"{name!r} != {wheel_name!r} for wheel" + # Version may not be present for PEP 508 direct URLs + if version is not None: + wheel_version = Version(wheel.version) + assert version == wheel_version, "{!r} != {!r} for wheel {}".format( + version, wheel_version, name + ) + + if cache_entry is not None: + if cache_entry.persistent and template.link is template.original_link: + ireq.original_link_is_in_wheel_cache = True + if cache_entry.origin is not None: + ireq.download_info = cache_entry.origin + else: + # Legacy cache entry that does not have origin.json. + # download_info may miss the archive_info.hash field. + ireq.download_info = direct_url_from_link( + source_link, link_is_in_wheel_cache=cache_entry.persistent + ) + + super().__init__( + link=link, + source_link=source_link, + ireq=ireq, + factory=factory, + name=name, + version=version, + ) + + def _prepare_distribution(self) -> BaseDistribution: + preparer = self._factory.preparer + return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True) + + +class EditableCandidate(_InstallRequirementBackedCandidate): + is_editable = True + + def __init__( + self, + link: Link, + template: InstallRequirement, + factory: "Factory", + name: Optional[NormalizedName] = None, + version: Optional[CandidateVersion] = None, + ) -> None: + super().__init__( + link=link, + source_link=link, + ireq=make_install_req_from_editable(link, template), + factory=factory, + name=name, + version=version, + ) + + def _prepare_distribution(self) -> BaseDistribution: + return self._factory.preparer.prepare_editable_requirement(self._ireq) + + +class AlreadyInstalledCandidate(Candidate): + is_installed = True + source_link = None + + def __init__( + self, + dist: BaseDistribution, + template: InstallRequirement, + factory: "Factory", + ) -> None: + self.dist = dist + self._ireq = _make_install_req_from_dist(dist, template) + self._factory = factory + + # This is just logging some messages, so we can do it eagerly. + # The returned dist would be exactly the same as self.dist because we + # set satisfied_by in _make_install_req_from_dist. + # TODO: Supply reason based on force_reinstall and upgrade_strategy. + skip_reason = "already satisfied" + factory.preparer.prepare_installed_requirement(self._ireq, skip_reason) + + def __str__(self) -> str: + return str(self.dist) + + def __repr__(self) -> str: + return "{class_name}({distribution!r})".format( + class_name=self.__class__.__name__, + distribution=self.dist, + ) + + def __hash__(self) -> int: + return hash((self.__class__, self.name, self.version)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return self.name == other.name and self.version == other.version + return False + + @property + def project_name(self) -> NormalizedName: + return self.dist.canonical_name + + @property + def name(self) -> str: + return self.project_name + + @property + def version(self) -> CandidateVersion: + return self.dist.version + + @property + def is_editable(self) -> bool: + return self.dist.editable + + def format_for_error(self) -> str: + return f"{self.name} {self.version} (Installed)" + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + if not with_requires: + return + for r in self.dist.iter_dependencies(): + yield self._factory.make_requirement_from_spec(str(r), self._ireq) + + def get_install_requirement(self) -> Optional[InstallRequirement]: + return None + + +class ExtrasCandidate(Candidate): + """A candidate that has 'extras', indicating additional dependencies. + + Requirements can be for a project with dependencies, something like + foo[extra]. The extras don't affect the project/version being installed + directly, but indicate that we need additional dependencies. We model that + by having an artificial ExtrasCandidate that wraps the "base" candidate. + + The ExtrasCandidate differs from the base in the following ways: + + 1. It has a unique name, of the form foo[extra]. This causes the resolver + to treat it as a separate node in the dependency graph. + 2. When we're getting the candidate's dependencies, + a) We specify that we want the extra dependencies as well. + b) We add a dependency on the base candidate. + See below for why this is needed. + 3. We return None for the underlying InstallRequirement, as the base + candidate will provide it, and we don't want to end up with duplicates. + + The dependency on the base candidate is needed so that the resolver can't + decide that it should recommend foo[extra1] version 1.0 and foo[extra2] + version 2.0. Having those candidates depend on foo=1.0 and foo=2.0 + respectively forces the resolver to recognise that this is a conflict. + """ + + def __init__( + self, + base: BaseCandidate, + extras: FrozenSet[str], + ) -> None: + self.base = base + self.extras = extras + + def __str__(self) -> str: + name, rest = str(self.base).split(" ", 1) + return "{}[{}] {}".format(name, ",".join(self.extras), rest) + + def __repr__(self) -> str: + return "{class_name}(base={base!r}, extras={extras!r})".format( + class_name=self.__class__.__name__, + base=self.base, + extras=self.extras, + ) + + def __hash__(self) -> int: + return hash((self.base, self.extras)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return self.base == other.base and self.extras == other.extras + return False + + @property + def project_name(self) -> NormalizedName: + return self.base.project_name + + @property + def name(self) -> str: + """The normalised name of the project the candidate refers to""" + return format_name(self.base.project_name, self.extras) + + @property + def version(self) -> CandidateVersion: + return self.base.version + + def format_for_error(self) -> str: + return "{} [{}]".format( + self.base.format_for_error(), ", ".join(sorted(self.extras)) + ) + + @property + def is_installed(self) -> bool: + return self.base.is_installed + + @property + def is_editable(self) -> bool: + return self.base.is_editable + + @property + def source_link(self) -> Optional[Link]: + return self.base.source_link + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + factory = self.base._factory + + # Add a dependency on the exact base + # (See note 2b in the class docstring) + yield factory.make_requirement_from_candidate(self.base) + if not with_requires: + return + + # The user may have specified extras that the candidate doesn't + # support. We ignore any unsupported extras here. + valid_extras = self.extras.intersection(self.base.dist.iter_provided_extras()) + invalid_extras = self.extras.difference(self.base.dist.iter_provided_extras()) + for extra in sorted(invalid_extras): + logger.warning( + "%s %s does not provide the extra '%s'", + self.base.name, + self.version, + extra, + ) + + for r in self.base.dist.iter_dependencies(valid_extras): + requirement = factory.make_requirement_from_spec( + str(r), self.base._ireq, valid_extras + ) + if requirement: + yield requirement + + def get_install_requirement(self) -> Optional[InstallRequirement]: + # We don't return anything here, because we always + # depend on the base candidate, and we'll get the + # install requirement from that. + return None + + +class RequiresPythonCandidate(Candidate): + is_installed = False + source_link = None + + def __init__(self, py_version_info: Optional[Tuple[int, ...]]) -> None: + if py_version_info is not None: + version_info = normalize_version_info(py_version_info) + else: + version_info = sys.version_info[:3] + self._version = Version(".".join(str(c) for c in version_info)) + + # We don't need to implement __eq__() and __ne__() since there is always + # only one RequiresPythonCandidate in a resolution, i.e. the host Python. + # The built-in object.__eq__() and object.__ne__() do exactly what we want. + + def __str__(self) -> str: + return f"Python {self._version}" + + @property + def project_name(self) -> NormalizedName: + return REQUIRES_PYTHON_IDENTIFIER + + @property + def name(self) -> str: + return REQUIRES_PYTHON_IDENTIFIER + + @property + def version(self) -> CandidateVersion: + return self._version + + def format_for_error(self) -> str: + return f"Python {self.version}" + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + return () + + def get_install_requirement(self) -> Optional[InstallRequirement]: + return None diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py new file mode 100644 index 0000000..a4c24b5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py @@ -0,0 +1,731 @@ +import contextlib +import functools +import logging +from typing import ( + TYPE_CHECKING, + Dict, + FrozenSet, + Iterable, + Iterator, + List, + Mapping, + NamedTuple, + Optional, + Sequence, + Set, + Tuple, + TypeVar, + cast, +) + +from pip._vendor.packaging.requirements import InvalidRequirement +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.resolvelib import ResolutionImpossible + +from pip._internal.cache import CacheEntry, WheelCache +from pip._internal.exceptions import ( + DistributionNotFound, + InstallationError, + MetadataInconsistent, + UnsupportedPythonVersion, + UnsupportedWheel, +) +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution, get_default_environment +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.constructors import install_req_from_link_and_ireq +from pip._internal.req.req_install import ( + InstallRequirement, + check_invalid_constraint_type, +) +from pip._internal.resolution.base import InstallRequirementProvider +from pip._internal.utils.compatibility_tags import get_supported +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.packaging import get_requirement +from pip._internal.utils.virtualenv import running_under_virtualenv + +from .base import Candidate, CandidateVersion, Constraint, Requirement +from .candidates import ( + AlreadyInstalledCandidate, + BaseCandidate, + EditableCandidate, + ExtrasCandidate, + LinkCandidate, + RequiresPythonCandidate, + as_base_candidate, +) +from .found_candidates import FoundCandidates, IndexCandidateInfo +from .requirements import ( + ExplicitRequirement, + RequiresPythonRequirement, + SpecifierRequirement, + UnsatisfiableRequirement, +) + +if TYPE_CHECKING: + from typing import Protocol + + class ConflictCause(Protocol): + requirement: RequiresPythonRequirement + parent: Candidate + + +logger = logging.getLogger(__name__) + +C = TypeVar("C") +Cache = Dict[Link, C] + + +class CollectedRootRequirements(NamedTuple): + requirements: List[Requirement] + constraints: Dict[str, Constraint] + user_requested: Dict[str, int] + + +class Factory: + def __init__( + self, + finder: PackageFinder, + preparer: RequirementPreparer, + make_install_req: InstallRequirementProvider, + wheel_cache: Optional[WheelCache], + use_user_site: bool, + force_reinstall: bool, + ignore_installed: bool, + ignore_requires_python: bool, + py_version_info: Optional[Tuple[int, ...]] = None, + ) -> None: + self._finder = finder + self.preparer = preparer + self._wheel_cache = wheel_cache + self._python_candidate = RequiresPythonCandidate(py_version_info) + self._make_install_req_from_spec = make_install_req + self._use_user_site = use_user_site + self._force_reinstall = force_reinstall + self._ignore_requires_python = ignore_requires_python + + self._build_failures: Cache[InstallationError] = {} + self._link_candidate_cache: Cache[LinkCandidate] = {} + self._editable_candidate_cache: Cache[EditableCandidate] = {} + self._installed_candidate_cache: Dict[str, AlreadyInstalledCandidate] = {} + self._extras_candidate_cache: Dict[ + Tuple[int, FrozenSet[str]], ExtrasCandidate + ] = {} + + if not ignore_installed: + env = get_default_environment() + self._installed_dists = { + dist.canonical_name: dist + for dist in env.iter_installed_distributions(local_only=False) + } + else: + self._installed_dists = {} + + @property + def force_reinstall(self) -> bool: + return self._force_reinstall + + def _fail_if_link_is_unsupported_wheel(self, link: Link) -> None: + if not link.is_wheel: + return + wheel = Wheel(link.filename) + if wheel.supported(self._finder.target_python.get_tags()): + return + msg = f"{link.filename} is not a supported wheel on this platform." + raise UnsupportedWheel(msg) + + def _make_extras_candidate( + self, base: BaseCandidate, extras: FrozenSet[str] + ) -> ExtrasCandidate: + cache_key = (id(base), extras) + try: + candidate = self._extras_candidate_cache[cache_key] + except KeyError: + candidate = ExtrasCandidate(base, extras) + self._extras_candidate_cache[cache_key] = candidate + return candidate + + def _make_candidate_from_dist( + self, + dist: BaseDistribution, + extras: FrozenSet[str], + template: InstallRequirement, + ) -> Candidate: + try: + base = self._installed_candidate_cache[dist.canonical_name] + except KeyError: + base = AlreadyInstalledCandidate(dist, template, factory=self) + self._installed_candidate_cache[dist.canonical_name] = base + if not extras: + return base + return self._make_extras_candidate(base, extras) + + def _make_candidate_from_link( + self, + link: Link, + extras: FrozenSet[str], + template: InstallRequirement, + name: Optional[NormalizedName], + version: Optional[CandidateVersion], + ) -> Optional[Candidate]: + # TODO: Check already installed candidate, and use it if the link and + # editable flag match. + + if link in self._build_failures: + # We already tried this candidate before, and it does not build. + # Don't bother trying again. + return None + + if template.editable: + if link not in self._editable_candidate_cache: + try: + self._editable_candidate_cache[link] = EditableCandidate( + link, + template, + factory=self, + name=name, + version=version, + ) + except MetadataInconsistent as e: + logger.info( + "Discarding [blue underline]%s[/]: [yellow]%s[reset]", + link, + e, + extra={"markup": True}, + ) + self._build_failures[link] = e + return None + + base: BaseCandidate = self._editable_candidate_cache[link] + else: + if link not in self._link_candidate_cache: + try: + self._link_candidate_cache[link] = LinkCandidate( + link, + template, + factory=self, + name=name, + version=version, + ) + except MetadataInconsistent as e: + logger.info( + "Discarding [blue underline]%s[/]: [yellow]%s[reset]", + link, + e, + extra={"markup": True}, + ) + self._build_failures[link] = e + return None + base = self._link_candidate_cache[link] + + if not extras: + return base + return self._make_extras_candidate(base, extras) + + def _iter_found_candidates( + self, + ireqs: Sequence[InstallRequirement], + specifier: SpecifierSet, + hashes: Hashes, + prefers_installed: bool, + incompatible_ids: Set[int], + ) -> Iterable[Candidate]: + if not ireqs: + return () + + # The InstallRequirement implementation requires us to give it a + # "template". Here we just choose the first requirement to represent + # all of them. + # Hopefully the Project model can correct this mismatch in the future. + template = ireqs[0] + assert template.req, "Candidates found on index must be PEP 508" + name = canonicalize_name(template.req.name) + + extras: FrozenSet[str] = frozenset() + for ireq in ireqs: + assert ireq.req, "Candidates found on index must be PEP 508" + specifier &= ireq.req.specifier + hashes &= ireq.hashes(trust_internet=False) + extras |= frozenset(ireq.extras) + + def _get_installed_candidate() -> Optional[Candidate]: + """Get the candidate for the currently-installed version.""" + # If --force-reinstall is set, we want the version from the index + # instead, so we "pretend" there is nothing installed. + if self._force_reinstall: + return None + try: + installed_dist = self._installed_dists[name] + except KeyError: + return None + # Don't use the installed distribution if its version does not fit + # the current dependency graph. + if not specifier.contains(installed_dist.version, prereleases=True): + return None + candidate = self._make_candidate_from_dist( + dist=installed_dist, + extras=extras, + template=template, + ) + # The candidate is a known incompatibility. Don't use it. + if id(candidate) in incompatible_ids: + return None + return candidate + + def iter_index_candidate_infos() -> Iterator[IndexCandidateInfo]: + result = self._finder.find_best_candidate( + project_name=name, + specifier=specifier, + hashes=hashes, + ) + icans = list(result.iter_applicable()) + + # PEP 592: Yanked releases are ignored unless the specifier + # explicitly pins a version (via '==' or '===') that can be + # solely satisfied by a yanked release. + all_yanked = all(ican.link.is_yanked for ican in icans) + + def is_pinned(specifier: SpecifierSet) -> bool: + for sp in specifier: + if sp.operator == "===": + return True + if sp.operator != "==": + continue + if sp.version.endswith(".*"): + continue + return True + return False + + pinned = is_pinned(specifier) + + # PackageFinder returns earlier versions first, so we reverse. + for ican in reversed(icans): + if not (all_yanked and pinned) and ican.link.is_yanked: + continue + func = functools.partial( + self._make_candidate_from_link, + link=ican.link, + extras=extras, + template=template, + name=name, + version=ican.version, + ) + yield ican.version, func + + return FoundCandidates( + iter_index_candidate_infos, + _get_installed_candidate(), + prefers_installed, + incompatible_ids, + ) + + def _iter_explicit_candidates_from_base( + self, + base_requirements: Iterable[Requirement], + extras: FrozenSet[str], + ) -> Iterator[Candidate]: + """Produce explicit candidates from the base given an extra-ed package. + + :param base_requirements: Requirements known to the resolver. The + requirements are guaranteed to not have extras. + :param extras: The extras to inject into the explicit requirements' + candidates. + """ + for req in base_requirements: + lookup_cand, _ = req.get_candidate_lookup() + if lookup_cand is None: # Not explicit. + continue + # We've stripped extras from the identifier, and should always + # get a BaseCandidate here, unless there's a bug elsewhere. + base_cand = as_base_candidate(lookup_cand) + assert base_cand is not None, "no extras here" + yield self._make_extras_candidate(base_cand, extras) + + def _iter_candidates_from_constraints( + self, + identifier: str, + constraint: Constraint, + template: InstallRequirement, + ) -> Iterator[Candidate]: + """Produce explicit candidates from constraints. + + This creates "fake" InstallRequirement objects that are basically clones + of what "should" be the template, but with original_link set to link. + """ + for link in constraint.links: + self._fail_if_link_is_unsupported_wheel(link) + candidate = self._make_candidate_from_link( + link, + extras=frozenset(), + template=install_req_from_link_and_ireq(link, template), + name=canonicalize_name(identifier), + version=None, + ) + if candidate: + yield candidate + + def find_candidates( + self, + identifier: str, + requirements: Mapping[str, Iterable[Requirement]], + incompatibilities: Mapping[str, Iterator[Candidate]], + constraint: Constraint, + prefers_installed: bool, + ) -> Iterable[Candidate]: + # Collect basic lookup information from the requirements. + explicit_candidates: Set[Candidate] = set() + ireqs: List[InstallRequirement] = [] + for req in requirements[identifier]: + cand, ireq = req.get_candidate_lookup() + if cand is not None: + explicit_candidates.add(cand) + if ireq is not None: + ireqs.append(ireq) + + # If the current identifier contains extras, add explicit candidates + # from entries from extra-less identifier. + with contextlib.suppress(InvalidRequirement): + parsed_requirement = get_requirement(identifier) + explicit_candidates.update( + self._iter_explicit_candidates_from_base( + requirements.get(parsed_requirement.name, ()), + frozenset(parsed_requirement.extras), + ), + ) + + # Add explicit candidates from constraints. We only do this if there are + # known ireqs, which represent requirements not already explicit. If + # there are no ireqs, we're constraining already-explicit requirements, + # which is handled later when we return the explicit candidates. + if ireqs: + try: + explicit_candidates.update( + self._iter_candidates_from_constraints( + identifier, + constraint, + template=ireqs[0], + ), + ) + except UnsupportedWheel: + # If we're constrained to install a wheel incompatible with the + # target architecture, no candidates will ever be valid. + return () + + # Since we cache all the candidates, incompatibility identification + # can be made quicker by comparing only the id() values. + incompat_ids = {id(c) for c in incompatibilities.get(identifier, ())} + + # If none of the requirements want an explicit candidate, we can ask + # the finder for candidates. + if not explicit_candidates: + return self._iter_found_candidates( + ireqs, + constraint.specifier, + constraint.hashes, + prefers_installed, + incompat_ids, + ) + + return ( + c + for c in explicit_candidates + if id(c) not in incompat_ids + and constraint.is_satisfied_by(c) + and all(req.is_satisfied_by(c) for req in requirements[identifier]) + ) + + def _make_requirement_from_install_req( + self, ireq: InstallRequirement, requested_extras: Iterable[str] + ) -> Optional[Requirement]: + if not ireq.match_markers(requested_extras): + logger.info( + "Ignoring %s: markers '%s' don't match your environment", + ireq.name, + ireq.markers, + ) + return None + if not ireq.link: + return SpecifierRequirement(ireq) + self._fail_if_link_is_unsupported_wheel(ireq.link) + cand = self._make_candidate_from_link( + ireq.link, + extras=frozenset(ireq.extras), + template=ireq, + name=canonicalize_name(ireq.name) if ireq.name else None, + version=None, + ) + if cand is None: + # There's no way we can satisfy a URL requirement if the underlying + # candidate fails to build. An unnamed URL must be user-supplied, so + # we fail eagerly. If the URL is named, an unsatisfiable requirement + # can make the resolver do the right thing, either backtrack (and + # maybe find some other requirement that's buildable) or raise a + # ResolutionImpossible eventually. + if not ireq.name: + raise self._build_failures[ireq.link] + return UnsatisfiableRequirement(canonicalize_name(ireq.name)) + return self.make_requirement_from_candidate(cand) + + def collect_root_requirements( + self, root_ireqs: List[InstallRequirement] + ) -> CollectedRootRequirements: + collected = CollectedRootRequirements([], {}, {}) + for i, ireq in enumerate(root_ireqs): + if ireq.constraint: + # Ensure we only accept valid constraints + problem = check_invalid_constraint_type(ireq) + if problem: + raise InstallationError(problem) + if not ireq.match_markers(): + continue + assert ireq.name, "Constraint must be named" + name = canonicalize_name(ireq.name) + if name in collected.constraints: + collected.constraints[name] &= ireq + else: + collected.constraints[name] = Constraint.from_ireq(ireq) + else: + req = self._make_requirement_from_install_req( + ireq, + requested_extras=(), + ) + if req is None: + continue + if ireq.user_supplied and req.name not in collected.user_requested: + collected.user_requested[req.name] = i + collected.requirements.append(req) + return collected + + def make_requirement_from_candidate( + self, candidate: Candidate + ) -> ExplicitRequirement: + return ExplicitRequirement(candidate) + + def make_requirement_from_spec( + self, + specifier: str, + comes_from: Optional[InstallRequirement], + requested_extras: Iterable[str] = (), + ) -> Optional[Requirement]: + ireq = self._make_install_req_from_spec(specifier, comes_from) + return self._make_requirement_from_install_req(ireq, requested_extras) + + def make_requires_python_requirement( + self, + specifier: SpecifierSet, + ) -> Optional[Requirement]: + if self._ignore_requires_python: + return None + # Don't bother creating a dependency for an empty Requires-Python. + if not str(specifier): + return None + return RequiresPythonRequirement(specifier, self._python_candidate) + + def get_wheel_cache_entry( + self, link: Link, name: Optional[str] + ) -> Optional[CacheEntry]: + """Look up the link in the wheel cache. + + If ``preparer.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 + nondeterministic contents due to file modification times. + """ + if self._wheel_cache is None or self.preparer.require_hashes: + return None + return self._wheel_cache.get_cache_entry( + link=link, + package_name=name, + supported_tags=get_supported(), + ) + + def get_dist_to_uninstall(self, candidate: Candidate) -> Optional[BaseDistribution]: + # TODO: Are there more cases this needs to return True? Editable? + dist = self._installed_dists.get(candidate.project_name) + if dist is None: # Not installed, no uninstallation required. + return None + + # We're installing into global site. The current installation must + # be uninstalled, no matter it's in global or user site, because the + # user site installation has precedence over global. + if not self._use_user_site: + return dist + + # We're installing into user site. Remove the user site installation. + if dist.in_usersite: + return dist + + # We're installing into user site, but the installed incompatible + # package is in global site. We can't uninstall that, and would let + # the new user installation to "shadow" it. But shadowing won't work + # in virtual environments, so we error out. + if running_under_virtualenv() and dist.in_site_packages: + message = ( + f"Will not install to the user site because it will lack " + f"sys.path precedence to {dist.raw_name} in {dist.location}" + ) + raise InstallationError(message) + return None + + def _report_requires_python_error( + self, causes: Sequence["ConflictCause"] + ) -> UnsupportedPythonVersion: + assert causes, "Requires-Python error reported with no cause" + + version = self._python_candidate.version + + if len(causes) == 1: + specifier = str(causes[0].requirement.specifier) + message = ( + f"Package {causes[0].parent.name!r} requires a different " + f"Python: {version} not in {specifier!r}" + ) + return UnsupportedPythonVersion(message) + + message = f"Packages require a different Python. {version} not in:" + for cause in causes: + package = cause.parent.format_for_error() + specifier = str(cause.requirement.specifier) + message += f"\n{specifier!r} (required by {package})" + return UnsupportedPythonVersion(message) + + def _report_single_requirement_conflict( + self, req: Requirement, parent: Optional[Candidate] + ) -> DistributionNotFound: + if parent is None: + req_disp = str(req) + else: + req_disp = f"{req} (from {parent.name})" + + cands = self._finder.find_all_candidates(req.project_name) + skipped_by_requires_python = self._finder.requires_python_skipped_reasons() + versions = [str(v) for v in sorted({c.version for c in cands})] + + if skipped_by_requires_python: + logger.critical( + "Ignored the following versions that require a different python " + "version: %s", + "; ".join(skipped_by_requires_python) or "none", + ) + logger.critical( + "Could not find a version that satisfies the requirement %s " + "(from versions: %s)", + req_disp, + ", ".join(versions) or "none", + ) + if str(req) == "requirements.txt": + logger.info( + "HINT: You are attempting to install a package literally " + 'named "requirements.txt" (which cannot exist). Consider ' + "using the '-r' flag to install the packages listed in " + "requirements.txt" + ) + + return DistributionNotFound(f"No matching distribution found for {req}") + + def get_installation_error( + self, + e: "ResolutionImpossible[Requirement, Candidate]", + constraints: Dict[str, Constraint], + ) -> InstallationError: + + assert e.causes, "Installation error reported with no cause" + + # If one of the things we can't solve is "we need Python X.Y", + # that is what we report. + requires_python_causes = [ + cause + for cause in e.causes + if isinstance(cause.requirement, RequiresPythonRequirement) + and not cause.requirement.is_satisfied_by(self._python_candidate) + ] + if requires_python_causes: + # The comprehension above makes sure all Requirement instances are + # RequiresPythonRequirement, so let's cast for convenience. + return self._report_requires_python_error( + cast("Sequence[ConflictCause]", requires_python_causes), + ) + + # Otherwise, we have a set of causes which can't all be satisfied + # at once. + + # The simplest case is when we have *one* cause that can't be + # satisfied. We just report that case. + if len(e.causes) == 1: + req, parent = e.causes[0] + if req.name not in constraints: + return self._report_single_requirement_conflict(req, parent) + + # OK, we now have a list of requirements that can't all be + # satisfied at once. + + # A couple of formatting helpers + def text_join(parts: List[str]) -> str: + if len(parts) == 1: + return parts[0] + + return ", ".join(parts[:-1]) + " and " + parts[-1] + + def describe_trigger(parent: Candidate) -> str: + ireq = parent.get_install_requirement() + if not ireq or not ireq.comes_from: + return f"{parent.name}=={parent.version}" + if isinstance(ireq.comes_from, InstallRequirement): + return str(ireq.comes_from.name) + return str(ireq.comes_from) + + triggers = set() + for req, parent in e.causes: + if parent is None: + # This is a root requirement, so we can report it directly + trigger = req.format_for_error() + else: + trigger = describe_trigger(parent) + triggers.add(trigger) + + if triggers: + info = text_join(sorted(triggers)) + else: + info = "the requested packages" + + msg = ( + "Cannot install {} because these package versions " + "have conflicting dependencies.".format(info) + ) + logger.critical(msg) + msg = "\nThe conflict is caused by:" + + relevant_constraints = set() + for req, parent in e.causes: + if req.name in constraints: + relevant_constraints.add(req.name) + msg = msg + "\n " + if parent: + msg = msg + f"{parent.name} {parent.version} depends on " + else: + msg = msg + "The user requested " + msg = msg + req.format_for_error() + for key in relevant_constraints: + spec = constraints[key].specifier + msg += f"\n The user requested (constraint) {key}{spec}" + + msg = ( + msg + + "\n\n" + + "To fix this you could try to:\n" + + "1. loosen the range of package versions you've specified\n" + + "2. remove package versions to allow pip attempt to solve " + + "the dependency conflict\n" + ) + + logger.info(msg) + + return DistributionNotFound( + "ResolutionImpossible: for help visit " + "https://pip.pypa.io/en/latest/topics/dependency-resolution/" + "#dealing-with-dependency-conflicts" + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py new file mode 100644 index 0000000..8663097 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py @@ -0,0 +1,155 @@ +"""Utilities to lazily create and visit candidates found. + +Creating and visiting a candidate is a *very* costly operation. It involves +fetching, extracting, potentially building modules from source, and verifying +distribution metadata. It is therefore crucial for performance to keep +everything here lazy all the way down, so we only touch candidates that we +absolutely need, and not "download the world" when we only need one version of +something. +""" + +import functools +from collections.abc import Sequence +from typing import TYPE_CHECKING, Any, Callable, Iterator, Optional, Set, Tuple + +from pip._vendor.packaging.version import _BaseVersion + +from .base import Candidate + +IndexCandidateInfo = Tuple[_BaseVersion, Callable[[], Optional[Candidate]]] + +if TYPE_CHECKING: + SequenceCandidate = Sequence[Candidate] +else: + # For compatibility: Python before 3.9 does not support using [] on the + # Sequence class. + # + # >>> from collections.abc import Sequence + # >>> Sequence[str] + # Traceback (most recent call last): + # File "", line 1, in + # TypeError: 'ABCMeta' object is not subscriptable + # + # TODO: Remove this block after dropping Python 3.8 support. + SequenceCandidate = Sequence + + +def _iter_built(infos: Iterator[IndexCandidateInfo]) -> Iterator[Candidate]: + """Iterator for ``FoundCandidates``. + + This iterator is used when the package is not already installed. Candidates + from index come later in their normal ordering. + """ + versions_found: Set[_BaseVersion] = set() + for version, func in infos: + if version in versions_found: + continue + candidate = func() + if candidate is None: + continue + yield candidate + versions_found.add(version) + + +def _iter_built_with_prepended( + installed: Candidate, infos: Iterator[IndexCandidateInfo] +) -> Iterator[Candidate]: + """Iterator for ``FoundCandidates``. + + This iterator is used when the resolver prefers the already-installed + candidate and NOT to upgrade. The installed candidate is therefore + always yielded first, and candidates from index come later in their + normal ordering, except skipped when the version is already installed. + """ + yield installed + versions_found: Set[_BaseVersion] = {installed.version} + for version, func in infos: + if version in versions_found: + continue + candidate = func() + if candidate is None: + continue + yield candidate + versions_found.add(version) + + +def _iter_built_with_inserted( + installed: Candidate, infos: Iterator[IndexCandidateInfo] +) -> Iterator[Candidate]: + """Iterator for ``FoundCandidates``. + + This iterator is used when the resolver prefers to upgrade an + already-installed package. Candidates from index are returned in their + normal ordering, except replaced when the version is already installed. + + The implementation iterates through and yields other candidates, inserting + the installed candidate exactly once before we start yielding older or + equivalent candidates, or after all other candidates if they are all newer. + """ + versions_found: Set[_BaseVersion] = set() + for version, func in infos: + if version in versions_found: + continue + # If the installed candidate is better, yield it first. + if installed.version >= version: + yield installed + versions_found.add(installed.version) + candidate = func() + if candidate is None: + continue + yield candidate + versions_found.add(version) + + # If the installed candidate is older than all other candidates. + if installed.version not in versions_found: + yield installed + + +class FoundCandidates(SequenceCandidate): + """A lazy sequence to provide candidates to the resolver. + + The intended usage is to return this from `find_matches()` so the resolver + can iterate through the sequence multiple times, but only access the index + page when remote packages are actually needed. This improve performances + when suitable candidates are already installed on disk. + """ + + def __init__( + self, + get_infos: Callable[[], Iterator[IndexCandidateInfo]], + installed: Optional[Candidate], + prefers_installed: bool, + incompatible_ids: Set[int], + ): + self._get_infos = get_infos + self._installed = installed + self._prefers_installed = prefers_installed + self._incompatible_ids = incompatible_ids + + def __getitem__(self, index: Any) -> Any: + # Implemented to satisfy the ABC check. This is not needed by the + # resolver, and should not be used by the provider either (for + # performance reasons). + raise NotImplementedError("don't do this") + + def __iter__(self) -> Iterator[Candidate]: + infos = self._get_infos() + if not self._installed: + iterator = _iter_built(infos) + elif self._prefers_installed: + iterator = _iter_built_with_prepended(self._installed, infos) + else: + iterator = _iter_built_with_inserted(self._installed, infos) + return (c for c in iterator if id(c) not in self._incompatible_ids) + + def __len__(self) -> int: + # Implemented to satisfy the ABC check. This is not needed by the + # resolver, and should not be used by the provider either (for + # performance reasons). + raise NotImplementedError("don't do this") + + @functools.lru_cache(maxsize=1) + def __bool__(self) -> bool: + if self._prefers_installed and self._installed: + return True + return any(self) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/provider.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/provider.py new file mode 100644 index 0000000..6300dfc --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/provider.py @@ -0,0 +1,248 @@ +import collections +import math +from typing import ( + TYPE_CHECKING, + Dict, + Iterable, + Iterator, + Mapping, + Sequence, + TypeVar, + Union, +) + +from pip._vendor.resolvelib.providers import AbstractProvider + +from .base import Candidate, Constraint, Requirement +from .candidates import REQUIRES_PYTHON_IDENTIFIER +from .factory import Factory + +if TYPE_CHECKING: + from pip._vendor.resolvelib.providers import Preference + from pip._vendor.resolvelib.resolvers import RequirementInformation + + PreferenceInformation = RequirementInformation[Requirement, Candidate] + + _ProviderBase = AbstractProvider[Requirement, Candidate, str] +else: + _ProviderBase = AbstractProvider + +# Notes on the relationship between the provider, the factory, and the +# candidate and requirement classes. +# +# The provider is a direct implementation of the resolvelib class. Its role +# is to deliver the API that resolvelib expects. +# +# Rather than work with completely abstract "requirement" and "candidate" +# concepts as resolvelib does, pip has concrete classes implementing these two +# ideas. The API of Requirement and Candidate objects are defined in the base +# classes, but essentially map fairly directly to the equivalent provider +# methods. In particular, `find_matches` and `is_satisfied_by` are +# requirement methods, and `get_dependencies` is a candidate method. +# +# The factory is the interface to pip's internal mechanisms. It is stateless, +# and is created by the resolver and held as a property of the provider. It is +# responsible for creating Requirement and Candidate objects, and provides +# services to those objects (access to pip's finder and preparer). + + +D = TypeVar("D") +V = TypeVar("V") + + +def _get_with_identifier( + mapping: Mapping[str, V], + identifier: str, + default: D, +) -> Union[D, V]: + """Get item from a package name lookup mapping with a resolver identifier. + + This extra logic is needed when the target mapping is keyed by package + name, which cannot be directly looked up with an identifier (which may + contain requested extras). Additional logic is added to also look up a value + by "cleaning up" the extras from the identifier. + """ + if identifier in mapping: + return mapping[identifier] + # HACK: Theoretically we should check whether this identifier is a valid + # "NAME[EXTRAS]" format, and parse out the name part with packaging or + # some regular expression. But since pip's resolver only spits out three + # kinds of identifiers: normalized PEP 503 names, normalized names plus + # extras, and Requires-Python, we can cheat a bit here. + name, open_bracket, _ = identifier.partition("[") + if open_bracket and name in mapping: + return mapping[name] + return default + + +class PipProvider(_ProviderBase): + """Pip's provider implementation for resolvelib. + + :params constraints: A mapping of constraints specified by the user. Keys + are canonicalized project names. + :params ignore_dependencies: Whether the user specified ``--no-deps``. + :params upgrade_strategy: The user-specified upgrade strategy. + :params user_requested: A set of canonicalized package names that the user + supplied for pip to install/upgrade. + """ + + def __init__( + self, + factory: Factory, + constraints: Dict[str, Constraint], + ignore_dependencies: bool, + upgrade_strategy: str, + user_requested: Dict[str, int], + ) -> None: + self._factory = factory + self._constraints = constraints + self._ignore_dependencies = ignore_dependencies + self._upgrade_strategy = upgrade_strategy + self._user_requested = user_requested + self._known_depths: Dict[str, float] = collections.defaultdict(lambda: math.inf) + + def identify(self, requirement_or_candidate: Union[Requirement, Candidate]) -> str: + return requirement_or_candidate.name + + def get_preference( # type: ignore + self, + identifier: str, + resolutions: Mapping[str, Candidate], + candidates: Mapping[str, Iterator[Candidate]], + information: Mapping[str, Iterable["PreferenceInformation"]], + backtrack_causes: Sequence["PreferenceInformation"], + ) -> "Preference": + """Produce a sort key for given requirement based on preference. + + The lower the return value is, the more preferred this group of + arguments is. + + Currently pip considers the following in order: + + * Prefer if any of the known requirements is "direct", e.g. points to an + explicit URL. + * If equal, prefer if any requirement is "pinned", i.e. contains + operator ``===`` or ``==``. + * If equal, calculate an approximate "depth" and resolve requirements + closer to the user-specified requirements first. + * Order user-specified requirements by the order they are specified. + * If equal, prefers "non-free" requirements, i.e. contains at least one + operator, such as ``>=`` or ``<``. + * If equal, order alphabetically for consistency (helps debuggability). + """ + lookups = (r.get_candidate_lookup() for r, _ in information[identifier]) + candidate, ireqs = zip(*lookups) + operators = [ + specifier.operator + for specifier_set in (ireq.specifier for ireq in ireqs if ireq) + for specifier in specifier_set + ] + + direct = candidate is not None + pinned = any(op[:2] == "==" for op in operators) + unfree = bool(operators) + + try: + requested_order: Union[int, float] = self._user_requested[identifier] + except KeyError: + requested_order = math.inf + parent_depths = ( + self._known_depths[parent.name] if parent is not None else 0.0 + for _, parent in information[identifier] + ) + inferred_depth = min(d for d in parent_depths) + 1.0 + else: + inferred_depth = 1.0 + self._known_depths[identifier] = inferred_depth + + requested_order = self._user_requested.get(identifier, math.inf) + + # Requires-Python has only one candidate and the check is basically + # free, so we always do it first to avoid needless work if it fails. + requires_python = identifier == REQUIRES_PYTHON_IDENTIFIER + + # HACK: Setuptools have a very long and solid backward compatibility + # track record, and extremely few projects would request a narrow, + # non-recent version range of it since that would break a lot things. + # (Most projects specify it only to request for an installer feature, + # which does not work, but that's another topic.) Intentionally + # delaying Setuptools helps reduce branches the resolver has to check. + # This serves as a temporary fix for issues like "apache-airflow[all]" + # while we work on "proper" branch pruning techniques. + delay_this = identifier == "setuptools" + + # Prefer the causes of backtracking on the assumption that the problem + # resolving the dependency tree is related to the failures that caused + # the backtracking + backtrack_cause = self.is_backtrack_cause(identifier, backtrack_causes) + + return ( + not requires_python, + delay_this, + not direct, + not pinned, + not backtrack_cause, + inferred_depth, + requested_order, + not unfree, + identifier, + ) + + def find_matches( + self, + identifier: str, + requirements: Mapping[str, Iterator[Requirement]], + incompatibilities: Mapping[str, Iterator[Candidate]], + ) -> Iterable[Candidate]: + def _eligible_for_upgrade(identifier: str) -> bool: + """Are upgrades allowed for this project? + + This checks the upgrade strategy, and whether the project was one + that the user specified in the command line, in order to decide + whether we should upgrade if there's a newer version available. + + (Note that we don't need access to the `--upgrade` flag, because + an upgrade strategy of "to-satisfy-only" means that `--upgrade` + was not specified). + """ + if self._upgrade_strategy == "eager": + return True + elif self._upgrade_strategy == "only-if-needed": + user_order = _get_with_identifier( + self._user_requested, + identifier, + default=None, + ) + return user_order is not None + return False + + constraint = _get_with_identifier( + self._constraints, + identifier, + default=Constraint.empty(), + ) + return self._factory.find_candidates( + identifier=identifier, + requirements=requirements, + constraint=constraint, + prefers_installed=(not _eligible_for_upgrade(identifier)), + incompatibilities=incompatibilities, + ) + + def is_satisfied_by(self, requirement: Requirement, candidate: Candidate) -> bool: + return requirement.is_satisfied_by(candidate) + + def get_dependencies(self, candidate: Candidate) -> Sequence[Requirement]: + with_requires = not self._ignore_dependencies + return [r for r in candidate.iter_dependencies(with_requires) if r is not None] + + @staticmethod + def is_backtrack_cause( + identifier: str, backtrack_causes: Sequence["PreferenceInformation"] + ) -> bool: + for backtrack_cause in backtrack_causes: + if identifier == backtrack_cause.requirement.name: + return True + if backtrack_cause.parent and identifier == backtrack_cause.parent.name: + return True + return False diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/reporter.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/reporter.py new file mode 100644 index 0000000..6ced532 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/reporter.py @@ -0,0 +1,68 @@ +from collections import defaultdict +from logging import getLogger +from typing import Any, DefaultDict + +from pip._vendor.resolvelib.reporters import BaseReporter + +from .base import Candidate, Requirement + +logger = getLogger(__name__) + + +class PipReporter(BaseReporter): + def __init__(self) -> None: + self.backtracks_by_package: DefaultDict[str, int] = defaultdict(int) + + self._messages_at_backtrack = { + 1: ( + "pip is looking at multiple versions of {package_name} to " + "determine which version is compatible with other " + "requirements. This could take a while." + ), + 8: ( + "pip is looking at multiple versions of {package_name} to " + "determine which version is compatible with other " + "requirements. This could take a while." + ), + 13: ( + "This is taking longer than usual. You might need to provide " + "the dependency resolver with stricter constraints to reduce " + "runtime. See https://pip.pypa.io/warnings/backtracking for " + "guidance. If you want to abort this run, press Ctrl + C." + ), + } + + def backtracking(self, candidate: Candidate) -> None: + self.backtracks_by_package[candidate.name] += 1 + + count = self.backtracks_by_package[candidate.name] + if count not in self._messages_at_backtrack: + return + + message = self._messages_at_backtrack[count] + logger.info("INFO: %s", message.format(package_name=candidate.name)) + + +class PipDebuggingReporter(BaseReporter): + """A reporter that does an info log for every event it sees.""" + + def starting(self) -> None: + logger.info("Reporter.starting()") + + def starting_round(self, index: int) -> None: + logger.info("Reporter.starting_round(%r)", index) + + def ending_round(self, index: int, state: Any) -> None: + logger.info("Reporter.ending_round(%r, state)", index) + + def ending(self, state: Any) -> None: + logger.info("Reporter.ending(%r)", state) + + def adding_requirement(self, requirement: Requirement, parent: Candidate) -> None: + logger.info("Reporter.adding_requirement(%r, %r)", requirement, parent) + + def backtracking(self, candidate: Candidate) -> None: + logger.info("Reporter.backtracking(%r)", candidate) + + def pinning(self, candidate: Candidate) -> None: + logger.info("Reporter.pinning(%r)", candidate) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py new file mode 100644 index 0000000..f561f1f --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py @@ -0,0 +1,166 @@ +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name + +from pip._internal.req.req_install import InstallRequirement + +from .base import Candidate, CandidateLookup, Requirement, format_name + + +class ExplicitRequirement(Requirement): + def __init__(self, candidate: Candidate) -> None: + self.candidate = candidate + + def __str__(self) -> str: + return str(self.candidate) + + def __repr__(self) -> str: + return "{class_name}({candidate!r})".format( + class_name=self.__class__.__name__, + candidate=self.candidate, + ) + + @property + def project_name(self) -> NormalizedName: + # No need to canonicalize - the candidate did this + return self.candidate.project_name + + @property + def name(self) -> str: + # No need to canonicalize - the candidate did this + return self.candidate.name + + def format_for_error(self) -> str: + return self.candidate.format_for_error() + + def get_candidate_lookup(self) -> CandidateLookup: + return self.candidate, None + + def is_satisfied_by(self, candidate: Candidate) -> bool: + return candidate == self.candidate + + +class SpecifierRequirement(Requirement): + def __init__(self, ireq: InstallRequirement) -> None: + assert ireq.link is None, "This is a link, not a specifier" + self._ireq = ireq + self._extras = frozenset(ireq.extras) + + def __str__(self) -> str: + return str(self._ireq.req) + + def __repr__(self) -> str: + return "{class_name}({requirement!r})".format( + class_name=self.__class__.__name__, + requirement=str(self._ireq.req), + ) + + @property + def project_name(self) -> NormalizedName: + assert self._ireq.req, "Specifier-backed ireq is always PEP 508" + return canonicalize_name(self._ireq.req.name) + + @property + def name(self) -> str: + return format_name(self.project_name, self._extras) + + def format_for_error(self) -> str: + + # Convert comma-separated specifiers into "A, B, ..., F and G" + # This makes the specifier a bit more "human readable", without + # risking a change in meaning. (Hopefully! Not all edge cases have + # been checked) + parts = [s.strip() for s in str(self).split(",")] + if len(parts) == 0: + return "" + elif len(parts) == 1: + return parts[0] + + return ", ".join(parts[:-1]) + " and " + parts[-1] + + def get_candidate_lookup(self) -> CandidateLookup: + return None, self._ireq + + def is_satisfied_by(self, candidate: Candidate) -> bool: + assert candidate.name == self.name, ( + f"Internal issue: Candidate is not for this requirement " + f"{candidate.name} vs {self.name}" + ) + # We can safely always allow prereleases here since PackageFinder + # already implements the prerelease logic, and would have filtered out + # prerelease candidates if the user does not expect them. + assert self._ireq.req, "Specifier-backed ireq is always PEP 508" + spec = self._ireq.req.specifier + return spec.contains(candidate.version, prereleases=True) + + +class RequiresPythonRequirement(Requirement): + """A requirement representing Requires-Python metadata.""" + + def __init__(self, specifier: SpecifierSet, match: Candidate) -> None: + self.specifier = specifier + self._candidate = match + + def __str__(self) -> str: + return f"Python {self.specifier}" + + def __repr__(self) -> str: + return "{class_name}({specifier!r})".format( + class_name=self.__class__.__name__, + specifier=str(self.specifier), + ) + + @property + def project_name(self) -> NormalizedName: + return self._candidate.project_name + + @property + def name(self) -> str: + return self._candidate.name + + def format_for_error(self) -> str: + return str(self) + + def get_candidate_lookup(self) -> CandidateLookup: + if self.specifier.contains(self._candidate.version, prereleases=True): + return self._candidate, None + return None, None + + def is_satisfied_by(self, candidate: Candidate) -> bool: + assert candidate.name == self._candidate.name, "Not Python candidate" + # We can safely always allow prereleases here since PackageFinder + # already implements the prerelease logic, and would have filtered out + # prerelease candidates if the user does not expect them. + return self.specifier.contains(candidate.version, prereleases=True) + + +class UnsatisfiableRequirement(Requirement): + """A requirement that cannot be satisfied.""" + + def __init__(self, name: NormalizedName) -> None: + self._name = name + + def __str__(self) -> str: + return f"{self._name} (unavailable)" + + def __repr__(self) -> str: + return "{class_name}({name!r})".format( + class_name=self.__class__.__name__, + name=str(self._name), + ) + + @property + def project_name(self) -> NormalizedName: + return self._name + + @property + def name(self) -> str: + return self._name + + def format_for_error(self) -> str: + return str(self) + + def get_candidate_lookup(self) -> CandidateLookup: + return None, None + + def is_satisfied_by(self, candidate: Candidate) -> bool: + return False diff --git a/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py new file mode 100644 index 0000000..a605d6c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py @@ -0,0 +1,296 @@ +import functools +import logging +import os +from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple, cast + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.resolvelib import BaseReporter, ResolutionImpossible +from pip._vendor.resolvelib import Resolver as RLResolver +from pip._vendor.resolvelib.structs import DirectedGraph + +from pip._internal.cache import WheelCache +from pip._internal.index.package_finder import PackageFinder +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.req_install import InstallRequirement +from pip._internal.req.req_set import RequirementSet +from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider +from pip._internal.resolution.resolvelib.provider import PipProvider +from pip._internal.resolution.resolvelib.reporter import ( + PipDebuggingReporter, + PipReporter, +) + +from .base import Candidate, Requirement +from .factory import Factory + +if TYPE_CHECKING: + from pip._vendor.resolvelib.resolvers import Result as RLResult + + Result = RLResult[Requirement, Candidate, str] + + +logger = logging.getLogger(__name__) + + +class Resolver(BaseResolver): + _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} + + def __init__( + self, + preparer: RequirementPreparer, + finder: PackageFinder, + wheel_cache: Optional[WheelCache], + make_install_req: InstallRequirementProvider, + use_user_site: bool, + ignore_dependencies: bool, + ignore_installed: bool, + ignore_requires_python: bool, + force_reinstall: bool, + upgrade_strategy: str, + py_version_info: Optional[Tuple[int, ...]] = None, + ): + super().__init__() + assert upgrade_strategy in self._allowed_strategies + + self.factory = Factory( + finder=finder, + preparer=preparer, + make_install_req=make_install_req, + wheel_cache=wheel_cache, + use_user_site=use_user_site, + force_reinstall=force_reinstall, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + py_version_info=py_version_info, + ) + self.ignore_dependencies = ignore_dependencies + self.upgrade_strategy = upgrade_strategy + self._result: Optional[Result] = None + + def resolve( + self, root_reqs: List[InstallRequirement], check_supported_wheels: bool + ) -> RequirementSet: + collected = self.factory.collect_root_requirements(root_reqs) + provider = PipProvider( + factory=self.factory, + constraints=collected.constraints, + ignore_dependencies=self.ignore_dependencies, + upgrade_strategy=self.upgrade_strategy, + user_requested=collected.user_requested, + ) + if "PIP_RESOLVER_DEBUG" in os.environ: + reporter: BaseReporter = PipDebuggingReporter() + else: + reporter = PipReporter() + resolver: RLResolver[Requirement, Candidate, str] = RLResolver( + provider, + reporter, + ) + + try: + try_to_avoid_resolution_too_deep = 2000000 + result = self._result = resolver.resolve( + collected.requirements, max_rounds=try_to_avoid_resolution_too_deep + ) + + except ResolutionImpossible as e: + error = self.factory.get_installation_error( + cast("ResolutionImpossible[Requirement, Candidate]", e), + collected.constraints, + ) + raise error from e + + req_set = RequirementSet(check_supported_wheels=check_supported_wheels) + for candidate in result.mapping.values(): + ireq = candidate.get_install_requirement() + if ireq is None: + continue + + # Check if there is already an installation under the same name, + # and set a flag for later stages to uninstall it, if needed. + installed_dist = self.factory.get_dist_to_uninstall(candidate) + if installed_dist is None: + # There is no existing installation -- nothing to uninstall. + ireq.should_reinstall = False + elif self.factory.force_reinstall: + # The --force-reinstall flag is set -- reinstall. + ireq.should_reinstall = True + elif installed_dist.version != candidate.version: + # The installation is different in version -- reinstall. + ireq.should_reinstall = True + elif candidate.is_editable or installed_dist.editable: + # The incoming distribution is editable, or different in + # editable-ness to installation -- reinstall. + ireq.should_reinstall = True + elif candidate.source_link and candidate.source_link.is_file: + # The incoming distribution is under file:// + if candidate.source_link.is_wheel: + # is a local wheel -- do nothing. + logger.info( + "%s is already installed with the same version as the " + "provided wheel. Use --force-reinstall to force an " + "installation of the wheel.", + ireq.name, + ) + continue + + # is a local sdist or path -- reinstall + ireq.should_reinstall = True + else: + continue + + link = candidate.source_link + if link and link.is_yanked: + # The reason can contain non-ASCII characters, Unicode + # is required for Python 2. + msg = ( + "The candidate selected for download or install is a " + "yanked version: {name!r} candidate (version {version} " + "at {link})\nReason for being yanked: {reason}" + ).format( + name=candidate.name, + version=candidate.version, + link=link, + reason=link.yanked_reason or "", + ) + logger.warning(msg) + + req_set.add_named_requirement(ireq) + + reqs = req_set.all_requirements + self.factory.preparer.prepare_linked_requirements_more(reqs) + return req_set + + def get_installation_order( + self, req_set: RequirementSet + ) -> List[InstallRequirement]: + """Get order for installation of requirements in RequirementSet. + + The returned list contains a requirement before another that depends on + it. This helps ensure that the environment is kept consistent as they + get installed one-by-one. + + The current implementation creates a topological ordering of the + dependency graph, giving more weight to packages with less + or no dependencies, while breaking any cycles in the graph at + arbitrary points. We make no guarantees about where the cycle + would be broken, other than it *would* be broken. + """ + assert self._result is not None, "must call resolve() first" + + if not req_set.requirements: + # Nothing is left to install, so we do not need an order. + return [] + + graph = self._result.graph + weights = get_topological_weights(graph, set(req_set.requirements.keys())) + + sorted_items = sorted( + req_set.requirements.items(), + key=functools.partial(_req_set_item_sorter, weights=weights), + reverse=True, + ) + return [ireq for _, ireq in sorted_items] + + +def get_topological_weights( + graph: "DirectedGraph[Optional[str]]", requirement_keys: Set[str] +) -> Dict[Optional[str], int]: + """Assign weights to each node based on how "deep" they are. + + This implementation may change at any point in the future without prior + notice. + + We first simplify the dependency graph by pruning any leaves and giving them + the highest weight: a package without any dependencies should be installed + first. This is done again and again in the same way, giving ever less weight + to the newly found leaves. The loop stops when no leaves are left: all + remaining packages have at least one dependency left in the graph. + + Then we continue with the remaining graph, by taking the length for the + longest path to any node from root, ignoring any paths that contain a single + node twice (i.e. cycles). This is done through a depth-first search through + the graph, while keeping track of the path to the node. + + Cycles in the graph result would result in node being revisited while also + being on its own path. In this case, take no action. This helps ensure we + don't get stuck in a cycle. + + When assigning weight, the longer path (i.e. larger length) is preferred. + + We are only interested in the weights of packages that are in the + requirement_keys. + """ + path: Set[Optional[str]] = set() + weights: Dict[Optional[str], int] = {} + + def visit(node: Optional[str]) -> None: + if node in path: + # We hit a cycle, so we'll break it here. + return + + # Time to visit the children! + path.add(node) + for child in graph.iter_children(node): + visit(child) + path.remove(node) + + if node not in requirement_keys: + return + + last_known_parent_count = weights.get(node, 0) + weights[node] = max(last_known_parent_count, len(path)) + + # Simplify the graph, pruning leaves that have no dependencies. + # This is needed for large graphs (say over 200 packages) because the + # `visit` function is exponentially slower then, taking minutes. + # See https://github.com/pypa/pip/issues/10557 + # We will loop until we explicitly break the loop. + while True: + leaves = set() + for key in graph: + if key is None: + continue + for _child in graph.iter_children(key): + # This means we have at least one child + break + else: + # No child. + leaves.add(key) + if not leaves: + # We are done simplifying. + break + # Calculate the weight for the leaves. + weight = len(graph) - 1 + for leaf in leaves: + if leaf not in requirement_keys: + continue + weights[leaf] = weight + # Remove the leaves from the graph, making it simpler. + for leaf in leaves: + graph.remove(leaf) + + # Visit the remaining graph. + # `None` is guaranteed to be the root node by resolvelib. + visit(None) + + # Sanity check: all requirement keys should be in the weights, + # and no other keys should be in the weights. + difference = set(weights.keys()).difference(requirement_keys) + assert not difference, difference + + return weights + + +def _req_set_item_sorter( + item: Tuple[str, InstallRequirement], + weights: Dict[Optional[str], int], +) -> Tuple[int, str]: + """Key function used to sort install requirements for installation. + + Based on the "weight" mapping calculated in ``get_installation_order()``. + The canonical package name is returned as the second member as a tie- + breaker to ensure the result is predictable, which is useful in tests. + """ + name = canonicalize_name(item[0]) + return weights[name], name diff --git a/venv/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py b/venv/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py new file mode 100644 index 0000000..41cc42c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py @@ -0,0 +1,242 @@ +import datetime +import functools +import hashlib +import json +import logging +import optparse +import os.path +import sys +from dataclasses import dataclass +from typing import Any, Callable, Dict, Optional + +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.rich.console import Group +from pip._vendor.rich.markup import escape +from pip._vendor.rich.text import Text + +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import get_default_environment +from pip._internal.metadata.base import DistributionVersion +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.network.session import PipSession +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.entrypoints import ( + get_best_invocation_for_this_pip, + get_best_invocation_for_this_python, +) +from pip._internal.utils.filesystem import adjacent_tmp_file, check_path_owner, replace +from pip._internal.utils.misc import ensure_dir + +_DATE_FMT = "%Y-%m-%dT%H:%M:%SZ" + + +logger = logging.getLogger(__name__) + + +def _get_statefile_name(key: str) -> str: + key_bytes = key.encode() + name = hashlib.sha224(key_bytes).hexdigest() + return name + + +class SelfCheckState: + def __init__(self, cache_dir: str) -> None: + self._state: Dict[str, Any] = {} + self._statefile_path = None + + # Try to load the existing state + if cache_dir: + self._statefile_path = os.path.join( + cache_dir, "selfcheck", _get_statefile_name(self.key) + ) + try: + with open(self._statefile_path, encoding="utf-8") as statefile: + self._state = json.load(statefile) + except (OSError, ValueError, KeyError): + # Explicitly suppressing exceptions, since we don't want to + # error out if the cache file is invalid. + pass + + @property + def key(self) -> str: + return sys.prefix + + def get(self, current_time: datetime.datetime) -> Optional[str]: + """Check if we have a not-outdated version loaded already.""" + if not self._state: + return None + + if "last_check" not in self._state: + return None + + if "pypi_version" not in self._state: + return None + + seven_days_in_seconds = 7 * 24 * 60 * 60 + + # Determine if we need to refresh the state + last_check = datetime.datetime.strptime(self._state["last_check"], _DATE_FMT) + seconds_since_last_check = (current_time - last_check).total_seconds() + if seconds_since_last_check > seven_days_in_seconds: + return None + + return self._state["pypi_version"] + + def set(self, pypi_version: str, current_time: datetime.datetime) -> None: + # If we do not have a path to cache in, don't bother saving. + if not self._statefile_path: + return + + # 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)) + + state = { + # Include the key so it's easy to tell which pip wrote the + # file. + "key": self.key, + "last_check": current_time.strftime(_DATE_FMT), + "pypi_version": pypi_version, + } + + text = json.dumps(state, sort_keys=True, separators=(",", ":")) + + with adjacent_tmp_file(self._statefile_path) as f: + f.write(text.encode()) + + try: + # Since we have a prefix-specific state file, we can just + # overwrite whatever is there, no need to check. + replace(f.name, self._statefile_path) + except OSError: + # Best effort. + pass + + +@dataclass +class UpgradePrompt: + old: str + new: str + + def __rich__(self) -> Group: + if WINDOWS: + pip_cmd = f"{get_best_invocation_for_this_python()} -m pip" + else: + pip_cmd = get_best_invocation_for_this_pip() + + notice = "[bold][[reset][blue]notice[reset][bold]][reset]" + return Group( + Text(), + Text.from_markup( + f"{notice} A new release of pip is available: " + f"[red]{self.old}[reset] -> [green]{self.new}[reset]" + ), + Text.from_markup( + f"{notice} To update, run: " + f"[green]{escape(pip_cmd)} install --upgrade pip" + ), + ) + + +def was_installed_by_pip(pkg: str) -> bool: + """Checks whether pkg was installed by pip + + This is used not to display the upgrade message when pip is in fact + installed by system package manager, such as dnf on Fedora. + """ + dist = get_default_environment().get_distribution(pkg) + return dist is not None and "pip" == dist.installer + + +def _get_current_remote_pip_version( + session: PipSession, options: optparse.Values +) -> Optional[str]: + # Lets use PackageFinder to see what the latest pip version is + link_collector = LinkCollector.create( + session, + options=options, + suppress_no_index=True, + ) + + # Pass allow_yanked=False so we don't suggest upgrading to a + # yanked version. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=False, # Explicitly set to False + ) + + finder = PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + ) + best_candidate = finder.find_best_candidate("pip").best_candidate + if best_candidate is None: + return None + + return str(best_candidate.version) + + +def _self_version_check_logic( + *, + state: SelfCheckState, + current_time: datetime.datetime, + local_version: DistributionVersion, + get_remote_version: Callable[[], Optional[str]], +) -> Optional[UpgradePrompt]: + remote_version_str = state.get(current_time) + if remote_version_str is None: + remote_version_str = get_remote_version() + if remote_version_str is None: + logger.debug("No remote pip version found") + return None + state.set(remote_version_str, current_time) + + remote_version = parse_version(remote_version_str) + logger.debug("Remote version of pip: %s", remote_version) + logger.debug("Local version of pip: %s", local_version) + + pip_installed_by_pip = was_installed_by_pip("pip") + logger.debug("Was pip installed by pip? %s", pip_installed_by_pip) + if not pip_installed_by_pip: + return None # Only suggest upgrade if pip is installed by pip. + + local_version_is_older = ( + local_version < remote_version + and local_version.base_version != remote_version.base_version + ) + if local_version_is_older: + return UpgradePrompt(old=str(local_version), new=remote_version_str) + + return None + + +def pip_self_version_check(session: PipSession, options: optparse.Values) -> None: + """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_dist = get_default_environment().get_distribution("pip") + if not installed_dist: + return + + try: + upgrade_prompt = _self_version_check_logic( + state=SelfCheckState(cache_dir=options.cache_dir), + current_time=datetime.datetime.utcnow(), + local_version=installed_dist.version, + get_remote_version=functools.partial( + _get_current_remote_pip_version, session, options + ), + ) + if upgrade_prompt is not None: + logger.warning("[present-rich] %s", upgrade_prompt) + except Exception: + logger.warning("There was an error checking the latest version of pip.") + logger.debug("See below for error", exc_info=True) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bef81c94d9085c3069af5ce4c90bf6ab623bd371 GIT binary patch literal 203 zcmZ3^%ge<81af;mri19mAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnuQ>gT{M=Oi ztQ7r%qWrAXTZlX-=wL5i8I-kb{c( Tfy4)9Mn=XD3^1aI87Kw-4pKFX literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/_log.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..692aa0edc200e37982f8a567a5619bd513765cd4 GIT binary patch literal 2024 zcmZ`(&2QsG6d!*iPMx&nW1-8k(2PnQv2tnW)z2Yug$3+ zR;yl6)%Dwa(+hY+-Bgu+=YqPv6Ge106g1xA^d4GsVYax~2qQjYnx=7&)_J@YGE>*R zz>Dqvf-?rK!%B36Q`hl*&Om}?ICX*@8p2|N)2+6U9#^;gg$%nqi^;a`qMo`-BtVj#OkORTL(3l_@;ORCsbMzgb`!Fp+0@ zV4{$W-_1hFwrhWy5ks@rS;~+UpocoNA2a$m=kpf#b)CYvyS%n|XMLG^5d;`-a~{wS z%OBi`P# znAH$rjk|GVh4q%b;kfsk4Xee2mgRdJR$~VaIk;usylF*V%;y@Qcd9(H8eYS)y&&cy zaD1y7dwyhL5}1vhMC+5*erbf}LH@jqj=TxbA&)1gzKFm4{6IT=@nmxTFb2r(A6tE~ zFn5-dGzp!-rU&yw?T@n@D5=9VQ31Bd=e$ltH zj{){cd_i~dsN+G80IM3>r(>5Kf&KCDpCd?)<6(keGPD=r9I(323u=~bG-Jwxs41ZG z!ls}jC)2NYNaidzIWts&sgjbFX#Mq)v0;T8l6VF55xPM$UazA)!ZlR92GAjY6eqtK zKiKY0-*|N8bb7u!J%3tU=oS}F)PID>v$Q%}tX@dxz)J{#r1h`u^a^h8(lZj~18kev$XU9@<7+b}bRK_er zdvO(EnCeOCVrv!@l+*A;CP0V$RU)}kSG{)d?x|{YRpUf8ep8EG_3FXYp>e9tcGcOF z!JV#Y$Z0BsQb&^fYTC%NVw=LxX?jqUMxA_Ccqc37_rx2Z z#eu)*H13Hdj(P)?`XZeCN1>He_?Os>+)0l{^z;! biY&dox6~srJ^U!0{tdb&&Eaa7LdwfOIPCBo literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ed2a55b5d892e03ca78f3f7ab8ec4445ed7a230 GIT binary patch literal 2562 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%0D-J|IoLm?@!*JTznJZ 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6079098b2e404c48f9c750cbfe1d3b7bce094396 GIT binary patch literal 7093 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 NJ`LFKxep6O{{@&3BzFJ+ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18992770b1ee2203ac3ea990f36261e8c6b91615 GIT binary patch literal 3726 zcmai1O>Eo96&{KdMM{(4 zbx3&|M=FdWC{$n%Ss*}+-4xYf*WDs1;KLq!=&?u1AYg)kfdEAhz0pVt6h8G0B~g-h zy&a4m-^`nN^Z5AQ`$m8E`@IO-?B7l{e=i{PPcrB?zQ?@&1ej+?LK0O(B`Ql%gm)EP zB|1x&m@HFrXWb<>%i8mF(Np5GoXs;uzU0k%ZQfnTN z5r*`3UNyavy_HOvOgUGQO%}^q4VUvS$0~$a;A!~1z5}z*P#v{~gadXT*cZ-_LUl@_ zc3|9aZK4LP5e>aoM_Z15jcD(+eVBdWNbrriOLDcCzI6CGtYORDm%yx}ZDfU~zhWP( zc;Q&G<0saYx6idL*x!fH8QZ>FcMYG`)iiQuKfn-<*XfoWhy!h1?(5g@Q(z&tT^jDp=Pj%fzzoX8v5mKSs@XUFZNi^8ztRr9XtW|XyUxe?&NbVMR@vE&)kM1Bk zdR}rtShG8sTb1&*jI~5A;RJ9(tH7|TR1;YKbq!*(B$u^>s$r$Pxwu0o-bw6mj~Z7W zHQssD*zv2i^=|xD@WYi;DtSsRq{d8cJ6BYsoF}VO+uf~S4t&C6BP-QXfv5YPA!;hu3DAL5+)&K3d4t)%vMDyrx@%55hiXjeM1JD z{07c#64O(p6m9f_zoemD0Ajp36U|RnyyYc{^QH*3;F8TA@;2 zUR+vAtBNLHtAaeYDXVF4N?KIPnv9_Yq-&Z|RMUg(6$^5)Dr0rA`p}#on$D?WRj%H+ zkr8{7Sl*Da3?9L=U>S)~bsl1E7rkP}j+n_qX0pS?bSBnjV#au6Z{p)`@BYXLj_ zdqPjHJWYT8cE@v7_guA**S%nH7oO}KOgaJO{sR-3zJc!Ffn64|Tn-T%`EpM20#Ix`u4CexYB zbhr$$D$-^mufbc$^s1E_&dbE1c_&LjK*EGnme*Mz&yY4G8_nO*ywIHLg#dzHx<;ih z>Cw6anZvBTPtZV?6fL)2lv6G|0SDp>KvFa&+A#U7cG#vUoB&=Wwj}TjP;+u9Iv^3m zz8;(;Yv89|2eONfec@waa?jfllDd#Q_J{YRwm;eNCv|_)a?=8Pf`Ggs#6q;2#c|lS zcE@Cj05@iYP*G7KV#N;&vRoANxqLy+69@Gh2aN5o=^m_X^(6@ZVc2B@uz;fEXc%== zgRaxPqDP+#8IG$*_x=iWHkgLH!PZ^aQ+N0DxEr2wtWG&v9cXdP1g1`n>S}njz(8JS zw9wFq-f}>p4(Gh2M&StF&VdOC1h8rVRrd+(l5+EvwhuD{*u|Ge&PM}q)CLy~G`i=T z&y`SvgB4DZZ}4><3w8ceWP`+5-=I&?AL#~n?&%~vdacgAWJbOA%@(BGYY^GQHJAXN zIZkS=tZK3(VtE^ie5DL>Ckrrn(Nk&#f`1aYRM2E05aGJht@x2mS+mP7)OL|%fC_<0 zZa%$dn8*PYh;A_lYjQQMV1~)ehYA$unkM$kyD5;heH*&DMhxq{h7+c=c+;yI!%LC8E1(+6+Sx4rwqm&i0F+K%b&T!I;uIE%ne zw{KsQW8my;v2A%C{Z6kk=R8Ri#Xx&BMV(~dygYAJ(4*He|fPJS9#-K3RxTy-m;LNU$F!fUT6#R-EKs$ zG*_FemKTL*+rmt@8`0!ZG;fUK$U%Scvz@*HY(NVd5eOQE$R&A^>L!)9RS7^9;*%t*H9ZY7uQYqRI^B1_)lEVq4 zoN_n8$XZeUK3;(#!5S6*6(NhJD9S(=+oSyzdcXbux`D2=N4tSC?a^+aZ?#9e#fGWL z1I0q{_`7O9{?UEd{191WDE12)zA?of@b=>@38J4;zo0BSLqRA2F}!2;z?hzE-GBa* WE`N8;e!g;#S?>Nqd-WM&`|5uT`%^^# literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/distutils_args.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/distutils_args.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60879a94082600800c3b2cb191b1f9a34b204e3e GIT binary patch literal 1470 zcmZ`&OKclO7@pae*RD;RCIO0F*fbTwf@EtR2dWyWqCARd1BFY?!`gTz_O|=d%&e1G zHp&4cBjt$H9CEM_DnaeR7bFh7_U@ocSSwYk#3`H>?&mif*L^bkFcyF z1uIxPGs*&xie;=}ZCN_jEh|X-Rw*Y?;xkatcZF|3icWoinIEwC2=Pgz)rJCBD_86) ziGFMX2$j?vm9rB$)e*TvY1tBW=GaKwh$(?)J%^w zj=eNy4;+jAM-vi!QbVi64j9joII4m8J}X5^NHK{Ni_~bO5zIp3RpC(=01)kz`MdWQ zhdaOqZP)@=z*lZtN&+_K*^+7yK_(r?-k0w3$a^AsNMCYWTW%{}b`CH;wh^5NM26rd z*m!jXtjagR3T(*~ZoJ--k$l|zw%St1WuzeWyRqSPkNz{tE51lWiM#y2_m1jnYdnvB zoHu|d*-o?)E!fg7@rVtt1^IYW&E_W-q1XtB->?xz25(X5Vvo_+jKeqlKYc1PU_Ic`;Fv z)_o$@i$=QRdo{rkah6>H*AL))1S`8@43WY}hzkl4osIMg_q2VF6490@K``HvDlX`U zY5AmS=&(rUhl)~xI4BYkBrCkN!`LY6SuUg_Nv8`x`@d@s#ljn#ecjfG;-q&CCz0k>NAvoC42e*WVvZOvPYAeQO9EIhM5K z%;WsI?Wt|`x6=>n{ruuie(_O$@%w9?k2c{Z+DnPIB%3{(hVW zS?&UpGlTT>lgZrX`Xb+w;2x1a6nX9ja`cC`M)OFO#J*NrEqCfBdgG_SmqJ1_l|DyltLRIl@SiE$nd zQDbWX-#MZRjkuR&ibEt*Muvy~1?+JdkQ|2t{gUgW(82GJSuTnNq2F+bWeDK_yxf1< xGXQ7%PkUk|la^vIf^|JMo`a`1S@+$owHR=A`}5vhkM>@<|MgJ(UmylA;U5{alm-9* literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a7f985e55dae9cad5c1023a2fcfb8140fac1aab GIT binary patch literal 3241 zcmbtW&2Jk;6rWwMzhb*-^Fc#{$|NpIEfSkH2q=^a1g%6>QmHKxGAhf)J9ai%?^-kK z1V^rv1Ba-pR0$QO7f?>6s6y(20|)*9ju={$gemETDZeJ`U;p0ViHraNxt1Hc}0%Zyb8T)hss)B zD~I!81?3?-QjX@M$ikcb!Ov@kWjKeJT zY;XbsvH_3{?juWp?4YS!CYj`KxMwb-`q~9ccz*0+#j{+;uwf=8ERX3Gqp)O@nDFCO z!MKidARFUV$FZD}UUf{EUADMaHEiZA`y)MGcU-+>yYq(akF!!qw=HK0^mz+eY=7-><8HFdn6avjfAAg)%aLX*WXyz*1U1SAMl)$!#UfU&sA#Pg6qs?Pn^hMM9c(HlB-yioNhTD;}AqSuz)Rcf$y`GntwnK zM$!O$2;Pd1I0|Hq{E;Nd12dHKGhsP zwI16^q;9-=^UU=#w~sdx>1HC`B1-(Z?cwqDi}-7WVDum{xc)L9hL`Le1;2o|H%N(q zue*LHk|_m;D6Bgk$tuATJ@xM=Z*ib zW8e4w-K{Y1JMF1_fhd=`5%QA38pw^V9X5B}rzfw6>gp4@q3yFDBj>4B*ZOS(xuNyv zhH)6uPNv5tSq&(HF2<=$3LJDXj>=rIiU^eKQ>boYn!2!puUG=md(L%Oc0j7S0+S4I zd6tR-a|~{|;&mxFk)epg7N9uo)io)C6!3Tr3q#RzOk9FMnEl}L*-QH6_pY3s#*?)t zyERm9Jeg_hbKIGBar}3h`<2Xgl+>8`Z(4R8uXpC)V#iI_nZjxU00bB795X1%nYPi+ z0WzgePy;TXo|Wo2R4cb?n{=L0*EFGY2?jP_LF=M5q>T-S0+zJPDCj;Z-x;VDU58i# zOYnkg(iO|L>0(uQv|azD$BPz+3Gg7e9X>$lhh3vUYYS z`g|ig(Tq;CNHlzGJC?ecyq^5xY9p3z#?o7{^v+>AMt7xs5LxZC!_=~z^R zt2R5skAnzdUBH(#f%7ZMHi@sv-!5igP5!pY#MWN_2jukDUjLRFQdF?#KawN~Pi|`y zt#Bxzu0>nPi1M~_`*Mq5zuD>AqdqzmR}S8ViU-~OQpBgcMh5CBKwXp-TLK{s=odDb`6m^@%s5v}(mu_s;QQLt2Ts-P!rt-I>`L z`@*bbm_)UQ%ce^q(Sf8X$UcZ_5A%9+C(jli7rH7zR-Yc9Te)DLv*%?K+uWtRuAmhzk8{H(S9oU`J+b0zuETT4BZ-l#O^!81$uUn$NCnyKnG2s@ zG~XhpXEi9R^H<*g;M!GlXzT;jN?5Xa1L3@(W<5vA298XI%+zsI>2DnScV-8M^Ua0bu9M9e7m_sc+g6TXAlF4GMJUnORal7s2{D z;sYtM*8#p_4=KpB-$LS8Uu6mmWFglshx~OC9RNlFdu0Pag@649018Z}PsZGv?^$IF zY?1y1d`%VDidWd}w>>1xV^09tmxZ@`reIg6SMEE#Nlw2bIo;JB@A2FKi!Yl@=)6zg ziz97zUbA(^(Yc2-f^X&S*#(rnE=uCuGDfCoVuMtzn9~d*BDE}HP0VVBfwEXx79qlf z5b**Mk=iV9zh5Mfk`!f5BIgiuMaxPG8kt8}H&70dy|86GNbF1$7Zv$B5;YyEgK<$) z#m|=Uf~F>Cx1GZFKXXdKaL_Y{cZG*-PBOEyoQekxr>1Sci6sM@H)XtFGYV2|9wOop zvN=;%WNZg!X3t)j{&@CW=JOewH<4sy7i@ms(DJ%z^Gz4+zTJGZ8FSgR_YxIEIVrE; zmh*AWa0=39=CmbSXi05WkyYe0v`K7D$2lh<;)^d63)&J&EW(6tXp1CmWaL@`IYyiqPQ4dFd zV#;TK5PlTO{<7Z+AKnTNZH9*)ovek&t?+m?xHB3Iv2O5SPh`V?-(Q}n^~S8;SmjV< zv~tMmJ<RyeJ=|XnA8C$y^uWgI{ndN7AKb2dWkus#(c_!Z<4>Zs=%f{$T>FSP zzA<%ws(h;!9<;)P)!@$f$BA<4?$lGE#}W=#W@^HaB@9)C)Nfg9WV$wzvPM$R89K=S z2?%ns!*7$kfq2B`o%+d|hSNtjZ6G7+5IkPiNkO4 z&?7TvX4<*)GoD#;%u^)C+RX@eex_O1oZE(^2C-p>G8su#H7sFSQ_W1q?#gOQx~w3> z`M-1D{8wNcbm#*Fy%0_TZKPJRiK1Da}{efjSqkxJc<%l@(p`?eeiI`|hjc{~0twLX0l5MYuLmijFV)c->;M1& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0ec332bbbfd08f243c28eee5e16527d5227cae4 GIT binary patch literal 4248 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 MU=k literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..071a7ebbd9be0d46b8fbbbb23fdac78649c8039b GIT binary patch literal 8233 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18bb534a3bd2fbe79c68507725935e3a591526a7 GIT binary patch literal 1319 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..251f68af22f80209636ba08fb7ef29d18a8f4d63 GIT binary patch literal 8340 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 Kenu19w*LjG8C>Q7 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..484412efefc3380b9fa6c14dc7f851d69f2ec86a GIT binary patch literal 1337 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/misc.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/misc.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8747ff260584a47a3eca8b2e487157865418a658 GIT binary patch literal 37704 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 Htq}ed(>M2$ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01b3f97391f9896672b785e772e757db59e69db6 GIT binary patch literal 6107 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 G@&5p6-8y;z literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ca25b2a06effefb4366027e6af6028ca1e41f78 GIT binary patch literal 9897 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 W1J4RRe;xgLRNpm8(k}&ML-}8>_dGuU literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b37d7b2797c2276699af5a2f92e2a193e972d44 GIT binary patch literal 11424 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 cSNV0)hc-g#Z8m literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8892b6320eb7f019d8aca50383e7f0087f5a0139 GIT binary patch literal 12899 zcmd5?du$uWncpRsZ}BCO67{gW*25AliF#O8TtAfaGnT7|9XqWnBw;A+N}@uMy4}^o z3>D~t;Hnq`EE~F$+Bz4uXi~K)5ZxaK1cw98Ev~K8%K=jU^(>Q8`r#@nuF^`&OETfhg>!_7R9ZbYH zV;i**zadgKV;{8>zcJ#NagI7?T%)cT_o#cOe6*azn<5o6o>31?=_sC__U0~ZpXMN+eq;>O_boHDZVOMo6A@D2znVY9 zSwYgw)x2#OJ)DonI3rgJ(k<}r2lMfDytTL{B<}&p+sf&#QGPaF_mUKjgrzVqvH~9o zNj%4fgz>5HJTC^UpX0j?`}L}MK;nhaScF%Z!LTT)=8;(`9E*k`ep)q+hGz$&6EX0* z2cn`BihvqOydVfM!Oy6Uv!gx13pcJ`7``?zGJH*STtD+-Vc33Sv@qxx9k@~u2CY^; zD$WUfkP8d(+Oc>KI}_vPB0L)w*=S5+L-V0<1nU;Bi^OL_`=zQzftTil=y<-rz@yLp zzx)n(HYh1?qZBor_j7cyRV?izm!OK}XevQL8|&g{U*IKHn&R2Y&bd}i$H6$Q=$2Abdr@~tO(*^$idId#)Oa%j@%3gFt$OJs*8!LfngO>`iGZ7Cjp1?(P)B z65lZk>7hwp?3@kHb_T;y=w|5E&N(m&v2!kp$xx}l>`m34t$dJ_E>u9NZSWTlfwN3~ zX0xvzUpw>8$<>p~=XV(6+m}|Z|IP5*!^^{In{)ZwUxE;&GP5CRYCPYr5XHbB`{2tX z5W4~Gm4v|FtF#A_dqp6I(-pV>63i_LYMv4D2mOVm=e3mT-&d}rgx84%ks*9X&cdMnIW6EMtXYUqj-qao5RC944*C^`lyDH@dr<7}!C9uDziywrb#hIV zZMBN6_K~gOp{*g=E8AKXTkG=qw8^@{Ex)n+M%rRu^Q_dZ)NMAs=l`KUdF}^+dx5Rq zkG}PbZ*5=y`SZVg{$b6DRLzNxr3byK=SSdv?5wyQzZKtX-27|Vc}Q^{N|_Jkm87$Y zO-WjIHYm=9l)2%t%dJ_{1rOHUfaW7U-F{vL0a*L!CFt?<)GIAZy27!XDCxJC zp&yp?OH4v9>S5)A7ERF0`h>Bz&r_xp&6ddHZhB7Y!qUwEL^SO03T>)`FUP|k%;3RX0dRTjYWA@oEwAw zfT0@`Zem;rZfz>|4`00Qr%6xw4FU^wgW(vPnTbV%vjRU6UL^gj8nuAR2)rnX1`xv{ zS*_=tQz5aa-cLzxWK#93i>s#>=^a#cX73cORcVq9a= zPDnRcs?!y|wPS0?()OB^y&+xKurjnVl(tu_Ej_e1rR+`FwBl7;S{uRKDSe z8b2dAp=hn!O`rj-OfA!FLbC!el*1^}0*-125ghEAaj8}eYQ+eRkX~vl6=5-`mA#uu z=m5bX6dnO*nfl61d8^i6*ciDxk{pmd0mTzo9@=qNtXFLuyn8TNDZ5)0ckA-y&+N|C z?>@30dT2kCJiUD+)o@z2_bc}P<%?;Xd+imNTvAK}v5umVZG=L|%J8RFW|$9Y3GF<4 zeE`o7a{i;asU zOZdN_YM&24T>)N^zEllF3t3o&dPpdowtD~)1o=ft2#o_m3u0Y^QY^^v6QQ|?6ok_G z;A~`01R1O=q9LIhblgBa*m2NbR?1+)WqIwwyRZBpcrTc$YnMIkTXV9fS7!PYrZ1Jd zwXw>C0n`=s3AQxplL_$PYCR24?c(S-@Q@{1Di|OMI_4|vo#}j9qGY(mm;^8u?5*Mz z90rbl_;VK&A#{QRVA2kaKp;vmBuRqGjKyLRl>yKxsiteefom^bc)_m|a5)2X1g#?C z0L)E+mGSUw5Kzxd5bV34rA~m%Yw#DJ1Ba}DitRwMT(&hXpa058mATfKl3PqUpb}>2UFi1@^R`f2)>}~bBpUpli!&BWir#%COIlKJ6=9*0x1*`mhehdo zI56~dzAXx?RoY`qHn79|dqFFhfu+Ov+eN*{sHHNgaaYH5zE=~rL|L&c%+VJ7mBvPG zjZ`-!G7CD5>m&20;g_%_k(2DXitQ1`l7CkuQPQS@Q)(+n-P2NQ^y*aO|4vD+KV8xS zwY!&*(0{Wx<1E)GsNFY|&gu7CL+?TNl2z%YD9n%qZjjZm6)}Le5Wbe1*Ix4@Lq*&I zldBYtk|~aTEjQV{7GT*kkqFU-Sww)aJi8!-aROw=LL%%hz|tt*6k!?$6=eMap(vLn z#RMSZk~tF=Mc73k3Wz%7`ec0;=6TK!7pG95`i?zT{&P76kwusO0Gh@7>J4mY7T6SSj7-4V!;bL)+lj91YX#Wh z7{CKk5yS}Db-%r^Y<7Gq6a}6Q00KdOOblr1p>?t^2cSWN3fQ&zTW z74i#JpjYsLqv{sMhW(WS&XOtHNsHQ9j%i;mDEbAtssvgQ$O*6bG!q$hX192l7^TezO z`;UMY3NDR1S?6$I5ZEPr7eprEFW!Ku4PaF{WpJ)6%8XB8d@07a18Bjw*(;Z^N*TL+ zA){jrl{*gaYHX9=W>Su0vg4TIIJTnSDL<5K{8{@?+J7AQX+SRTR?53m<)^nNS4?S7 z)yCl6!8^n2!x^g9GD3er+?Dg`imLU~@Nj!q&ZeD}8H%=d?RXC-CE44qc-yzGD&EdD zod&_{?$&KiZRuopo8oR;IlEKtS#R0syxW;dNx4SSPWSCMZoRR2RCXRz zoChp+Heo%j}9$wG;+*aR?uU_#T+3MMvmwkPTuP^26%jhA6 zBopTg6#N4^yKztRJ$drvY0=1gt2Qp(y>#dD`sKCDJ5?Q9oLqHOsXB_%P$l2x2R*WH zSn&;~e8Ycyk}>=x@{k3qJ3?dW$FMguCn$^Kw(XYf9s8<%h5VkZ7z!gmRJ;Th_Tvls zOU=}8nq4nc>V9*q@?w?Yx3)6y|F(*`SZn!htsedLH2Mz`e?u?G|E}`bC7a=a4f8%| zuDoGik?`&R%=88$kOD&!W8)4ML4gp!0x~$Hst;3*IkR6X3&U*eWSPWr(z3yQBcI zPUq_mh*if~e`zbmtb}nCpe?TKZNwb~W$%_(Y%Axf;&5@x;Evok)3T;}#S9$8Fr8-r zz%dwL6uYE>Dn)mkeK&E*DAnxNaoUmd?}OWE&{foCOD5@1E)O7G8nAFtI&cC9u$BU> z3urx$c6W0^USK|dmJ=Ah2?8v^`6Vm>aQ=@Hh9vH!?zxKlM7V0f-prrh6^bVerEdy) zf7eJ!?YmNNa@P)=slXccu|y}ldqEE-EFS>(k{TjV z*>fcfB{pS^o`L#x?Fve`J&?U7bWq!l|J~XGOSn>6-$I79kL4BEW3F~!9VNY3{BFQ{ ztjoH~)LV2hljhvT)(E`ICgJ8r_L{EC`4ZNItymUj0~h{EWB27<)?@+m&FO`m9PsY$ z#X(K=N!-=ib3M(Xz$y?pl8Ye*{h;)sBe$;K`+b1ldHKK9;Fe!?1R5_a*y&dNLm*+mi*1 z5v`ZJ8Zy3TWsLF80qu|?ueBM@$bgq>uf;-$oN~>FB4O?X1cwD2%-WvrA&p)dfY$PY za2ewfeF(UGz^P_za*_wKwh$7c(A=sCiokjcXHkZ5Pb-`vW!sOmX$j{PUO-9Q11C&V zz&&@>5EhXG!b7|{qdIe2>p@MAYPmr67QhfxTXxqS3sueE=5LbE8dS#_*nSR=!La}d z3zty;x6v6y2hU01oL&k8$^8~a;AXtPtbnXytg45%5w2i5o?i+tqJzt>a2*^~4?7&f zOBlp65D{5;0W-}W>j5Di3FA3%a(DQkv+#0&#@G_pX^kz(DLpByAGUfcxyL? z?+&MZ18Eo$HHruNY^zW9^eCR5l&1$+xf>aN z)`3j~_fgnHD2&@p-Sy#XKSk=Xt9-+J*L=siZe6oJc2#Ux?pihvC!1tfi{ffYxmq4q zRIi_e(N+PLMZ2LlJs0mwvS(2745mDTf6Rnvw6qLIQ`O1AFDACf$QZ8vRYyff~buK*NC7@QKR+F`sx15c5fm9{u&+fnMDw zM^W;VUial5!|x3Zmpcrh__({lzz|NU6yV3pxhTN(I2tzrgiEuYq6{HOIa z`VXElL*PI9D~COLJadMRhN4msSInXlF4$ktPPi_^vi6LJ`N%?P?J!;ZE8xwz((bv6 z5oa>bBMJozSxGUL7CjQ~{$;P-)2h-B3xw7ptc~1{dU{!<-y@Y#a25wO-#z;QtPNj? z!Micpce^4LuYi)E#P>0 zVd`SXBnpgX(Vq56n+AOVmbAhFeKZmaaj?5TA;e|?o3sNCBo^I)7L91df07;F#fszb zb%6F&4t@{-d)D#BJxH=xfQ4^5{N)9^;AVjjMevIa;WcPt4fEhWhHwrX)e48xP-TL0 zaI;w$&&B4j51!xdf+PW#eIbNG=5aV^2?IPNPzOFNAbap+b9@%kMI1H&A+$|xo7NT@ zbeM;f&rswrkS+4DfUA6U;gR#;L+8PyS$6srr+@jDf;G=Y->?$EwF29IRd-NmWs9Gn>V(PKRSB;;ZejF zM+cRogQ?EJlzB)t4=Ls$@Mt$Fto@<6J!Nj+DOLvhJ03r+{C|qd&F6o!BsX7|Z7(Ud zm$2B5e6h0muwp)(%H0_6yzRW@%;;!)+v741V2gB_?+cp|;RQGubiQ&>PBz6}xjzLC z+_K}U;<%bJUnP**Ps6Fqu-~tmfqRki*mkPw+S=|!!BjbK2-P(dj!;-T!6DX7tQXBsco`kspVA1B`IPpZZ@=)j z5C>*Si2-ObSh#6`IyB9|N(zpVqMgeQ{G}<&GWn$``!e~ZDcdsnr70qTGI>v1irV*1 zQ?;q$`!Us*D!wy11FZvu^gnXSD7q^}br#-_Ej24uilt`rxNK=sEKSQscsJkSEr(nM zMSC)gf$mB(j^)evd(8MYhh^pnoH)V#ByB3k*67-G(v0={gKrI{+yR;CRG7|G?#A}( zLKtH-(%p|4_&67TsBcJS{KfhJ!O^tlqdQMhIXxq844byj>AIN zY@P!+NY^CKZ&mzsfOtzCUm5M%Jf1vv?{tO&@78tlD0S-1bYl{b8$7o4lKn`Bk+Awm^T?SaX)r|LS=f++Q=6vkvOlj+(P=`d=TR!ToQPOKdp+ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fd3ff8e302ba34c48975e1c11589b7e5d487935 GIT binary patch literal 2696 zcma(SOK2NMbaq!-NxS+vuJftgWJ`WlnpnsoX=92Zu}iQMY*M!gH31`QHD-j4ato+S1YJ&HK%p zH}gLGz0W5h7zclOw(y&X(C?IJ59c=Wdb zNEK9v?n=66-GDnak1A@S<~h)|jBYqo*C&oyNp&-s2WSt_^0qFeC7``3H-kd*2HiIm z;%xVHiX==Us&8<>0fy_^#MJoowHaGTW8D_9M$*`bQDJ*H01@E-d=UU#g3F=|hj|sv zpe!l@@8zL#D*u2-=n?!|Llt&hFYUJ8RzME`d(@%8X~)zSH-hQun3@Ukw$n=K31T~S zb4kM?4#RUJiyBk5X2Wqasf8ESa0;7?T8vm>Gntv2kH&7MQ{jweWWsu4KAc)6anm?G z6p4hb1kp~VKptJttZ*uk3eP1BqG5QOaGE4^D+~`}4W*WC|AI#5fS9vlaV@D~ADl>I zZk+*;M|GD}IGn$ozg-XXu9CX!|NPvYbA_4W>lJyRCJz*^)Z|0!^3ke%v?3p`$;Zo% zdf)Rq20-aMHMt?D+S3OA_KBLR2TK{KHu&63*L3o zx710}_I|o%`K&-~ciYGbT^?M@^40|D+1ZyBy7g7}O;#}YY*tWrwQE({zSjxh%R9Z0 z?Afuk$UY>L&LF%O^t`I?Q+`KR^#fm``_;g1eon{=P&UDp!57M=Q!K68q3PF3drWVz z68XSPE3v4dn1;Tr(7wN2UXY)b0?p85G|g*E88l3yY;hsmqnoj)9ycNF(F%Y4`pR2| zX`EtArVhn9VJT6pDRhUGPNhstOV2bE5>Hr4N{^BoP+}v>2F()I+qbwdYxEm5_8YY2 zLlJqXkNik@DkR&IMQG73B}g3i(Or81*ly}5{Ul)e=C*V-s;9MgFg7vXPZ?g254TIx z7Ie+9MT_8sv0(e6RxFX2(=`Gu-wHWcwc6aAEgBku%dir*s3)`&ZPzcDqvcC2;*%hv zHEczon)0aWM&7{ZqjyH@?!YsF_lkca08PX@$GH}4xW;}yU3QJN<})XifKo@k=|-;| zzISuq+Pldc>$uzKFh4Fve^89*cmKxTkf}$rkd8ZQG6Qq z((j)2D}biJaa!`2Xo^{k;?w*Zq5~NL0;0B9A6Twn)KkWU^ n$Iusn*Tn@2u_l70*jgCA3%qiK3l?UY2$o`NVfa4*cG159bD&^C literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36bb3e07c7f6131ce4cad07f9873457d1ee19902 GIT binary patch literal 4943 zcmb7HU2GHC6~1GS|MO$8N%)D_3&|$9g%~!0WYa(rAfc!%Ad;%ZYHKE*n`FXx#+o}$ zNSa8lw3VXOs!I_Syi|%1KdInxSK^_4pi-Y}BUfvUgoIS_&^{Rf656Mpd&mDVNWJ!) zduHzMIrp6JocpM?)sLX;|Lg1dOe;eFW-sL;mY6sH1?CQtku0bvX4gVY;O~x@gV)ZO zlh4|v+n@gCrVzxDi$OZ|Pohf2I3_;8620KZEXrctEjKWvtZ z5r-vSP^f8nFQrUH*CcgySkV${S|&&63N=ac2vtmSBqb%TOY?;OivH*%Jcq_Ek1k1S znw&C?G+CRIR7xV2+aPAz&=QsX0po_p3D29~0J(!qpyjey(U0jWe?xUWWTAQghcM$~ zHY+dJIR`R1R<$z=BypW$We&sc`)4Ie;wgj7DL1gB$^2XCH7S{ig?_&uLz!7nC|-aL zDxvuDw3+;F`rBA;&v<^%`18PcRvb54picsxN@4E7)cfWz5IDZdk-Uw>$`^hZ$@;@Eh@_Se1N2Ra*-ZV-l#LTG)+91sR?G#QT1iQLw0tT|^wL?>EC6Qh zS&%4GzrnoHV6MldGXMaPg&Q=bl6fhy60fS$*a_V_;Gtn4ptcs&68h7?-PT;7Hy`ND zioM%)#iZxD8UdzWR}bOKV|eV6YBjmZ+Hdu3pgCdn>vK?Rgxc_Rg`+OT7j=ysW>%w^FeI(YSkp}mULi-NM1oL?!8Y)mq7vI< zR{hmAS6yjy?#OUNu)IV|=rVxF#fZ;x=+qKZlDS}si@KuOzT^Y>EKyGp%@Wz{mY)Jr zntVr==hF0~Vdw^UV7oni97Kwln>xGr1*SV9&XfAenf1foRRgO8~sge`q?D(kTQVQ^&J} zhngjYDzhrMlA$L*gvQsZzI6>J)8MqsizP*~olsX*eHomL&&TY3#NH-LM?RK+;ggsr zTXydWSyt?S0Ue8|2jt_$&ZLr<{;_4sHR8XP>5Pj8M_hFgP z6y$!*B?MitiKT?8ERlXZL1{Y4KFq87EaXZJXF<6tOZ#D}<9dKB03ffNQ}xeSE}m0b zE-vC!#Lcn5a)V&=#IQUi(X8(H`HN>R{QT@>eERD2%;XpG>GLy_@yiouel~G#ayoux z^4#PvEf>%5EZ4lDr&Exd`4|k@7$vgG=mU$S%#A?hWkAyOxGg|!2K8g;Gr&532?PMC z1MTR|1^e>BzRdZ8Cz$o@1{CtOf7A9=ThZZY?SAbPeg3xyNRbmi3Whh#m%%+n1AjIrtv>Y#iSne3_pyQQoxt|G^iAl}j}v-(<6GD`w?}gV18dx9h#R{%yT3pRbv} zX^4i9-jGNF`qb>AW_;7|-H1ax4gH4=A>a=OHT{Tvy!Drwe)EQT5R)4aS}E8yPqLT+ zLr!h`8NVPT6&BYZ0_*cif*CMNL~Al|4n;D7{2UyCxdLDdOU6p@!acp-Ef~awz8?DK z)K{mndr#y7L;1i^Rvg;y5tU?o2^RiXj5OLlmWs9QLx~&N=_ML&<;q5c*jeD}tdxHbL6m;dCm pB7*luvVX6z!T5C|4vD6qb%=mr#h+J6ou zSybGhFQcfR=lY+^|DFGG?$*_L5In7)d_Db_T?qY)WXg}Ll=!BDLFg6|(F771kxeoa z41BpHo8l%ohLqWowv>IsPSf_JBjucM(zGM#O1UT8DbIw5=AB7z$~WPoX;-o?<)83F z+C33qk;Gi8FAps3x&tG=4}bHSXb?S;NAyZT(I+{jpu|nF&E-lomhO?A_`dtYjt)%6Ikd(7h zJT0V1_xhL9syPcuyhz51uwRkg#4HfQO^1(X<&0q?9SjGSv{{@^klOO&h6D%yZ|bS= z-AJp51EEE<$lQU}?^k*(u^MSzdZ3=Ispm9%xfc3!Rsk>B(u3_tb8NRbfbi2xcFnn6 zA~HGKc5XYh$Y|cGoZZUVIty#vH30LH{Wbd>Gl#BnKSpzmR#(NzR=Y+9R<#Jw12J>i z_lB=(SV(BRoCfix1R`mE3M(mIo00eoR<6jRB$|@$;w6v=CgPVhJ|#(-%1;Waobd4Q zsG5)#1uOy-X#PAEhD!Mm@$kwNO-Dsp)ee*4cu~euLR0WO4_(ax30_40;+f&$=U@a) z5Cu($QhwQ%g(ZGQP@yeM_6h){GOdNBv532L<> z;rytvjGT$VQZxytg=B12lap$U&Oe%&H@q3LS8jw(KV|wt|itB!GUoNutN+Ebu4<3bVLtD;OXo%3_6;F8rJ^4 zts`⁣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 CRn_DG literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/_log.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/_log.py new file mode 100644 index 0000000..92c4c6a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/_log.py @@ -0,0 +1,38 @@ +"""Customize logging + +Defines custom logger class for the `logger.verbose(...)` method. + +init_logging() must be called before any other modules that call logging.getLogger. +""" + +import logging +from typing import Any, cast + +# custom log level for `--verbose` output +# between DEBUG and INFO +VERBOSE = 15 + + +class VerboseLogger(logging.Logger): + """Custom Logger, defining a verbose log-level + + VERBOSE is between INFO and DEBUG. + """ + + def verbose(self, msg: str, *args: Any, **kwargs: Any) -> None: + return self.log(VERBOSE, msg, *args, **kwargs) + + +def getLogger(name: str) -> VerboseLogger: + """logging.getLogger, but ensures our VerboseLogger class is returned""" + return cast(VerboseLogger, logging.getLogger(name)) + + +def init_logging() -> None: + """Register our VerboseLogger and VERBOSE log level. + + Should be called before any calls to getLogger(), + i.e. in pip._internal.__init__ + """ + logging.setLoggerClass(VerboseLogger) + logging.addLevelName(VERBOSE, "VERBOSE") diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/appdirs.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/appdirs.py new file mode 100644 index 0000000..16933bf --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/appdirs.py @@ -0,0 +1,52 @@ +""" +This code wraps the vendored appdirs module to so the return values are +compatible for the current pip code base. + +The intention is to rewrite current usages gradually, keeping the tests pass, +and eventually drop this after all usages are changed. +""" + +import os +import sys +from typing import List + +from pip._vendor import platformdirs as _appdirs + + +def user_cache_dir(appname: str) -> str: + return _appdirs.user_cache_dir(appname, appauthor=False) + + +def _macos_user_config_dir(appname: str, roaming: bool = True) -> str: + # Use ~/Application Support/pip, if the directory exists. + path = _appdirs.user_data_dir(appname, appauthor=False, roaming=roaming) + if os.path.isdir(path): + return path + + # Use a Linux-like ~/.config/pip, by default. + linux_like_path = "~/.config/" + if appname: + linux_like_path = os.path.join(linux_like_path, appname) + + return os.path.expanduser(linux_like_path) + + +def user_config_dir(appname: str, roaming: bool = True) -> str: + if sys.platform == "darwin": + return _macos_user_config_dir(appname, roaming) + + return _appdirs.user_config_dir(appname, appauthor=False, roaming=roaming) + + +# for the discussion regarding site_config_dir locations +# see +def site_config_dirs(appname: str) -> List[str]: + if sys.platform == "darwin": + return [_appdirs.site_data_dir(appname, appauthor=False, multipath=True)] + + dirval = _appdirs.site_config_dir(appname, appauthor=False, multipath=True) + if sys.platform == "win32": + return [dirval] + + # Unix-y system. Look in /etc as well. + return dirval.split(os.pathsep) + ["/etc"] diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/compat.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/compat.py new file mode 100644 index 0000000..3f4d300 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/compat.py @@ -0,0 +1,63 @@ +"""Stuff that differs in different Python versions and platform +distributions.""" + +import logging +import os +import sys + +__all__ = ["get_path_uid", "stdlib_pkgs", "WINDOWS"] + + +logger = logging.getLogger(__name__) + + +def has_tls() -> bool: + try: + import _ssl # noqa: F401 # ignore unused + + return True + except ImportError: + pass + + from pip._vendor.urllib3.util import IS_PYOPENSSL + + return IS_PYOPENSSL + + +def get_path_uid(path: str) -> int: + """ + 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(f"{path} is a symlink; Will not return uid for symlinks") + return file_uid + + +# 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") diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/compatibility_tags.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/compatibility_tags.py new file mode 100644 index 0000000..b6ed9a7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/compatibility_tags.py @@ -0,0 +1,165 @@ +"""Generate and work with PEP 425 Compatibility Tags. +""" + +import re +from typing import List, Optional, Tuple + +from pip._vendor.packaging.tags import ( + PythonVersion, + Tag, + compatible_tags, + cpython_tags, + generic_tags, + interpreter_name, + interpreter_version, + mac_platforms, +) + +_osx_arch_pat = re.compile(r"(.+)_(\d+)_(\d+)_(.+)") + + +def version_info_to_nodot(version_info: Tuple[int, ...]) -> str: + # Only use up to the first two numbers. + return "".join(map(str, version_info[:2])) + + +def _mac_platforms(arch: str) -> List[str]: + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + mac_version = (int(major), int(minor)) + arches = [ + # Since we have always only checked that the platform starts + # with "macosx", for backwards-compatibility we extract the + # actual prefix provided by the user in case they provided + # something like "macosxcustom_". It may be good to remove + # this as undocumented or deprecate it in the future. + "{}_{}".format(name, arch[len("macosx_") :]) + for arch in mac_platforms(mac_version, actual_arch) + ] + else: + # arch pattern didn't match (?!) + arches = [arch] + return arches + + +def _custom_manylinux_platforms(arch: str) -> List[str]: + arches = [arch] + arch_prefix, arch_sep, arch_suffix = arch.partition("_") + if arch_prefix == "manylinux2014": + # manylinux1/manylinux2010 wheels run on most manylinux2014 systems + # with the exception of wheels depending on ncurses. PEP 599 states + # manylinux1/manylinux2010 wheels should be considered + # manylinux2014 wheels: + # https://www.python.org/dev/peps/pep-0599/#backwards-compatibility-with-manylinux2010-wheels + if arch_suffix in {"i686", "x86_64"}: + arches.append("manylinux2010" + arch_sep + arch_suffix) + arches.append("manylinux1" + arch_sep + arch_suffix) + elif arch_prefix == "manylinux2010": + # manylinux1 wheels run on most manylinux2010 systems with the + # exception of wheels depending on ncurses. PEP 571 states + # manylinux1 wheels should be considered manylinux2010 wheels: + # https://www.python.org/dev/peps/pep-0571/#backwards-compatibility-with-manylinux1-wheels + arches.append("manylinux1" + arch_sep + arch_suffix) + return arches + + +def _get_custom_platforms(arch: str) -> List[str]: + arch_prefix, arch_sep, arch_suffix = arch.partition("_") + if arch.startswith("macosx"): + arches = _mac_platforms(arch) + elif arch_prefix in ["manylinux2014", "manylinux2010"]: + arches = _custom_manylinux_platforms(arch) + else: + arches = [arch] + return arches + + +def _expand_allowed_platforms(platforms: Optional[List[str]]) -> Optional[List[str]]: + if not platforms: + return None + + seen = set() + result = [] + + for p in platforms: + if p in seen: + continue + additions = [c for c in _get_custom_platforms(p) if c not in seen] + seen.update(additions) + result.extend(additions) + + return result + + +def _get_python_version(version: str) -> PythonVersion: + if len(version) > 1: + return int(version[0]), int(version[1:]) + else: + return (int(version[0]),) + + +def _get_custom_interpreter( + implementation: Optional[str] = None, version: Optional[str] = None +) -> str: + if implementation is None: + implementation = interpreter_name() + if version is None: + version = interpreter_version() + return f"{implementation}{version}" + + +def get_supported( + version: Optional[str] = None, + platforms: Optional[List[str]] = None, + impl: Optional[str] = None, + abis: Optional[List[str]] = None, +) -> List[Tag]: + """Return a list of supported tags for each version specified in + `versions`. + + :param version: a string version, of the form "33" or "32", + or None. The version will be assumed to support our ABI. + :param platform: specify a list of platforms 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 abis: specify a list of abis you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported: List[Tag] = [] + + python_version: Optional[PythonVersion] = None + if version is not None: + python_version = _get_python_version(version) + + interpreter = _get_custom_interpreter(impl, version) + + platforms = _expand_allowed_platforms(platforms) + + is_cpython = (impl or interpreter_name()) == "cp" + if is_cpython: + supported.extend( + cpython_tags( + python_version=python_version, + abis=abis, + platforms=platforms, + ) + ) + else: + supported.extend( + generic_tags( + interpreter=interpreter, + abis=abis, + platforms=platforms, + ) + ) + supported.extend( + compatible_tags( + python_version=python_version, + interpreter=interpreter, + platforms=platforms, + ) + ) + + return supported diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/datetime.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/datetime.py new file mode 100644 index 0000000..8668b3b --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/datetime.py @@ -0,0 +1,11 @@ +"""For when pip wants to check the date or time. +""" + +import datetime + + +def today_is_later_than(year: int, month: int, day: int) -> bool: + today = datetime.date.today() + given = datetime.date(year, month, day) + + return today > given diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/deprecation.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/deprecation.py new file mode 100644 index 0000000..18e9be9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/deprecation.py @@ -0,0 +1,188 @@ +""" +A module that implements tooling to enable easy warnings about deprecations. +""" + +import logging +import warnings +from typing import Any, Optional, TextIO, Type, Union + +from pip._vendor.packaging.version import parse + +from pip import __version__ as current_version # NOTE: tests patch this name. + +DEPRECATION_MSG_PREFIX = "DEPRECATION: " + + +class PipDeprecationWarning(Warning): + pass + + +_original_showwarning: Any = None + + +# Warnings <-> Logging Integration +def _showwarning( + message: Union[Warning, str], + category: Type[Warning], + filename: str, + lineno: int, + file: Optional[TextIO] = None, + line: Optional[str] = None, +) -> None: + if file is not None: + if _original_showwarning is not None: + _original_showwarning(message, category, filename, lineno, file, line) + elif 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") + logger.warning(message) + else: + _original_showwarning(message, category, filename, lineno, file, line) + + +def install_warning_logger() -> None: + # Enable our Deprecation Warnings + warnings.simplefilter("default", PipDeprecationWarning, append=True) + + global _original_showwarning + + if _original_showwarning is None: + _original_showwarning = warnings.showwarning + warnings.showwarning = _showwarning + + +def deprecated( + *, + reason: str, + replacement: Optional[str], + gone_in: Optional[str], + feature_flag: Optional[str] = None, + issue: Optional[int] = None, +) -> None: + """Helper to deprecate existing functionality. + + reason: + Textual reason shown to the user about why this functionality has + been deprecated. Should be a complete sentence. + replacement: + Textual suggestion shown to the user about what alternative + functionality they can use. + gone_in: + The version of pip does this functionality should get removed in. + Raises an error if pip's current version is greater than or equal to + this. + feature_flag: + Command-line flag of the form --use-feature={feature_flag} for testing + upcoming functionality. + issue: + Issue number on the tracker that would serve as a useful place for + users to find related discussion and provide feedback. + """ + + # Determine whether or not the feature is already gone in this version. + is_gone = gone_in is not None and parse(current_version) >= parse(gone_in) + + message_parts = [ + (reason, f"{DEPRECATION_MSG_PREFIX}{{}}"), + ( + gone_in, + "pip {} will enforce this behaviour change." + if not is_gone + else "Since pip {}, this is no longer supported.", + ), + ( + replacement, + "A possible replacement is {}.", + ), + ( + feature_flag, + "You can use the flag --use-feature={} to test the upcoming behaviour." + if not is_gone + else None, + ), + ( + issue, + "Discussion can be found at https://github.com/pypa/pip/issues/{}", + ), + ] + + message = " ".join( + format_str.format(value) + for value, format_str in message_parts + if format_str is not None and value is not None + ) + + # Raise as an error if this behaviour is deprecated. + if is_gone: + raise PipDeprecationWarning(message) + + warnings.warn(message, category=PipDeprecationWarning, stacklevel=2) + + +class LegacyInstallReason: + def __init__( + self, + reason: str, + replacement: Optional[str] = None, + gone_in: Optional[str] = None, + feature_flag: Optional[str] = None, + issue: Optional[int] = None, + emit_after_success: bool = False, + emit_before_install: bool = False, + ): + self._reason = reason + self._replacement = replacement + self._gone_in = gone_in + self._feature_flag = feature_flag + self._issue = issue + self.emit_after_success = emit_after_success + self.emit_before_install = emit_before_install + + def emit_deprecation(self, name: str) -> None: + deprecated( + reason=self._reason.format(name=name), + replacement=self._replacement, + gone_in=self._gone_in, + feature_flag=self._feature_flag, + issue=self._issue, + ) + + +LegacyInstallReasonFailedBdistWheel = LegacyInstallReason( + reason=( + "{name} was installed using the legacy 'setup.py install' " + "method, because a wheel could not be built for it." + ), + replacement="to fix the wheel build issue reported above", + gone_in="23.1", + issue=8368, + emit_after_success=True, +) + + +LegacyInstallReasonMissingWheelPackage = LegacyInstallReason( + reason=( + "{name} is being installed using the legacy " + "'setup.py install' method, because it does not have a " + "'pyproject.toml' and the 'wheel' package " + "is not installed." + ), + replacement="to enable the '--use-pep517' option", + gone_in="23.1", + issue=8559, + emit_before_install=True, +) + +LegacyInstallReasonNoBinaryForcesSetuptoolsInstall = LegacyInstallReason( + reason=( + "{name} is being installed using the legacy " + "'setup.py install' method, because the '--no-binary' option was enabled " + "for it and this currently disables local wheel building for projects that " + "don't have a 'pyproject.toml' file." + ), + replacement="to enable the '--use-pep517' option", + gone_in="23.1", + issue=11451, + emit_before_install=True, +) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/direct_url_helpers.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/direct_url_helpers.py new file mode 100644 index 0000000..0e8e5e1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/direct_url_helpers.py @@ -0,0 +1,87 @@ +from typing import Optional + +from pip._internal.models.direct_url import ArchiveInfo, DirectUrl, DirInfo, VcsInfo +from pip._internal.models.link import Link +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs import vcs + + +def direct_url_as_pep440_direct_reference(direct_url: DirectUrl, name: str) -> str: + """Convert a DirectUrl to a pip requirement string.""" + direct_url.validate() # if invalid, this is a pip bug + requirement = name + " @ " + fragments = [] + if isinstance(direct_url.info, VcsInfo): + requirement += "{}+{}@{}".format( + direct_url.info.vcs, direct_url.url, direct_url.info.commit_id + ) + elif isinstance(direct_url.info, ArchiveInfo): + requirement += direct_url.url + if direct_url.info.hash: + fragments.append(direct_url.info.hash) + else: + assert isinstance(direct_url.info, DirInfo) + requirement += direct_url.url + if direct_url.subdirectory: + fragments.append("subdirectory=" + direct_url.subdirectory) + if fragments: + requirement += "#" + "&".join(fragments) + return requirement + + +def direct_url_for_editable(source_dir: str) -> DirectUrl: + return DirectUrl( + url=path_to_url(source_dir), + info=DirInfo(editable=True), + ) + + +def direct_url_from_link( + link: Link, source_dir: Optional[str] = None, link_is_in_wheel_cache: bool = False +) -> DirectUrl: + if link.is_vcs: + vcs_backend = vcs.get_backend_for_scheme(link.scheme) + assert vcs_backend + url, requested_revision, _ = vcs_backend.get_url_rev_and_auth( + link.url_without_fragment + ) + # For VCS links, we need to find out and add commit_id. + if link_is_in_wheel_cache: + # If the requested VCS link corresponds to a cached + # wheel, it means the requested revision was an + # immutable commit hash, otherwise it would not have + # been cached. In that case we don't have a source_dir + # with the VCS checkout. + assert requested_revision + commit_id = requested_revision + else: + # If the wheel was not in cache, it means we have + # had to checkout from VCS to build and we have a source_dir + # which we can inspect to find out the commit id. + assert source_dir + commit_id = vcs_backend.get_revision(source_dir) + return DirectUrl( + url=url, + info=VcsInfo( + vcs=vcs_backend.name, + commit_id=commit_id, + requested_revision=requested_revision, + ), + subdirectory=link.subdirectory_fragment, + ) + elif link.is_existing_dir(): + return DirectUrl( + url=link.url_without_fragment, + info=DirInfo(), + subdirectory=link.subdirectory_fragment, + ) + else: + hash = None + hash_name = link.hash_name + if hash_name: + hash = f"{hash_name}={link.hash}" + return DirectUrl( + url=link.url_without_fragment, + info=ArchiveInfo(hash=hash), + subdirectory=link.subdirectory_fragment, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/distutils_args.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/distutils_args.py new file mode 100644 index 0000000..2fd1862 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/distutils_args.py @@ -0,0 +1,43 @@ +from getopt import GetoptError, getopt +from typing import Dict, List + +_options = [ + "exec-prefix=", + "home=", + "install-base=", + "install-data=", + "install-headers=", + "install-lib=", + "install-platlib=", + "install-purelib=", + "install-scripts=", + "prefix=", + "root=", + "user", +] + + +def parse_distutils_args(args: List[str]) -> Dict[str, str]: + """Parse provided arguments, returning an object that has the matched arguments. + + Any unknown arguments are ignored. + """ + result = {} + for arg in args: + try: + parsed_opt, _ = getopt(args=[arg], shortopts="", longopts=_options) + except GetoptError: + # We don't care about any other options, which here may be + # considered unrecognized since our option list is not + # exhaustive. + continue + + if not parsed_opt: + continue + + option = parsed_opt[0] + name_from_parsed = option[0][2:].replace("-", "_") + value_from_parsed = option[1] or "true" + result[name_from_parsed] = value_from_parsed + + return result diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/egg_link.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/egg_link.py new file mode 100644 index 0000000..eb57ed1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/egg_link.py @@ -0,0 +1,72 @@ +import os +import re +import sys +from typing import List, Optional + +from pip._internal.locations import site_packages, user_site +from pip._internal.utils.virtualenv import ( + running_under_virtualenv, + virtualenv_no_global, +) + +__all__ = [ + "egg_link_path_from_sys_path", + "egg_link_path_from_location", +] + + +def _egg_link_name(raw_name: str) -> str: + """ + Convert a Name metadata value to a .egg-link name, by applying + the same substitution as pkg_resources's safe_name function. + Note: we cannot use canonicalize_name because it has a different logic. + """ + return re.sub("[^A-Za-z0-9.]+", "-", raw_name) + ".egg-link" + + +def egg_link_path_from_sys_path(raw_name: str) -> Optional[str]: + """ + Look for a .egg-link file for project name, by walking sys.path. + """ + egg_link_name = _egg_link_name(raw_name) + for path_item in sys.path: + egg_link = os.path.join(path_item, egg_link_name) + if os.path.isfile(egg_link): + return egg_link + return None + + +def egg_link_path_from_location(raw_name: str) -> Optional[str]: + """ + 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: List[str] = [] + if running_under_virtualenv(): + sites.append(site_packages) + if not virtualenv_no_global() and user_site: + sites.append(user_site) + else: + if user_site: + sites.append(user_site) + sites.append(site_packages) + + egg_link_name = _egg_link_name(raw_name) + for site in sites: + egglink = os.path.join(site, egg_link_name) + if os.path.isfile(egglink): + return egglink + return None diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/encoding.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/encoding.py new file mode 100644 index 0000000..008f06a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/encoding.py @@ -0,0 +1,36 @@ +import codecs +import locale +import re +import sys +from typing import List, Tuple + +BOMS: List[Tuple[bytes, str]] = [ + (codecs.BOM_UTF8, "utf-8"), + (codecs.BOM_UTF16, "utf-16"), + (codecs.BOM_UTF16_BE, "utf-16-be"), + (codecs.BOM_UTF16_LE, "utf-16-le"), + (codecs.BOM_UTF32, "utf-32"), + (codecs.BOM_UTF32_BE, "utf-32-be"), + (codecs.BOM_UTF32_LE, "utf-32-le"), +] + +ENCODING_RE = re.compile(rb"coding[:=]\s*([-\w.]+)") + + +def auto_decode(data: bytes) -> str: + """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): + result = ENCODING_RE.search(line) + assert result is not None + encoding = result.groups()[0].decode("ascii") + return data.decode(encoding) + return data.decode( + locale.getpreferredencoding(False) or sys.getdefaultencoding(), + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/entrypoints.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/entrypoints.py new file mode 100644 index 0000000..1501369 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/entrypoints.py @@ -0,0 +1,84 @@ +import itertools +import os +import shutil +import sys +from typing import List, Optional + +from pip._internal.cli.main import main +from pip._internal.utils.compat import WINDOWS + +_EXECUTABLE_NAMES = [ + "pip", + f"pip{sys.version_info.major}", + f"pip{sys.version_info.major}.{sys.version_info.minor}", +] +if WINDOWS: + _allowed_extensions = {"", ".exe"} + _EXECUTABLE_NAMES = [ + "".join(parts) + for parts in itertools.product(_EXECUTABLE_NAMES, _allowed_extensions) + ] + + +def _wrapper(args: Optional[List[str]] = None) -> int: + """Central wrapper for all old entrypoints. + + Historically pip has had several entrypoints defined. Because of issues + arising from PATH, sys.path, multiple Pythons, their interactions, and most + of them having a pip installed, users suffer every time an entrypoint gets + moved. + + To alleviate this pain, and provide a mechanism for warning users and + directing them to an appropriate place for help, we now define all of + our old entrypoints as wrappers for the current one. + """ + sys.stderr.write( + "WARNING: pip is being invoked by an old script wrapper. This will " + "fail in a future version of pip.\n" + "Please see https://github.com/pypa/pip/issues/5599 for advice on " + "fixing the underlying issue.\n" + "To avoid this problem you can invoke Python with '-m pip' instead of " + "running pip directly.\n" + ) + return main(args) + + +def get_best_invocation_for_this_pip() -> str: + """Try to figure out the best way to invoke pip in the current environment.""" + binary_directory = "Scripts" if WINDOWS else "bin" + binary_prefix = os.path.join(sys.prefix, binary_directory) + + # Try to use pip[X[.Y]] names, if those executables for this environment are + # the first on PATH with that name. + path_parts = os.path.normcase(os.environ.get("PATH", "")).split(os.pathsep) + exe_are_in_PATH = os.path.normcase(binary_prefix) in path_parts + if exe_are_in_PATH: + for exe_name in _EXECUTABLE_NAMES: + found_executable = shutil.which(exe_name) + binary_executable = os.path.join(binary_prefix, exe_name) + if ( + found_executable + and os.path.exists(binary_executable) + and os.path.samefile( + found_executable, + binary_executable, + ) + ): + return exe_name + + # Use the `-m` invocation, if there's no "nice" invocation. + return f"{get_best_invocation_for_this_python()} -m pip" + + +def get_best_invocation_for_this_python() -> str: + """Try to figure out the best way to invoke the current Python.""" + exe = sys.executable + exe_name = os.path.basename(exe) + + # Try to use the basename, if it's the first executable. + found_executable = shutil.which(exe_name) + if found_executable and os.path.samefile(found_executable, exe): + return exe_name + + # Use the full executable name, because we couldn't find something simpler. + return exe diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/filesystem.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/filesystem.py new file mode 100644 index 0000000..83c2df7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/filesystem.py @@ -0,0 +1,153 @@ +import fnmatch +import os +import os.path +import random +import sys +from contextlib import contextmanager +from tempfile import NamedTemporaryFile +from typing import Any, BinaryIO, Generator, List, Union, cast + +from pip._vendor.tenacity import retry, stop_after_delay, wait_fixed + +from pip._internal.utils.compat import get_path_uid +from pip._internal.utils.misc import format_size + + +def check_path_owner(path: str) -> bool: + # 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 sys.platform == "win32" or not hasattr(os, "geteuid"): + return True + + assert os.path.isabs(path) + + 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) + return False # assume we don't own the path + + +@contextmanager +def adjacent_tmp_file(path: str, **kwargs: Any) -> Generator[BinaryIO, None, None]: + """Return a file-like object pointing to a tmp file next to path. + + The file is created securely and is ensured to be written to disk + after the context reaches its end. + + kwargs will be passed to tempfile.NamedTemporaryFile to control + the way the temporary file will be opened. + """ + with NamedTemporaryFile( + delete=False, + dir=os.path.dirname(path), + prefix=os.path.basename(path), + suffix=".tmp", + **kwargs, + ) as f: + result = cast(BinaryIO, f) + try: + yield result + finally: + result.flush() + os.fsync(result.fileno()) + + +# Tenacity raises RetryError by default, explicitly raise the original exception +_replace_retry = retry(reraise=True, stop=stop_after_delay(1), wait=wait_fixed(0.25)) + +replace = _replace_retry(os.replace) + + +# test_writable_dir and _test_writable_dir_win are copied from Flit, +# with the author's agreement to also place them under pip's license. +def test_writable_dir(path: str) -> bool: + """Check if a directory is writable. + + Uses os.access() on POSIX, tries creating files on Windows. + """ + # If the directory doesn't exist, find the closest parent that does. + while not os.path.isdir(path): + parent = os.path.dirname(path) + if parent == path: + break # Should never get here, but infinite loops are bad + path = parent + + if os.name == "posix": + return os.access(path, os.W_OK) + + return _test_writable_dir_win(path) + + +def _test_writable_dir_win(path: str) -> bool: + # os.access doesn't work on Windows: http://bugs.python.org/issue2528 + # and we can't use tempfile: http://bugs.python.org/issue22107 + basename = "accesstest_deleteme_fishfingers_custard_" + alphabet = "abcdefghijklmnopqrstuvwxyz0123456789" + for _ in range(10): + name = basename + "".join(random.choice(alphabet) for _ in range(6)) + file = os.path.join(path, name) + try: + fd = os.open(file, os.O_RDWR | os.O_CREAT | os.O_EXCL) + except FileExistsError: + pass + except PermissionError: + # This could be because there's a directory with the same name. + # But it's highly unlikely there's a directory called that, + # so we'll assume it's because the parent dir is not writable. + # This could as well be because the parent dir is not readable, + # due to non-privileged user access. + return False + else: + os.close(fd) + os.unlink(file) + return True + + # This should never be reached + raise OSError("Unexpected condition testing for writable directory") + + +def find_files(path: str, pattern: str) -> List[str]: + """Returns a list of absolute paths of files beneath path, recursively, + with filenames which match the UNIX-style shell glob pattern.""" + result: List[str] = [] + for root, _, files in os.walk(path): + matches = fnmatch.filter(files, pattern) + result.extend(os.path.join(root, f) for f in matches) + return result + + +def file_size(path: str) -> Union[int, float]: + # If it's a symlink, return 0. + if os.path.islink(path): + return 0 + return os.path.getsize(path) + + +def format_file_size(path: str) -> str: + return format_size(file_size(path)) + + +def directory_size(path: str) -> Union[int, float]: + size = 0.0 + for root, _dirs, files in os.walk(path): + for filename in files: + file_path = os.path.join(root, filename) + size += file_size(file_path) + return size + + +def format_directory_size(path: str) -> str: + return format_size(directory_size(path)) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/filetypes.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/filetypes.py new file mode 100644 index 0000000..5948570 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/filetypes.py @@ -0,0 +1,27 @@ +"""Filetype information. +""" + +from typing import Tuple + +from pip._internal.utils.misc import splitext + +WHEEL_EXTENSION = ".whl" +BZ2_EXTENSIONS: Tuple[str, ...] = (".tar.bz2", ".tbz") +XZ_EXTENSIONS: Tuple[str, ...] = ( + ".tar.xz", + ".txz", + ".tlz", + ".tar.lz", + ".tar.lzma", +) +ZIP_EXTENSIONS: Tuple[str, ...] = (".zip", WHEEL_EXTENSION) +TAR_EXTENSIONS: Tuple[str, ...] = (".tar.gz", ".tgz", ".tar") +ARCHIVE_EXTENSIONS = ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS + + +def is_archive_file(name: str) -> bool: + """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 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/glibc.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/glibc.py new file mode 100644 index 0000000..7bd3c20 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/glibc.py @@ -0,0 +1,88 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import os +import sys +from typing import Optional, Tuple + + +def glibc_version_string() -> Optional[str]: + "Returns glibc version string, or None if not using glibc." + return glibc_version_string_confstr() or glibc_version_string_ctypes() + + +def glibc_version_string_confstr() -> Optional[str]: + "Primary implementation of glibc_version_string using os.confstr." + # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely + # to be broken or missing. This strategy is used in the standard library + # platform module: + # https://github.com/python/cpython/blob/fcf1d003bf4f0100c9d0921ff3d70e1127ca1b71/Lib/platform.py#L175-L183 + if sys.platform == "win32": + return None + try: + # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17": + _, version = os.confstr("CS_GNU_LIBC_VERSION").split() + except (AttributeError, OSError, ValueError): + # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... + return None + return version + + +def glibc_version_string_ctypes() -> Optional[str]: + "Fallback implementation of glibc_version_string using ctypes." + + try: + import ctypes + except ImportError: + return None + + # 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 + + +# 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() -> Tuple[str, str]: + """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.11/site-packages/pip/_internal/utils/hashes.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/hashes.py new file mode 100644 index 0000000..7672730 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/hashes.py @@ -0,0 +1,144 @@ +import hashlib +from typing import TYPE_CHECKING, BinaryIO, Dict, Iterable, List, Optional + +from pip._internal.exceptions import HashMismatch, HashMissing, InstallationError +from pip._internal.utils.misc import read_chunks + +if TYPE_CHECKING: + from hashlib import _Hash + + # NoReturn introduced in 3.6.2; imported only for type checking to maintain + # pip compatibility with older patch versions of Python 3.6 + from typing import NoReturn + + +# 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: + """A wrapper that builds multiple hashes at once and checks them against + known-good values + + """ + + def __init__(self, hashes: Optional[Dict[str, List[str]]] = None) -> None: + """ + :param hashes: A dict of algorithm names pointing to lists of allowed + hex digests + """ + allowed = {} + if hashes is not None: + for alg, keys in hashes.items(): + # Make sure values are always sorted (to ease equality checks) + allowed[alg] = sorted(keys) + self._allowed = allowed + + def __and__(self, other: "Hashes") -> "Hashes": + if not isinstance(other, Hashes): + return NotImplemented + + # If either of the Hashes object is entirely empty (i.e. no hash + # specified at all), all hashes from the other object are allowed. + if not other: + return self + if not self: + return other + + # Otherwise only hashes that present in both objects are allowed. + new = {} + for alg, values in other._allowed.items(): + if alg not in self._allowed: + continue + new[alg] = [v for v in values if v in self._allowed[alg]] + return Hashes(new) + + @property + def digest_count(self) -> int: + return sum(len(digests) for digests in self._allowed.values()) + + def is_hash_allowed(self, hash_name: str, hex_digest: str) -> bool: + """Return whether the given hex digest is allowed.""" + return hex_digest in self._allowed.get(hash_name, []) + + def check_against_chunks(self, chunks: Iterable[bytes]) -> None: + """Check good hashes against ones built from iterable of chunks of + data. + + Raise HashMismatch if none match. + + """ + gots = {} + for hash_name in self._allowed.keys(): + try: + gots[hash_name] = hashlib.new(hash_name) + except (ValueError, TypeError): + raise InstallationError(f"Unknown hash name: {hash_name}") + + for chunk in chunks: + for hash in gots.values(): + hash.update(chunk) + + for hash_name, got in gots.items(): + if got.hexdigest() in self._allowed[hash_name]: + return + self._raise(gots) + + def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn": + raise HashMismatch(self._allowed, gots) + + def check_against_file(self, file: BinaryIO) -> None: + """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: str) -> None: + with open(path, "rb") as file: + return self.check_against_file(file) + + def __bool__(self) -> bool: + """Return whether I know any known-good hashes.""" + return bool(self._allowed) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Hashes): + return NotImplemented + return self._allowed == other._allowed + + def __hash__(self) -> int: + return hash( + ",".join( + sorted( + ":".join((alg, digest)) + for alg, digest_list in self._allowed.items() + for digest in digest_list + ) + ) + ) + + +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) -> None: + """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().__init__(hashes={FAVORITE_HASH: []}) + + def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn": + raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/inject_securetransport.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/inject_securetransport.py new file mode 100644 index 0000000..276aa79 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/inject_securetransport.py @@ -0,0 +1,35 @@ +"""A helper module that injects SecureTransport, on import. + +The import should be done as early as possible, to ensure all requests and +sessions (or whatever) are created after injecting SecureTransport. + +Note that we only do the injection on macOS, when the linked OpenSSL is too +old to handle TLSv1.2. +""" + +import sys + + +def inject_securetransport() -> None: + # Only relevant on macOS + if sys.platform != "darwin": + return + + try: + import ssl + except ImportError: + return + + # Checks for OpenSSL 1.0.1 + if ssl.OPENSSL_VERSION_NUMBER >= 0x1000100F: + return + + try: + from pip._vendor.urllib3.contrib import securetransport + except (ImportError, OSError): + return + + securetransport.inject_into_urllib3() + + +inject_securetransport() diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/logging.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/logging.py new file mode 100644 index 0000000..c10e1f4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/logging.py @@ -0,0 +1,348 @@ +import contextlib +import errno +import logging +import logging.handlers +import os +import sys +import threading +from dataclasses import dataclass +from io import TextIOWrapper +from logging import Filter +from typing import Any, ClassVar, Generator, List, Optional, TextIO, Type + +from pip._vendor.rich.console import ( + Console, + ConsoleOptions, + ConsoleRenderable, + RenderableType, + RenderResult, + RichCast, +) +from pip._vendor.rich.highlighter import NullHighlighter +from pip._vendor.rich.logging import RichHandler +from pip._vendor.rich.segment import Segment +from pip._vendor.rich.style import Style + +from pip._internal.utils._log import VERBOSE, getLogger +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.deprecation import DEPRECATION_MSG_PREFIX +from pip._internal.utils.misc import ensure_dir + +_log_state = threading.local() +subprocess_logger = getLogger("pip.subprocessor") + + +class BrokenStdoutLoggingError(Exception): + """ + Raised if BrokenPipeError occurs for the stdout stream while logging. + """ + + +def _is_broken_pipe_error(exc_class: Type[BaseException], exc: BaseException) -> bool: + if exc_class is BrokenPipeError: + return True + + # On Windows, a broken pipe can show up as EINVAL rather than EPIPE: + # https://bugs.python.org/issue19612 + # https://bugs.python.org/issue30418 + if not WINDOWS: + return False + + return isinstance(exc, OSError) and exc.errno in (errno.EINVAL, errno.EPIPE) + + +@contextlib.contextmanager +def indent_log(num: int = 2) -> Generator[None, None, None]: + """ + A context manager which will cause the log output to be indented for any + log messages emitted inside it. + """ + # For thread-safety + _log_state.indentation = get_indentation() + _log_state.indentation += num + try: + yield + finally: + _log_state.indentation -= num + + +def get_indentation() -> int: + return getattr(_log_state, "indentation", 0) + + +class IndentingFormatter(logging.Formatter): + default_time_format = "%Y-%m-%dT%H:%M:%S" + + def __init__( + self, + *args: Any, + add_timestamp: bool = False, + **kwargs: Any, + ) -> None: + """ + A logging.Formatter that obeys the indent_log() context manager. + + :param add_timestamp: A bool indicating output lines should be prefixed + with their record's timestamp. + """ + self.add_timestamp = add_timestamp + super().__init__(*args, **kwargs) + + def get_message_start(self, formatted: str, levelno: int) -> str: + """ + Return the start of the formatted log message (not counting the + prefix to add to each line). + """ + if levelno < logging.WARNING: + return "" + if formatted.startswith(DEPRECATION_MSG_PREFIX): + # Then the message already has a prefix. We don't want it to + # look like "WARNING: DEPRECATION: ...." + return "" + if levelno < logging.ERROR: + return "WARNING: " + + return "ERROR: " + + def format(self, record: logging.LogRecord) -> str: + """ + Calls the standard formatter, but will indent all of the log message + lines by our current indentation level. + """ + formatted = super().format(record) + message_start = self.get_message_start(formatted, record.levelno) + formatted = message_start + formatted + + prefix = "" + if self.add_timestamp: + prefix = f"{self.formatTime(record)} " + prefix += " " * get_indentation() + formatted = "".join([prefix + line for line in formatted.splitlines(True)]) + return formatted + + +@dataclass +class IndentedRenderable: + renderable: RenderableType + indent: int + + def __rich_console__( + self, console: Console, options: ConsoleOptions + ) -> RenderResult: + segments = console.render(self.renderable, options) + lines = Segment.split_lines(segments) + for line in lines: + yield Segment(" " * self.indent) + yield from line + yield Segment("\n") + + +class RichPipStreamHandler(RichHandler): + KEYWORDS: ClassVar[Optional[List[str]]] = [] + + def __init__(self, stream: Optional[TextIO], no_color: bool) -> None: + super().__init__( + console=Console(file=stream, no_color=no_color, soft_wrap=True), + show_time=False, + show_level=False, + show_path=False, + highlighter=NullHighlighter(), + ) + + # Our custom override on Rich's logger, to make things work as we need them to. + def emit(self, record: logging.LogRecord) -> None: + style: Optional[Style] = None + + # If we are given a diagnostic error to present, present it with indentation. + assert isinstance(record.args, tuple) + if record.msg == "[present-rich] %s" and len(record.args) == 1: + rich_renderable = record.args[0] + assert isinstance( + rich_renderable, (ConsoleRenderable, RichCast, str) + ), f"{rich_renderable} is not rich-console-renderable" + + renderable: RenderableType = IndentedRenderable( + rich_renderable, indent=get_indentation() + ) + else: + message = self.format(record) + renderable = self.render_message(record, message) + if record.levelno is not None: + if record.levelno >= logging.ERROR: + style = Style(color="red") + elif record.levelno >= logging.WARNING: + style = Style(color="yellow") + + try: + self.console.print(renderable, overflow="ignore", crop=False, style=style) + except Exception: + self.handleError(record) + + def handleError(self, record: logging.LogRecord) -> None: + """Called when logging is unable to log some output.""" + + exc_class, exc = sys.exc_info()[:2] + # If a broken pipe occurred while calling write() or flush() on the + # stdout stream in logging's Handler.emit(), then raise our special + # exception so we can handle it in main() instead of logging the + # broken pipe error and continuing. + if ( + exc_class + and exc + and self.console.file is sys.stdout + and _is_broken_pipe_error(exc_class, exc) + ): + raise BrokenStdoutLoggingError() + + return super().handleError(record) + + +class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): + def _open(self) -> TextIOWrapper: + ensure_dir(os.path.dirname(self.baseFilename)) + return super()._open() + + +class MaxLevelFilter(Filter): + def __init__(self, level: int) -> None: + self.level = level + + def filter(self, record: logging.LogRecord) -> bool: + return record.levelno < self.level + + +class ExcludeLoggerFilter(Filter): + + """ + A logging Filter that excludes records from a logger (or its children). + """ + + def filter(self, record: logging.LogRecord) -> bool: + # The base Filter class allows only records from a logger (or its + # children). + return not super().filter(record) + + +def setup_logging(verbosity: int, no_color: bool, user_log_file: Optional[str]) -> int: + """Configures and sets up all of the logging + + Returns the requested logging level, as its integer value. + """ + + # Determine the level to be logging at. + if verbosity >= 2: + level_number = logging.DEBUG + elif verbosity == 1: + level_number = VERBOSE + elif verbosity == -1: + level_number = logging.WARNING + elif verbosity == -2: + level_number = logging.ERROR + elif verbosity <= -3: + level_number = logging.CRITICAL + else: + level_number = logging.INFO + + level = logging.getLevelName(level_number) + + # The "root" logger should match the "console" level *unless* we also need + # to log to a user log file. + include_user_log = user_log_file is not None + if include_user_log: + additional_log_file = user_log_file + root_level = "DEBUG" + else: + additional_log_file = "/dev/null" + root_level = level + + # Disable any logging besides WARNING unless we have DEBUG level logging + # enabled for vendored libraries. + vendored_log_level = "WARNING" if level in ["INFO", "ERROR"] else "DEBUG" + + # Shorthands for clarity + log_streams = { + "stdout": "ext://sys.stdout", + "stderr": "ext://sys.stderr", + } + handler_classes = { + "stream": "pip._internal.utils.logging.RichPipStreamHandler", + "file": "pip._internal.utils.logging.BetterRotatingFileHandler", + } + handlers = ["console", "console_errors", "console_subprocess"] + ( + ["user_log"] if include_user_log else [] + ) + + logging.config.dictConfig( + { + "version": 1, + "disable_existing_loggers": False, + "filters": { + "exclude_warnings": { + "()": "pip._internal.utils.logging.MaxLevelFilter", + "level": logging.WARNING, + }, + "restrict_to_subprocess": { + "()": "logging.Filter", + "name": subprocess_logger.name, + }, + "exclude_subprocess": { + "()": "pip._internal.utils.logging.ExcludeLoggerFilter", + "name": subprocess_logger.name, + }, + }, + "formatters": { + "indent": { + "()": IndentingFormatter, + "format": "%(message)s", + }, + "indent_with_timestamp": { + "()": IndentingFormatter, + "format": "%(message)s", + "add_timestamp": True, + }, + }, + "handlers": { + "console": { + "level": level, + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stdout"], + "filters": ["exclude_subprocess", "exclude_warnings"], + "formatter": "indent", + }, + "console_errors": { + "level": "WARNING", + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stderr"], + "filters": ["exclude_subprocess"], + "formatter": "indent", + }, + # A handler responsible for logging to the console messages + # from the "subprocessor" logger. + "console_subprocess": { + "level": level, + "class": handler_classes["stream"], + "stream": log_streams["stderr"], + "no_color": no_color, + "filters": ["restrict_to_subprocess"], + "formatter": "indent", + }, + "user_log": { + "level": "DEBUG", + "class": handler_classes["file"], + "filename": additional_log_file, + "encoding": "utf-8", + "delay": True, + "formatter": "indent_with_timestamp", + }, + }, + "root": { + "level": root_level, + "handlers": handlers, + }, + "loggers": {"pip._vendor": {"level": vendored_log_level}}, + } + ) + + return level_number diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/misc.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/misc.py new file mode 100644 index 0000000..cdf9b3a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/misc.py @@ -0,0 +1,763 @@ +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import contextlib +import errno +import getpass +import hashlib +import io +import logging +import os +import posixpath +import shutil +import stat +import sys +import sysconfig +import urllib.parse +from io import StringIO +from itertools import filterfalse, tee, zip_longest +from types import TracebackType +from typing import ( + Any, + BinaryIO, + Callable, + ContextManager, + Dict, + Generator, + Iterable, + Iterator, + List, + Optional, + TextIO, + Tuple, + Type, + TypeVar, + cast, +) + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller +from pip._vendor.tenacity import retry, stop_after_delay, wait_fixed + +from pip import __version__ +from pip._internal.exceptions import CommandError, ExternallyManagedEnvironment +from pip._internal.locations import get_major_minor_version +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.virtualenv import running_under_virtualenv + +__all__ = [ + "rmtree", + "display_path", + "backup_dir", + "ask", + "splitext", + "format_size", + "is_installable_dir", + "normalize_path", + "renames", + "get_prog", + "captured_stdout", + "ensure_dir", + "remove_auth_from_url", + "check_externally_managed", + "ConfiguredBuildBackendHookCaller", +] + +logger = logging.getLogger(__name__) + +T = TypeVar("T") +ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType] +VersionInfo = Tuple[int, int, int] +NetlocTuple = Tuple[str, Tuple[Optional[str], Optional[str]]] + + +def get_pip_version() -> str: + pip_pkg_dir = os.path.join(os.path.dirname(__file__), "..", "..") + pip_pkg_dir = os.path.abspath(pip_pkg_dir) + + return "pip {} from {} (python {})".format( + __version__, + pip_pkg_dir, + get_major_minor_version(), + ) + + +def normalize_version_info(py_version_info: Tuple[int, ...]) -> Tuple[int, int, int]: + """ + Convert a tuple of ints representing a Python version to one of length + three. + + :param py_version_info: a tuple of ints representing a Python version, + or None to specify no version. The tuple can have any length. + + :return: a tuple of length three if `py_version_info` is non-None. + Otherwise, return `py_version_info` unchanged (i.e. None). + """ + if len(py_version_info) < 3: + py_version_info += (3 - len(py_version_info)) * (0,) + elif len(py_version_info) > 3: + py_version_info = py_version_info[:3] + + return cast("VersionInfo", py_version_info) + + +def ensure_dir(path: str) -> None: + """os.path.makedirs without EEXIST.""" + try: + os.makedirs(path) + except OSError as e: + # Windows can raise spurious ENOTEMPTY errors. See #6426. + if e.errno != errno.EEXIST and e.errno != errno.ENOTEMPTY: + raise + + +def get_prog() -> str: + try: + prog = os.path.basename(sys.argv[0]) + if prog in ("__main__.py", "-c"): + return f"{sys.executable} -m pip" + else: + return prog + except (AttributeError, TypeError, IndexError): + pass + return "pip" + + +# Retry every half second for up to 3 seconds +# Tenacity raises RetryError by default, explicitly raise the original exception +@retry(reraise=True, stop=stop_after_delay(3), wait=wait_fixed(0.5)) +def rmtree(dir: str, ignore_errors: bool = False) -> None: + shutil.rmtree(dir, ignore_errors=ignore_errors, onerror=rmtree_errorhandler) + + +def rmtree_errorhandler(func: Callable[..., Any], path: str, exc_info: ExcInfo) -> None: + """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.""" + try: + has_attr_readonly = not (os.stat(path).st_mode & stat.S_IWRITE) + except OSError: + # it's equivalent to os.path.exists + return + + if has_attr_readonly: + # 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: str) -> str: + """Gives the display value for a given path, making it relative to cwd + if possible.""" + path = os.path.normcase(os.path.abspath(path)) + if path.startswith(os.getcwd() + os.path.sep): + path = "." + path[len(os.getcwd()) :] + return path + + +def backup_dir(dir: str, ext: str = ".bak") -> str: + """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: str, options: Iterable[str]) -> str: + for action in os.environ.get("PIP_EXISTS_ACTION", "").split(): + if action in options: + return action + return ask(message, options) + + +def _check_no_input(message: str) -> None: + """Raise an error if no input is allowed.""" + if os.environ.get("PIP_NO_INPUT"): + raise Exception( + f"No input was expected ($PIP_NO_INPUT set); question: {message}" + ) + + +def ask(message: str, options: Iterable[str]) -> str: + """Ask the message interactively, with the given possible responses""" + while 1: + _check_no_input(message) + response = input(message) + response = response.strip().lower() + if response not in options: + print( + "Your response ({!r}) was not one of the expected responses: " + "{}".format(response, ", ".join(options)) + ) + else: + return response + + +def ask_input(message: str) -> str: + """Ask for input interactively.""" + _check_no_input(message) + return input(message) + + +def ask_password(message: str) -> str: + """Ask for a password interactively.""" + _check_no_input(message) + return getpass.getpass(message) + + +def strtobool(val: str) -> int: + """Convert a string representation of truth to true (1) or false (0). + + True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values + are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if + 'val' is anything else. + """ + val = val.lower() + if val in ("y", "yes", "t", "true", "on", "1"): + return 1 + elif val in ("n", "no", "f", "false", "off", "0"): + return 0 + else: + raise ValueError(f"invalid truth value {val!r}") + + +def format_size(bytes: float) -> str: + if bytes > 1000 * 1000: + return "{:.1f} MB".format(bytes / 1000.0 / 1000) + elif bytes > 10 * 1000: + return "{} kB".format(int(bytes / 1000)) + elif bytes > 1000: + return "{:.1f} kB".format(bytes / 1000.0) + else: + return "{} bytes".format(int(bytes)) + + +def tabulate(rows: Iterable[Iterable[Any]]) -> Tuple[List[str], List[int]]: + """Return a list of formatted rows and a list of column sizes. + + For example:: + + >>> tabulate([['foobar', 2000], [0xdeadbeef]]) + (['foobar 2000', '3735928559'], [10, 4]) + """ + rows = [tuple(map(str, row)) for row in rows] + sizes = [max(map(len, col)) for col in zip_longest(*rows, fillvalue="")] + table = [" ".join(map(str.ljust, row, sizes)).rstrip() for row in rows] + return table, sizes + + +def is_installable_dir(path: str) -> bool: + """Is path is a directory containing pyproject.toml or setup.py? + + If pyproject.toml exists, this is a PEP 517 project. Otherwise we look for + a legacy setuptools layout by identifying setup.py. We don't check for the + setup.cfg because using it without setup.py is only available for PEP 517 + projects, which are already covered by the pyproject.toml check. + """ + if not os.path.isdir(path): + return False + if os.path.isfile(os.path.join(path, "pyproject.toml")): + return True + if os.path.isfile(os.path.join(path, "setup.py")): + return True + return False + + +def read_chunks( + file: BinaryIO, size: int = io.DEFAULT_BUFFER_SIZE +) -> Generator[bytes, None, None]: + """Yield pieces of data from a file-like object until EOF.""" + while True: + chunk = file.read(size) + if not chunk: + break + yield chunk + + +def normalize_path(path: str, resolve_symlinks: bool = True) -> str: + """ + Convert a path to its canonical, case-normalized, absolute version. + + """ + path = os.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: str) -> Tuple[str, str]: + """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: str, new: str) -> None: + """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: str) -> bool: + """ + Return True if this is a path pip is allowed to modify. + + If we're in a virtualenv, sys.prefix points to the virtualenv's + prefix; only sys.prefix is considered local. + + If we're not in a virtualenv, in general we can modify anything. + However, if the OS vendor has configured distutils to install + somewhere other than sys.prefix (which could be a subdirectory of + sys.prefix, e.g. /usr/local), we consider sys.prefix itself nonlocal + and the domain of the OS vendor. (In other words, everything _other + than_ sys.prefix is considered local.) + + Caution: this function assumes the head of path has been normalized + with normalize_path. + """ + + path = normalize_path(path) + # Hard-coded becouse PyPy uses a different sys.prefix on Debian + prefix = '/usr' + + if running_under_virtualenv(): + return path.startswith(normalize_path(sys.prefix)) + else: + from pip._internal.locations import get_scheme + from pip._internal.models.scheme import SCHEME_KEYS + if path.startswith(prefix): + scheme = get_scheme("") + for key in SCHEME_KEYS: + local_path = getattr(scheme, key) + if path.startswith(normalize_path(local_path)): + return True + return False + else: + return True + + +def write_output(msg: Any, *args: Any) -> None: + logger.info(msg, *args) + + +class StreamWrapper(StringIO): + orig_stream: TextIO = None + + @classmethod + def from_stream(cls, orig_stream: TextIO) -> "StreamWrapper": + cls.orig_stream = orig_stream + return cls() + + # compileall.compile_dir() needs stdout.encoding to print to stdout + # https://github.com/python/mypy/issues/4125 + @property + def encoding(self): # type: ignore + return self.orig_stream.encoding + + +@contextlib.contextmanager +def captured_output(stream_name: str) -> Generator[StreamWrapper, None, None]: + """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() -> ContextManager[StreamWrapper]: + """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") + + +def captured_stderr() -> ContextManager[StreamWrapper]: + """ + See captured_stdout(). + """ + return captured_output("stderr") + + +# Simulates an enum +def enum(*sequential: Any, **named: Any) -> Type[Any]: + 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) + + +def build_netloc(host: str, port: Optional[int]) -> str: + """ + Build a netloc from a host-port pair + """ + if port is None: + return host + if ":" in host: + # Only wrap host with square brackets when it is IPv6 + host = f"[{host}]" + return f"{host}:{port}" + + +def build_url_from_netloc(netloc: str, scheme: str = "https") -> str: + """ + Build a full URL from a netloc. + """ + if netloc.count(":") >= 2 and "@" not in netloc and "[" not in netloc: + # It must be a bare IPv6 address, so wrap it with brackets. + netloc = f"[{netloc}]" + return f"{scheme}://{netloc}" + + +def parse_netloc(netloc: str) -> Tuple[str, Optional[int]]: + """ + Return the host-port pair from a netloc. + """ + url = build_url_from_netloc(netloc) + parsed = urllib.parse.urlparse(url) + return parsed.hostname, parsed.port + + +def split_auth_from_netloc(netloc: str) -> NetlocTuple: + """ + Parse out and remove the auth information from a netloc. + + Returns: (netloc, (username, password)). + """ + if "@" not in netloc: + return netloc, (None, None) + + # Split from the right because that's how urllib.parse.urlsplit() + # behaves if more than one @ is present (which can be checked using + # the password attribute of urlsplit()'s return value). + auth, netloc = netloc.rsplit("@", 1) + pw: Optional[str] = None + if ":" in auth: + # Split from the left because that's how urllib.parse.urlsplit() + # behaves if more than one : is present (which again can be checked + # using the password attribute of the return value) + user, pw = auth.split(":", 1) + else: + user, pw = auth, None + + user = urllib.parse.unquote(user) + if pw is not None: + pw = urllib.parse.unquote(pw) + + return netloc, (user, pw) + + +def redact_netloc(netloc: str) -> str: + """ + Replace the sensitive data in a netloc with "****", if it exists. + + For example: + - "user:pass@example.com" returns "user:****@example.com" + - "accesstoken@example.com" returns "****@example.com" + """ + netloc, (user, password) = split_auth_from_netloc(netloc) + if user is None: + return netloc + if password is None: + user = "****" + password = "" + else: + user = urllib.parse.quote(user) + password = ":****" + return "{user}{password}@{netloc}".format( + user=user, password=password, netloc=netloc + ) + + +def _transform_url( + url: str, transform_netloc: Callable[[str], Tuple[Any, ...]] +) -> Tuple[str, NetlocTuple]: + """Transform and replace netloc in a url. + + transform_netloc is a function taking the netloc and returning a + tuple. The first element of this tuple is the new netloc. The + entire tuple is returned. + + Returns a tuple containing the transformed url as item 0 and the + original tuple returned by transform_netloc as item 1. + """ + purl = urllib.parse.urlsplit(url) + netloc_tuple = transform_netloc(purl.netloc) + # stripped url + url_pieces = (purl.scheme, netloc_tuple[0], purl.path, purl.query, purl.fragment) + surl = urllib.parse.urlunsplit(url_pieces) + return surl, cast("NetlocTuple", netloc_tuple) + + +def _get_netloc(netloc: str) -> NetlocTuple: + return split_auth_from_netloc(netloc) + + +def _redact_netloc(netloc: str) -> Tuple[str]: + return (redact_netloc(netloc),) + + +def split_auth_netloc_from_url(url: str) -> Tuple[str, str, Tuple[str, str]]: + """ + Parse a url into separate netloc, auth, and url with no auth. + + Returns: (url_without_auth, netloc, (username, password)) + """ + url_without_auth, (netloc, auth) = _transform_url(url, _get_netloc) + return url_without_auth, netloc, auth + + +def remove_auth_from_url(url: str) -> str: + """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. + return _transform_url(url, _get_netloc)[0] + + +def redact_auth_from_url(url: str) -> str: + """Replace the password in a given url with ****.""" + return _transform_url(url, _redact_netloc)[0] + + +class HiddenText: + def __init__(self, secret: str, redacted: str) -> None: + self.secret = secret + self.redacted = redacted + + def __repr__(self) -> str: + return "".format(str(self)) + + def __str__(self) -> str: + return self.redacted + + # This is useful for testing. + def __eq__(self, other: Any) -> bool: + if type(self) != type(other): + return False + + # The string being used for redaction doesn't also have to match, + # just the raw, original string. + return self.secret == other.secret + + +def hide_value(value: str) -> HiddenText: + return HiddenText(value, redacted="****") + + +def hide_url(url: str) -> HiddenText: + redacted = redact_auth_from_url(url) + return HiddenText(url, redacted=redacted) + + +def protect_pip_from_modification_on_windows(modifying_pip: bool) -> None: + """Protection of pip.exe from modification on Windows + + On Windows, any operation modifying pip should be run as: + python -m pip ... + """ + pip_names = [ + "pip", + f"pip{sys.version_info.major}", + f"pip{sys.version_info.major}.{sys.version_info.minor}", + ] + + # See https://github.com/pypa/pip/issues/1299 for more discussion + should_show_use_python_msg = ( + modifying_pip and WINDOWS and os.path.basename(sys.argv[0]) in pip_names + ) + + 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 check_externally_managed() -> None: + """Check whether the current environment is externally managed. + + If the ``EXTERNALLY-MANAGED`` config file is found, the current environment + is considered externally managed, and an ExternallyManagedEnvironment is + raised. + """ + if running_under_virtualenv(): + return + marker = os.path.join(sysconfig.get_path("stdlib"), "EXTERNALLY-MANAGED") + if not os.path.isfile(marker): + return + raise ExternallyManagedEnvironment.from_config(marker) + + +def is_console_interactive() -> bool: + """Is this console interactive?""" + return sys.stdin is not None and sys.stdin.isatty() + + +def hash_file(path: str, blocksize: int = 1 << 20) -> Tuple[Any, int]: + """Return (hash, length) for path using hashlib.sha256()""" + + h = hashlib.sha256() + length = 0 + with open(path, "rb") as f: + for block in read_chunks(f, size=blocksize): + length += len(block) + h.update(block) + return h, length + + +def is_wheel_installed() -> bool: + """ + Return whether the wheel package is installed. + """ + try: + import wheel # noqa: F401 + except ImportError: + return False + + return True + + +def pairwise(iterable: Iterable[Any]) -> Iterator[Tuple[Any, Any]]: + """ + Return paired elements. + + For example: + s -> (s0, s1), (s2, s3), (s4, s5), ... + """ + iterable = iter(iterable) + return zip_longest(iterable, iterable) + + +def partition( + pred: Callable[[T], bool], + iterable: Iterable[T], +) -> Tuple[Iterable[T], Iterable[T]]: + """ + Use a predicate to partition entries into false entries and true entries, + like + + partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 + """ + t1, t2 = tee(iterable) + return filterfalse(pred, t1), filter(pred, t2) + + +class ConfiguredBuildBackendHookCaller(BuildBackendHookCaller): + def __init__( + self, + config_holder: Any, + source_dir: str, + build_backend: str, + backend_path: Optional[str] = None, + runner: Optional[Callable[..., None]] = None, + python_executable: Optional[str] = None, + ): + super().__init__( + source_dir, build_backend, backend_path, runner, python_executable + ) + self.config_holder = config_holder + + def build_wheel( + self, + wheel_directory: str, + config_settings: Optional[Dict[str, str]] = None, + metadata_directory: Optional[str] = None, + ) -> str: + cs = self.config_holder.config_settings + return super().build_wheel( + wheel_directory, config_settings=cs, metadata_directory=metadata_directory + ) + + def build_sdist( + self, sdist_directory: str, config_settings: Optional[Dict[str, str]] = None + ) -> str: + cs = self.config_holder.config_settings + return super().build_sdist(sdist_directory, config_settings=cs) + + def build_editable( + self, + wheel_directory: str, + config_settings: Optional[Dict[str, str]] = None, + metadata_directory: Optional[str] = None, + ) -> str: + cs = self.config_holder.config_settings + return super().build_editable( + wheel_directory, config_settings=cs, metadata_directory=metadata_directory + ) + + def get_requires_for_build_wheel( + self, config_settings: Optional[Dict[str, str]] = None + ) -> List[str]: + cs = self.config_holder.config_settings + return super().get_requires_for_build_wheel(config_settings=cs) + + def get_requires_for_build_sdist( + self, config_settings: Optional[Dict[str, str]] = None + ) -> List[str]: + cs = self.config_holder.config_settings + return super().get_requires_for_build_sdist(config_settings=cs) + + def get_requires_for_build_editable( + self, config_settings: Optional[Dict[str, str]] = None + ) -> List[str]: + cs = self.config_holder.config_settings + return super().get_requires_for_build_editable(config_settings=cs) + + def prepare_metadata_for_build_wheel( + self, + metadata_directory: str, + config_settings: Optional[Dict[str, str]] = None, + _allow_fallback: bool = True, + ) -> str: + cs = self.config_holder.config_settings + return super().prepare_metadata_for_build_wheel( + metadata_directory=metadata_directory, + config_settings=cs, + _allow_fallback=_allow_fallback, + ) + + def prepare_metadata_for_build_editable( + self, + metadata_directory: str, + config_settings: Optional[Dict[str, str]] = None, + _allow_fallback: bool = True, + ) -> str: + cs = self.config_holder.config_settings + return super().prepare_metadata_for_build_editable( + metadata_directory=metadata_directory, + config_settings=cs, + _allow_fallback=_allow_fallback, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/models.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/models.py new file mode 100644 index 0000000..b6bb21a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/models.py @@ -0,0 +1,39 @@ +"""Utilities for defining models +""" + +import operator +from typing import Any, Callable, Type + + +class KeyBasedCompareMixin: + """Provides comparison capabilities that is based on a key""" + + __slots__ = ["_compare_key", "_defining_class"] + + def __init__(self, key: Any, defining_class: Type["KeyBasedCompareMixin"]) -> None: + self._compare_key = key + self._defining_class = defining_class + + def __hash__(self) -> int: + return hash(self._compare_key) + + def __lt__(self, other: Any) -> bool: + return self._compare(other, operator.__lt__) + + def __le__(self, other: Any) -> bool: + return self._compare(other, operator.__le__) + + def __gt__(self, other: Any) -> bool: + return self._compare(other, operator.__gt__) + + def __ge__(self, other: Any) -> bool: + return self._compare(other, operator.__ge__) + + def __eq__(self, other: Any) -> bool: + return self._compare(other, operator.__eq__) + + def _compare(self, other: Any, method: Callable[[Any, Any], bool]) -> bool: + if not isinstance(other, self._defining_class): + return NotImplemented + + return method(self._compare_key, other._compare_key) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/packaging.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/packaging.py new file mode 100644 index 0000000..b9f6af4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/packaging.py @@ -0,0 +1,57 @@ +import functools +import logging +import re +from typing import NewType, Optional, Tuple, cast + +from pip._vendor.packaging import specifiers, version +from pip._vendor.packaging.requirements import Requirement + +NormalizedExtra = NewType("NormalizedExtra", str) + +logger = logging.getLogger(__name__) + + +def check_requires_python( + requires_python: Optional[str], version_info: Tuple[int, ...] +) -> bool: + """ + Check if the given Python version matches a "Requires-Python" specifier. + + :param version_info: A 3-tuple of ints representing a Python + major-minor-micro version to check (e.g. `sys.version_info[:3]`). + + :return: `True` if the given Python version satisfies the requirement. + Otherwise, return `False`. + + :raises InvalidSpecifier: If `requires_python` has an invalid format. + """ + if requires_python is None: + # The package provides no information + return True + requires_python_specifier = specifiers.SpecifierSet(requires_python) + + python_version = version.parse(".".join(map(str, version_info))) + return python_version in requires_python_specifier + + +@functools.lru_cache(maxsize=512) +def get_requirement(req_string: str) -> Requirement: + """Construct a packaging.Requirement object with caching""" + # Parsing requirement strings is expensive, and is also expected to happen + # with a low diversity of different arguments (at least relative the number + # constructed). This method adds a cache to requirement object creation to + # minimize repeated parsing of the same string to construct equivalent + # Requirement objects. + return Requirement(req_string) + + +def safe_extra(extra: str) -> NormalizedExtra: + """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. + + This function is duplicated from ``pkg_resources``. Note that this is not + the same to either ``canonicalize_name`` or ``_egg_link_name``. + """ + return cast(NormalizedExtra, re.sub("[^A-Za-z0-9.-]+", "_", extra).lower()) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/setuptools_build.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/setuptools_build.py new file mode 100644 index 0000000..01ef4a4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/setuptools_build.py @@ -0,0 +1,195 @@ +import sys +import textwrap +from typing import List, Optional, Sequence + +# Shim to wrap setup.py invocation with setuptools +# Note that __file__ is handled via two {!r} *and* %r, to ensure that paths on +# Windows are correctly handled (it should be "C:\\Users" not "C:\Users"). +_SETUPTOOLS_SHIM = textwrap.dedent( + """ + exec(compile(''' + # This is -- a caller that pip uses to run setup.py + # + # - It imports setuptools before invoking setup.py, to enable projects that directly + # import from `distutils.core` to work with newer packaging standards. + # - It provides a clear error message when setuptools is not installed. + # - It sets `sys.argv[0]` to the underlying `setup.py`, when invoking `setup.py` so + # setuptools doesn't think the script is `-c`. This avoids the following warning: + # manifest_maker: standard file '-c' not found". + # - It generates a shim setup.py, for handling setup.cfg-only projects. + import os, sys, tokenize + + try: + import setuptools + except ImportError as error: + print( + "ERROR: Can not execute `setup.py` since setuptools is not available in " + "the build environment.", + file=sys.stderr, + ) + sys.exit(1) + + __file__ = %r + sys.argv[0] = __file__ + + if os.path.exists(__file__): + filename = __file__ + with tokenize.open(__file__) as f: + setup_py_code = f.read() + else: + filename = "" + setup_py_code = "from setuptools import setup; setup()" + + exec(compile(setup_py_code, filename, "exec")) + ''' % ({!r},), "", "exec")) + """ +).rstrip() + + +def make_setuptools_shim_args( + setup_py_path: str, + global_options: Optional[Sequence[str]] = None, + no_user_config: bool = False, + unbuffered_output: bool = False, +) -> List[str]: + """ + Get setuptools command arguments with shim wrapped setup file invocation. + + :param setup_py_path: The path to setup.py to be wrapped. + :param global_options: Additional global options. + :param no_user_config: If True, disables personal user configuration. + :param unbuffered_output: If True, adds the unbuffered switch to the + argument list. + """ + args = [sys.executable] + if unbuffered_output: + args += ["-u"] + args += ["-c", _SETUPTOOLS_SHIM.format(setup_py_path)] + if global_options: + args += global_options + if no_user_config: + args += ["--no-user-cfg"] + return args + + +def make_setuptools_bdist_wheel_args( + setup_py_path: str, + global_options: Sequence[str], + build_options: Sequence[str], + destination_dir: str, +) -> List[str]: + # 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. + args = make_setuptools_shim_args( + setup_py_path, global_options=global_options, unbuffered_output=True + ) + args += ["bdist_wheel", "-d", destination_dir] + args += build_options + return args + + +def make_setuptools_clean_args( + setup_py_path: str, + global_options: Sequence[str], +) -> List[str]: + args = make_setuptools_shim_args( + setup_py_path, global_options=global_options, unbuffered_output=True + ) + args += ["clean", "--all"] + return args + + +def make_setuptools_develop_args( + setup_py_path: str, + global_options: Sequence[str], + install_options: Sequence[str], + no_user_config: bool, + prefix: Optional[str], + home: Optional[str], + use_user_site: bool, +) -> List[str]: + assert not (use_user_site and prefix) + + args = make_setuptools_shim_args( + setup_py_path, + global_options=global_options, + no_user_config=no_user_config, + ) + + args += ["develop", "--no-deps"] + + args += install_options + + if prefix: + args += ["--prefix", prefix] + if home is not None: + args += ["--install-dir", home] + + if use_user_site: + args += ["--user", "--prefix="] + + return args + + +def make_setuptools_egg_info_args( + setup_py_path: str, + egg_info_dir: Optional[str], + no_user_config: bool, +) -> List[str]: + args = make_setuptools_shim_args(setup_py_path, no_user_config=no_user_config) + + args += ["egg_info"] + + if egg_info_dir: + args += ["--egg-base", egg_info_dir] + + return args + + +def make_setuptools_install_args( + setup_py_path: str, + global_options: Sequence[str], + install_options: Sequence[str], + record_filename: str, + root: Optional[str], + prefix: Optional[str], + header_dir: Optional[str], + home: Optional[str], + use_user_site: bool, + no_user_config: bool, + pycompile: bool, +) -> List[str]: + assert not (use_user_site and prefix) + assert not (use_user_site and root) + + args = make_setuptools_shim_args( + setup_py_path, + global_options=global_options, + no_user_config=no_user_config, + unbuffered_output=True, + ) + args += ["install", "--record", record_filename] + args += ["--single-version-externally-managed"] + + if root is not None: + args += ["--root", root] + if prefix is not None: + args += ["--prefix", prefix] + if home is not None: + args += ["--home", home] + if use_user_site: + args += ["--user", "--prefix="] + + if pycompile: + args += ["--compile"] + else: + args += ["--no-compile"] + + if header_dir: + args += ["--install-headers", header_dir] + + args += install_options + + return args diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py new file mode 100644 index 0000000..1e8ff50 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py @@ -0,0 +1,260 @@ +import logging +import os +import shlex +import subprocess +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Iterable, + List, + Mapping, + Optional, + Union, +) + +from pip._vendor.rich.markup import escape + +from pip._internal.cli.spinners import SpinnerInterface, open_spinner +from pip._internal.exceptions import InstallationSubprocessError +from pip._internal.utils.logging import VERBOSE, subprocess_logger +from pip._internal.utils.misc import HiddenText + +if TYPE_CHECKING: + # Literal was introduced in Python 3.8. + # + # TODO: Remove `if TYPE_CHECKING` when dropping support for Python 3.7. + from typing import Literal + +CommandArgs = List[Union[str, HiddenText]] + + +def make_command(*args: Union[str, HiddenText, CommandArgs]) -> CommandArgs: + """ + Create a CommandArgs object. + """ + command_args: CommandArgs = [] + for arg in args: + # Check for list instead of CommandArgs since CommandArgs is + # only known during type-checking. + if isinstance(arg, list): + command_args.extend(arg) + else: + # Otherwise, arg is str or HiddenText. + command_args.append(arg) + + return command_args + + +def format_command_args(args: Union[List[str], CommandArgs]) -> str: + """ + Format command arguments for display. + """ + # For HiddenText arguments, display the redacted form by calling str(). + # Also, we don't apply str() to arguments that aren't HiddenText since + # this can trigger a UnicodeDecodeError in Python 2 if the argument + # has type unicode and includes a non-ascii character. (The type + # checker doesn't ensure the annotations are correct in all cases.) + return " ".join( + shlex.quote(str(arg)) if isinstance(arg, HiddenText) else shlex.quote(arg) + for arg in args + ) + + +def reveal_command_args(args: Union[List[str], CommandArgs]) -> List[str]: + """ + Return the arguments in their raw, unredacted form. + """ + return [arg.secret if isinstance(arg, HiddenText) else arg for arg in args] + + +def call_subprocess( + cmd: Union[List[str], CommandArgs], + show_stdout: bool = False, + cwd: Optional[str] = None, + on_returncode: 'Literal["raise", "warn", "ignore"]' = "raise", + extra_ok_returncodes: Optional[Iterable[int]] = None, + extra_environ: Optional[Mapping[str, Any]] = None, + unset_environ: Optional[Iterable[str]] = None, + spinner: Optional[SpinnerInterface] = None, + log_failed_cmd: Optional[bool] = True, + stdout_only: Optional[bool] = False, + *, + command_desc: str, +) -> str: + """ + Args: + show_stdout: if true, use INFO to log the subprocess's stderr and + stdout streams. Otherwise, use DEBUG. Defaults to False. + extra_ok_returncodes: an iterable of integer return codes that are + acceptable, in addition to 0. Defaults to None, which means []. + unset_environ: an iterable of environment variable names to unset + prior to calling subprocess.Popen(). + log_failed_cmd: if false, failed commands are not logged, only raised. + stdout_only: if true, return only stdout, else return both. When true, + logging of both stdout and stderr occurs when the subprocess has + terminated, else logging occurs as subprocess output is produced. + """ + if extra_ok_returncodes is None: + extra_ok_returncodes = [] + if unset_environ is None: + unset_environ = [] + # Most places in pip use show_stdout=False. What this means is-- + # + # - We connect the child's output (combined stderr and stdout) to a + # single pipe, which we read. + # - We log this output to stderr at DEBUG level as it is received. + # - If DEBUG logging isn't enabled (e.g. if --verbose logging wasn't + # requested), then we show a spinner so the user can still see the + # subprocess is in progress. + # - If the subprocess exits with an error, we log the output to stderr + # at ERROR level if it hasn't already been displayed to the console + # (e.g. if --verbose logging wasn't enabled). This way we don't log + # the output to the console twice. + # + # If show_stdout=True, then the above is still done, but with DEBUG + # replaced by INFO. + if show_stdout: + # Then log the subprocess output at INFO level. + log_subprocess: Callable[..., None] = subprocess_logger.info + used_level = logging.INFO + else: + # Then log the subprocess output using VERBOSE. This also ensures + # it will be logged to the log file (aka user_log), if enabled. + log_subprocess = subprocess_logger.verbose + used_level = VERBOSE + + # Whether the subprocess will be visible in the console. + showing_subprocess = subprocess_logger.getEffectiveLevel() <= used_level + + # Only use the spinner if we're not showing the subprocess output + # and we have a spinner. + use_spinner = not showing_subprocess and spinner is not None + + log_subprocess("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( + # Convert HiddenText objects to the underlying str. + reveal_command_args(cmd), + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT if not stdout_only else subprocess.PIPE, + cwd=cwd, + env=env, + errors="backslashreplace", + ) + except Exception as exc: + if log_failed_cmd: + subprocess_logger.critical( + "Error %s while executing command %s", + exc, + command_desc, + ) + raise + all_output = [] + if not stdout_only: + assert proc.stdout + assert proc.stdin + proc.stdin.close() + # In this mode, stdout and stderr are in the same pipe. + while True: + line: str = proc.stdout.readline() + if not line: + break + line = line.rstrip() + all_output.append(line + "\n") + + # Show the line immediately. + log_subprocess(line) + # Update the spinner. + if use_spinner: + assert spinner + spinner.spin() + try: + proc.wait() + finally: + if proc.stdout: + proc.stdout.close() + output = "".join(all_output) + else: + # In this mode, stdout and stderr are in different pipes. + # We must use communicate() which is the only safe way to read both. + out, err = proc.communicate() + # log line by line to preserve pip log indenting + for out_line in out.splitlines(): + log_subprocess(out_line) + all_output.append(out) + for err_line in err.splitlines(): + log_subprocess(err_line) + all_output.append(err) + output = out + + proc_had_error = proc.returncode and proc.returncode not in extra_ok_returncodes + if use_spinner: + assert spinner + if proc_had_error: + spinner.finish("error") + else: + spinner.finish("done") + if proc_had_error: + if on_returncode == "raise": + error = InstallationSubprocessError( + command_description=command_desc, + exit_code=proc.returncode, + output_lines=all_output if not showing_subprocess else None, + ) + if log_failed_cmd: + subprocess_logger.error("[present-rich] %s", error) + subprocess_logger.verbose( + "[bold magenta]full command[/]: [blue]%s[/]", + escape(format_command_args(cmd)), + extra={"markup": True}, + ) + subprocess_logger.verbose( + "[bold magenta]cwd[/]: %s", + escape(cwd or "[inherit]"), + extra={"markup": True}, + ) + + raise error + elif on_returncode == "warn": + subprocess_logger.warning( + 'Command "%s" had error code %s in %s', + command_desc, + proc.returncode, + cwd, + ) + elif on_returncode == "ignore": + pass + else: + raise ValueError(f"Invalid value: on_returncode={on_returncode!r}") + return output + + +def runner_with_spinner_message(message: str) -> Callable[..., None]: + """Provide a subprocess_runner that shows a spinner message. + + Intended for use with for BuildBackendHookCaller. Thus, the runner has + an API that matches what's expected by BuildBackendHookCaller.subprocess_runner. + """ + + def runner( + cmd: List[str], + cwd: Optional[str] = None, + extra_environ: Optional[Mapping[str, Any]] = None, + ) -> None: + with open_spinner(message) as spinner: + call_subprocess( + cmd, + command_desc=message, + cwd=cwd, + extra_environ=extra_environ, + spinner=spinner, + ) + + return runner diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py new file mode 100644 index 0000000..8ee8a1c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py @@ -0,0 +1,246 @@ +import errno +import itertools +import logging +import os.path +import tempfile +from contextlib import ExitStack, contextmanager +from typing import Any, Dict, Generator, Optional, TypeVar, Union + +from pip._internal.utils.misc import enum, rmtree + +logger = logging.getLogger(__name__) + +_T = TypeVar("_T", bound="TempDirectory") + + +# Kinds of temporary directories. Only needed for ones that are +# globally-managed. +tempdir_kinds = enum( + BUILD_ENV="build-env", + EPHEM_WHEEL_CACHE="ephem-wheel-cache", + REQ_BUILD="req-build", +) + + +_tempdir_manager: Optional[ExitStack] = None + + +@contextmanager +def global_tempdir_manager() -> Generator[None, None, None]: + global _tempdir_manager + with ExitStack() as stack: + old_tempdir_manager, _tempdir_manager = _tempdir_manager, stack + try: + yield + finally: + _tempdir_manager = old_tempdir_manager + + +class TempDirectoryTypeRegistry: + """Manages temp directory behavior""" + + def __init__(self) -> None: + self._should_delete: Dict[str, bool] = {} + + def set_delete(self, kind: str, value: bool) -> None: + """Indicate whether a TempDirectory of the given kind should be + auto-deleted. + """ + self._should_delete[kind] = value + + def get_delete(self, kind: str) -> bool: + """Get configured auto-delete flag for a given TempDirectory type, + default True. + """ + return self._should_delete.get(kind, True) + + +_tempdir_registry: Optional[TempDirectoryTypeRegistry] = None + + +@contextmanager +def tempdir_registry() -> Generator[TempDirectoryTypeRegistry, None, None]: + """Provides a scoped global tempdir registry that can be used to dictate + whether directories should be deleted. + """ + global _tempdir_registry + old_tempdir_registry = _tempdir_registry + _tempdir_registry = TempDirectoryTypeRegistry() + try: + yield _tempdir_registry + finally: + _tempdir_registry = old_tempdir_registry + + +class _Default: + pass + + +_default = _Default() + + +class TempDirectory: + """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 + delete + Whether the directory should be deleted when exiting + (when used as a contextmanager) + + Methods: + cleanup() + Deletes the temporary directory + + When used as a context manager, if the delete attribute is True, on + exiting the context the temporary directory is deleted. + """ + + def __init__( + self, + path: Optional[str] = None, + delete: Union[bool, None, _Default] = _default, + kind: str = "temp", + globally_managed: bool = False, + ): + super().__init__() + + if delete is _default: + if path is not None: + # If we were given an explicit directory, resolve delete option + # now. + delete = False + else: + # Otherwise, we wait until cleanup and see what + # tempdir_registry says. + delete = None + + # The only time we specify path is in for editables where it + # is the value of the --src option. + if path is None: + path = self._create(kind) + + self._path = path + self._deleted = False + self.delete = delete + self.kind = kind + + if globally_managed: + assert _tempdir_manager is not None + _tempdir_manager.enter_context(self) + + @property + def path(self) -> str: + assert not self._deleted, f"Attempted to access deleted path: {self._path}" + return self._path + + def __repr__(self) -> str: + return f"<{self.__class__.__name__} {self.path!r}>" + + def __enter__(self: _T) -> _T: + return self + + def __exit__(self, exc: Any, value: Any, tb: Any) -> None: + if self.delete is not None: + delete = self.delete + elif _tempdir_registry: + delete = _tempdir_registry.get_delete(self.kind) + else: + delete = True + + if delete: + self.cleanup() + + def _create(self, kind: str) -> str: + """Create a temporary directory and store its path in self.path""" + # 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. + path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) + logger.debug("Created temporary directory: %s", path) + return path + + def cleanup(self) -> None: + """Remove the temporary directory created and reset state""" + self._deleted = True + if not os.path.exists(self._path): + return + rmtree(self._path) + + +class AdjacentTempDirectory(TempDirectory): + """Helper class that creates a temporary directory adjacent to a real one. + + Attributes: + original + The original directory to create a temp directory for. + path + After calling create() or entering, contains the full + path to the temporary directory. + delete + Whether the directory should be deleted when exiting + (when used as a contextmanager) + + """ + + # The characters that may be used to name the temp directory + # We always prepend a ~ and then rotate through these until + # a usable name is found. + # pkg_resources raises a different error for .dist-info folder + # with leading '-' and invalid metadata + LEADING_CHARS = "-~.=%0123456789" + + def __init__(self, original: str, delete: Optional[bool] = None) -> None: + self.original = original.rstrip("/\\") + super().__init__(delete=delete) + + @classmethod + def _generate_names(cls, name: str) -> Generator[str, None, None]: + """Generates a series of temporary names. + + The algorithm replaces the leading characters in the name + with ones that are valid filesystem characters, but are not + valid package names (for both Python and pip definitions of + package). + """ + for i in range(1, len(name)): + for candidate in itertools.combinations_with_replacement( + cls.LEADING_CHARS, i - 1 + ): + new_name = "~" + "".join(candidate) + name[i:] + if new_name != name: + yield new_name + + # If we make it this far, we will have to make a longer name + for i in range(len(cls.LEADING_CHARS)): + for candidate in itertools.combinations_with_replacement( + cls.LEADING_CHARS, i + ): + new_name = "~" + "".join(candidate) + name + if new_name != name: + yield new_name + + def _create(self, kind: str) -> str: + root, name = os.path.split(self.original) + for candidate in self._generate_names(name): + path = os.path.join(root, candidate) + try: + os.mkdir(path) + except OSError as ex: + # Continue if the name exists already + if ex.errno != errno.EEXIST: + raise + else: + path = os.path.realpath(path) + break + else: + # Final fallback on the default behavior. + path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) + + logger.debug("Created temporary directory: %s", path) + return path diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/unpacking.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/unpacking.py new file mode 100644 index 0000000..78b5c13 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/unpacking.py @@ -0,0 +1,257 @@ +"""Utilities related archives. +""" + +import logging +import os +import shutil +import stat +import tarfile +import zipfile +from typing import Iterable, List, Optional +from zipfile import ZipInfo + +from pip._internal.exceptions import InstallationError +from pip._internal.utils.filetypes import ( + BZ2_EXTENSIONS, + TAR_EXTENSIONS, + XZ_EXTENSIONS, + ZIP_EXTENSIONS, +) +from pip._internal.utils.misc import ensure_dir + +logger = logging.getLogger(__name__) + + +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 current_umask() -> int: + """Get the current umask which involves having to set it temporarily.""" + mask = os.umask(0) + os.umask(mask) + return mask + + +def split_leading_dir(path: str) -> List[str]: + 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: Iterable[str]) -> bool: + """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 is_within_directory(directory: str, target: str) -> bool: + """ + Return true if the absolute path of target is within the directory + """ + abs_directory = os.path.abspath(directory) + abs_target = os.path.abspath(target) + + prefix = os.path.commonprefix([abs_directory, abs_target]) + return prefix == abs_directory + + +def set_extracted_file_to_default_mode_plus_executable(path: str) -> None: + """ + Make file present at path have execute for user/group/world + (chmod +x) is no-op on windows per python docs + """ + os.chmod(path, (0o777 & ~current_umask() | 0o111)) + + +def zip_item_is_executable(info: ZipInfo) -> bool: + mode = info.external_attr >> 16 + # if mode and regular file and any execute permissions for + # user/group/world? + return bool(mode and stat.S_ISREG(mode) and mode & 0o111) + + +def unzip_file(filename: str, location: str, flatten: bool = True) -> None: + """ + 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 + fn = name + if leading: + fn = split_leading_dir(name)[1] + fn = os.path.join(location, fn) + dir = os.path.dirname(fn) + if not is_within_directory(location, fn): + message = ( + "The zip file ({}) has a file ({}) trying to install " + "outside target directory ({})" + ) + raise InstallationError(message.format(filename, fn, location)) + if fn.endswith("/") or fn.endswith("\\"): + # A directory + ensure_dir(fn) + else: + ensure_dir(dir) + # Don't use read() to avoid allocating an arbitrarily large + # chunk of memory for the file's content + fp = zip.open(name) + try: + with open(fn, "wb") as destfp: + shutil.copyfileobj(fp, destfp) + finally: + fp.close() + if zip_item_is_executable(info): + set_extracted_file_to_default_mode_plus_executable(fn) + finally: + zipfp.close() + + +def untar_file(filename: str, location: str) -> None: + """ + 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, encoding="utf-8") + try: + leading = has_leading_dir([member.name for member in tar.getmembers()]) + for member in tar.getmembers(): + fn = member.name + if leading: + fn = split_leading_dir(fn)[1] + path = os.path.join(location, fn) + if not is_within_directory(location, path): + message = ( + "The tar file ({}) has a file ({}) trying to install " + "outside target directory ({})" + ) + raise InstallationError(message.format(filename, path, location)) + 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)) + assert fp is not None + 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: + set_extracted_file_to_default_mode_plus_executable(path) + finally: + tar.close() + + +def unpack_file( + filename: str, + location: str, + content_type: Optional[str] = None, +) -> None: + 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) + 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(f"Cannot determine archive format of {location}") diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/urls.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/urls.py new file mode 100644 index 0000000..6ba2e04 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/urls.py @@ -0,0 +1,62 @@ +import os +import string +import urllib.parse +import urllib.request +from typing import Optional + +from .compat import WINDOWS + + +def get_url_scheme(url: str) -> Optional[str]: + if ":" not in url: + return None + return url.split(":", 1)[0].lower() + + +def path_to_url(path: str) -> str: + """ + 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 url_to_path(url: str) -> str: + """ + Convert a file: URL to a path. + """ + assert url.startswith( + "file:" + ), f"You can only turn file: urls into filenames (not {url!r})" + + _, netloc, path, _, _ = urllib.parse.urlsplit(url) + + if not netloc or netloc == "localhost": + # According to RFC 8089, same as empty authority. + netloc = "" + elif WINDOWS: + # If we have a UNC path, prepend UNC share notation. + netloc = "\\\\" + netloc + else: + raise ValueError( + f"non-local file URIs are not supported on this platform: {url!r}" + ) + + path = urllib.request.url2pathname(netloc + path) + + # On Windows, urlsplit parses the path as something like "/C:/Users/foo". + # This creates issues for path-related functions like io.open(), so we try + # to detect and strip the leading slash. + if ( + WINDOWS + and not netloc # Not UNC. + and len(path) >= 3 + and path[0] == "/" # Leading slash to strip. + and path[1] in string.ascii_letters # Drive letter. + and path[2:4] in (":", ":/") # Colon + end of string, or colon + absolute path. + ): + path = path[1:] + + return path diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/virtualenv.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/virtualenv.py new file mode 100644 index 0000000..882e36f --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/virtualenv.py @@ -0,0 +1,104 @@ +import logging +import os +import re +import site +import sys +from typing import List, Optional + +logger = logging.getLogger(__name__) +_INCLUDE_SYSTEM_SITE_PACKAGES_REGEX = re.compile( + r"include-system-site-packages\s*=\s*(?Ptrue|false)" +) + + +def _running_under_venv() -> bool: + """Checks if sys.base_prefix and sys.prefix match. + + This handles PEP 405 compliant virtual environments. + """ + return sys.prefix != getattr(sys, "base_prefix", sys.prefix) + + +def _running_under_legacy_virtualenv() -> bool: + """Checks if sys.real_prefix is set. + + This handles virtual environments created with pypa's virtualenv. + """ + # pypa/virtualenv case + return hasattr(sys, "real_prefix") + + +def running_under_virtualenv() -> bool: + """True if we're running inside a virtual environment, False otherwise.""" + return _running_under_venv() or _running_under_legacy_virtualenv() + + +def _get_pyvenv_cfg_lines() -> Optional[List[str]]: + """Reads {sys.prefix}/pyvenv.cfg and returns its contents as list of lines + + Returns None, if it could not read/access the file. + """ + pyvenv_cfg_file = os.path.join(sys.prefix, "pyvenv.cfg") + try: + # Although PEP 405 does not specify, the built-in venv module always + # writes with UTF-8. (pypa/pip#8717) + with open(pyvenv_cfg_file, encoding="utf-8") as f: + return f.read().splitlines() # avoids trailing newlines + except OSError: + return None + + +def _no_global_under_venv() -> bool: + """Check `{sys.prefix}/pyvenv.cfg` for system site-packages inclusion + + PEP 405 specifies that when system site-packages are not supposed to be + visible from a virtual environment, `pyvenv.cfg` must contain the following + line: + + include-system-site-packages = false + + Additionally, log a warning if accessing the file fails. + """ + cfg_lines = _get_pyvenv_cfg_lines() + if cfg_lines is None: + # We're not in a "sane" venv, so assume there is no system + # site-packages access (since that's PEP 405's default state). + logger.warning( + "Could not access 'pyvenv.cfg' despite a virtual environment " + "being active. Assuming global site-packages is not accessible " + "in this environment." + ) + return True + + for line in cfg_lines: + match = _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX.match(line) + if match is not None and match.group("value") == "false": + return True + return False + + +def _no_global_under_legacy_virtualenv() -> bool: + """Check if "no-global-site-packages.txt" exists beside site.py + + This mirrors logic in pypa/virtualenv for determining whether system + site-packages are visible in the virtual environment. + """ + site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) + no_global_site_packages_file = os.path.join( + site_mod_dir, + "no-global-site-packages.txt", + ) + return os.path.exists(no_global_site_packages_file) + + +def virtualenv_no_global() -> bool: + """Returns a boolean, whether running in venv with no system site-packages.""" + # PEP 405 compliance needs to be checked first since virtualenv >=20 would + # return True for both checks, but is only able to use the PEP 405 config. + if _running_under_venv(): + return _no_global_under_venv() + + if _running_under_legacy_virtualenv(): + return _no_global_under_legacy_virtualenv() + + return False diff --git a/venv/lib/python3.11/site-packages/pip/_internal/utils/wheel.py b/venv/lib/python3.11/site-packages/pip/_internal/utils/wheel.py new file mode 100644 index 0000000..e5e3f34 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/utils/wheel.py @@ -0,0 +1,136 @@ +"""Support functions for working with wheel files. +""" + +import logging +from email.message import Message +from email.parser import Parser +from typing import Tuple +from zipfile import BadZipFile, ZipFile + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import UnsupportedWheel + +VERSION_COMPATIBLE = (1, 0) + + +logger = logging.getLogger(__name__) + + +def parse_wheel(wheel_zip: ZipFile, name: str) -> Tuple[str, Message]: + """Extract information from the provided wheel, ensuring it meets basic + standards. + + Returns the name of the .dist-info directory and the parsed WHEEL metadata. + """ + try: + info_dir = wheel_dist_info_dir(wheel_zip, name) + metadata = wheel_metadata(wheel_zip, info_dir) + version = wheel_version(metadata) + except UnsupportedWheel as e: + raise UnsupportedWheel("{} has an invalid wheel, {}".format(name, str(e))) + + check_compatibility(version, name) + + return info_dir, metadata + + +def wheel_dist_info_dir(source: ZipFile, name: str) -> str: + """Returns the name of the contained .dist-info directory. + + Raises AssertionError or UnsupportedWheel if not found, >1 found, or + it doesn't match the provided name. + """ + # Zip file path separators must be / + subdirs = {p.split("/", 1)[0] for p in source.namelist()} + + info_dirs = [s for s in subdirs if s.endswith(".dist-info")] + + if not info_dirs: + raise UnsupportedWheel(".dist-info directory not found") + + if len(info_dirs) > 1: + raise UnsupportedWheel( + "multiple .dist-info directories found: {}".format(", ".join(info_dirs)) + ) + + info_dir = info_dirs[0] + + info_dir_name = canonicalize_name(info_dir) + canonical_name = canonicalize_name(name) + if not info_dir_name.startswith(canonical_name): + raise UnsupportedWheel( + ".dist-info directory {!r} does not start with {!r}".format( + info_dir, canonical_name + ) + ) + + return info_dir + + +def read_wheel_metadata_file(source: ZipFile, path: str) -> bytes: + try: + return source.read(path) + # BadZipFile for general corruption, KeyError for missing entry, + # and RuntimeError for password-protected files + except (BadZipFile, KeyError, RuntimeError) as e: + raise UnsupportedWheel(f"could not read {path!r} file: {e!r}") + + +def wheel_metadata(source: ZipFile, dist_info_dir: str) -> Message: + """Return the WHEEL metadata of an extracted wheel, if possible. + Otherwise, raise UnsupportedWheel. + """ + path = f"{dist_info_dir}/WHEEL" + # Zip file path separators must be / + wheel_contents = read_wheel_metadata_file(source, path) + + try: + wheel_text = wheel_contents.decode() + except UnicodeDecodeError as e: + raise UnsupportedWheel(f"error decoding {path!r}: {e!r}") + + # FeedParser (used by Parser) does not raise any exceptions. The returned + # message may have .defects populated, but for backwards-compatibility we + # currently ignore them. + return Parser().parsestr(wheel_text) + + +def wheel_version(wheel_data: Message) -> Tuple[int, ...]: + """Given WHEEL metadata, return the parsed Wheel-Version. + Otherwise, raise UnsupportedWheel. + """ + version_text = wheel_data["Wheel-Version"] + if version_text is None: + raise UnsupportedWheel("WHEEL is missing Wheel-Version") + + version = version_text.strip() + + try: + return tuple(map(int, version.split("."))) + except ValueError: + raise UnsupportedWheel(f"invalid Wheel-Version: {version!r}") + + +def check_compatibility(version: Tuple[int, ...], name: str) -> None: + """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 version[0] > VERSION_COMPATIBLE[0]: + raise UnsupportedWheel( + "{}'s Wheel-Version ({}) is not compatible with this version " + "of pip".format(name, ".".join(map(str, version))) + ) + elif version > VERSION_COMPATIBLE: + logger.warning( + "Installing from a newer Wheel-Version (%s)", + ".".join(map(str, version)), + ) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/__init__.py b/venv/lib/python3.11/site-packages/pip/_internal/vcs/__init__.py new file mode 100644 index 0000000..b6beddb --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/vcs/__init__.py @@ -0,0 +1,15 @@ +# Expose a limited set of classes and functions so callers outside of +# the vcs package don't need to import deeper than `pip._internal.vcs`. +# (The test directory may still need to import from a vcs sub-package.) +# Import all vcs modules to register each VCS in the VcsSupport object. +import pip._internal.vcs.bazaar +import pip._internal.vcs.git +import pip._internal.vcs.mercurial +import pip._internal.vcs.subversion # noqa: F401 +from pip._internal.vcs.versioncontrol import ( # noqa: F401 + RemoteNotFoundError, + RemoteNotValidError, + is_url, + make_vcs_requirement_url, + vcs, +) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc5643c79f81d5d24f1cc2958d28d15f0dbe37ca GIT binary patch literal 638 zcmb_X!AiqG5Zz5|S}R3Fgo2`?ryk5AUd4l;M-M6EjRFQyA z)tRX~)1|38s;0fb)AgXP8$m-a2g|w{G%4P^A|3amdhViAE7vcDHdb61dv5Y1J_9iD z$GqW6&P-2cVGgQnYu*=O5oIBWhg^ctBC*rNMYFR~wo{q76LM9l5%%3okfvJEEokYZVO8l)hhBTsw2IU2{QS* zWp_pkb|148%)N+g#*8k)E|2iE|}RU=2T`c(Ny?u}di(HwoPxlARxn$kuR<5!oBgF(UiJImV7h MoiX`0f>oU58yqiKvAIiqu~T7^3%@Tk(4OO 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/git.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb359ac6212663375f970e7f304254aba9804d32 GIT binary patch literal 21527 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29326949f2ecce25a22840096ea0de8b6ce244c0 GIT binary patch literal 8709 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..957e7c2a29d5577a5ccff985ebf6ba5d9c8d891f GIT binary patch literal 31875 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
    73el$ESYXl$x( zAU7%_14aeOVaCDQ!{a$l!xc9gt+<)M2u`jX^ELtVA~bHx2kwu3c$7Vwz=(kWrYm1# zXl3DtcOQ}!JgW`#hhv~=xm?jtYZD!6rv@Rt!pYv)sEMtF%%oQJ;>=45Ni-o}&qzGX z*Epiq`6+a4wWB4QFX+UGu(eR_CLY!Jd&!Y_DmkJFZWOjKs$KQ~((7@FZ=qwHrc72V zwP8pJrHp{-j`LNUsjb44B~x;>(-Siw@1!TvU#WfeTzCo)V?Yr_|3J#A1jhF=4wx9? z^>al7Dg6IA`zQ?l3xUoso>Kh~otM{S#uZ$m{G-&mjCR>UucYLcPf=X|X}zxU zI60mt@DhRR1U3<1J@+&{?IaKd_}q7d|2Nq&`AH;=ub?cVcfeyh92H@-D2%QN%?s>P z5&R46QxTdL*ry^iF0fBU2p9El)fsd+f#d!^f?mOKpeXFOek;OL#r3{br=JS?e-}hN zl*i8of`VgjQP^YsuDM!(>>Qhbk35@-?mp|6^gFHj?F$WfXza;%mi^s}2TJ}eW&f51 z?^>YcPS@hV-Hip`Quv2W#a3t?M;3flZ-e8k<4zd(7WYNWc)G6xJA`wNXB|~n$Puav z0F~xe_EPEU;rE>*{C?oX$Kj8f*z+3xX~UyOV6iyZ((TyA;?uovbJd0Wnx`orf8!ff z51y-n9UO8v{NNVqz+&`Ma{aOC<#Rc3Bx60GkZ^^lME4J#a5$brMIU|pl>7bI9%S74 xtiv%_71oEJGWQ=_eJ?wOhSr5welGP!YQa_YX1oqG^7`;o=KkYH__CS%zW{JZx_bZs literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/bazaar.py b/venv/lib/python3.11/site-packages/pip/_internal/vcs/bazaar.py new file mode 100644 index 0000000..20a17ed --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/vcs/bazaar.py @@ -0,0 +1,112 @@ +import logging +from typing import List, Optional, Tuple + +from pip._internal.utils.misc import HiddenText, display_path +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs.versioncontrol import ( + AuthInfo, + RemoteNotFoundError, + RevOptions, + VersionControl, + vcs, +) + +logger = logging.getLogger(__name__) + + +class Bazaar(VersionControl): + name = "bzr" + dirname = ".bzr" + repo_name = "branch" + schemes = ( + "bzr+http", + "bzr+https", + "bzr+ssh", + "bzr+sftp", + "bzr+ftp", + "bzr+lp", + "bzr+file", + ) + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return ["-r", rev] + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info( + "Checking out %s%s to %s", + url, + rev_display, + display_path(dest), + ) + if verbosity <= 0: + flag = "--quiet" + elif verbosity == 1: + flag = "" + else: + flag = f"-{'v'*verbosity}" + cmd_args = make_command( + "checkout", "--lightweight", flag, rev_options.to_args(), url, dest + ) + self.run_command(cmd_args) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + self.run_command(make_command("switch", url), cwd=dest) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + output = self.run_command( + make_command("info"), show_stdout=False, stdout_only=True, cwd=dest + ) + if output.startswith("Standalone "): + # Older versions of pip used to create standalone branches. + # Convert the standalone branch to a checkout by calling "bzr bind". + cmd_args = make_command("bind", "-q", url) + self.run_command(cmd_args, cwd=dest) + + cmd_args = make_command("update", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + # hotfix the URL scheme after removing bzr+ from bzr+ssh:// re-add it + url, rev, user_pass = super().get_url_rev_and_auth(url) + if url.startswith("ssh://"): + url = "bzr+" + url + return url, rev, user_pass + + @classmethod + def get_remote_url(cls, location: str) -> str: + urls = cls.run_command( + ["info"], show_stdout=False, stdout_only=True, 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 cls._is_local_repository(repo): + return path_to_url(repo) + return repo + raise RemoteNotFoundError + + @classmethod + def get_revision(cls, location: str) -> str: + revision = cls.run_command( + ["revno"], + show_stdout=False, + stdout_only=True, + cwd=location, + ) + return revision.splitlines()[-1] + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """Always assume the versions don't match""" + return False + + +vcs.register(Bazaar) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/git.py b/venv/lib/python3.11/site-packages/pip/_internal/vcs/git.py new file mode 100644 index 0000000..8d1d499 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/vcs/git.py @@ -0,0 +1,526 @@ +import logging +import os.path +import pathlib +import re +import urllib.parse +import urllib.request +from typing import List, Optional, Tuple + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import HiddenText, display_path, hide_url +from pip._internal.utils.subprocess import make_command +from pip._internal.vcs.versioncontrol import ( + AuthInfo, + RemoteNotFoundError, + RemoteNotValidError, + RevOptions, + VersionControl, + find_path_to_project_root_from_repo_root, + vcs, +) + +urlsplit = urllib.parse.urlsplit +urlunsplit = urllib.parse.urlunsplit + + +logger = logging.getLogger(__name__) + + +GIT_VERSION_REGEX = re.compile( + r"^git version " # Prefix. + r"(\d+)" # Major. + r"\.(\d+)" # Dot, minor. + r"(?:\.(\d+))?" # Optional dot, patch. + r".*$" # Suffix, including any pre- and post-release segments we don't care about. +) + +HASH_REGEX = re.compile("^[a-fA-F0-9]{40}$") + +# SCP (Secure copy protocol) shorthand. e.g. 'git@example.com:foo/bar.git' +SCP_REGEX = re.compile( + r"""^ + # Optional user, e.g. 'git@' + (\w+@)? + # Server, e.g. 'github.com'. + ([^/:]+): + # The server-side path. e.g. 'user/project.git'. Must start with an + # alphanumeric character so as not to be confusable with a Windows paths + # like 'C:/foo/bar' or 'C:\foo\bar'. + (\w[^:]*) + $""", + re.VERBOSE, +) + + +def looks_like_hash(sha: str) -> bool: + return bool(HASH_REGEX.match(sha)) + + +class Git(VersionControl): + name = "git" + dirname = ".git" + repo_name = "clone" + schemes = ( + "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" + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return [rev] + + def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: + _, rev_options = self.get_url_rev_options(hide_url(url)) + if not rev_options.rev: + return False + if not self.is_commit_id_equal(dest, rev_options.rev): + # the current commit is different from rev, + # which means rev was something else than a commit hash + return False + # return False in the rare case rev is both a commit hash + # and a tag or a branch; we don't want to cache in that case + # because that branch/tag could point to something else in the future + is_tag_or_branch = bool(self.get_revision_sha(dest, rev_options.rev)[0]) + return not is_tag_or_branch + + def get_git_version(self) -> Tuple[int, ...]: + version = self.run_command( + ["version"], + command_desc="git version", + show_stdout=False, + stdout_only=True, + ) + match = GIT_VERSION_REGEX.match(version) + if not match: + logger.warning("Can't parse git version: %s", version) + return () + return tuple(int(c) for c in match.groups()) + + @classmethod + def get_current_branch(cls, location: str) -> Optional[str]: + """ + Return the current branch, or None if HEAD isn't at a branch + (e.g. detached HEAD). + """ + # git-symbolic-ref exits with empty stdout if "HEAD" is a detached + # HEAD rather than a symbolic ref. In addition, the -q causes the + # command to exit with status code 1 instead of 128 in this case + # and to suppress the message to stderr. + args = ["symbolic-ref", "-q", "HEAD"] + output = cls.run_command( + args, + extra_ok_returncodes=(1,), + show_stdout=False, + stdout_only=True, + cwd=location, + ) + ref = output.strip() + + if ref.startswith("refs/heads/"): + return ref[len("refs/heads/") :] + + return None + + @classmethod + def get_revision_sha(cls, dest: str, rev: str) -> Tuple[Optional[str], bool]: + """ + Return (sha_or_none, is_branch), where sha_or_none is a commit hash + if the revision names a remote branch or tag, otherwise None. + + Args: + dest: the repository directory. + rev: the revision name. + """ + # Pass rev to pre-filter the list. + output = cls.run_command( + ["show-ref", rev], + cwd=dest, + show_stdout=False, + stdout_only=True, + on_returncode="ignore", + ) + refs = {} + # NOTE: We do not use splitlines here since that would split on other + # unicode separators, which can be maliciously used to install a + # different revision. + for line in output.strip().split("\n"): + line = line.rstrip("\r") + if not line: + continue + try: + ref_sha, ref_name = line.split(" ", maxsplit=2) + except ValueError: + # Include the offending line to simplify troubleshooting if + # this error ever occurs. + raise ValueError(f"unexpected show-ref line: {line!r}") + + refs[ref_name] = ref_sha + + branch_ref = f"refs/remotes/origin/{rev}" + tag_ref = f"refs/tags/{rev}" + + sha = refs.get(branch_ref) + if sha is not None: + return (sha, True) + + sha = refs.get(tag_ref) + + return (sha, False) + + @classmethod + def _should_fetch(cls, dest: str, rev: str) -> bool: + """ + Return true if rev is a ref or is a commit that we don't have locally. + + Branches and tags are not considered in this method because they are + assumed to be always available locally (which is a normal outcome of + ``git clone`` and ``git fetch --tags``). + """ + if rev.startswith("refs/"): + # Always fetch remote refs. + return True + + if not looks_like_hash(rev): + # Git fetch would fail with abbreviated commits. + return False + + if cls.has_commit(dest, rev): + # Don't fetch if we have the commit locally. + return False + + return True + + @classmethod + def resolve_revision( + cls, dest: str, url: HiddenText, rev_options: RevOptions + ) -> RevOptions: + """ + Resolve a revision to a new RevOptions object with the SHA1 of the + branch, tag, or ref if found. + + Args: + rev_options: a RevOptions object. + """ + rev = rev_options.arg_rev + # The arg_rev property's implementation for Git ensures that the + # rev return value is always non-None. + assert rev is not None + + sha, is_branch = cls.get_revision_sha(dest, rev) + + if sha is not None: + rev_options = rev_options.make_new(sha) + rev_options.branch_name = rev if is_branch else None + + return rev_options + + # 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, + ) + + if not cls._should_fetch(dest, rev): + return rev_options + + # fetch the requested revision + cls.run_command( + make_command("fetch", "-q", url, rev_options.to_args()), + cwd=dest, + ) + # Change the revision to the SHA of the ref we fetched + sha = cls.get_revision(dest, rev="FETCH_HEAD") + rev_options = rev_options.make_new(sha) + + return rev_options + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """ + 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 cls.get_revision(dest) == name + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info("Cloning %s%s to %s", url, rev_display, display_path(dest)) + if verbosity <= 0: + flags: Tuple[str, ...] = ("--quiet",) + elif verbosity == 1: + flags = () + else: + flags = ("--verbose", "--progress") + if self.get_git_version() >= (2, 17): + # Git added support for partial clone in 2.17 + # https://git-scm.com/docs/partial-clone + # Speeds up cloning by functioning without a complete copy of repository + self.run_command( + make_command( + "clone", + "--filter=blob:none", + *flags, + url, + dest, + ) + ) + else: + self.run_command(make_command("clone", *flags, url, dest)) + + if rev_options.rev: + # Then a specific revision was requested. + rev_options = self.resolve_revision(dest, url, rev_options) + branch_name = getattr(rev_options, "branch_name", None) + logger.debug("Rev options %s, branch_name %s", rev_options, branch_name) + if branch_name is None: + # 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): + cmd_args = make_command( + "checkout", + "-q", + rev_options.to_args(), + ) + self.run_command(cmd_args, cwd=dest) + elif self.get_current_branch(dest) != branch_name: + # Then a specific branch was requested, and that branch + # is not yet checked out. + track_branch = f"origin/{branch_name}" + cmd_args = [ + "checkout", + "-b", + branch_name, + "--track", + track_branch, + ] + self.run_command(cmd_args, cwd=dest) + else: + sha = self.get_revision(dest) + rev_options = rev_options.make_new(sha) + + logger.info("Resolved %s to commit %s", url, rev_options.rev) + + #: repo may contain submodules + self.update_submodules(dest) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + self.run_command( + make_command("config", "remote.origin.url", url), + cwd=dest, + ) + cmd_args = make_command("checkout", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + self.update_submodules(dest) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + # First fetch changes from the default remote + if self.get_git_version() >= (1, 9): + # 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.resolve_revision(dest, url, rev_options) + cmd_args = make_command("reset", "--hard", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + #: update submodules + self.update_submodules(dest) + + @classmethod + def get_remote_url(cls, location: str) -> str: + """ + Return URL of the first remote encountered. + + Raises RemoteNotFoundError if the repository does not have a remote + url configured. + """ + # We need to pass 1 for extra_ok_returncodes since the command + # exits with return code 1 if there are no matching lines. + stdout = cls.run_command( + ["config", "--get-regexp", r"remote\..*\.url"], + extra_ok_returncodes=(1,), + show_stdout=False, + stdout_only=True, + cwd=location, + ) + remotes = stdout.splitlines() + try: + found_remote = remotes[0] + except IndexError: + raise RemoteNotFoundError + + for remote in remotes: + if remote.startswith("remote.origin.url "): + found_remote = remote + break + url = found_remote.split(" ")[1] + return cls._git_remote_to_pip_url(url.strip()) + + @staticmethod + def _git_remote_to_pip_url(url: str) -> str: + """ + Convert a remote url from what git uses to what pip accepts. + + There are 3 legal forms **url** may take: + + 1. A fully qualified url: ssh://git@example.com/foo/bar.git + 2. A local project.git folder: /path/to/bare/repository.git + 3. SCP shorthand for form 1: git@example.com:foo/bar.git + + Form 1 is output as-is. Form 2 must be converted to URI and form 3 must + be converted to form 1. + + See the corresponding test test_git_remote_url_to_pip() for examples of + sample inputs/outputs. + """ + if re.match(r"\w+://", url): + # This is already valid. Pass it though as-is. + return url + if os.path.exists(url): + # A local bare remote (git clone --mirror). + # Needs a file:// prefix. + return pathlib.PurePath(url).as_uri() + scp_match = SCP_REGEX.match(url) + if scp_match: + # Add an ssh:// prefix and replace the ':' with a '/'. + return scp_match.expand(r"ssh://\1\2/\3") + # Otherwise, bail out. + raise RemoteNotValidError(url) + + @classmethod + def has_commit(cls, location: str, rev: str) -> bool: + """ + Check if rev is a commit that is available in the local repository. + """ + try: + cls.run_command( + ["rev-parse", "-q", "--verify", "sha^" + rev], + cwd=location, + log_failed_cmd=False, + ) + except InstallationError: + return False + else: + return True + + @classmethod + def get_revision(cls, location: str, rev: Optional[str] = None) -> str: + if rev is None: + rev = "HEAD" + current_rev = cls.run_command( + ["rev-parse", rev], + show_stdout=False, + stdout_only=True, + cwd=location, + ) + return current_rev.strip() + + @classmethod + def get_subdirectory(cls, location: str) -> Optional[str]: + """ + Return the path to Python project root, relative to the repo root. + Return None if the project root is in the repo root. + """ + # find the repo root + git_dir = cls.run_command( + ["rev-parse", "--git-dir"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + if not os.path.isabs(git_dir): + git_dir = os.path.join(location, git_dir) + repo_root = os.path.abspath(os.path.join(git_dir, "..")) + return find_path_to_project_root_from_repo_root(location, repo_root) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + """ + Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. + That's required because although they use SSH they sometimes don'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. + """ + # Works around an apparent Git bug + # (see https://article.gmane.org/gmane.comp.version-control.git/146500) + 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("/") + after_plus = scheme.find("+") + 1 + url = scheme[:after_plus] + urlunsplit( + (scheme[after_plus:], netloc, newpath, query, fragment), + ) + + if "://" not in url: + assert "file:" not in url + url = url.replace("git+", "git+ssh://") + url, rev, user_pass = super().get_url_rev_and_auth(url) + url = url.replace("ssh://", "") + else: + url, rev, user_pass = super().get_url_rev_and_auth(url) + + return url, rev, user_pass + + @classmethod + def update_submodules(cls, location: str) -> None: + if not os.path.exists(os.path.join(location, ".gitmodules")): + return + cls.run_command( + ["submodule", "update", "--init", "--recursive", "-q"], + cwd=location, + ) + + @classmethod + def get_repository_root(cls, location: str) -> Optional[str]: + loc = super().get_repository_root(location) + if loc: + return loc + try: + r = cls.run_command( + ["rev-parse", "--show-toplevel"], + cwd=location, + show_stdout=False, + stdout_only=True, + on_returncode="raise", + log_failed_cmd=False, + ) + except BadCommand: + logger.debug( + "could not determine if %s is under git control " + "because git is not available", + location, + ) + return None + except InstallationError: + return None + return os.path.normpath(r.rstrip("\r\n")) + + @staticmethod + def should_add_vcs_url_prefix(repo_url: str) -> bool: + """In either https or ssh form, requirements must be prefixed with git+.""" + return True + + +vcs.register(Git) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py b/venv/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py new file mode 100644 index 0000000..2a005e0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py @@ -0,0 +1,163 @@ +import configparser +import logging +import os +from typing import List, Optional, Tuple + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import HiddenText, display_path +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs.versioncontrol import ( + RevOptions, + VersionControl, + find_path_to_project_root_from_repo_root, + vcs, +) + +logger = logging.getLogger(__name__) + + +class Mercurial(VersionControl): + name = "hg" + dirname = ".hg" + repo_name = "clone" + schemes = ( + "hg+file", + "hg+http", + "hg+https", + "hg+ssh", + "hg+static-http", + ) + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return [rev] + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info( + "Cloning hg %s%s to %s", + url, + rev_display, + display_path(dest), + ) + if verbosity <= 0: + flags: Tuple[str, ...] = ("--quiet",) + elif verbosity == 1: + flags = () + elif verbosity == 2: + flags = ("--verbose",) + else: + flags = ("--verbose", "--debug") + self.run_command(make_command("clone", "--noupdate", *flags, url, dest)) + self.run_command( + make_command("update", *flags, rev_options.to_args()), + cwd=dest, + ) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + repo_config = os.path.join(dest, self.dirname, "hgrc") + config = configparser.RawConfigParser() + try: + config.read(repo_config) + config.set("paths", "default", url.secret) + 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 = make_command("update", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + self.run_command(["pull", "-q"], cwd=dest) + cmd_args = make_command("update", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_remote_url(cls, location: str) -> str: + url = cls.run_command( + ["showconfig", "paths.default"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + if cls._is_local_repository(url): + url = path_to_url(url) + return url.strip() + + @classmethod + def get_revision(cls, location: str) -> str: + """ + Return the repository-local changeset revision number, as an integer. + """ + current_revision = cls.run_command( + ["parents", "--template={rev}"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + return current_revision + + @classmethod + def get_requirement_revision(cls, location: str) -> str: + """ + Return the changeset identification hash, as a 40-character + hexadecimal string + """ + current_rev_hash = cls.run_command( + ["parents", "--template={node}"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + return current_rev_hash + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """Always assume the versions don't match""" + return False + + @classmethod + def get_subdirectory(cls, location: str) -> Optional[str]: + """ + Return the path to Python project root, relative to the repo root. + Return None if the project root is in the repo root. + """ + # find the repo root + repo_root = cls.run_command( + ["root"], show_stdout=False, stdout_only=True, cwd=location + ).strip() + if not os.path.isabs(repo_root): + repo_root = os.path.abspath(os.path.join(location, repo_root)) + return find_path_to_project_root_from_repo_root(location, repo_root) + + @classmethod + def get_repository_root(cls, location: str) -> Optional[str]: + loc = super().get_repository_root(location) + if loc: + return loc + try: + r = cls.run_command( + ["root"], + cwd=location, + show_stdout=False, + stdout_only=True, + on_returncode="raise", + log_failed_cmd=False, + ) + except BadCommand: + logger.debug( + "could not determine if %s is under hg control " + "because hg is not available", + location, + ) + return None + except InstallationError: + return None + return os.path.normpath(r.rstrip("\r\n")) + + +vcs.register(Mercurial) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/subversion.py b/venv/lib/python3.11/site-packages/pip/_internal/vcs/subversion.py new file mode 100644 index 0000000..16d93a6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/vcs/subversion.py @@ -0,0 +1,324 @@ +import logging +import os +import re +from typing import List, Optional, Tuple + +from pip._internal.utils.misc import ( + HiddenText, + display_path, + is_console_interactive, + is_installable_dir, + split_auth_from_netloc, +) +from pip._internal.utils.subprocess import CommandArgs, make_command +from pip._internal.vcs.versioncontrol import ( + AuthInfo, + RemoteNotFoundError, + RevOptions, + VersionControl, + vcs, +) + +logger = logging.getLogger(__name__) + +_svn_xml_url_re = re.compile('url="([^"]+)"') +_svn_rev_re = re.compile(r'committed-rev="(\d+)"') +_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') +_svn_info_xml_url_re = re.compile(r"(.*)") + + +class Subversion(VersionControl): + name = "svn" + dirname = ".svn" + repo_name = "checkout" + schemes = ("svn+ssh", "svn+http", "svn+https", "svn+svn", "svn+file") + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: + return True + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return ["-r", rev] + + @classmethod + def get_revision(cls, location: str) -> str: + """ + Return the maximum revision for all files under a given location + """ + # Note: taken from setuptools.command.egg_info + revision = 0 + + for base, dirs, _ in os.walk(location): + if cls.dirname not in dirs: + dirs[:] = [] + continue # no sense walking uncontrolled subdirs + dirs.remove(cls.dirname) + entries_fn = os.path.join(base, cls.dirname, "entries") + if not os.path.exists(entries_fn): + # FIXME: should we warn? + continue + + dirurl, localrev = cls._get_svn_url_rev(base) + + if base == location: + assert dirurl is not None + 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 str(revision) + + @classmethod + def get_netloc_and_auth( + cls, netloc: str, scheme: str + ) -> Tuple[str, Tuple[Optional[str], Optional[str]]]: + """ + This override allows the auth information to be passed to svn via the + --username and --password options instead of via the URL. + """ + if scheme == "ssh": + # The --username and --password options can't be used for + # svn+ssh URLs, so keep the auth information in the URL. + return super().get_netloc_and_auth(netloc, scheme) + + return split_auth_from_netloc(netloc) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + # hotfix the URL scheme after removing svn+ from svn+ssh:// re-add it + url, rev, user_pass = super().get_url_rev_and_auth(url) + if url.startswith("ssh://"): + url = "svn+" + url + return url, rev, user_pass + + @staticmethod + def make_rev_args( + username: Optional[str], password: Optional[HiddenText] + ) -> CommandArgs: + extra_args: CommandArgs = [] + if username: + extra_args += ["--username", username] + if password: + extra_args += ["--password", password] + + return extra_args + + @classmethod + def get_remote_url(cls, location: str) -> str: + # In cases where the source is in a subdirectory, we have to look up in + # the location until we find a valid project root. + orig_location = location + while not is_installable_dir(location): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding a Python project. + logger.warning( + "Could not find Python project for directory %s (tried all " + "parent directories)", + orig_location, + ) + raise RemoteNotFoundError + + url, _rev = cls._get_svn_url_rev(location) + if url is None: + raise RemoteNotFoundError + + return url + + @classmethod + def _get_svn_url_rev(cls, location: str) -> Tuple[Optional[str], int]: + from pip._internal.exceptions import InstallationError + + entries_path = os.path.join(location, cls.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 = "" + + url = None + if data.startswith("8") or data.startswith("9") or data.startswith("10"): + entries = list(map(str.splitlines, data.split("\n\x0c\n"))) + del entries[0][0] # get rid of the '8' + url = entries[0][3] + revs = [int(d[9]) for d in entries if len(d) > 9 and d[9]] + [0] + elif data.startswith("= 1.7 + # Note that using get_remote_call_options is not necessary here + # because `svn info` is being run against a local directory. + # We don't need to worry about making sure interactive mode + # is being used to prompt for passwords, because passwords + # are only potentially needed for remote server requests. + xml = cls.run_command( + ["info", "--xml", location], + show_stdout=False, + stdout_only=True, + ) + match = _svn_info_xml_url_re.search(xml) + assert match is not None + url = match.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 + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """Always assume the versions don't match""" + return False + + def __init__(self, use_interactive: Optional[bool] = None) -> None: + if use_interactive is None: + use_interactive = is_console_interactive() + self.use_interactive = use_interactive + + # This member is used to cache the fetched version of the current + # ``svn`` client. + # Special value definitions: + # None: Not evaluated yet. + # Empty tuple: Could not parse version. + self._vcs_version: Optional[Tuple[int, ...]] = None + + super().__init__() + + def call_vcs_version(self) -> Tuple[int, ...]: + """Query the version of the currently installed Subversion client. + + :return: A tuple containing the parts of the version information or + ``()`` if the version returned from ``svn`` could not be parsed. + :raises: BadCommand: If ``svn`` is not installed. + """ + # Example versions: + # svn, version 1.10.3 (r1842928) + # compiled Feb 25 2019, 14:20:39 on x86_64-apple-darwin17.0.0 + # svn, version 1.7.14 (r1542130) + # compiled Mar 28 2018, 08:49:13 on x86_64-pc-linux-gnu + # svn, version 1.12.0-SlikSvn (SlikSvn/1.12.0) + # compiled May 28 2019, 13:44:56 on x86_64-microsoft-windows6.2 + version_prefix = "svn, version " + version = self.run_command(["--version"], show_stdout=False, stdout_only=True) + if not version.startswith(version_prefix): + return () + + version = version[len(version_prefix) :].split()[0] + version_list = version.partition("-")[0].split(".") + try: + parsed_version = tuple(map(int, version_list)) + except ValueError: + return () + + return parsed_version + + def get_vcs_version(self) -> Tuple[int, ...]: + """Return the version of the currently installed Subversion client. + + If the version of the Subversion client has already been queried, + a cached value will be used. + + :return: A tuple containing the parts of the version information or + ``()`` if the version returned from ``svn`` could not be parsed. + :raises: BadCommand: If ``svn`` is not installed. + """ + if self._vcs_version is not None: + # Use cached version, if available. + # If parsing the version failed previously (empty tuple), + # do not attempt to parse it again. + return self._vcs_version + + vcs_version = self.call_vcs_version() + self._vcs_version = vcs_version + return vcs_version + + def get_remote_call_options(self) -> CommandArgs: + """Return options to be used on calls to Subversion that contact the server. + + These options are applicable for the following ``svn`` subcommands used + in this class. + + - checkout + - switch + - update + + :return: A list of command line arguments to pass to ``svn``. + """ + if not self.use_interactive: + # --non-interactive switch is available since Subversion 0.14.4. + # Subversion < 1.8 runs in interactive mode by default. + return ["--non-interactive"] + + svn_version = self.get_vcs_version() + # By default, Subversion >= 1.8 runs in non-interactive mode if + # stdin is not a TTY. Since that is how pip invokes SVN, in + # call_subprocess(), pip must pass --force-interactive to ensure + # the user can be prompted for a password, if required. + # SVN added the --force-interactive option in SVN 1.8. Since + # e.g. RHEL/CentOS 7, which is supported until 2024, ships with + # SVN 1.7, pip should continue to support SVN 1.7. Therefore, pip + # can't safely add the option if the SVN version is < 1.8 (or unknown). + if svn_version >= (1, 8): + return ["--force-interactive"] + + return [] + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info( + "Checking out %s%s to %s", + url, + rev_display, + display_path(dest), + ) + if verbosity <= 0: + flag = "--quiet" + else: + flag = "" + cmd_args = make_command( + "checkout", + flag, + self.get_remote_call_options(), + rev_options.to_args(), + url, + dest, + ) + self.run_command(cmd_args) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + cmd_args = make_command( + "switch", + self.get_remote_call_options(), + rev_options.to_args(), + url, + dest, + ) + self.run_command(cmd_args) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + cmd_args = make_command( + "update", + self.get_remote_call_options(), + rev_options.to_args(), + dest, + ) + self.run_command(cmd_args) + + +vcs.register(Subversion) diff --git a/venv/lib/python3.11/site-packages/pip/_internal/vcs/versioncontrol.py b/venv/lib/python3.11/site-packages/pip/_internal/vcs/versioncontrol.py new file mode 100644 index 0000000..02bbf68 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/vcs/versioncontrol.py @@ -0,0 +1,705 @@ +"""Handles all VCS (version control) support""" + +import logging +import os +import shutil +import sys +import urllib.parse +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Iterable, + Iterator, + List, + Mapping, + Optional, + Tuple, + Type, + Union, +) + +from pip._internal.cli.spinners import SpinnerInterface +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import ( + HiddenText, + ask_path_exists, + backup_dir, + display_path, + hide_url, + hide_value, + is_installable_dir, + rmtree, +) +from pip._internal.utils.subprocess import ( + CommandArgs, + call_subprocess, + format_command_args, + make_command, +) +from pip._internal.utils.urls import get_url_scheme + +if TYPE_CHECKING: + # Literal was introduced in Python 3.8. + # + # TODO: Remove `if TYPE_CHECKING` when dropping support for Python 3.7. + from typing import Literal + + +__all__ = ["vcs"] + + +logger = logging.getLogger(__name__) + +AuthInfo = Tuple[Optional[str], Optional[str]] + + +def is_url(name: str) -> bool: + """ + Return true if the name looks like a URL. + """ + scheme = get_url_scheme(name) + if scheme is None: + return False + return scheme in ["http", "https", "file", "ftp"] + vcs.all_schemes + + +def make_vcs_requirement_url( + repo_url: str, rev: str, project_name: str, subdir: Optional[str] = None +) -> str: + """ + Return the URL for a VCS requirement. + + Args: + repo_url: the remote VCS url, with any needed VCS prefix (e.g. "git+"). + project_name: the (unescaped) project name. + """ + egg_project_name = project_name.replace("-", "_") + req = f"{repo_url}@{rev}#egg={egg_project_name}" + if subdir: + req += f"&subdirectory={subdir}" + + return req + + +def find_path_to_project_root_from_repo_root( + location: str, repo_root: str +) -> Optional[str]: + """ + Find the the Python project's root by searching up the filesystem from + `location`. Return the path to project root relative to `repo_root`. + Return None if the project root is `repo_root`, or cannot be found. + """ + # find project root. + orig_location = location + while not is_installable_dir(location): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding a Python project. + logger.warning( + "Could not find a Python project for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + + if os.path.samefile(repo_root, location): + return None + + return os.path.relpath(location, repo_root) + + +class RemoteNotFoundError(Exception): + pass + + +class RemoteNotValidError(Exception): + def __init__(self, url: str): + super().__init__(url) + self.url = url + + +class RevOptions: + + """ + 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, + vc_class: Type["VersionControl"], + rev: Optional[str] = None, + extra_args: Optional[CommandArgs] = None, + ) -> None: + """ + Args: + vc_class: a VersionControl subclass. + 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.vc_class = vc_class + self.branch_name: Optional[str] = None + + def __repr__(self) -> str: + return f"" + + @property + def arg_rev(self) -> Optional[str]: + if self.rev is None: + return self.vc_class.default_arg_rev + + return self.rev + + def to_args(self) -> CommandArgs: + """ + Return the VCS-specific command arguments. + """ + args: CommandArgs = [] + rev = self.arg_rev + if rev is not None: + args += self.vc_class.get_base_rev_args(rev) + args += self.extra_args + + return args + + def to_display(self) -> str: + if not self.rev: + return "" + + return f" (to revision {self.rev})" + + def make_new(self, rev: str) -> "RevOptions": + """ + 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.vc_class.make_rev_options(rev, extra_args=self.extra_args) + + +class VcsSupport: + _registry: Dict[str, "VersionControl"] = {} + schemes = ["ssh", "git", "hg", "bzr", "sftp", "svn"] + + def __init__(self) -> None: + # Register more schemes with urlparse for various version control + # systems + urllib.parse.uses_netloc.extend(self.schemes) + super().__init__() + + def __iter__(self) -> Iterator[str]: + return self._registry.__iter__() + + @property + def backends(self) -> List["VersionControl"]: + return list(self._registry.values()) + + @property + def dirnames(self) -> List[str]: + return [backend.dirname for backend in self.backends] + + @property + def all_schemes(self) -> List[str]: + schemes: List[str] = [] + for backend in self.backends: + schemes.extend(backend.schemes) + return schemes + + def register(self, cls: Type["VersionControl"]) -> None: + 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, name: str) -> None: + if name in self._registry: + del self._registry[name] + + def get_backend_for_dir(self, location: str) -> Optional["VersionControl"]: + """ + Return a VersionControl object if a repository of that type is found + at the given directory. + """ + vcs_backends = {} + for vcs_backend in self._registry.values(): + repo_path = vcs_backend.get_repository_root(location) + if not repo_path: + continue + logger.debug("Determine that %s uses VCS: %s", location, vcs_backend.name) + vcs_backends[repo_path] = vcs_backend + + if not vcs_backends: + return None + + # Choose the VCS in the inner-most directory. Since all repository + # roots found here would be either `location` or one of its + # parents, the longest path should have the most path components, + # i.e. the backend representing the inner-most repository. + inner_most_repo_path = max(vcs_backends, key=len) + return vcs_backends[inner_most_repo_path] + + def get_backend_for_scheme(self, scheme: str) -> Optional["VersionControl"]: + """ + Return a VersionControl object or None. + """ + for vcs_backend in self._registry.values(): + if scheme in vcs_backend.schemes: + return vcs_backend + return None + + def get_backend(self, name: str) -> Optional["VersionControl"]: + """ + Return a VersionControl object or None. + """ + name = name.lower() + return self._registry.get(name) + + +vcs = VcsSupport() + + +class VersionControl: + name = "" + dirname = "" + repo_name = "" + # List of supported schemes for this Version Control + schemes: Tuple[str, ...] = () + # Iterable of environment variable names to pass to call_subprocess(). + unset_environ: Tuple[str, ...] = () + default_arg_rev: Optional[str] = None + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: + """ + Return whether the vcs prefix (e.g. "git+") should be added to a + repository's remote url when used in a requirement. + """ + return not remote_url.lower().startswith(f"{cls.name}:") + + @classmethod + def get_subdirectory(cls, location: str) -> Optional[str]: + """ + Return the path to Python project root, relative to the repo root. + Return None if the project root is in the repo root. + """ + return None + + @classmethod + def get_requirement_revision(cls, repo_dir: str) -> str: + """ + Return the revision string that should be used in a requirement. + """ + return cls.get_revision(repo_dir) + + @classmethod + def get_src_requirement(cls, repo_dir: str, project_name: str) -> str: + """ + Return the requirement string to use to redownload the files + currently at the given repository directory. + + Args: + project_name: the (unescaped) project name. + + The return value has a form similar to the following: + + {repository_url}@{revision}#egg={project_name} + """ + repo_url = cls.get_remote_url(repo_dir) + + if cls.should_add_vcs_url_prefix(repo_url): + repo_url = f"{cls.name}+{repo_url}" + + revision = cls.get_requirement_revision(repo_dir) + subdir = cls.get_subdirectory(repo_dir) + req = make_vcs_requirement_url(repo_url, revision, project_name, subdir=subdir) + + return req + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + """ + Return the base revision arguments for a vcs command. + + Args: + rev: the name of a revision to install. Cannot be None. + """ + raise NotImplementedError + + def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: + """ + Return true if the commit hash checked out at dest matches + the revision in url. + + Always return False, if the VCS does not support immutable commit + hashes. + + This method does not check if there are local uncommitted changes + in dest after checkout, as pip currently has no use case for that. + """ + return False + + @classmethod + def make_rev_options( + cls, rev: Optional[str] = None, extra_args: Optional[CommandArgs] = None + ) -> RevOptions: + """ + Return a RevOptions object. + + Args: + rev: the name of a revision to install. + extra_args: a list of extra options. + """ + return RevOptions(cls, rev, extra_args=extra_args) + + @classmethod + def _is_local_repository(cls, repo: str) -> bool: + """ + 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 bool(drive) + + @classmethod + def get_netloc_and_auth( + cls, netloc: str, scheme: str + ) -> Tuple[str, Tuple[Optional[str], Optional[str]]]: + """ + Parse the repository URL's netloc, and return the new netloc to use + along with auth information. + + Args: + netloc: the original repository URL netloc. + scheme: the repository URL's scheme without the vcs prefix. + + This is mainly for the Subversion class to override, so that auth + information can be provided via the --username and --password options + instead of through the URL. For other subclasses like Git without + such an option, auth information must stay in the URL. + + Returns: (netloc, (username, password)). + """ + return netloc, (None, None) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + """ + Parse the repository URL to use, and return the URL, revision, + and auth info to use. + + Returns: (url, rev, (username, password)). + """ + scheme, netloc, path, query, frag = urllib.parse.urlsplit(url) + if "+" not in scheme: + raise ValueError( + "Sorry, {!r} is a malformed VCS url. " + "The format is +://, " + "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp".format(url) + ) + # Remove the vcs prefix. + scheme = scheme.split("+", 1)[1] + netloc, user_pass = cls.get_netloc_and_auth(netloc, scheme) + rev = None + if "@" in path: + path, rev = path.rsplit("@", 1) + if not rev: + raise InstallationError( + "The URL {!r} has an empty revision (after @) " + "which is not supported. Include a revision after @ " + "or remove @ from the URL.".format(url) + ) + url = urllib.parse.urlunsplit((scheme, netloc, path, query, "")) + return url, rev, user_pass + + @staticmethod + def make_rev_args( + username: Optional[str], password: Optional[HiddenText] + ) -> CommandArgs: + """ + Return the RevOptions "extra arguments" to use in obtain(). + """ + return [] + + def get_url_rev_options(self, url: HiddenText) -> Tuple[HiddenText, RevOptions]: + """ + Return the URL and RevOptions object to use in obtain(), + as a tuple (url, rev_options). + """ + secret_url, rev, user_pass = self.get_url_rev_and_auth(url.secret) + username, secret_password = user_pass + password: Optional[HiddenText] = None + if secret_password is not None: + password = hide_value(secret_password) + extra_args = self.make_rev_args(username, password) + rev_options = self.make_rev_options(rev, extra_args=extra_args) + + return hide_url(secret_url), rev_options + + @staticmethod + def normalize_url(url: str) -> str: + """ + Normalize a URL for comparison by unquoting it and removing any + trailing slash. + """ + return urllib.parse.unquote(url).rstrip("/") + + @classmethod + def compare_urls(cls, url1: str, url2: str) -> bool: + """ + Compare two repo URLs for identity, ignoring incidental differences. + """ + return cls.normalize_url(url1) == cls.normalize_url(url2) + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + """ + Fetch a revision from a repository, in the case that this is the + first fetch from the repository. + + Args: + dest: the directory to fetch the repository to. + rev_options: a RevOptions object. + verbosity: verbosity level. + """ + raise NotImplementedError + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + """ + Switch the repo at ``dest`` to point to ``URL``. + + Args: + rev_options: a RevOptions object. + """ + raise NotImplementedError + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + """ + Update an already-existing repo to the given ``rev_options``. + + Args: + rev_options: a RevOptions object. + """ + raise NotImplementedError + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """ + Return whether the id of the current commit equals the given name. + + Args: + dest: the repository directory. + name: a string name. + """ + raise NotImplementedError + + def obtain(self, dest: str, url: HiddenText, verbosity: int) -> None: + """ + Install or update in editable mode the package represented by this + VersionControl object. + + :param dest: the repository directory in which to install or update. + :param url: the repository URL starting with a vcs prefix. + :param verbosity: verbosity level. + """ + url, rev_options = self.get_url_rev_options(url) + + if not os.path.exists(dest): + self.fetch_new(dest, url, rev_options, verbosity=verbosity) + return + + rev_display = rev_options.to_display() + if self.is_repository_directory(dest): + existing_url = self.get_remote_url(dest) + if self.compare_urls(existing_url, url.secret): + 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, url, rev_options) + else: + logger.info("Skipping because already up-to-date.") + return + + 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, + ) + # https://github.com/python/mypy/issues/1174 + prompt = ("(i)gnore, (w)ipe, (b)ackup ", ("i", "w", "b")) # type: ignore + + logger.warning( + "The plan is to install the %s repository %s", + self.name, + url, + ) + response = ask_path_exists("What to do? {}".format(prompt[0]), prompt[1]) + + if response == "a": + sys.exit(-1) + + if response == "w": + logger.warning("Deleting %s", display_path(dest)) + rmtree(dest) + self.fetch_new(dest, url, rev_options, verbosity=verbosity) + return + + if response == "b": + dest_dir = backup_dir(dest) + logger.warning("Backing up %s to %s", display_path(dest), dest_dir) + shutil.move(dest, dest_dir) + self.fetch_new(dest, url, rev_options, verbosity=verbosity) + return + + # Do nothing if the response is "i". + 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) + + def unpack(self, location: str, url: HiddenText, verbosity: int) -> None: + """ + Clean up current location and download the url repository + (and vcs infos) into location + + :param url: the repository URL starting with a vcs prefix. + :param verbosity: verbosity level. + """ + if os.path.exists(location): + rmtree(location) + self.obtain(location, url=url, verbosity=verbosity) + + @classmethod + def get_remote_url(cls, location: str) -> str: + """ + Return the url used at location + + Raises RemoteNotFoundError if the repository does not have a remote + url configured. + """ + raise NotImplementedError + + @classmethod + def get_revision(cls, location: str) -> str: + """ + Return the current commit id of the files at the given location. + """ + raise NotImplementedError + + @classmethod + def run_command( + cls, + cmd: Union[List[str], CommandArgs], + show_stdout: bool = True, + cwd: Optional[str] = None, + on_returncode: 'Literal["raise", "warn", "ignore"]' = "raise", + extra_ok_returncodes: Optional[Iterable[int]] = None, + command_desc: Optional[str] = None, + extra_environ: Optional[Mapping[str, Any]] = None, + spinner: Optional[SpinnerInterface] = None, + log_failed_cmd: bool = True, + stdout_only: bool = False, + ) -> str: + """ + 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 = make_command(cls.name, *cmd) + if command_desc is None: + command_desc = format_command_args(cmd) + try: + return call_subprocess( + cmd, + show_stdout, + cwd, + on_returncode=on_returncode, + extra_ok_returncodes=extra_ok_returncodes, + command_desc=command_desc, + extra_environ=extra_environ, + unset_environ=cls.unset_environ, + spinner=spinner, + log_failed_cmd=log_failed_cmd, + stdout_only=stdout_only, + ) + except FileNotFoundError: + # errno.ENOENT = no such file or directory + # In other words, the VCS executable isn't available + raise BadCommand( + f"Cannot find command {cls.name!r} - do you have " + f"{cls.name!r} installed and in your PATH?" + ) + except PermissionError: + # errno.EACCES = Permission denied + # This error occurs, for instance, when the command is installed + # only for another user. So, the current user don't have + # permission to call the other user command. + raise BadCommand( + f"No permission to execute {cls.name!r} - install it " + f"locally, globally (ask admin), or check your PATH. " + f"See possible solutions at " + f"https://pip.pypa.io/en/latest/reference/pip_freeze/" + f"#fixing-permission-denied." + ) + + @classmethod + def is_repository_directory(cls, path: str) -> bool: + """ + Return whether a directory path is a repository directory. + """ + logger.debug("Checking in %s for %s (%s)...", path, cls.dirname, cls.name) + return os.path.exists(os.path.join(path, cls.dirname)) + + @classmethod + def get_repository_root(cls, location: str) -> Optional[str]: + """ + Return the "root" (top-level) directory controlled by the vcs, + or `None` if the directory is not in any. + + It is meant to be overridden to implement smarter detection + mechanisms for specific vcs. + + This can do more than is_repository_directory() alone. For + example, the Git override checks that Git is actually available. + """ + if cls.is_repository_directory(location): + return location + return None diff --git a/venv/lib/python3.11/site-packages/pip/_internal/wheel_builder.py b/venv/lib/python3.11/site-packages/pip/_internal/wheel_builder.py new file mode 100644 index 0000000..15b30af --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_internal/wheel_builder.py @@ -0,0 +1,382 @@ +"""Orchestrator for building wheels from InstallRequirements. +""" + +import logging +import os.path +import re +import shutil +from typing import Callable, Iterable, List, Optional, Tuple + +from pip._vendor.packaging.utils import canonicalize_name, canonicalize_version +from pip._vendor.packaging.version import InvalidVersion, Version + +from pip._internal.cache import WheelCache +from pip._internal.exceptions import InvalidWheelFilename, UnsupportedWheel +from pip._internal.metadata import FilesystemWheel, get_wheel_distribution +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.operations.build.wheel import build_wheel_pep517 +from pip._internal.operations.build.wheel_editable import build_wheel_editable +from pip._internal.operations.build.wheel_legacy import build_wheel_legacy +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.deprecation import ( + LegacyInstallReasonMissingWheelPackage, + LegacyInstallReasonNoBinaryForcesSetuptoolsInstall, +) +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ensure_dir, hash_file, is_wheel_installed +from pip._internal.utils.setuptools_build import make_setuptools_clean_args +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs import vcs + +logger = logging.getLogger(__name__) + +_egg_info_re = re.compile(r"([a-z0-9_.]+)-([a-z0-9_.!+-]+)", re.IGNORECASE) + +BdistWheelAllowedPredicate = Callable[[InstallRequirement], bool] +BuildResult = Tuple[List[InstallRequirement], List[InstallRequirement]] + + +def _contains_egg_info(s: str) -> bool: + """Determine whether the string looks like an egg_info. + + :param s: The string to parse. E.g. foo-2.1 + """ + return bool(_egg_info_re.search(s)) + + +def _should_build( + req: InstallRequirement, + need_wheel: bool, + check_bdist_wheel: Optional[BdistWheelAllowedPredicate] = None, +) -> bool: + """Return whether an InstallRequirement should be built into a wheel.""" + if req.constraint: + # never build requirements that are merely constraints + return False + if req.is_wheel: + if need_wheel: + logger.info( + "Skipping %s, due to already being wheel.", + req.name, + ) + return False + + if need_wheel: + # i.e. pip wheel, not pip install + return True + + # From this point, this concerns the pip install command only + # (need_wheel=False). + + if not req.source_dir: + return False + + if req.editable: + # we only build PEP 660 editable requirements + return req.supports_pyproject_editable() + + if req.use_pep517: + return True + + assert check_bdist_wheel is not None + if not check_bdist_wheel(req): + # /!\ When we change this to unconditionally return True, we must also remove + # support for `--install-option`. Indeed, `--install-option` implies + # `--no-binary` so we can return False here and run `setup.py install`. + # `--global-option` and `--build-option` can remain until we drop support for + # building with `setup.py bdist_wheel`. + req.legacy_install_reason = LegacyInstallReasonNoBinaryForcesSetuptoolsInstall + return False + + if not is_wheel_installed(): + # we don't build legacy requirements if wheel is not installed + req.legacy_install_reason = LegacyInstallReasonMissingWheelPackage + return False + + return True + + +def should_build_for_wheel_command( + req: InstallRequirement, +) -> bool: + return _should_build(req, need_wheel=True) + + +def should_build_for_install_command( + req: InstallRequirement, + check_bdist_wheel_allowed: BdistWheelAllowedPredicate, +) -> bool: + return _should_build( + req, need_wheel=False, check_bdist_wheel=check_bdist_wheel_allowed + ) + + +def _should_cache( + req: InstallRequirement, +) -> Optional[bool]: + """ + Return whether a built InstallRequirement can be stored in the persistent + wheel cache, assuming the wheel cache is available, and _should_build() + has determined a wheel needs to be built. + """ + if req.editable or not req.source_dir: + # never cache editable requirements + return False + + if req.link and req.link.is_vcs: + # VCS checkout. Do not cache + # unless it points to an immutable commit hash. + assert not req.editable + assert req.source_dir + vcs_backend = vcs.get_backend_for_scheme(req.link.scheme) + assert vcs_backend + if vcs_backend.is_immutable_rev_checkout(req.link.url, req.source_dir): + return True + return False + + assert req.link + base, ext = req.link.splitext() + if _contains_egg_info(base): + return True + + # Otherwise, do not cache. + return False + + +def _get_cache_dir( + req: InstallRequirement, + wheel_cache: WheelCache, +) -> str: + """Return the persistent or temporary cache directory where the built + wheel need to be stored. + """ + cache_available = bool(wheel_cache.cache_dir) + assert req.link + if cache_available and _should_cache(req): + cache_dir = wheel_cache.get_path_for_link(req.link) + else: + cache_dir = wheel_cache.get_ephem_path_for_link(req.link) + return cache_dir + + +def _verify_one(req: InstallRequirement, wheel_path: str) -> None: + canonical_name = canonicalize_name(req.name or "") + w = Wheel(os.path.basename(wheel_path)) + if canonicalize_name(w.name) != canonical_name: + raise InvalidWheelFilename( + "Wheel has unexpected file name: expected {!r}, " + "got {!r}".format(canonical_name, w.name), + ) + dist = get_wheel_distribution(FilesystemWheel(wheel_path), canonical_name) + dist_verstr = str(dist.version) + if canonicalize_version(dist_verstr) != canonicalize_version(w.version): + raise InvalidWheelFilename( + "Wheel has unexpected file name: expected {!r}, " + "got {!r}".format(dist_verstr, w.version), + ) + metadata_version_value = dist.metadata_version + if metadata_version_value is None: + raise UnsupportedWheel("Missing Metadata-Version") + try: + metadata_version = Version(metadata_version_value) + except InvalidVersion: + msg = f"Invalid Metadata-Version: {metadata_version_value}" + raise UnsupportedWheel(msg) + if metadata_version >= Version("1.2") and not isinstance(dist.version, Version): + raise UnsupportedWheel( + "Metadata 1.2 mandates PEP 440 version, " + "but {!r} is not".format(dist_verstr) + ) + + +def _build_one( + req: InstallRequirement, + output_dir: str, + verify: bool, + build_options: List[str], + global_options: List[str], + editable: bool, +) -> Optional[str]: + """Build one wheel. + + :return: The filename of the built wheel, or None if the build failed. + """ + artifact = "editable" if editable else "wheel" + try: + ensure_dir(output_dir) + except OSError as e: + logger.warning( + "Building %s for %s failed: %s", + artifact, + req.name, + e, + ) + return None + + # Install build deps into temporary directory (PEP 518) + with req.build_env: + wheel_path = _build_one_inside_env( + req, output_dir, build_options, global_options, editable + ) + if wheel_path and verify: + try: + _verify_one(req, wheel_path) + except (InvalidWheelFilename, UnsupportedWheel) as e: + logger.warning("Built %s for %s is invalid: %s", artifact, req.name, e) + return None + return wheel_path + + +def _build_one_inside_env( + req: InstallRequirement, + output_dir: str, + build_options: List[str], + global_options: List[str], + editable: bool, +) -> Optional[str]: + with TempDirectory(kind="wheel") as temp_dir: + assert req.name + if req.use_pep517: + assert req.metadata_directory + assert req.pep517_backend + if global_options: + logger.warning( + "Ignoring --global-option when building %s using PEP 517", req.name + ) + if build_options: + logger.warning( + "Ignoring --build-option when building %s using PEP 517", req.name + ) + if editable: + wheel_path = build_wheel_editable( + name=req.name, + backend=req.pep517_backend, + metadata_directory=req.metadata_directory, + tempd=temp_dir.path, + ) + else: + wheel_path = build_wheel_pep517( + name=req.name, + backend=req.pep517_backend, + metadata_directory=req.metadata_directory, + tempd=temp_dir.path, + ) + else: + wheel_path = build_wheel_legacy( + name=req.name, + setup_py_path=req.setup_py_path, + source_dir=req.unpacked_source_directory, + global_options=global_options, + build_options=build_options, + tempd=temp_dir.path, + ) + + if wheel_path is not None: + wheel_name = os.path.basename(wheel_path) + dest_path = os.path.join(output_dir, wheel_name) + try: + wheel_hash, length = hash_file(wheel_path) + shutil.move(wheel_path, dest_path) + logger.info( + "Created wheel for %s: filename=%s size=%d sha256=%s", + req.name, + wheel_name, + length, + wheel_hash.hexdigest(), + ) + logger.info("Stored in directory: %s", output_dir) + return dest_path + except Exception as e: + logger.warning( + "Building wheel for %s failed: %s", + req.name, + e, + ) + # Ignore return, we can't do anything else useful. + if not req.use_pep517: + _clean_one_legacy(req, global_options) + return None + + +def _clean_one_legacy(req: InstallRequirement, global_options: List[str]) -> bool: + clean_args = make_setuptools_clean_args( + req.setup_py_path, + global_options=global_options, + ) + + logger.info("Running setup.py clean for %s", req.name) + try: + call_subprocess( + clean_args, command_desc="python setup.py clean", cwd=req.source_dir + ) + return True + except Exception: + logger.error("Failed cleaning build dir for %s", req.name) + return False + + +def build( + requirements: Iterable[InstallRequirement], + wheel_cache: WheelCache, + verify: bool, + build_options: List[str], + global_options: List[str], +) -> BuildResult: + """Build wheels. + + :return: The list of InstallRequirement that succeeded to build and + the list of InstallRequirement that failed to build. + """ + if not requirements: + return [], [] + + # Build the wheels. + logger.info( + "Building wheels for collected packages: %s", + ", ".join(req.name for req in requirements), # type: ignore + ) + + with indent_log(): + build_successes, build_failures = [], [] + for req in requirements: + assert req.name + cache_dir = _get_cache_dir(req, wheel_cache) + wheel_file = _build_one( + req, + cache_dir, + verify, + build_options, + global_options, + req.editable and req.permit_editable_wheels, + ) + if wheel_file: + # Record the download origin in the cache + if req.download_info is not None: + # download_info is guaranteed to be set because when we build an + # InstallRequirement it has been through the preparer before, but + # let's be cautious. + wheel_cache.record_download_origin(cache_dir, req.download_info) + # Update the link for this. + req.link = Link(path_to_url(wheel_file)) + req.local_file_path = req.link.file_path + assert req.link.is_wheel + build_successes.append(req) + else: + build_failures.append(req) + + # notify success/failure + if build_successes: + logger.info( + "Successfully built %s", + " ".join([req.name for req in build_successes]), # type: ignore + ) + if build_failures: + logger.info( + "Failed to build %s", + " ".join([req.name for req in build_failures]), # type: ignore + ) + # Return a list of requirements that failed to build + return build_successes, build_failures diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/__init__.py new file mode 100644 index 0000000..b22f7ab --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/__init__.py @@ -0,0 +1,120 @@ +""" +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__(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("certifi") + vendored("colorama") + vendored("distlib") + vendored("distro") + vendored("six") + vendored("six.moves") + vendored("six.moves.urllib") + vendored("six.moves.urllib.parse") + vendored("packaging") + vendored("packaging.version") + vendored("packaging.specifiers") + vendored("pep517") + vendored("pkg_resources") + vendored("platformdirs") + vendored("progress") + vendored("requests") + vendored("requests.exceptions") + 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") + vendored("resolvelib") + vendored("rich") + vendored("rich.console") + vendored("rich.highlighter") + vendored("rich.logging") + vendored("rich.markup") + vendored("rich.progress") + vendored("rich.segment") + vendored("rich.style") + vendored("rich.text") + vendored("rich.traceback") + vendored("tenacity") + vendored("tomli") + vendored("urllib3") diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..937fee80b084d86bd264eba745e678c5d8d2e6e0 GIT binary patch literal 5616 zcmbW3U2NOd6~`~7qYulLo%q|aozSu4M9CuA@mJzFN#oc}ils5Oq91X)39@)?(WOL{ zq>`9T02jyrZ|JZ*bXZrkSRU3aMN%M7!yfi9Y{Q<(fN6(5rHfcffE7}mk%rk zIHw$xf{Q`-4vQi89$pL!uo$7C)o8`c-G)l3_P#~oj-j^IDbvP#93c$i zn=Hm@u&S^F@WCM&k>V z3XaUfF;C6Q1zwf&RLeO{^oB;2LPko)VlRslS`iDXC{W*6^~q{ZE=dBvMER`j3KS~v zVm@EeGD{NWGX;V7C2~PpLtU&?6fzo$a5&efqKep!UsmKiUn;7aLNobf>^moEBsjYz zv!u#WNuy~oUz8Q?%FEemzCwkQL7lAhbOR}7Q0^{Pb{<+a3lVaYY|TrzxCWwyHv8Np zT4b|!4~q|~Rjnq|Zfy|)4}Cq3tq-#N>dh}mKE)_g{@qv>=Zlc(vl z9ZUObjOECRBrjzo)ecK?*0~4OHPw#fWub(QXonTGD2bXKQK^>EG{tUw#r2MPMUj;R z*fCG&7`EfymY{#!+cPUvP2na=`5Q5XZ&47nbUImFv!j(~D_!`g zemvDb<7J&ZZtwrPedw$9q0isCubb`DR{Qk&t7T{j&2ryFTklMNcK!EjpRRp5{Kb)n zNB%NkL}$$Cj1`^1!uQ=|IPu4~AMLXa&HOs}VdI@w&FI0$9S6VeNPN|ixIcLRJ+ouf z>KOfHYy&ogZ=x-~4Sv-4@tn11;O_XBZ4Y}NEn10}%;cM3L=aUCXVDHj1x3as6>sPbcuD5vYgEP;fvygW!?0z z&|_|+s;!~b2Dhx?7o6Vg6_reuI{D0wYP68airShT(&W4(+7U0>jwM>`NIEUZSuYna zm$Z_Cd0BDtzYR`8wj;8NAy~`V0a;bz4sV#7pMCwx+~xT>8{C!%ez183jHqq`#tgrV zpO0v@;mu3)^Ow_eul&@_hc>LrV&Mz&6b%uj6EDxBGhXICt4v|l`BYFp$1GhAavWC< zggGb^=h95L!v-0y{eMdu*WKS^(!B2e9+TL*`zyytymh^y+(hCnA71>;!mk!Sp8fRV z9~M4YxPQs)o3Q#O%%(}JY0{Cja zMYC_l>YFiJ&seQz{ucaa)NH-9e&P0|jh{Hb4}Oe&LhflyY#%_{gnkS94e0mUx4+=_7ur@g z;s;F_v|!MHLH~(6hH%7$garu$624->gh>k~4Vd)7mw`nlfR;f)N8oe8s2KV9J0gU$J8vPM9!e!I%MKyV=+_j*WLr*k{2$ z1NON+Hr_Cy-GX)l+P(TVpV{HJJ9f>_Oz5?s*MMHnz>A!4`v7)qlztQTTd?1N{hq;X jUb^w72^|)67|`LhZ*E)Mx%e+%2)L2KjStEshO7SpejL?? literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/six.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/six.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..671c4cf3ef300c076c298874b5575c507bd012c5 GIT binary patch literal 46418 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 SCu@Zt)OsfUjvutx0RKPoCTI%) literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23a552f2f984461b49095a65de2e23c076d61fd9 GIT binary patch literal 97448 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 F{Rb3c_9XxS literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4a7df326ee99dff3e85b73d34cfb49c74939cbb GIT binary patch literal 2700 zcmaJ?&2JM&6rc5uy&JFXBzy*Nf{B9~3)L2CRUj%5ic1isN!36PzN{AS${*}{-Pv{8 zSV1yXq=pKq9H_`KCrXtZIP};<|AVfhl@hHKDN@x#Z$@b^ocd<%U1x!GJoEha&3iLD z?>E1S2}B_yX_h5p_U|7NVeY%cvm8Jjj?l05UGen7f3r4ep>4)g224}(m|sMo4~ zMDSz}f;;#TOX$tjWHgU{VP-QC5`je>-cZcj%7UUg96eX1R&v7mPd~Xk)fO0FvB>O`+9MbpUX+JbmbD&B9@a|=psA*WXE zBfKb(s4#qxUmY6j^1~&DZ z%mQ|Blh-}|!0kQI7r(<7RsH>!7?GaLZA-v_OnCNAhIIrt)uLibCBuor4X#LPr3qLM zl$8dl7-pr|Q5Ru)&^^Dl;HYpz~szFwlLWGj2wdfiZJ{}4@{4`XMzaci#PB@OK8pKt{)Ey+>+1+`xc^T&Bu4Y zcW_le49_}jgQ(4sJ7pzx_siQUQ%{*>F$FYCxhV!x;b5YvB_ub6WLp@s1DXPex0T0iA8&G@WtcCUtAkt~=dVHm3*fXBk&M^lfd zTKOH}*rUsjFSqg?AnwqQ7k{|;B>(iL$6jD__|U_-<+;`z%!dbnom+Tv6HmT4vXOjg z{`zejPuqCf!qYI#$80XS#hu&a&b`QQ+-`H1Z0=GAvEkD@e0-(S=0|LP#Pa%IVAI?D zn9Yw_UUx67!;2z)Wly9fRcU*1`8 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..224c906583116fce6cf2ab60b8835171b4eea426 GIT binary patch literal 5507 zcma)AU2GFq7QQq7$=GqQlQ@ZqlVB18n1W3RvjNl%3Oknx?skfw0SWw>n{s$a?I(Gb$uuW9?|7!1l9#=^;N9gRQZp+x zLCMYDgge4i(=z#(n-XA$K3qs`7nL23;N+%b@@m3#O^znU&YSMDLSWxZAt5x)~k;gU2?L z3|HU^M08dw3N9#B^@9}LIZncMx83f@xwT!@5+O?-o)kOQq*Kq5XE#Rt%)MV&6qAW z%Jj_0d74(WbjoaHHOcFWEY8W=Ojc4UZp8GaY;}q@n@&|$rfCowXaHLSwN^2uBvqBR zVp|82PVC@JQdk#%bKY#L>pGoGX<52pdPHlKD5}lSJ7TBXKVFZ|Was4gtQ61D?5v#9 z)OdF8mWT?P&&6-anOkuseLbFAfVF0ZV?#r6HLb})tST++q231a;x;LF63?;ET;J^4yL!AR94uiTT0gD}BTtS2 zv9hr*x_asUwcmeu@57Z3*YnHHyIx~=KRk9BdynaRN7iSSoh6~~S?>|O_sl=`=t8&A zeOT{4Z1@6qFRs4*;%A1}gsuMm@GiF1a#Y14Oe`kdRqh#rF~F0tn-l zT-Qj(IZr-zTqE;b!9_y_vTCcn%^F_7U|bUam7`I`uR#5*ZDy-=bJfN+tlU$puf1(w zdE-71UNzLrO43k4E9oUL@YyZgGzW0tKsZ=(7u;Ze&c%D)s-|864T~frRQ@P0t6D5_ zRh1*!j9jgVq%+f5I+xVa*-S*sMpRjjq^Bck&1N8f4ECo&KQ@eMY9t9ftv8F6n#*Q@ zFASWQBN(=C@?G$SV^nX0BcpOccBY_@|DNom|nQV}bSv<>)LAOq--k)i?(;Y>}H zDcB-t7^^&Na>N+ZZ?B^=mlJ2Dz0gg?)33<)HtmA~Jp^PiG`54G;*1Az5CT3Lsh4!@ z*Mq0mf~Dx`WslL^c6a2#HNAO1znt-Y~+S)WYkU5AQYS4&-2 z^}yA#o3sS)Uf%TeZ}|FGkAHD`bKu;@z`3XM#evJEfy+hTWXU(F`zD|HkAIf`rsLq+ zzM?-~!hC%Fece9>`6+Kbmz~f2?aR$7y0rVb4By=l?z`qC>Pf^RgfCBDGde3-=DWWJP604IBu zuY?1>(GR1M75F?yd5K?g6!=ve7GQsNk{n+-8`l87n%@~X8htkOb1(6khZ18LsPUCFi^t4T{VcQgEQ~XpZ!Icp zlw5%qZN4xEI%t;Yekh?|X6d)yWiLc#t~Mv_^?DV9LqX9~hBq6tg%WW8Kg>m*w3f&6E?tEI-1T*5dD zVTh&Gp6Xluv*2kQ1G?fU2%>#P1&mPLi+`~(_ZJA54F4+_eSIM^m%N$I++dZ=DMYd~ zl2@?`(VXF4%xiN<%%s)Gd|FW==t=T9=%6Ur8Ig^FJe9RP%~&jRSxwGp5aKBdHU|qy z!Q)sjI@RaS^Vee?Ec=B5_K&*)QH{44WQx{g))*S|U z+MHJH=o#49X*(Z`UReaoPf#2XbwGSMlh51~6?s}S9pZG(bVEp(Rplsexsly0h!rgd zBvw0TZfG+qa)?+S!VK=zWAV&RE~C-O#oko1AaZpiwi5>mQ>dqbfNL>ALwaba7#c2x zhV{^}5#ICg^jdNw9M{8fqbKt4{GTrW@p7@}NU7(DUd?3(={XARbPw*f&+>)+@XkVH z(*?IIWx;f-T2jlamWS@FZWX;b=!4QbO>}9 zTRhYG3`E;mMKzmpNs7v2HZeKM5`7(exU_|w43~#XEbdQ0q2|-+e(VuUXKul@0%8DA z!|MIOl!ku#N`09Ury|Nl?;=g?36H)!e$j1Srx;{*Th=j52D^TCaWnRSoe zce2=b68v`{c=y-n=uhDxk8FnHaLVgKF?_NVKDi=bhtSb!==Em z9vC(Pq0PYHMqscQI8X{4&;tjag%7O=E5Z+M($=x^!9B6qI#_BQ{3d!t^mt<=h2)iNG!Pu$|UC?N!?SQ4(;R_)e8d@d2o(DchYpm;ZtZ)Q9M&6i*}cGVAhVt6gV&z3mhWHD&bIVlWt0B! literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0590a329a985339495aa39e65c1bb83ac21946cf GIT binary patch literal 3781 zcmcIn&1)M+6ra(qJ}bpa;Bu_u4v#qQa9|}fKjhru>k&^C z%%1d=8CDZ0Qq!J|7p9#OE8I2<74D#uM8PS|>JvtBrdlb?vhr-fwk8Udnmg^3-^^dU zSP+)WE>wVSOfgZYSe1efY^K8t($__&>~hEU2l-0PQ>K_(&xCg6VR!)c-a(irzaBXK z_`txE0|T3hfgLnsq^RPn+5UmyJPvDk0$^R`FJV6o;6-N*yUM&cyIZk169T1c(0B%^ zis)1hh6izJ4?-5;-yTCt8;-%zbhp20%w#rmSv}iwia*oaxpmtq6YR?y5Q7fJ(I}By zti%12)(YfkS`{tYj$rkkmV7z!3UCPY(mdHpq!(0app*hPFQMyYqr`OGOX+&aF{?KA z)4Kj;)v$dE$0OrM5Kt69hVUu^dP>^HG2SJh^Tp=?^WoD_Y4l8kgb)jR&z%F746fJ< z{*JiW{$V!+l(w*g@PdF-Fw;QT#USu#7MI6SYM!toeA)rOSesixr?xrjVKFKLx6SI7L)aa-VEBtfqq3U$l}b0L{rbU9nkwA6;!KMmaCC;(i-p2Lf^2lu|Yw=%kV=5f#2Cp~936K8#G zQNy6&m6zIn1)WZ9FF{~{_My(Jp?<+)e9zIjh(*_cYa`^O5JUKMT7|QtWPn^GLcJ5Y ztK1@YC?&UG7oXxsi^9qRRlpMj>t@m`8aB-kb$G# zkx^DLIE2!Bj#&%8T*eegN#O^3xC|8;6lSvqw~VrT9!5-?0A8%t%8siE*Wt|6O4eOK ztE}Cz+-b>FVy=OS_PjPx#oA7as~AG~e1is7dlNO6i3_$h6I6>ilwoM1sTI_Twyn92 zHa-q=XtdJb%Z?ueGcakkV9MrXbb2_Dw=2zgqJ&us+fwA-VJ`p zqPUS zg@gf+AoTbqIoAHyh@~mib=|NO+s4`57O5{wA@Ov>QgRz-cUz>_4pXqV8&-z5advkf Hl61vio5LEf literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c7c68dd6813f008ef27183ea6ebfde69278dd84 GIT binary patch literal 1138 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 L^7VgM=NkMQz+dOr literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a9d51cad83d9aefd9a4d040934c391c37f0fcef GIT binary patch literal 6685 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a7a7173c7e2e9c5de64ab8b682b0ea1d1edce13 GIT binary patch literal 8400 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d4134f4f2c34f0dc1273636fd8de8a4a8516062 GIT binary patch literal 966 zcmZ`%&1=*^6rb5-v)R_|ZntZ(A8J1k4Pu9)U=bChirB@y*i$cSHW|99$tFy)EnQMr zM6iOM+oPwd)Uzl5h%HnYauPgwOR1-xe3RXk7VJy%oA){MdoS}Tmm5GJSH2&uDiT7! zgwdB&PdUB=$__G-iEZTI6^wPEp!%n~gxrMzT*~gLJY16Ron005MRO6`47`JO1ub zO#J>R)ARWvW2!GFHBxsSO4dx`F?Wp`flpj#y;{?aS51$s)5bcnts3z*fnwwK-26Q8 zt$^P0Ag-@cpLmu>s*q;7j3k75jgk$fdmd$T-ez=R@zl*=!*IUf;BNr5Q9Oz!r*|KG zc=oRRzPw%jOxsU*X}VKd_;GEa{hSX?Y&%@d@zPa3a+wz=_?X7WZ^pSyUO7Sle+0Cj z#s!qlzFm5~w7t1|{Xm{MlxI5f442i!*V?^%AkQAkvmJT%=U~2FK8B;=>Q9*jZ5jfsg2j zvNEw1x^?1Q3J7t2I^Vl{cPGnFtyTzV2hZ=r54>L;`8IDGtd1~v01lie$Vf~wFZPJz zp7OIG4hRf^`;R29@t_Y;?TuhVtmx0oU5U`j_Or-i!)g2hWu8mrgdH0w3Aj1#uB9%o5KnztjBbuGeO6k8mq@5Eeoo% zDH|l|-NewT$fs1v0X4I7r1O(@r$Y-_ierQIWGD)1q@fIDTwA)?p6a}`T78j%GA46b zGS)V;_0D;w`9z7X-NV)H@kI~a(kFy0Lm+1hIQ@?oI9&Y2vJTCQMc75$H{7xAb3Oq8 CRCfFT literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b35ff9a5e4ca6bd14a9ab190d0e3725d8a576c2e GIT binary patch literal 8403 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 G!TlfoVkLn9 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a71d0d7b8fd8b0a9d13f4f0b3c127456fd7f767 GIT binary patch literal 2500 zcmbVNPiq@T6rcU0)yiGPP81vmEN2y?gF-7sG!z<=6q2TCpmCt46a;12XeahMt6gPg z<-|q?A966kkWvaZJ^9eM4gLZ>^g~ENkg!k)^wgVzd&;Tr&1w}X&LMPm^wXO+Z)Va!5^fq(`KtI5ME>=y0+G=cHhyIT~QvNdxMR0w-spiEpXn@_6rL zKin2+)bsEpzz%6kZDIixH-{{eXVL;_rq%=BFUgV0sdty5+c>T?%{Pt8a?qfa6{pf< z!3wR1yb?54tvh!8UaMJIrT%KgbMI7|YvFR>e_F0qE8Gp~Cry~Qmng3^-DbrCF(+V^ zx-dQPLl$`PfL9pmZHbw3b1l*>%k|yRvet8NEh;C>EGmYuNnW0u*;2PNTkstMgVaZ@ zMvH~jp8)|@lNA&ZZBI(5(f_uz5B!7S+#+Eam@mn~7m>0=!)G%42w0JFkFE`z!wg`s zDS-83Bie#6^7u3WC_0(jUVF0fcw=|5J6Y&W7CL%?9fPTbIt1mgrGXMEe*;Q@$_mea zh}vy=9}GVj8jm5nNWvt%Vbit}YQs~=xHMaYSv+~rR)!kw1Lq)NlXZxQ4P{K9krReu z5MCkP&Y-oGy^*~WE+ON4k2@ah0WZ8wt=OIqIk~O8e{Fn``rslt4WkLjO`nIhU#AQW zj~LW{!z z6KyOUVACA%_%8q$4%2<2WvVZYsqLFjZau!WJHOlN8pWPb>?HlK?5W-K)0uAeTrYdB zPgIbe&Og}cqSGR7&>u*24y?gCxZtwdS#f#627rVtvz2c>A;c~BV`48Cj zde6AtN%|{sqFAwa>i1&TINvkQcaknb^8HD45fuMFNfh7RSR!c-^}xsMI65S*FtOM2 zz*s*%l0>oKEXvIRfa7#yJM%)Hd9Kgw=DK>mr{_CKkCh*0FUaGah;(8=e2DVnLHQ;5 zVRi#* zX`7B6+IQetD4XALYCdqoY<0U8!Xr{xC@FFDs<@1ytByD@N{KVpr$$^TIA=hb zUj^7CeT|%)`T6smD?eT7=H`33`96^{X9a9s6Y=!In0;={LZLDWJ)_VOy{{xfN4<<5 z7hc8+1FvXo`4>V5v&AVl@m+yO1I#d+LEwQ8J~sWp^eJ`BFaXB{U^RN=tzdcK89bsQ z-#8u+=M@?VvhNrOoFa&DtTUVBm2PaQLd!VlGWeYMc7s}0G+|kdz-f6%8k8l6 zY7RvPps6T41Vc_``{XFZ`k)pIB@HdR+X`C@EMs^XaZQ_phqpX 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_set(self, cache_url, request, response, body=None, expires_time=None): + """ + Store the data in the cache. + """ + if isinstance(self.cache, SeparateBodyBaseCache): + # We pass in the body separately; just put a placeholder empty + # string in the metadata. + self.cache.set( + cache_url, + self.serializer.dumps(request, response, b""), + expires=expires_time, + ) + self.cache.set_body(cache_url, body) + else: + self.cache.set( + cache_url, + self.serializer.dumps(request, response, body), + expires=expires_time, + ) + + 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 "date" in response_headers: + date = calendar.timegm(parsedate_tz(response_headers["date"])) + else: + date = 0 + + # 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 no_store: + return + + # https://tools.ietf.org/html/rfc7234#section-4.1: + # A Vary header field-value of "*" always fails to match. + # Storing such a response leads to a deserialization warning + # during cache lookup and is not allowed to ever be served, + # so storing it can be avoided. + if "*" in response_headers.get("vary", ""): + logger.debug('Response header has "Vary: *"') + return + + # If we've been given an etag, then keep the response + if self.cache_etags and "etag" in response_headers: + expires_time = 0 + if response_headers.get("expires"): + expires = parsedate_tz(response_headers["expires"]) + if expires is not None: + expires_time = calendar.timegm(expires) - date + + expires_time = max(expires_time, 14 * 86400) + + logger.debug("etag object cached for {0} seconds".format(expires_time)) + logger.debug("Caching due to etag") + self._cache_set(cache_url, request, response, body, expires_time) + + # Add to the cache any permanent redirects. We do this before looking + # that the Date headers. + elif int(response.status) in PERMANENT_REDIRECT_STATUSES: + logger.debug("Caching permanent redirect") + self._cache_set(cache_url, request, response, b"") + + # 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: + date = calendar.timegm(parsedate_tz(response_headers["date"])) + # 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") + expires_time = cc["max-age"] + self._cache_set( + cache_url, + request, + response, + body, + expires_time, + ) + + # If the request can expire, it means we should cache it + # in the meantime. + elif "expires" in response_headers: + if response_headers["expires"]: + expires = parsedate_tz(response_headers["expires"]) + if expires is not None: + expires_time = calendar.timegm(expires) - date + else: + expires_time = None + + logger.debug( + "Caching b/c of expires header. expires in {0} seconds".format( + expires_time + ) + ) + self._cache_set( + cache_url, + request, + response, + body, + expires_time, + ) + + 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, request, cached_response) + + return cached_response diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py new file mode 100644 index 0000000..f5ed5f6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py @@ -0,0 +1,111 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +from tempfile import NamedTemporaryFile +import mmap + + +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. + + The data is stored in a temporary file until it is all available. As long + as the temporary files directory is disk-based (sometimes it's a + memory-backed-``tmpfs`` on Linux), data will be unloaded to disk if memory + pressure is high. For small files the disk usually won't be used at all, + it'll all be in the filesystem memory cache, so there should be no + performance impact. + """ + + def __init__(self, fp, callback): + self.__buf = NamedTemporaryFile("rb+", delete=True) + 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: + if self.__buf.tell() == 0: + # Empty file: + result = b"" + else: + # Return the data without actually loading it into memory, + # relying on Python's buffer API and mmap(). mmap() just gives + # a view directly into the filesystem's memory cache, so it + # doesn't result in duplicate memory use. + self.__buf.seek(0, 0) + result = memoryview( + mmap.mmap(self.__buf.fileno(), 0, access=mmap.ACCESS_READ) + ) + self.__callback(result) + + # 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 + + # Closing the temporary file releases memory and frees disk space. + # Important when caching big files. + self.__buf.close() + + def read(self, amt=None): + data = self.__fp.read(amt) + if data: + # We may be dealing with b'', a sign that things are over: + # it's passed e.g. after we've already closed self.__buf. + 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.11/site-packages/pip/_vendor/cachecontrol/heuristics.py b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/heuristics.py new file mode 100644 index 0000000..ebe4a96 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/heuristics.py @@ -0,0 +1,139 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.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 = { + 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.11/site-packages/pip/_vendor/cachecontrol/serialize.py b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/serialize.py new file mode 100644 index 0000000..7fe1a3e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/serialize.py @@ -0,0 +1,190 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.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") + + +_default_body_read = object() + + +class Serializer(object): + def dumps(self, request, response, body=None): + response_headers = CaseInsensitiveDict(response.headers) + + if body is None: + # When a body isn't passed in, we'll read the response. We + # also update the response with a new file handler to be + # sure it acts as though it was never read. + body = response.read(decode_content=False) + 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, # Empty bytestring if body is stored separately + 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 = text_type(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, body_file=None): + # 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{}".format(ver))(request, data, body_file) + + 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, body_file=None): + """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. + # This case is also handled in the controller code when creating + # a cache entry, but is left here for backwards compatibility. + 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: + if body_file is None: + body = io.BytesIO(body_raw) + else: + body = body_file + 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, body_file=None): + # 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, body_file=None): + try: + cached = pickle.loads(data) + except ValueError: + return + + return self.prepare_response(request, cached, body_file) + + def _loads_v2(self, request, data, body_file=None): + assert body_file is None + 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, body_file) + + def _loads_v3(self, request, data, body_file): + # 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, body_file=None): + try: + cached = msgpack.loads(data, raw=False) + except ValueError: + return + + return self.prepare_response(request, cached, body_file) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py new file mode 100644 index 0000000..b6ee7f2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py @@ -0,0 +1,33 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.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 = DictCache() if cache is None else cache + 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.11/site-packages/pip/_vendor/certifi/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/certifi/__init__.py new file mode 100644 index 0000000..a3546f1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/certifi/__init__.py @@ -0,0 +1,4 @@ +from .core import contents, where + +__all__ = ["contents", "where"] +__version__ = "2022.12.07" diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/certifi/__main__.py b/venv/lib/python3.11/site-packages/pip/_vendor/certifi/__main__.py new file mode 100644 index 0000000..0037634 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/certifi/__main__.py @@ -0,0 +1,12 @@ +import argparse + +from pip._vendor.certifi import contents, where + +parser = argparse.ArgumentParser() +parser.add_argument("-c", "--contents", action="store_true") +args = parser.parse_args() + +if args.contents: + print(contents()) +else: + print(where()) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7aac488c0a454960190dc6df4b9efaaf9456a577 GIT binary patch literal 345 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 (3, 11): + + from importlib.resources import as_file, files + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the file + # in cases where we're inside of a zipimport situation until someone + # actually calls where(), but we don't want to re-extract the file + # on every call of where(), so we'll do it once then store it in a + # global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you to + # manage the cleanup of this file, so it doesn't actually return a + # path, it returns a context manager that will give you the path + # when you enter it and will do any cleanup when you leave it. In + # the common case of not needing a temporary file, it will just + # return the file system location and the __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = as_file(files("pip._vendor.certifi").joinpath("cacert.pem")) + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + + return _CACERT_PATH + + def contents() -> str: + return files("pip._vendor.certifi").joinpath("cacert.pem").read_text(encoding="ascii") + +elif sys.version_info >= (3, 7): + + from importlib.resources import path as get_path, read_text + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the + # file in cases where we're inside of a zipimport situation until + # someone actually calls where(), but we don't want to re-extract + # the file on every call of where(), so we'll do it once then store + # it in a global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you + # to manage the cleanup of this file, so it doesn't actually + # return a path, it returns a context manager that will give + # you the path when you enter it and will do any cleanup when + # you leave it. In the common case of not needing a temporary + # file, it will just return the file system location and the + # __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = get_path("pip._vendor.certifi", "cacert.pem") + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + + return _CACERT_PATH + + def contents() -> str: + return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii") + +else: + import os + import types + from typing import Union + + Package = Union[types.ModuleType, str] + Resource = Union[str, "os.PathLike"] + + # This fallback will work for Python versions prior to 3.7 that lack the + # importlib.resources module but relies on the existing `where` function + # so won't address issues with environments like PyOxidizer that don't set + # __file__ on modules. + def read_text( + package: Package, + resource: Resource, + encoding: str = 'utf-8', + errors: str = 'strict' + ) -> str: + with open(where(), encoding=encoding) as data: + return data.read() + + # If we don't have importlib.resources, then we will just do the old logic + # of assuming we're on the filesystem and munge the path directly. + def where() -> str: + f = os.path.dirname(__file__) + + return os.path.join(f, "cacert.pem") + + def contents() -> str: + return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii") + + +# Debian: Use system CA certs: +def where() -> str: + return DEBIAN_CA_CERTS_PATH + + +def contents() -> str: + with open(where(), "r", encoding="ascii") as data: + return data.read() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__init__.py new file mode 100644 index 0000000..fe58162 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__init__.py @@ -0,0 +1,115 @@ +######################## 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 typing import List, Union + +from .charsetgroupprober import CharSetGroupProber +from .charsetprober import CharSetProber +from .enums import InputState +from .resultdict import ResultDict +from .universaldetector import UniversalDetector +from .version import VERSION, __version__ + +__all__ = ["UniversalDetector", "detect", "detect_all", "__version__", "VERSION"] + + +def detect( + byte_str: Union[bytes, bytearray], should_rename_legacy: bool = False +) -> ResultDict: + """ + Detect the encoding of the given byte string. + + :param byte_str: The byte sequence to examine. + :type byte_str: ``bytes`` or ``bytearray`` + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + :type should_rename_legacy: ``bool`` + """ + if not isinstance(byte_str, bytearray): + if not isinstance(byte_str, bytes): + raise TypeError( + f"Expected object of type bytes or bytearray, got: {type(byte_str)}" + ) + byte_str = bytearray(byte_str) + detector = UniversalDetector(should_rename_legacy=should_rename_legacy) + detector.feed(byte_str) + return detector.close() + + +def detect_all( + byte_str: Union[bytes, bytearray], + ignore_threshold: bool = False, + should_rename_legacy: bool = False, +) -> List[ResultDict]: + """ + Detect all the possible encodings of the given byte string. + + :param byte_str: The byte sequence to examine. + :type byte_str: ``bytes`` or ``bytearray`` + :param ignore_threshold: Include encodings that are below + ``UniversalDetector.MINIMUM_THRESHOLD`` + in results. + :type ignore_threshold: ``bool`` + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + :type should_rename_legacy: ``bool`` + """ + if not isinstance(byte_str, bytearray): + if not isinstance(byte_str, bytes): + raise TypeError( + f"Expected object of type bytes or bytearray, got: {type(byte_str)}" + ) + byte_str = bytearray(byte_str) + + detector = UniversalDetector(should_rename_legacy=should_rename_legacy) + detector.feed(byte_str) + detector.close() + + if detector.input_state == InputState.HIGH_BYTE: + results: List[ResultDict] = [] + probers: List[CharSetProber] = [] + for prober in detector.charset_probers: + if isinstance(prober, CharSetGroupProber): + probers.extend(p for p in prober.probers) + else: + probers.append(prober) + for prober in probers: + if ignore_threshold or prober.get_confidence() > detector.MINIMUM_THRESHOLD: + charset_name = prober.charset_name or "" + lower_charset_name = charset_name.lower() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith("iso-8859") and detector.has_win_bytes: + charset_name = detector.ISO_WIN_MAP.get( + lower_charset_name, charset_name + ) + # Rename legacy encodings with superset encodings if asked + if should_rename_legacy: + charset_name = detector.LEGACY_MAP.get( + charset_name.lower(), charset_name + ) + results.append( + { + "encoding": charset_name, + "confidence": prober.get_confidence(), + "language": prober.language, + } + ) + if len(results) > 0: + return sorted(results, key=lambda result: -result["confidence"]) + + return [detector.result] diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c64b672d7fa98a5499db35cdc86b61011006ebe GIT binary patch literal 5077 zcmdTIZA=@#}$kW3u)-vuhF} zBcbS|a#gCL{s~fh5~_M>PRWl*{c}HBsg+u(Kl;N)d%{{N5>i#E_s>x-Qk7qQGiw_g zh>A|C)DFY*%)B>m-kW*z-kbexb+r>gY5D!D=pVcY{hf4*g<_!d`fmUpBLNAFgyPH$ z6F1G67$lekvt*82W-PRAk*slchNW$*WQ*Hp?6l2Fj<|EiN!vEb6|b79qHViW9e2;T z#6fnBo6*J1F)TsYJa(Nh7t4@(Hw`mHNt+J(QN>EQIz@wyL&W zoWQ7#-Ci0!f%Tr1*8C;}){Bg$|D~ zzdSozzSKdc0LxBN3klp41BQ_V3?nHiqEH@GymtbS5_FH@KwQQm071lw0H_dK;w3Sm zDnBff{T*Tuxn)@@i2U~S(ETJ_1yKmdbBoZR+gVgyA$k&(sg@@KQCaN^e8u1zIG&JQ zcgB=hLQ#3xKiyFx)2(!qbjK918Nyh`x`k|}aic8rqA2Lrh$Jgw$c#O}iL%q}#ubyX zLhKKA;O&pY3vyfxFACu#mWgaiSdK4obA04ZDj9~;UJ6UGxo~n>U62!JyHB4ED=}3( znFKr^6_s!@mJGv{P6#p%N5FZ&0%4AeC1NVabtji`HCda07Wh|w24EGvX+Tx=>kD5x zvaT-8)s;t9Yv)VPk&WYD4rM)Eng>SA4);rMW3FcEFN1$=_|wFnCo(ltP+yr%KKFMB zKpvT@-EUarZ{GMM>kDeW;F|rVCy+V+Va79>^^9ts(ba1?OVv-tAC9jd&srKaOJl~; zm~;7lKJe3ltgBITk^XBC2rP)Py5iy7=-Cm_rX3(R4;6yIVzLIA5(cVm3K~8OjO*2Y! zn%yMVbziAm4|J?8lH8%81^*7@EA3E{5iBdVv~AN@q$>Zddz~PJ(~(3(N(tris|μ2|!~iIRNp zKSa~n*?q}i_xQ-f$oR+O+|;$3LzCC8j|~=rBo*{P5KBNXCmE(vo;4gGZDrIgL2ofd|b-3P7^#?tV#*@RBmnT|!R-wQ>x=KjCi`Wm0q6?ZRm0{OBs8Y5-&N9dS9-jESSf#6M!<8Zq&Am`FquD@+amHv-UIG4ce0v=!b! zm_$3>ac$)4HSR~Zr-pP7$%GV9Uw4iT zUA=teHW|PnB90l7S)Em640$R307gO%BU5aJHcb~X@pHPZu;cg)>9L0J_&n)&sT^Fn zYzlb@m9890^);}9xwvP0o(sOIp9AIkpn_jIPq{IYw>Fqf5zh9v3WFG;};LK z*0Wo-vsv5OTzhcMmg@`wsBh8gyYtB6=%iq6nB=L!Z;t&S>p7=+&OxGD-I=R-@3H$A zZsTq|4LXqTsHE7$gc)^=gL?c!G3#au(z(=o`X+v_2t zZm(Y-%iEFv_%0a;(YMvsmuqO>Zs^)-=*l*n&>BuWl`5vNsJ4M?y;N7pm1ri`VDUe<{aGaNDv4~Ob?7T!GY3dJNn$0VcD zy#-^8k}ntqTcx+Jx_~H*k)&R?iiuQQF|M!EFmnOEVqjv!dTpxsA;a)0GBzGpw!#Mt z`gwwWsL*X3ai<(-_zdDbbPIX^8LuB|{=|Jz=?#Z$?}v9~N)iX~C?JS4Q~Cks%?!ij z+Y!^6K`s014my*mtT}W%Q(1GUIa674=vbz*=Fq83WzC^b=AgRcypf@G)dtov#C*u) z&3>i{tdwcWxqa(H8@(BSyXNko!?{bB>FNy%sc literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30e5c50e209a96c66905da22237e4b9fe2a7b378 GIT binary patch literal 27207 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 SX1ZvnqNMuYzk9_A;r|D@4YpeV literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0b5669942be33c823be2cdb7fa2a6bb4191783e GIT binary patch literal 1682 zcma)6&2QX96rb_hUT4|uN2;W|K|-ZfidLwxN>xA=P)Ld*BsL&&seGAw?a9W)AIpq4 zVxt~%Scxq};)L2`PeE10f50EWaf2ceS&D?zQ*RrE1L}$Qym8jsg2Z_I{QQ1z=6%lm zT&a`@j5mHgYCY2ld4@mP&`y}+uYh?(T;fun1k|DwdBslWQg0BXerKP;;>p{^f zQlgM$;%YtO>Rj6?5V8yJXjq0@TqSkmIfef^O{$At>*gI##=>iMVlN6m32nbCJqg(K zQsjDJYc;lG-msl@FXSMdZFKzDTkOVsY26m9JpNKdO)dbbEPl3pldU#bV2|C-9oQy6}akBuB|Dq+EaHxZx>gl!_rSN?G>!pC*M-b zfT)T|3BwsVl<0!T9TBcL7-}}q5qyt-1M(AnMB*GeY4k}B$(9o`sY6Mel?qg1C}TEu zVD;|l4i5-ZGbDa3<6hnkv`%+;K%NxGdSmWo`!0dN=}O&5G}&o$kr<45p%*hI(4xQ% zlPM>yB$I)_;FB3QS8--z$v0uCCb;BrT}f2Q{k3F@F~_&1WK1fs>eAMWd**r+aPz)v zwncQGJFzsQV1qSn=j%?}+~DDc>3dDH-Hq3y@W#UR>!$Q#eyt6--Qv=0du@|}ni~nz zf$nj6Y&M}{up6|{Lc1%TO1#7Qn@VS%`a+vJQJz8$tYkkyH7Wx{Kyof)n6yQ$H-BBnsTQlG*mL8lo@ zN{j`O+wqYvGxkl#_D4usio}4@Kv%`xqyTq>sG=*c14$|;&Eat0XRJ=ec{GU*ew=1U z7^sTmG6FvUfy!miP*Js+A^9&-Ci1!wcJ3ydhe%2!Me4K;>ROw&$Fe+jR+f*kY-x1ZBkxLbc7}tbL9tsBB_47$ zHDl8fq5xhj*D(+wn2nVHLAbzRR>BN63b4TX$6~QR@*@fIqbU#w(SQR72@vSl(vWjt zfgpLWnrxCHDSH;MI-g{NlPiku|3|t+*c(HKyIK%u4X7ZOImpBku zhIzsWjKGGNFzaK(I-ibZ1f8G{>BF3l3mbffu+e9vWn9P2bA+8fXSm*1Ps>apSJ>@yhZ}qi;YMF0Ei;Fj!p**BmeDa| zj8OBC5iDQm80Jg(s+X^YN~|EUi7j8~K?dKPtd+`YK~`5LJ4R)8kU7d^ZB*t2S$&zT zoyuGwbC=0FsH_2Gjb*Yz~11s{E9;>PeTeq>^1 zc6#Fao!N=oQ~dNW+@Q1O(K|P8PFL#9p-PIn^W;ii)!*#*s`UqwL;YdNQT?@yT|f8k zz`05tI&-3;9=q~IM|IgaIWbeIzd9^0>a2t2tM|kzt&_LMhp*!*s53*CLG2=-DxQkQ zT;|{rB%UxL<6{NJrxRG8UeNhCLGLpNoX;pY1k*##XM(#K?q;DztPw4ubzaw^^(I(E zn_v)(^G3l6b!r8JSU0Z|Y>>7?+5zcWNIOB#%i9`6+dL=OL0&HyLC>5@^NmG683{@; z5}aF&fszeJ{Gt0&Pzo{}!z}!C?4RTApZ@y2g$Hg-K74NR7+WQgsQ_wZ{z4+6 z^x)3{o-nZ@*%wgqC4ALujo~$!z(P)=u%LsSMp{7+IT(d{(VBTv1SSY%`Dta=n4~FR zulQd2TreXHyfimO@PP~Yitl^PiXldM=Hde|9egax&lB-3A0>iF6e}O|&xJ%@3dTjH zHFkd`81RR9p=i!{;)khI47?DHh>8u`$DjswB|&T2m6|aSQ4(W2tinlRXkNlu@cd@J ze=!;s`V_hXCE$h&6-2KuF7Onher zR$=2^z%?nh?0JMj3CC;d(jBbtlU@3JRgh%V>}=4x>04(&*ZCIgON#-02|D| z8<`73e?9iIu>_Ykdost`@ZOxYFsII7>UgH1HNic$WZK#>+mf%4G28yw^2qW-+hbdT z{vAMXOl5^R3li`vxTIK#UQ`tdYJ!SUP!l~aW4x2jrpHe;RwSoAfsp7YkiYMdV*Z%; zK3(T2uby;5m&Ak6h0p__PCn_wd^bS6qw1v4$K1v?*m{G>nwiF9#qaz)Hz~5Y89oI3 zC!=t<6p9&<4~db0rqv+CG=2~E0G=>wU*Y6N%^3U~JK|9EpA!@xXK}#1{8)B>VpZ7hNWT zFA)Ui&P;g?O3i{8Q|YHJTRR9z8v-tYmm|HH_9C1FPz;o+5)R1&7hP6`!$HK`tF9}G zKZF+2Ccp;s-0IrA`{+vI%5!(~lc_(MN}f--Po&)^5~GRH=kCVDXvXT;9DX#E7|Pfj zvaLOBYfm~;wr(}~-0t3trJIiL*^kTi;~7`umOI@tu-lhz8QgOX%C5nTyIFSkrro{U zY|8CblYsEaS{YkoVkm2594Ba7tWLG4gf5!a`~wUZw1!!NyLy5C&~=v_P^xJ_$!gP5 zVk%zinUX$=TP{<5Ag7DVAf104w$q*xw=kI3v>^@)8MiXbI=cphUZT2*4RiXYTVv^S zwQ``cE`CCFD4swxG9MIxE~017FM$e0BOdV{7_wkw!6W!%eyS^8V}Z;{;|CK{6Cd39 zfFBv29p-1pr$=YTZ{HeGOfz?;NBODSqyrwVm}%~#(HXCf>W;z^2^BD}D|M)Fg{Q}l zSJj%*iu2Hiv<5)Ug3Xb(wk6p;YnN>8O3tSHE_y%daCwV^I18;UkHeXSVC(8%$4e}T28hsmd z_~N<|eu`l}6!pi*?_ipni$+6a2;1R1kShr2R8()(gee59A^jV`hW3|f^T=FF z#_rk}&(zg#jAhz8WUe*K)fyVIOeu7j4DDH_6zXk;lUog2tI43;*`IDXn`NNj=?!}O z)d;;EhBmvQJ!!}?a61g$dc)PEJIlcBFjx$R`mGDehV2@;Yao5>T$X`?U5VbRf;tEI z<^lL>7tSqS2iE|80Q#YY*Tw`h&kFj7HVCshkrNG~u_TmcMH7U>1_+1E3Gi{g8qh0~ z(gLyk?Ds0g#HvD+7-fxU=tF+Q9u@W`HIoTdwd-(*8q2>9)PR_W8e*&*Giyz-Tr;0B zTS>VopTkg>3_=d0TWNJgB&s@Mb=8wXbifemSnDu_W)gJ17j8-o&j&(&N#c2xQ5&k} zp+3jEt4@y=J$@hR9ef+$zc!d>=Gq^c9-IEr+`MOQPMKTN=2qF<`mE;?4JV%+J4M6E zXD26VFe#gl!$&m&X5NcMk>DKs>cg*$rH)=WWxVwn#T37iImI1-L1 zA9tvRr>FWfX|c^8L8}9_Th#J2c5L}S`#53ASR1z7d)9W@+MaPWY_%qZRLjYf>(ut* z?%l7JQ?83oM^dh9vh7;N?#$ULauqt+v5@!RMy??YBT)N;`b4fH+&~yXK(nIM<`y|1 zhC)2Q!;)K2O2gu7>T-``RfLD|J%|FpdglMKI?iyD%`!)#&1|So_H7%s@5?6!)7=-d z3=}*K(A#T(N_ZSW0KVFVZ-m!3N%))7Zw=vh%mlfiu0HxTmF}SGIl4n|rqZ3&yduAg zKsO3#!E@yJ7z+{p6cZmI&=y$qX0?@`IlVR7N`4Qgu8Ja7eN{~ncd+#liioxXjq?FU zdFAc`P8oCo-94SUeIiEKOhY~B@>>x&*^cyp1L1Pc!%*rx*7d~)T!rlrY{-qJ=hBB9 zOai*!Pa`m(POAQ*>OvfgQL&;2UCeKAkym6EOSwQ)5G8yYa5Em&KBEPaqc-~Al?&Ol=1nd_ajYhbtc zsV?QZly+T`ZI=!?p~__O!?Ov(Hjd=C@+1%+mUKu-d<*8r89ID$9I%~tjJ`K=+R zx7d}~aS_`P90)XWbYco4$0`i&sXieZg`Yxm=@rr9MqC!{U2sN z1cOCq>g#$MIOY%1+`wTj7ev;<@fiHRr3I0C8aQ(0ful-fJik=E5p_y?K07XG)7_yZdc6ZgO)MzbZ(;z@)S{LmP z?X6qFp1oVPcW0Vfx0bfgr#kvmO=ov6rJAn(%AIN&{aanCX;OAf;(_$ZWGvNsD&;!8 z{UGHUdODkO4a>IS*K*)1_-+V)heNAC`$;&s^2`TMen4<36jj5w(Uu`-x+W!;u@T#Mpi#ghRbF?4-8npiz^#5w-jVC=N zVLX=$=xsENuPG(>Iv42>jE7p7axLt%1^mPgZr_OX7tClNa1#LSbOM|au5oK>7+^v9 zI^+av?zb|KL!JY3VJkKle+WJ7|0TjN5S}Ca8le+FwHcpa_75<71;A@495m4l0EwWe zA3(w#FKz;gcLCj17fLfK|B7vKyHv%f(Ct8Rl}ZEHv3Bsbd2v_c{7onyX>+T*lF`WlcGH;Bd=vGGWMA z;rFuKnHT-3&F)UvUbO|k2QNbqp5d!iFiI2DC>?<|yP=_UR{;fRl;HLnpbij6@J5Xi z9!O7q=dH0y1o>2Dzkr9!m0wk}IRA;QA0T`)M^7}Cue`^Hy+08A(EdG%kEYQ*J$0hz zPg(ZRWc_b!ItW0?>S*3#A3sQN8LNHs{G-c>%NWGFliZ&j zOS$^C&AZO8tSQ&Ky8?K1**5fA4*mN$N`(KwC;e93`6kYGaRgJ|F2#udRufqudK?x9 zpqS?%0LOowAv9j4p(;kHN{zT0SSD0bgSBCW7-G#!VxLk8{gtB@C3PsVEX?6Qkx`Ky zOC1Qfc~wkHL5Y@A|43aUdPSvXDZ1#NqY^xpAx#M52=wHSo@gv#mWD>u6wx_F>#b^L zAEbU`zO4RUc$I8ImW8kMBlyiIt7lm@JIJsendvP5WI2x2!P)xP0L#~@Ond%++Ja%v z$;?3UCu~eSwyaduhP{>ptqR323$l)C vy>?wJ8-NpgEeE;t+b^*AWkGhLkp;I@4zwy1zbwekRU1J03}|yf)%Je@cho?4 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8284678d800d888eaeaf286e6e90e663ca2a3899 GIT binary patch literal 4304 zcmc&%O>7(25q|qeE=5wLMcVqeC>gS}awS@oT@;C3r-?14kU|%g4HPWe1;t%bl=+vp zOCe%uzy|@P0~Qeq1=hhuc~WDj2ztyR=%J^a3Q8cL#R5iC^psO+IENso&U;HP$%rnD zT)JA$&Uy5YamMz1#-!G4llJ zM6b=K`v%pHk(LBPCFU>8A&eZ^qr}!FB-^_r5wvXUDx_s=S3z)gE+R451508uM-ogy zE9Aj)qAaJfDP5LLw;YS>sclux7BZ$YPfe|v1M-Hd>2k85YMN|y5_i$mbb>Btx@0+? zj=`X;k^MuVN8fISH**;^yrqO;!j>A>wQw%8EpNo)4+{D4wwm1zr&Al@{Eohv%PuV} zE{3&~uFmIS99&8Z=TrHx3}Q+ShvVRRimKDErs_$ecnU zOPG%0w(6llR7(x|4`9BJLA#9(#$-B;SwdU3DQ}}+&p%{JOmD|HvkqHg+J-NI<8Ik5 zqHsko+=Fd9O=W>PN(-V8UcgcK2=$PA*a3Hw92i0pG6k%H^6@#~@c`*?SiXV-M2N#d z+Gp7XpNB@v7w`pWV1lvYP!BWFWhEk?0MfS6N8S&;k9`$i*=Jkk!pMHQfjHL`CFNzq zGw{*chii``l}I^ajD^a}mG=yfzvdaMd&a8Fv1ig^ff`enJIsj(VXH245*1N%ZUFNH zu(JhU>(Rzb==D_JHH#&x?CfcqVI4hVBA_y&IkP{h>T*1nO{5ex8&^#aad*(PoQ-AF zXAIS=Mm#TMDRKhX;zSQccFy}D2vMJZgue6z>b}cFV`HG3Q_sYSX96@+C(4;L0)zFy zTmv!QF=KFaPdBJ=-M3T|m;Ucc!sBp@rke0Y;7yUlS(0;bh+MEkD^t+!83kH1-XIf5 z6!@MR3D?9h)rcu>?C7ej>9{Mv+wtHxaH?(x0{s5zAzNa%?D(NEmA(>NwQ&i@vY*m- z!u&(7#DV-&iPH%jn@>A&KA@}M$r4EhHjaDCf`q*WxTdqUTAXEwvv%(wwnm#f+<*wh z%Jv;-WO21*6t)PMg2-a`!1^|?a1ZD_JkoV8dx!shu1dA@tTa9?)6it)u|67(@CY2m zcXvCr+ zcr4gWL#sI019oJ`w~74UfjmNn6{LJFfE*AAQi0+9n*?FQhJVNijyzfY!)jGL4odZ) zRK8;bhU_t4@QOn^qyniYxsjTf2i&cReyTypSD;E@k`bBPXe>G!0hv>h5FR>z1#b%#^}V;H)_FY z>-`3hUn$na;j^eGUP43T2WLE+WF@`Bi`yZt=`*atfM0dX*m=#CVb_tuJ%oS>en7NN zAF#RY&43`C;9$%4UTw0|C#tq5wPusA!ov*P2M^(#NA_76RGBMrRa$m;&LR9E{MrTO zL;f{(5;}JR-rZWW#2>sZ< z|0)JQ{m-rBZ-a#0y_Ib3QuI!1p=?eMSt+@A9-8pBvr6bDv?UL9Yzhy28RlY%5R!#D zAmm8rk`Q1`K~XmfNlelW4Ze5^I7zUeLI7gAXjw=$p{Ox=!fM251U60Fkhoo(?17u^ zw09rGw0{Bt1o?yeePzLL`#)X-jGVZonp*-d-n-W9nmKXL)Z8;xS8%ZGY9;q3_WE3l z4Ftr-9!szn+;^Y)Cr|v7)$m_`R9{*?_OI0aD>eTLfn{L$G%yPYIS$N0J}lpcOj%hy z^^Bi*#tr|>Cl~6{jn5LF=f2QiaIClgYXqc0i39nE53Zf~CThM3s6h5yE!+}7(Y(vJ z293aly(Pmp1mz}$m&9Ty!%##DlG>Z(d8obnWI2;l3TeW7WcmF_tRP%F*sN+#GYtf6o4nv)c=wl7pwZtHy?QWPU3xlCq^`C}hv?Nt z|2bjg;C}V`CsOUwQhgj&gpSX~=;yoS@_AvnDl`y$UV~5rQ)NY@KGUJ^LX>bg~G=7X2 lsfK1>^?rF~$Uxy*ueafNmto+hz3IXD3p(=kE5_+@{|f}fl)nG~ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a6d2422b0fa778e5b5e85cbea5cd2b47cc91541 GIT binary patch literal 5550 zcma)AU2Gf25#A$@6e&~G4<*^MEc+}wk{DYOY}u`2yG~t6u~isUV9`xW$E8lZ<&Q+( zF?&ZjQYlm@T!1MIR0#@L1@yp&!c`Cy@M9hdv}j-QNErk|9AH2|k%zn#G@JlMUecL8 z{_4l=(wg1dotd4Po&9##e{O4QB~VWO^=0gQ4>+zf42c3!?24Flq?{pVswLDS5F4SwqN}P*aXb|W`3(N75^~$fEuuId5vAp+ z4MyOvGSaFDbHwlZ8b1Smo9UWO8wpL7lcwXI3XQK(3G{pK$Z9Mj$LKqWq(PbKd6#Jm z2{krn$OhHl0H*u$=<3bU(1SPcuaAEJ;9ULlm(~FGz8%4Ns>M-hyqbqeo)AjV&yY*`qBf=Fk@yt8KdbeHjvUD6 z+Q;Wn+_a5)X?xUG*9bFoz`U(6Unkeo0dpMLC))*lJ{a);UpMVh+78s@1x?<4vb~4$ zw*!CsKK`SJ@}vHaef-B15!SfNY@3YBY>pbZbd<%Sy!`uZ^GFibHXOAU*2$=mVQL^! z%Ml2qz4G^J9U4!F0km2cYgv{h;hKyhz!ysKlEtrTh7;pRwV#khXSHp3t1UvBvlnFR znN7eGTOjCnvliet-BZ)S>B-zIqCQ;rykWy)}`nJq~z7K1c3-7#w1fi|SB zD;!qk6b*+>Cyr7E=`HFs8Ra56`XEW)MaJV=ijFTT<7uWX(ukptYpLb%f*e`Oq{o-3 zx;&mtER3gDjJT#wj9s`et|tsSnuc-MCHiSb7Cb zNvH`U9A52hTAQ(I|9LP*zW`*NyyzV)_MXp)kB^jkkMpX3C?^(O$6oXf6nlsN;@auG zQ0%>cBRTlJ0wEHqEe?F3W4I)*Mu7ZZiwME~R0#O(Jl3oY#2Bv9rvmGSN=M}q10*A+ zgHdp7)z|C=@4Set9Y7jgKnvMX=xnkO6>S{= z*E0(cz&C-vF{yhj3=YQ=v3Qv0gr+7}R?jqhb0E_#RMigzGpplqw9qrOEpA74ycdh! zi#aXsO>i)@)hZ6nPL@vuA~T zEjm?hth08E-)|dE+hz>{a=?9{kz-BFig~e7OSRo>vF^&koneU&GMgfT++kLTduM%o zKZ|MS$ovo-ZIvqJJt`?Qnoy}^#2E#;lBT+(MI~G*{c4R*PNw7X0yVBmRE;GQdR(gZ z=u-7oRAWv6nlM$i?p#-;rcViR3{Er3K=2>yqyPNdgPL4QW=oX86mZhP5d=q^M3Xv| z?pJPGd)R|<3cAx7LxMDqQYJ-YRa!t#v`j2+NQNfC_A%syD#?;gS;F${p~e&)yiO)k zaJVV8*%wwM%K&{$3dR$<6wRn`>T0S45=%O&v$7OiPhuZvG2*gOpTwx?N>W)jBn`rP zi1TC8O;Cd7C1M#Zql0}PWN@4F;8*OZsgoI%7)>YT2vuNZ&>aX)l1e%p%~X>0NFq@W z>{w0Ca)aN2BsrZ~MB31$hw(%tE-9L%YKD}7U{6=px4uqweSxpPhr)OL zI>Te!?=an%DKca7irGIC2u|M(+zigl25#O7zc+h#YA*cl%^-G~Es$jj%xpU8hX!0B z%$9`CbI9-Dm|?oC=u*XW@Zg#vR;D`%p$wxnI-(cPTk9-1UIC4!5Qn+!>d1lcascNY z(5XKGvQEA|PPzv^zV?S}IoG$Xr1Sij9TU$xCZ0|1bX+NRT**0hyZg$d)jiBfZmQ(z z{{8IlW;dtuzWiX`w>7il87g{)3Z9{|hx83>-rbzroZE8eW=g&jU;55I_nqDG4HbPu zWg@hl-hS)Z!{_I26wci!osc%%Rb6!*pk}xIXs-P=__q8%@l6rdY>I8oZZsg(UPL<> z_Y`|GeykA#PnSyBs{;`6-unP6YvP(C>rlicj-?FI%CQPEYk-Msw#Pmgb5_Q#XT_|2 ziDMqSl(p#>0m%+Tz%1ZpR%}GeX3GFi50Qj-VH0-43)2Nw{0wFrI7|j-Q{1ng4N$aI zz7MKv`|K`%Ug)qdBU*X|;d6c-Flm0?0tk4000_a(hJz1!VB0os_R5B)J&^m0yoau z$N)(<=O$-n8m2!Fh-^pzp^*$@aJK}vx$l54h+j2*^YeG$lu$2NkGJ{xy4mkAOd(T< zaIm?-aO?Btb&fm10HDSMau+BvbVA>hzUZ&v>Q%RK4R|lF=WzVn*;`$3903}^D zC@FRJ=A5PWj-2?ydu-G9k@i^o(mVLvJD8u?@eUWg!#Vp`Cx^G~e^j^BGHG|8>?ecmw`E)&;fM8V;v4C6mMl zs3#o$AR{L$&(W^A+p~9rllOw*;O)E9@Ns8~VVq4dFdLX=z0hQM#WP*-f=p9ptS|&C zxJ??2oy5^WBnSPp6f_%BjHzV ze5COuW^QaD!S|#71#If|+HbdSpdj|{UY;yozFj7w<02>d0I$9X*1H;79>FmR0N+HM z#OW>D1V{H~Jg;x1aJaipUfN;!(a$*p1m9vE+#JbIY;jG4$ZC-W*1@t9dN=RoFK_z` zXC{gRmpI$!C+ge{t*YAojV$)|*GYrQepKnpJ8;mqmw<+@vdsqLm$!SKxeNZcif68t z33Pm(;Z>cW%C1N6b8bjrlsn}(w(Z!a&wf!DyHOl@yG)?t?=!rrlbRe1mVY8}!LyEI z%|1fM=RIWtRh`rXn|k@d$(PoDgyD;ijRG;9aKnYW6Hl^ARv}*KJSnaJe`$$msdOSq z*(H?X8Pc3J-?^?^*?xoF0~SacqHh5y+XX==UnN5Ox)*;X;$G*!5*aKU^lz7p7Y_Qj pdvauRVQaA@UU_M^ow9vHfD}l7xphep!106WOWyy@A)`DT{{@3#HxB>+ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8008e24bc5ff1457382dc2fc682f17d5a31cab31 GIT binary patch literal 4001 zcmb_e&2JmW6`x&xh$bniu`5K z5@%=Lym{~UK45;<}gR|*cx+mC*^4^eNESB zp7v6$^jcbDI(wfvnFq|tKG7L_hF|=wWgKmlRi?hAW&KMHV?~QfHv-4?H&&%3`3IKW zbbWr)wIz0ngQeQCV;S){1mt7=h;g>2Ic!aLw6&C@^R$z4(v37Aq@l9tWbw{AQ+&!v z@hQ-ASm)GScTQn`3iEtJck-AQcyX{QJV-x*^k+l8Ytv2|@Ta5G#}Qk92Bf@!=eiM+ zB}OYY#gKuq#f970HY{U(8yg|N)8W3&jYc3qYg^pN z!{L(K5~l>Wxx2-~D~2nLyRPRM4bB}yHZ3{e4h#;h&}mCBDp`}TtS!s+taXoHF#?~* zr*PUbq}$?E<2KYy9MBF3PBZOH`>CAriBYexoG6PH}eD?zKbudm#WMO=doE@XxZLo5{s zF%jf5*@WTbe~)ii-ehEyD2nCqx#U*i6wBDMJl8Q0C2q6>;Hjt}!ZiYp=E7)Np|Q?6 z+~IIvx($~*)fm|aw-Q(bT)yMl$PQ~R1n=(i#smW3lzDOs|am)7m5M%s5mkz3HZRRw^mkuwUT%? z4)~a3|Cdh@BX1P@qpFO_GF2`fmFLKslT0}-%SVnKu`PDmNaW3=ww06kJ=^Ob$;h+E z#U-bVh6q{|g%HUipaFHLNC+G%#;>ZQksh|9tl+XE{JK4C#%OD)!SD4yF?qyxwOwWo zyPZQTYSHRZtKnIhP3VkmCcT(}Ka%~9L5?!2aYTif zR~2HEjeBP_?UIA;`#(pcuy2 z%~~^P@!F_MzB!=wfLe?KnE91wY^QST;G+Zxl=xVMOBl{9}%`XhCOyzn%_@9EF7L+ z*iZLz<>dWEd8t>vN~HP2(plp8qI9lTTKY8iqO{yAEvqxR;-B(=$p60hu(+@OUPB_Y zhcU#0?57-ieF?)OCNU<@=8zAu9_AIr@Tpd>q*PP{K0}zG)Oo6j5?&!4GQ_utJcnUt z{sb#k9DYvRXE5xsF18Ff{KYzG3IEXhyoE6RHhF2$vc&- zpsH5U9Se4mXwc3oX%%sC4)Z9lidPAY@~WDZxR3zS6|FKN%KQADG}X?|xf2p&w0#Tb z!arizWBn{Eo&ET?2j_ZowdY!I?z{W>!@_K@Q2y&~Z(;dgh2?Hx`Ec>V{>@%-;c)Td z-!6Bn@Aejd`gy*$_zOjRIrnC7?yXPK|0q1K_b%OdF?Zwh%@=dOhM4lgUw(XWzgPbL z^UYrQdR$DoVmDVtp*_CyB4@( zsac|kRmhKGomUvthi@D`bI{RtF8?>cCounpP*bl^s2~3B@elql$a5aPdOK*t;yaLi z)X(B7h$r^iGqH<_O7pJgaugnPQRZ-rgJFDZ-y;3yII~~g# z+%i+9=>)cE3QBn~PXjf;D1~oO@fIzY)H0MpT&7tLS52D>xvd~RWlCS%Ij4x7hDH3s z9)`W)Utj-bCf8>)T$#$ub<4|rhWB$vy^ap2wM@0oCWmYxV?4gmXLudNFEt+<&T5$p z2di}M!qFiM+9$`TiZjcyGksmlEIn5HOLR0IUZt@0;6t@JqQ(Z3nP@d{;1!i@l{Vvd zCO*NXa%q&|ey0`2ok%(8dpI(3+Sj?C#F2Sd{16*dm|+7$Kc#6}{~e~y?#^mBeA0J*3?W+?u6psG@1KjmK literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d3bd05e56438eb1736b6fc3933edb9b641d13ad GIT binary patch literal 957 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c658c0df13fe701e339eca22d447e04714d1bac GIT binary patch literal 4908 zcmbtXU2GHC6~5!YjO}rp{~t)=!7KqUBqj-gY{f1F62L$lAVFGr+m0O1b>iSZ?o8;$ z3K9=U4JZ}Xb4BOy`sX`gCDAF6$6&%I-hZ4$N% zy&j*r_nvdl{W<4+_snlS9v6Z#@Xf2m$6kc~K^xU#uT);&g33cABbiI06c^!AmWYKz zvPHHgttnf?#_G1DJ>`fvSlym%O7Rgs<%~E}u852EIg;*_5D`+Ih$qz?X-;_~UJhB% zc_cU8MKX_VkF5wjgTGNCEwXbC1zg|JX27EJvspEfNk@~q{dyWI-*L2`(>-UGqGS%M zS4d_76X<9=n~@Xg#W^*q;+be{DUrqjtKNJ$nqFLqF5+{Eq>70yR9H+*7wG8fpny$x zUx-L^Gt$iL)bwS&Ei^YfdUSO3Ydp+j3O49 zi&(L3xynazPPSm1Y?WQPCgE$XHZjOE`u7Vln6%~AQ1%}hP2nNw)0?T41Evgx& zDk0;vnuxE8>JnC9bakR(#?{?Pa1tqQc!+~wb%mtEF^hSi2vHkR7k&L0dVj?|L@IT| zN@+a(d>yAMfzTTFJMJ-Xo|#+@Euu9fnX{~+Witp=zBaPvA2}FHJ_R{*Ox{tGtJPEp z=xR}0sx^cf=WlFru$Fhy+x8B6ci$HSAgYD!>&QFK-}QgbFH|+W*Zg~`qyN{r$`-J4 zb5&ZVHaG3VTBe0me^m;hW%GPNzP;MNhVmWNdi}f60|9ms#HlqL;7BWo5$Z32PTj7o zWB~$sNlK&>swC-7BiWyn#l101~&3Qx~XOLL)_E0;s(Leo>a10oiuWzs~oxhbKC zr}GyluS`-|;-O8)rP*uKlVL(Pt9zpm)VDC`mSUNew5qpCMxEVT{HqI zOcUxAx^rrJe){ZuD12UbND4)C-A*8KRX}u`f|GH!Ufn54v1C+HBuSwzCW?2ymx4=~ z6b>%SL4cTL02U>fN!^kbqOlt*+2Adlz7_4p-0gD6o}w2-JVyK`(gEy{3((=X}pL z-;@8W!1omS5se=y@FS((z3aA(=91g1x%d7$tqq(ix=)pn#d(n{2`wAp=fb{iVc)m@ zW555b=%3X5lSSc-CY&hmw4fU>%Qxrupz9o-)lG<6f*%38q{j^ z|N146_kq|3sZ#2-Ho_(Zr+Iy|U^W4n zwP?Js!UEC~o)7SZ1~3sRp%4b4#o|P_CUKhVrQLm$^aBZ4$v#@Aa)e?-)yv6#+9LwV zb?xv(7AL2Hrz`=fx#0uPea}7bhIidt>h0eepw4EH^-#&Te;wSXuOxInn7uz+6#6xx zzrdasK7an$Z$2sdMm684Veowi41@aznZXOZ4<7OXOx9pqYG-C!if<3;^#X6B%%P`T z_$kMB3NN}zg^G)8W4chm2Pqv*;avZY9oDl$bSy=rJLsjiUGp9&@CV*;EhGTL0V?T{ zlfzVB-CFo6FzpiaRn`n0Q@4h}0zdczYv=*-#`7SM3Z^0XW1zkG)%m~YI==ensYQ@u zg?tFF9V=^I#412*I!=?D7|!{2oKvH~RZyZ(=evVS-Fvm}p@R3sy1K4@eXPKrV9V9{ zg;f<0TP3^aK2P9WVBs7D)?aVKtyVKA^!)L*b>(x;mDJe0CWKHVlIe7_%EN zHbS*=F$4C5YU)8RcZDvLen3plqAS!;i(qp##U^xQYL?Hl`gvgkXm`HpW2rFP$!C$;_K+wJ3p z_VLoeBby_A=qFMp~XnAq-|D0EJ|@DFSL6Pr_CTq+G6e?Bz3Jv3V!x~dIb-JH@o zJ}eEN(1uUb>fzE}-_}nG9S7>4vJ-WERPLlZ6H!aYMy|m3vWN{>2+b42klaC5N8u8( zI+rA+GV)52)&)trxe`rQI8BlyXJV2>SfXbO&xWU2KEtjOorfd`@{SMU0~b~GSGL&fd>K(9pyN}VHhuvtYVTwuA7-z=%-6bht%*%`F#X#|8*((4 zEu4Mu(NbR7N`a5q!E37Il@-``KV<@7NJI4CqeJ(|k|CrW)tc;-J4}I+QBM7rLJFsw|Rd=YXS%^AjC&L(?%AIKBsf2>5 z-d6dVrV&<+Op1HD9j8}P3UdMm07lMj$4U%71So#7?4ITHESG2VK1IeFXzKAjf70-< zPe>S=)UHYqNZHD9TzLX<`wPgw^LdF56&jxs8Z9(FCG>IO?N8Za=PYIPex&7NZciEQ QB%8Ni(cXXU!eU$gFYJypF#rGn literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0e0931eb67ec851745a990a7c0adf79bf298afa GIT binary patch literal 12647 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f0e11b51dc6ac164369fbdc412c8a26b06e2178 GIT binary patch literal 4734 zcmb_gO>7&-6`m!z)Ka3fluU>Eacnw@T+^vZ$Wr9Ozmg@zmTOVgpBoTP7Zi6TQRZJ~ zmxe^ptx>or9SDdJxUdchz>{mkEs#SG3eW<|&FG~hv4DsLgbFQk@TH*Y6lim4-^`NK zu4SWc(9!7a%)EJT-oAPB&0GGuxw#QRIsE(Gg&*?>{grfTg{?MTWT5d7iAZE(D9(f! z28kBY8neW$AuDa$VzxLNVriR=+2akNhBz1EXx|=l#2Z76wA~PEiaSG2+U8=-@s>~v zgDmJW5*_!D*eE$4SrK{)|9T1WV$(G8IiHiRkI~rKL^PRr&gi|4(b?gv*GHnVf}?Y3 z1vo>AaBM}6$}qKUI4MRG3)4zik;cQ3#b`qESu|(0NryG(b)1~5O#&G=RXChXDAKZG z(Dl}MI;KP~ttis)Vi-?L3XzjANVHH1VR~E`pBNdv7SYYtsjb?1u?CG_g8w8GVnh_O zh>bZk&xqE0&XBd*wn5t_u_7bc=Pe?8&-Mspo>mng6l$pR?E83}*dRHiMyYAu(ovTH zP0o3n$lbGrnxWkSS{=~lb7+|fxxlAQS`)Qhe-+J+B_)j$!3gnft&n{n|1bUqGkx=s;Qko32ptkVT}`nXdF(D)MMI3_Qp9TW|5 zD1=EMW+aTsf|@I$hg5x7W3ePl$`gxblcm_a<`9HPEG)}{AX`Add-vOLU@;k&0!v~b zg_BECM3Do@_-$b>9J!TF1#U};+ksegE|6ML7L$oSe{XL1ma9%CJj2)IddG-1e2u|D%9GT4XQkyg<*<=VQArX#CnRcUbM$RcB)&S%# z+TlI9 z_058L#5(%&e*yXs!B)b6UhZ11qMtJ`QilqC#0V={<`HoBz+?oiF&~9)!U}gRcdSNj zd9upBlC_%U@7S_7r4AtoE!83H7PT6m0i9%@Xvq`n_Z5-YT-O2ZIt*nkj{xeP*5M8y z(!D3XR0ltRF=uU@L5aV=WK(mESGDPYNlQzO`;wMFy`-fMqE#(_FnNm{j(x=pop;!* zMYL3l7$RTa`|l#Z#;kI0U;_j1 zVa-5dM4w>ZFAP`fce3h#)ChLo%rc^F??N~FMYL3XS&tRdeiPK9rMeTBO>azqZC^3( zBlg2pNnmeZG0y|N1czw3MPnGZnk;!`bs$z~j*-!s(czh~;AM?pNGgJqNTwGS1u?9I zwHB%_nV64?QX(R0ZPQmKre=m`XM~w6Q=`ziHsZ5Wq{r_PJDI3vBmMxeujU?f365AI zfGIM8AulcZMb!uWjLUcz5Yx`UsQhO*Mt4z}Kd}1K0`Jo+^iSSBcEN^>gq3b^?xx_>^h@%oylD*^Ie~3)g!$nzPG^lmR;@# zO2&)v$l+G$@x;(`C`{awd>*Z`qk{lM{55MpMlyNs{2O4 zedAv{Z};TqKD!CY6Ti+tTD8-}ub%n*klGO_H3bSy0lF9OZt?vkzQ4#1sQf?$S)2R8 zr(3S>lB>Ju>QP-ik8SGlizU~^g6rbfbsz1(re+FU$NsyWoF96%u0!L$U9I^#?84-F zF$2IIaG+OF8E@-?nxxf2hd&Ro-9V{M6|_3ns`H^tF;t2a=Hq0^o!YPm1XnX*&hs zC+ToZ=g>r)=9?M^5C|U}%8F)%w8(%{g2m9=3CRHvj%(U!l8CeY?McU|{1A zeY{M949f=cEHOOr288Yt^+C|*((KAg3VsK`)Xgq}r^c^2{R6K}2VDy5as3Ac`Z=hv zNFxN8bE0}8;y;CsP YihYn_z}2s&g|_3nl=aPPCeRJ|4-e1_=l}o! literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e5e10dd3417e3e54b05aeb93c3932285a0fe2ab GIT binary patch literal 12090 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 PlQ&Mp@?Zag$$b0+UvG-H literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..413764ca3a7d325cd948dd8a07e9866d1a8a4684 GIT binary patch literal 27212 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d882695c38628746a0eaef281a00ba25bd7d081 GIT binary patch literal 1683 zcma)6&2QX96rb_eI_Yj&0%WMewII;U7F&;lZ&+pCqp82U( z8%HqS`Q>>14+EjU#7{o-6K3=UFi((&JRG19+ZYR836xN^RmrP?7V5Sxc`Y!)ie14- zL3fa+_mF2$eOELiy(`Zczrvgj7aWmdWyGw{Cyx=0?Rg z_h57ne!hX2D6+AKY{fJBXbpR6uWGAQ^Dx!d6i@4EyCAnGcFJKJr9_>s>EVZtI43ez!H z){-P46TzobUZLj15k=pEtvaI#(podWP8rKoTK$nN0#st0D|Y8i|~cZqDr>q z3p0hNAhQDa4hU2&e};;tPYu!QNEI0qLj~*gAKf8>&lx#Z0qWh8;Ltb~yK*KWxsq5} zgT!S%q<1147i1?E4n%fFCbKh>i2E2CODrk+m0~wO852`bh@Fx+gd6cgcrQ^1FFX-K^Hd?6 z*Uc<#B3%tPC1nT`f`i!Kfv?3eaEGP{VR6zBDg;J!AsC4L7x#QH6}tgW6K+atV5FCJWpZA^5E7HRZ*C@#>*01|_i?oZxU*V8YYhiU zY})5eMRlKc2Y(u#Orr)|m(YklXJc;Mz8Xz2t{b$O-YB%Dw*1eabxs$l#CK{X+{Eo+ zj~WCfvYVNF5sb!a@q%9TjzRN@CJ=s!a}`d}^BTu3*qicCXuZ%bsvQM>Lzo@9(R|?S z(k{BS;Wl_4ix~gfX*>sQIp~=tglDDafO8Y5N#Hx(HQXQL{x6}eRe#Z#CSC3BPX{m2 zX^cv)q`et~HS#i9iu`v}{?OQmoAapz$LK=mMF|j+tM$tW|FGDxV?{pNd z36*S40C7&AE-L%XEGMaV@q*ACw|4_~n=0-W4TA(cnjA);96VZ9Rd`zV< zl^0BVhtqBJ{#45nPSGQbBx=7>xgi_`e$BLl8o5ZdQd^@ollv>UxQ?Dh+R zJ;F|qI~)u^+fHhoJ2;NfANMtk1sdmxjxb}d#thstR?W=c_ZVk1J|~bG?k%)7(oTkt zFfyG}LLnQ05rUNmwm@HGDF05=9X z2mFJN_!y`1aP1Ahk2{q6nWi1rZBAezr=Kx?0AvpCLbPj?cWF#BGO^kmwef)#U9|oy z(*8j&S|N=O@{JkYh^`2RqEQ;vSR1SHHpY(}G!*Kvw$IPd@#a3GHk-AAq;8{?aH>tO zo<=fPw>;FM7)vK6@CdE~+-|r!!i2bn+9+Gz4RfO%yqt5VKU!-^5QxIW@DYbgCA`PM zPW!$^zHN|-#>DN0mWBJJl=oU@whMa^qm|l1gUX=Y1;(ch$YS#`DA z_d*$AKnT%T-Q&SV^s`f6(~=W72y)w?kyg#97RyjI{!RvPlnbLa#;IT}`dWG$ZK*B0 zf`q?vSJZyB$0+jEiDob(pN;0al0m?eD6a+im%u}foYIY+M{$NW1V$8o z@`h^)0?}}%)M(8Kd@5{=dr&Ut6qTd|^4Rxd;7<&%>(=h7^-rR-f?;4JDb#-*3T!5!97i-eJ~!)!~F&A1lks-0%$|fGQ_C}H(bQ$Zf%s1 z)~iwgH#r+~LHZCath<=NMvUKmz-q?1@>P}3Zi~VxDug>m<2{fRxSRQ#>oL|<%MbjU zQ#SXK%c;6)C*g*gk=fi=D33MmNxMz)Jbr=8lO!*o@2KFYm=zV(D=-q&hoMU zSDM!FPtdMAO^utTu|DpRg+}y@L2WGa4_b1#-^u@rmQngR(4t##bKU(BxKj3Au3Ly+ z2We`C4l#6rzypovHL_xy#%%|3!M;mF8Z{wWf~&zE&pu(T(8KUoH2%aLO>`E~#Jcy) zy{Y>H`KL5ynYIC~2}WDE39hbI+^U9;a5`btOTgoSTMCUx9U_`m_deX~xL;{3Q0uKW zSo+Y&X9=7o>PtJen2~v<|DtUq)s(9vXrnPwI`sn?fYHVqv4hF#t|T>DVk(meUj)_=|VO#kuL?;NB0zPB&6}}Gf3lQxLSt)Yvf;MlyDjqaM2)lU())M*mxb| zE23$rY?Ho9`GoFXv|EM`(Krh7NNuCE6WaSi1|xTHIt6Wv=T-$RH{2$)+zjRNW|t3} zN7dLUua*FKzf%tav)xcB{+6NjB2bb1&y-WK*2ZbNwYC6{34@|t^y>3c5N*15?Jx)R zgw94j9U##VxauG~gdfNs6!J-bWaF|Y^R4i^v}hO)3kQx<{^K= z9W>(pA(cjOwSsaqS?#`BPol5TYlP9)pf5mv04YX3T?o-f(ip=(C7+AbQg?9AMs=h| zbx*sxRo;z}LF;ie{=U zCx6h~2UfUY+s}MMV;olg>7UG}=srmsIz0C6(j1|IcgRX=0CclXMb&bnThlQUg zAE4aHMXbYUYSnez=K`J&vQfHScpT&Am*e3(s$G znqE2sWKI|vEx_2LafC{Hr$2!c@OQ@DPv;=9JvO<-SKRncxN2q;L~E>3R9I$@(Ofk$ zynwX6^i|-8R34~h6IK~CjzD^Pt>J!ln&_i3kjVld6G^pjT4DH)R@m*W+ppHpm4wR( z-z9!Mnon=9XSsD9}B0YiFvsR zk}L>B9|T&|7`LPg8>kx#_rT-nC*2_Qp`4ZRS+401=~#?c)fTe*q0?mC_0n97cMl_i&5xUmjcRs#8m+3^DCG2vk<*#z;m>Tq=gVK@QH#GNW@)?bc@7imSFB9~l?6`G-^LTyUH?0%ga`K;>o0MqY zaEfliJ;TN#kYVmQtKHg|ao3Dv8a;zbbO-o`?kNJ_X{>f?Omrz58JrT}CeaZ5%ujKJuuG10Vlf%7>1Uczv32@RVA2kSC?JF#aR|nUKod4?&g@XyH1G zaQc&{Fg!q__oPFO%uV2P;Fh?hG4j(JAsoRtCTx|~wM=8_ap5cXH`yC;mfm)0K8@Ct z^V+R1&&{3c`3RMAT5raeMz;6xTH0+PTsi{FKstvs`hw^d>1K^DIW2;=8TbdaDrz%a z#7(%Fr0#I~nr>c=Pe5MhsvT|_TfRzQ8k1K;E&4SKiheh34q8XFaUfkiQikIwa$qnk_G)E%?MinY; zUGZ0HV+p)u%WG!*qt@L^_?*TFp^z|9V-)U(Tkg`8yh!DG7#S6(yx7%M0O^3%Rd@@euv0st zlW?EJEo|C5c8ibkt2@}h+7}p$Oe-d&0@cFY4{@-^$O+_cI{o7Go%@?bsu@U5Qj?wDaCNy%E5!Jd!f@#vqDP2kazimp_CR|d zZI#nrxRxB$G2<<#w}ozuC-98on_J&E&Cej8P?;p{$69sWPn~9Hd?CyvpHFy?{BoWf z2#er0P?^qiUhnhI7~cw8%&oyyZZAj+r`>8@cu6N6WskE?O(>@$^?}na@{f5*jFK)O$N0Nji`*v=^s?051qaP z$xC25fpG@4H0TDY=QZ9kZ5cxi-P&Q?-njLA`@BSX8ODyVVDyH@Go(Hw^+iyLnyQth za+b9^x|!@z-6fuL+DrL+)BZ*~0=LNNHusM#GXpJ&kWX5Vp;3mXrZN|Im1SNJwdhkL zuLel;mQw}(rhxRZ)=KFeQrFBVMyiZKrKSDgQit85Fem&AFrwS7ItJr?c0Uq!+2{`r zj$l;NT`RnzyTR!rdgnoI^8BT>%EUb*(=HL{W%GDuw717F-H4%+L_bk`2%HCGD#ky$ zAJQus(&!f^|1skY;b#K%f!Cq^%SIFX{-oPfn5tHZ$%6EHtGy|-XZNu8v<#7%AAZWvGNUgzo+ zjL)3jCi;}HnDM8b#sGgzc|MglgM|%Qgbzj7t4l+eJ zE%b7Ul{8-Gw3FI)j4V!X5*VuyOY|>|4@pfj@@va{AZ&E^Q`P3e4aJ?t^P9p{w0t0A zK|YjrHnOdoECO-|?F8Bm-PWNNt@R4jl-BX|cMup9(rC5DZ$Tg`;dGc(V#@Qqgu|T* zV+^F1Unqi`N%y#Y3lV+F^Y~czB7u)Mc)&{v0CUSa( z=rY{{x|Pt*1%YU#T2lVz6YZms#_22Wui9viK~HGhw%cT04zgQY`o8e8L5qaJ8WVu8 zxPwK~`yh4EelVzA+|ttgHvbU#Pp71D8=1Q+t^v|oEni5Z>72epZy>!prZt1hDosx` zjnI@=i;mJgS6+XWNCV5b0g}2bQu)D_| z>q-6V)Pc%YDv!8IZMP|YyjLcAh)OH8SWiEn@5z1A-SoUS?yr@HWO#Qk@7SfJ=$H(zNsL>I03Uz%zXY z>oD}4S|`RcvGyP1Go3!5H%s?L;2mmpjV$g|6s{tvL~2=`)|gQrql?hSZnGJB!=P$t z_t72$e+^RD!+V~;lxiD{%qeUn)emGo?p4osCzDOx{XvZi^p?Ab@gQl`{&PC&wB6>F zoSrk|zS}sAamTbKW)$FMAomxYh62AL>?it#MltTkNegMrhr1dYQ3LPB4JsEk9G*i&iZK z(m-vo?jln2FiL1N1L++0jrKCMPpz-ov-Enx4aS&+dyj*uK0+^r=N65`$PO~hO}>PC z!~;0${?fabYZ}vd9!8+8#+iVNX5hYJMiIlyNuPr|OQi+eJagakEOVK=#Gut`-}6`8 z2e!87*4%D;g_ni3-h+!88Og_BRL0HCOEv#9)IfSkbbX`5rU0oGE-dQE#soIXfsEm$ zxM?lu#c-1JIS%sIWl)nWjjP{&H zc^`-ZME9BYu3LM6c1)U$(<)BwoJzvo&>fGvm(*B|SbFo+>Z#o|Xep^Tfd@Girn1)U zzK?MVWHxXFvR~s?CXo+rhjHj(|KpJCOMcggYKZGG5@u(!T`6coNJeh}q z7PTa`#l7sO@|*5qv}HW^B$WX7X%1fXN@Wc*qRnVqO?%x-m0cTX zP1`5jK`W^CqI9R>_uzhu3kFqilUWJ;WXrOyq(gXVq63tFkQRe$5>%o$)fVBdMf;I_ zZ?1l``CD+4q_?HjKsE^(*f$~W4i{Tf z_lm|~jSd_vc0;wLed!%iO9t1A`+C4tr2o2uA4r{-j?gV@^Dm{j&}s{F<35d{7G34) z8IUACM?G-AcZuzZ&Xdk?8&yG`Bi|_Q{)8iHd91o8EE7#6^#NMvQ1e?<_$}9#1u4Hn zCBN_~(YA2C?b}VQ23J{Z*_YE_$rr?}W$C;GDyt=ctAm?a?Msj4Ez>RR(Tl?q3)^K!SSs#`GxK3LVY$pH*Xz zx}iSyNGJ>mj3~Us;h#>Z{0!IEpuXW0?bgU49U|Ou2Zzy0I-OOkAbjH@@^Wy~9dwm8 z^Q1>e)0_JwMs3XM{My@e@g> zzDxE~X+&VMk>yQ0p!N;MIVOvvwb4jQs-?6Ofp2v;aBy4gX|>vFE7@qy!3nfoy2~`C z*r+00O5HCEnqznwxJ1E0G|M$z4+2q9rxolT6uJVx>CryMP0M{Ro||*$FDgvIlTS7-EIe!n^eD@|PZX7=idsrPaQ|?S`9^ zd|BZmkl%IZSal7(T@1YeH&Sf`foV41=d@DoQ`7c>JW~7GU2UcpUwF-+pPed!q#}PR ztQGBaO|N0p)mTU6AnvaiyC|>LEgx_ivf8)g@0)fQw>d}#kZED*=p4u)! z70+b}^u;|7Je!SH1`X$Vk=ii0Y;bpUk292(e2WmGw)CDOKZ~KcXxEJVPb~pjZWorv zjPG@S(oN3kSl#!De&=*hxMyTTrxtEwChp%D{eoT;oCQ6@i)rjM<3npL(wL0)oIyu; zc@i!Y-1lZ2)xBz&)xvnSsbN|)4fiEdDRFC|)h93+cf5UT;SS}XFYs-9yg?-gS_8NN zVWViS?gGyvh3-zLCiH%Fs$=PfM&^S{>7HA`#j{`nr``0*8F^0Vpz*-)?YQZKzvwaU zEba?Xjz#MZvL0kKFAez{PQH@HAmLr%A^GZXe={@>_Z^1r6Mfr)y`28>6vi1o-YKDJ zNkSSO*6l)|uE#S_w=}83u205LiIq8LL(`!#fcB4KJVZk_V$R`GLBliGD|P4BT&2(g+<1EP!j|R3dB?wIQ%Z zZ9VQ)TeiV1?R(>zZZ^ww)h$P5w(dtxjWkkvMop#J-9{eD*{Qt3^Yjp+8dSDRQ&^@e zNHes@aGhOPO#*-E?g}CL7o(bPOW=yQ?=hK3?J96p;4gVeLEs5qN~t{y+&h4y->9Sm zc|zF3%PO^B;Z9=oBY)n7WtB#8u3YB}AR~k?Kt^e_B04p08Q{md19|C!(T2ZlYPVe7 z7PzNy_uyt^vXSoZrWGOZwPg}G#l)pduHgQW%YIHe2c(MbpVDjw9oPNc>7L;Q%~&P$ zHX~jLQCY(qhe6T1PEVNI$1A#w{9=asO8fc}T(7&7``%6&gyCUYlm&Mz(egq}@DiO+ zdqKL#@C97Gz+Wd$t8w)$e+PB*6CG+~N{yQ!dCkqqZUwmf1U3m*Kni(d+jH=`88f8W z37iMspixVsBb6HF-p74Tw~0nyDm7j423sCt;~TUkhQDWSO?snnpVxh$HX9@n(K13= zD)|gQ7UZMnEWM3DCmYQ&t)IEi;=XEbHB#$zO9~YXe_w4cFWXG}%-jnGjUn|8l^jBD zxb8+Sg?lJ`!^U;ELgdH#Y<(cTO8FDR|1zjB2Xly~A@H3LhmVzf4`hS1hKSq0<~&uP_q8TpKnCxlz%FA*p!6afAN_-Wmq24yAs zH*5bmmDac-#K=P)Ds1GoilGFxWD zxD5OP+(XJUb-$9KI^1;AE^+Wf92o9PdNY~q z6}nLsj5k=j&F)Vae>+vjs7mTBX)<0e5X~a33|ElU5MB<#Mbdi#5_Kc`3&NG;$ZlsA$}XzuPXBl;8g54AIJw}cGz z%2@h&Hc|#_Q7yPaOim}2UH3A*^&UVLPUo5SuDQvnOax91mrVC_X;GmLrxT3a#>NSH z32<9UtAM=9!QP}yl>ExMAO>*S>SO_zW^^F+TCe18_6{)VGJdZ8f_28C6EsE3aZU_${rd~ zDJH)#awf(xdsGx=^ZYIDCg6Y2R;jfyW4{@#;0D;Ju}~7Os4GsuRS{_q0*j^XUFS+B z|Dy5@TxMx;%1;tVuMtD}3p4Wb{1Ql2wU0o?YK$UPF33kMxS#DhF9dLuN%|7pV&P?L z&1Z6!-AY9cC^Pd;QqKLI9=kAbp*M=!4#*r zf>iWnuo1n;OI~wVSid2ax*%^;`Q4xv(u+)HAn>|$m!+RH?Y$79SSs~2iV9nWIjof> zI)IIlYFAu#dZM+ZA8Yip(KFI?8ty@VvPxTnXoVG``xnu!8?c7Dl?_chJ%ae}JqF%FzJbtpO7?bUHQ_lY8lnC*RWM7kM6`ah6J3+*G7iO1BXBRA>h`8n>24 z|L{$MByC5261?~v9&9p}0OCq+h&_rk|Gz+0&p#*1g)v8*$ zOsUfCn!nt*PPHoa+f}dAta;NqRa-Q#)2Ly)rd7h<&ZPN&NR_JfYqV=tr*(}pnf|X- zt#*~B?V2}gSF>r2ChZzEtzM()nwYy`c+8{rCA#`WNpv{87>udiU)-xL22o1NNv%h+9~xV=rU-f@mi^*-OgxD z*5u&BLN=|Tr;;3VatWs2pdX;eburWkObb2rw#Ge_obsMzd9_Xo9gUuz=J)3PpZTd= z9w#t9{^hjshfc^}_>&FooH_d%m>0w)F7-)3ElQDBd?hGYg@iBoYM@zK!mGX>6s;m9 z3Rxwt)+MgawfzDi2k@rDGTh<@sTqG$_^;7;diDOo;{3t`Pe#J4wFU3DMi4sd5OEd2u0-oc7J@`PFj zL{^MTsS~MFu`YPj7U8;s0cQhU!T0P}AV1O zb{|}5cuJU>A<+jJcUc=qU1)epUKNLOL+-MDmq6%ry=KIkY`3_G4aU6Cix?AVQJ}(j z%t@-rWFRp3c*@OHo!MCS9oVV~E_qZ_VpVc~Gah5i@ogy?lM3v*x%;MWZZ!jLK6cHP zXg=mnB+X{9&FZ%EO}k}o^Kjery}H@zL|e^pac+LzlwQQ|v;emoT$(MfWik+Ro5FOU zgIpe&jXJg==z~U@Yjs2kOzlkND>;`%Gy{-a1@iAMIWfx5i+jc2jmmFE<Lt$^s3Ifnfdxz2 z1Jeelk3w>l^;l2cc}-qZaTO4WayP{!(71$wK-ySn2YjbG;&>ja;XW+sF8OofM(>HZ z2K@gqUR=S`C%L!|8^jG%lQVDlcGze`b}!{DTfT$xnb}IOlbEe3Vhq;TYh&0h=s08X zIAcN6ZTrZV82h$u`zex?BsQQ#&|gs}F2Ic;D(K8dK;rUwn>gI}8LLt8A(})NKTk3w z3=~Cj3xV%}K>f03ps3o^fczIJ5&g+%aMrMi(&&@Y zVZoD(yfK#2On)YB!y2Yac7Y5El+wXnLO<=3yZL!c7W$*}m@M{3=P{Y-kIsQ!rV#VH Qq<^h;ip&4J2TStt7G4&M(f|Me literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e82e48c4d4f9e0bf8555684505c748e2b450f5b8 GIT binary patch literal 5687 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 CZs|4v literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a0cb809bf669355d84de16b76d8e80d57d02287 GIT binary patch literal 22163 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea168032f59a38a701bc7c1d9c2fb92a2bc6e252 GIT binary patch literal 84667 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 G!~X|l+L#;w literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..380cc9b4789c9b4fd19ae1efab113d333d1f24b4 GIT binary patch literal 1689 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe40fc0684de598519f13fbc277725ab0f226d45 GIT binary patch literal 85841 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 Mt}nE)vMiVTf1X+bw*UYD literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..986754699ecb1eb37e20edf1e70156e9e8c09ff6 GIT binary patch literal 79263 zcmeI52Vhj!m4-(Gf#^l_4x%?vjk^)O_uhoW9fUw2A&K6cIE7@>o!+yF)61s!vb_&v zD<)gAn=N5m#+z)*mhAtZbMKq;%#0;rZvwN=nBV8S_ti81+;`8LndcAn>C-cXf5v?6 znflK?UXuDAA^bDM2S40alS;iM~T>*L8Wa#C3IL&~6fUm$=-e z(9%P+r)V$H-lBa(`-=7x?Jqh&bf9R3=pZWgGgxSd=upvNqQgZ;h>jE;B|2JkjObW7 zqHz+B7o8wlDLPTKjQSM!G)Z`}=oHbZqSHjDi_Q?8DLPAZwrG{;9MQR=^F-&1E)ZQv zeX0bxy#3F8@9g{WLwxoOIT+-Hm5??A;`%cY9`eq(9Bfa(|u8YL=Tb2)*or;#Z(h{yxTY!`>uE&3D2*`7t3 zS-yWeKQ~a%Qs+oc<5w`vEVmpy8*l0#;DcQUg)f_(E?9%X;YR+!JSCCq0LOJ@0c$LF)$UdQIM zTsLHvYfX?0REmcAteh|Qly5%Eb@I(;*&gPzjKgTa{RPjmJzT*U2hRqd+W&^k_UUA1 znXiyp?juwRjN_SQONHcm5Vb&NxxJ8Ct`V;k*b=W4*pkn)Y{#faCv`HjbYi~Da*H9e z%yMTl+qaXMd@f9@KL z84RA~I-v%$ndLq@>)9~IcHt|FKf$y8I+
    Q^+jizH(0SahAvTLXNZC-dNdB$SkuF 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d7f06ffeecd70f4ad3864384237588da5135905 GIT binary patch literal 80025 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 NT4D^eZAeZc@xN#0R@?vp literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36f74898ff7a483f0a84f19782f6d221c4002dff GIT binary patch literal 85795 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 HT<(7XG=9d= literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65fbf264666b042b87bbaa2808f5689d404cc2fd GIT binary patch literal 108742 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 YsMC8@4c*6J1c2bSF2TTHpP~y1_P#d(|dhO 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..680ab15468ce69cdf5d2f029c0969f23e9f27f80 GIT binary patch literal 80042 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bddca68270a5637fec5216ef8461c2ecf18e793 GIT binary patch literal 7338 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79a81a5b3de572d03913b3db3b143b46ab95e937 GIT binary patch literal 7505 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f71551851a404d09ba7f2662d60d481dadce56b7 GIT binary patch literal 4126 zcmbUkTWA~E_0DKU9$6zxag>c?<)PR(tn#pMUb}H#o5qflZ6bGVIW6jjLDr0IIeNHv zMqzD~651?v7DG)*NhrIZFKwmW6KX3 zdVO`~+E3ULCD{6&}?D@c{>ZpBcc+O%aAOW;Ie#z=ZMOy zu8b=yBm{;F88PclxEU^H+OkqYVz@iw$+jojv)+U^D<@=*@MMIjZTE>PY3>ylAy46F zw}emijFU+FYaB*+OB$Us()nC6V~G?+oY2zPUSU0b*aLXu!tk^zAxcc+Zpb@FDKg6 zHciqzTKg2g$2mcDY2GP8mF^1(8F1eeuX+IQSR|iu2|vijYrS`)kTKFfnm4qTmo9|c z!_c-SGLq%Zz?+pR`@wFi83me)rFiFXLQoUAG*tp`cf}$c1tTSIZEg{_CF+Ga(4M3y z>0H`S6l<5d&McH9+QkAa@T8a#D0*lH z0+OyMI$kv#zW0L`oyljl=&Tx@qxo4aW$4j-_Kq@{Ox-TbMek_2JJC#fGCDVJ%;a+? z`UeK0dfL#A%>f;(Opnf`=b{QMQ}Z;62dbJ8%}yewYX-0cW9^@tr#s=eg#%k_vA_As zBd|#S2*AJYk(ZM1LEBQ>s?=4Lx=KGUOI;Odz?25c(m?InjYYwfdTJk>T@;o&UUv7E zMk?J$&F-Tx^e@8STi`)bj;>(fSU?>H|BnT;^ZJ)A)CuS5t;vC<*s2_^%HfLKW6C{cxd*7Gw-3ot zAe-``RrzRDK3b9cO}W1;_iv$L8iJE732k11c-i9ZZ9qb4zKsEVgqnhZ-R|)plV5Q# zlj3z}H*-b%-o;w*sGnH16_uUF*4(9Gx}!7BSn-p8ZK+9>l}Px#?f5~t$9;h zzo#g!fQ+9qIpac(EdAphIB;+a*8)@!>GUbW>}U8SO8U5_<5a*18V(qKmV3o7oH9(Q=b5wG6wQdqb`gV+#lS z^e}WgwufiZMp&aXPs2$gjP3|Dit?uDQm_95Ez-3XYAlbID`YhaMT^y*(>^o6djY3d zty$vm*x2Zp<<8`%ry;qCsy11ew&X@KQF6(wW=WXrvB05d+Lk*u8dq)%TW*_=<-Qgl z$FX!}bRssST#H-cc>K~>+}b&`@hN9*2h3OeZO&Uq7gR#ixrqZgGOKDc;_|?&|_~nVX62Ce&41?=K5Mf#T+>dwT z(w2Y{ffqEgG&@4V_b70@j!uuoO*m`^*?t%=gtiH?c*`@eK>q{S|2x5f|3KM4PzwYfdRGGntAT^H;0Lu}ml^B>`0z$8xa*Ba+|l_x0Z>QqPnjGz zV(uSU79M(QfnCdDgVXV<|9IJd{N?_`=Kd2KiOpl|o1CwP&R0Sg&CtbVskSrtnET!7 z<i}!1aYhedaHrnN}$gS^gR*G_b*lh7t4W*-#O2F1^QShOM6&i zYAHR?8CW{H0?0P$2q<=Ym*fv_$i*O2v($YY_CfiGR;OcNY?u;GFZ69=O09N$3%4Eu zz>I3W88yZ6Vb%X(#Xo5J2g}kRdmx;Su|5_FV2z572{mfFqGa=GA%nQAD8DEqGYv|c zqNw?lqEJj*mJl0_4YP`nl@%0YktL$1=yoN7o=wpiEO9E6PZ|_oWBD4zYf8&x6b0VQ ziWGeFN4EQ54xQLoF3xLQ&;Om5RWlXim}g&_}bK#nC!+4 z+krrj*!_5-bm~c@+(!%PrgAogNS^NJ+ij{>WVr15tidZ;i0hXQlM`E9k zmEaH3Ia|pW=m-o^{QB1b>MoAs>gNd8TP8i5`zvy~+}dm8{c>xsk>lmoUL)tr+xNQr U3+66ghbq^6_s+7#N4G$|*E?i!XMWrfVSX)7(|6uIKgTk}#@$%4CRElOD*itpA)AeU)(9^^N7Mh-&#+E0$gPfaZS(%UkJd-3 zTHO4&IMyEQ-n}`{>|qFE9_9Rfu6)b0j)4UoU`24W9veDVpaXH#i8#?p>BID|jL6ONpYPzZuyINWV|k03c-`2v!fiD)wsVA5=KRpD8HwG zip)|`Fe>sz#iv=)lYIACoMImb*(i(om{jEEEQOFwO1_VfFP2@u{^&V2_nIy?>yF76 z*0CM(y z(h__XS_B!HUM-84Ff<9yGOga+E0sfwB&+JzYkp`D1ZQe1sN4(ADBA3sV z+k>inKm}<;lKluD`%wsC|2BZHcfo6uy$4pi)4d1Y=uY<@c(ps-FY~#$>Z0Y%E|}_< i?K5>ee$?Ldfw`rhn1h@Q7l-chThD~~pGz>AqyGSB``B~< literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb16f2ee0cc7d64132f7429d43a341f408332a83 GIT binary patch literal 31736 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 A#Q*>R literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0822b86a416a5b8dbc924b74ef3036cfdad00a85 GIT binary patch literal 2946 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5328f1192462b6d3f0175e4e883911cb412e636 GIT binary patch literal 10587 zcmd@)ZEPFaal8ByKgFfKzbvh6*%EC@6eUMJofY5dEXj5w%Q;(44=Sz;io29(QKY=P zk|jlVZ~+J987d+KSDda*0U{_|yFL^~fffRCKkj#ak-{P-w!KzGf22Z-fEOpgA-_8F zmRxd4N!F#8AVpWJ+4ttno1ORG%Ezz^|l4;gNQ@n{c$IMHXSqmv!V%8l%ygwZ+qyTwdKoIP_7c}yhU(COuYS} zTQmSHW&1ALoeq;%d96~c0sus%3i>`q0HpV9w__r6ucj0 zZv?vbB(+A*cED;htDZYElfmJkL2b%IJj|w(g==OZDzV{MNRn77y0jcyXJd)PqQpiL zBAW<@S42^WhXsjEMA!{MOt5q7vLN-cp*YV*;}JoW2$%Z{g1jJzEC4nVjR`C;B`;)w z4HSk3*`8S9exDHMqoFt==c4oZnxAl(1Y9&O$su@KFX15(NkA#sSaeZfdsvG6{c$`I zM@img{TE2jh0vQ;f@haOjY4zLSX5qTWe`@-UjEiZKg&*nT!-+i;I|Z7$By$W zf+Puikxg*;t%<_GS7G1+%oWZOyiAS>g`us6#Hb)g1*xA1cTfk5KVSFvSO0yZ?&oi) zHc^mQ#Q1a=4WV$Epn&G{auBe8L4QQaC9OuaO_j71x>J;q1`L(nq&VbCE}ovJdD8|M zI$(7(HDC)yM#;ocX#MWm@(i$FRiQjj@#Y^Pe|rJLTcGAJ)O0SS&1GnF8)_ayt-4U# zq*C5Ox%62vQVNvYIxXU04{#JuEu>rqCjE?Rl~$GoQMGeiG#-^XPPH#5q^JyDNp+(> zNnA+gmJ+<`%_~>|A>!Co$N0p|#Fd%r(^pj+2Wlz{s^#8F2*{)H)le+Tb1QNrI6Nnm zA!0_v&|n$G&>&EBN1~!6a|@wZgpfktH;~Xd9RIv|!9S$rcmW04vJ^(gz7hWL+5=*PxTqwM_vK&|y;;VsJbS|*G zE-xhFL;b;E047W5TZZ<~ydVXZqssvf$oPa92!l5VIRj({h6d3H1+jm5U1Z>08x01} z(_ff>KeS0d0Py7l>T|p2gQ~5n7xtz-dsD{VqS#x~_Lgi@bJDWq$)0N8xsvMq_-fLk z*qgI#=Z=(m`{VmqYx}(6w9?QERIY3tyFIl%1w}`;ql+{i`TT=XY`>T-Jnio9J0Cee zaBsPj@CFXbra=FOix6* zNfF!pUJ)%v>|9f&<-H4v0^78knKjT zQKN{ezlM|#02I~f`<_Rh54>C6r1z_7(pOcVqUI$XNr!kEgg9Jz{s~$>0&kjvXXRz| zZ6X9Xw~_V)9v^5;gjVMAgF}1!4g$a-RO3}$#L<} zlCaTY)QQrzN$j`?-~qMo^1g6&?zuWMt}}}3Opc-*?b+H>+plN8zJ`5oV{)xh3s7?M zmA63w0&Q4bziC>fo>C%lg(V}i$3pS>6>ziVzO#V8jUz&9f)ROrNwM;67}jes1$kR( zM1j%4U0tgnG5`ng7&PaZu00@`dHQG25w6@D^ICy<6TT+qrO=vY)#WnRgqFeYuW_)- z@O35AzoCVIg_yIylH!km^-DB<_yl-swug2sKlD5?XPPc#yuFIIH*N3zZH!DDfH&qx zMZGBop;oa3h2elYzG65f6tl?bB7&oRKoiXTNqxY3^rm607RhEUu?Xv@uN6-hw+Ndw zt|heUw!Mfk5tX=Q=uxt%II_oxp@;bd?_i+^c^kfwx169y74#q@!X9q;oIK4(aw1|6 zaEJ#u62DCxf`{68MTUrmZ!{Uf?5A$L~uB;r{pZ*&+PNQLWq7l@>%03J};#?}{&{drovLqE>Uz>l zPtIj?IDa3tu&5y?)xu(r-;oxI7)s=IPP_zVO_fHmL}D2dsC*Nu1|>QNh*v04OhB*m zm6V80`4sn=R4n5jd_JRm|frujjKvjmZe3+_`5Vt~Ax`F&yRly+W z9uU3!a{wptHy)qj!4>s%rDUc1((ahjeL3T~{8?|tJ)NztQK~zCVWvH&iR$cw5AmH& z1r^`fCl;k=WVci48O``cKXYf8DV^ANI!9d2D}BoUYjx0-pr{zfsRP;URH#GGtJNVU zd>4qsF$AX(;O;1lZ!cW>GF;OF47xNh;ORwdr=-_6Ar(~oH1lRHK#=+YUt)bgPk4*| zGWr4@vW(DTEpiH*)=Y~es1$9yEnjlRA%h%;d@$@J3vz<>^7djsU9w9?e!66V3VKbl z-ZJ`vWT%N_C1X5PGGE*bX)*_FZcsKNHws8Fh|T}|of|(TX*|r7eh0HWke6Yj5t8S` z><^|zNk$YCo+J%~F)!?r`ki_|4N)YB#z}V(Vtj!eSR2S+Y#*rv2PWatI}2;!*b0wH zP>pi@wSj>=<-ou=QtG4&vb-$49ta5W{`=9z=&}H**8YSzAHZ5blR_uf+!u+nFiCTe z1wg#n!M{OihPb$Czp1!0hca%!h~kxg_ta)GY|K}YJst`DLy)l&rHyW5NOdIP_kgkV zuK*rUxjM?@+xBf;-M;r|Dmj())^3k&-QTHu^nUVv2%NUx{;+B%_yhO0J5`qo{Y~SO zu^+Xi+MajqcJ1E#v^za`9qv5>Kbz5>8V=z8neOB`1Z4Ye=C{JX+`A&hL zAfP4$v0T-HX}!Zu_a8LVrS8I1XqPk!yETK!8r0dmsF|FL7#bXQlp0$63U588uhB^R zNMGF$;%86PxA0zrfrG)L96GPkPrNin##7<|4jqr1jK@Lv=uVCpC64H*-h~l)bmK-j zh~vZAEEqKz*{gUIB*2jwC8*%(cZNn_u)1lL`w3icgP$mI6v5##M-d!8)=?1CM+d={ zItJY-V2dut{iwVE=QKzuEMuOVoL1=RWftXvlbrht(eMJhv?9rP>QU;PbWQ_n_=Y}s zyajKLBw}!s11BSM>)@2euV^j!X1&9!T~TmYCl)7Qafm-U_-8219Q+H`F=;bNzN*uH zi;%)W7D+oCX|X=XI*tKX^H3H`7!?dySikHFNp_SA3yv)vc4L)Vx4C*(g~ z;J=^m2_1i98BZ)`iKJ>4l4Iok1K3dbu(2Za919?|i>Eh$>OJ!&VvDZFjJvi?I491>Gk*dJRo$Emeeqe^ z>oN3yrt_dN39CDiqx$e>-txVYsN*-{Vd3dxdB9nGejE)Tuf8$fG_OJQRT5KKHy|G$ zHiu0(`glFi;)kAG$J1`Yd2z{{YJ5z^*lp`m;DxI}E|L}|ssFMa5iwhTm6j+ZdHk!; zL7YOMp9a8z9G;?qag(^>1~jU4Shc_r+(ik;hB23x>9s@zf#0YxMiYqpF_1|=0|0v@ zUvrLfIXVbPj%8~bKm2AYn5pebj%V9DlH*&~xA_llq5*j?XlaJTl8_cP38g}Iz&F2ADH%WRK5T1~D38RmDuK)T_^OieJu^lG&X z!I30SS868BoQGRs&OZrdn1EKxFy|qAl)SNZW9RLRyB!P38zA=9M%vy?jKpxZfQm^> z<3FK*oAKiE$t8+j%oiH4x>_%oR^fQ2v^O~;&{YhW>(^r_J=1Ftz!NI5=5Wr2h@`Dl z6~QRAo<2iQUFy=FM#&&MJ^z;<<8|;xl!Evb_FUvdsS3nWZPPbrxEm9yee&j=>2dD* zj9NVprv%|dJQC&c#|(!iu*I9uxBO&@Xy{L%L5ct%#|K-N{(4kt?f*x&GBA;DnM}Lz z-Un^FlyaE-qUr=FE-j59*k`0t=_(u9jNda|=4splw{Xk2Hh?kG2Cq{DNoI7F=E z3}JqVT>n)#Lx7dCh`8MqF$E%?LvR*B*=d6K9YAih84cdJh%bObS^xl_Xgj1uUohwP zm~$DXM}h38waU`~AEmmc7q$MqT7RbYf>L`SSA|%6Io5$#XF1jd*yMO}JXcNCG~|4a zd^Qz=4#==m(|#6zNPq`V@IwM8hrb(GiDB8zaj-9p-HwjacdFiGl!xD9F5))sb>OD-7aa<=mUvD~v{I0VO5)~+1c(n>eG z%GE*vKNwCahUOqg0(a&7luHO#`q+p2BP1d4G7xa-Q=U#CEtGN(_nTRLtP&UUaHG|4 zelx$1nfZOq{4)^nB4|_pezo;qz`m!0b`x62>rFr&Aq6R17Uj4E$03DR99cf+NH`eo z%sO*ILSVR%b>-X%cTP-*Z0yQ*eNL-AEmnp2$n{)DrI3xEr% zOW{>_npa%=&L<%Eyrl%8gxI0E-=cZo@LtuY`qTVaM*=hj(oV&*?@aUoE`e4r;QbZ! zIhPm!!}y7pZr?J%mL+$5mAJ5K6tNafQA4#GH7fnT{szEbxkt#bQG0iKXrr{n5$fgP zkkJkUU@=@aK9GLi(NIQm+l~+>FzQH^(VCR01bLgcQh-Hl{3n~}nVP08a3T~bkvNYO}N25k_VvxQyU4-1t-U3bm45AXpH^lJcq+CwkI zzWq1NWmb0mQU~q zouKqmzs+pSlQWdLEn)$Q5Pp_;#5PNs)|!>n}Idq!=oVD zV<;N0%uqC%prmn-U3|18fDdObKSR$rJOl)tvYlZYBYqZHsv&F1oLU;O?a)q`r&4YJ zd+1miuKej;S0)ILgA|^i^0rmQY*O1QLdf-mQhSnGq_f&U1+&$NxVdYnvTop1$92F* zvyz>dfci(M%q^oo{No-E4hDkNPIhpae*zNS48P|nJB&__BedOd_6}PQhYYc;5vaEO zmpl2-Auaia7HTxsPSn!T2o=SyW$_Iyv@Y1S%=Da(U2$!WcK-yBZv9cX9kyfKUxuo? z?Q3%>d?^4i#LJzTgG12mZ_|6u44hVLon;nkA5DU{TJPGRkLCz#JIum(phxeCR@BvnFuTE>uc+n>Lae`T3lXTAufx7xNgN`bSz$9 z+lVg9x8g*I#jmZ$NoWhAKUKt7)u4x>msK^E#ZaTEYT{X5iLWfhZ$)pAKE|8Z(iuh7 zQYs0?ZmzAzmp0;Z{O0-!3~nz&MW8u`r|BlR6eL)ynp0gm-ToP9R`NO1s;ZPEThh^q zE5M_h0QQhMFxEs~&nFC2u9@Sf|Gs!MexW{o;hW#p#xFI-FI8@v()d^9#_74bG*^}8 zUQB(|n3{XweCRX#haLzm;(T42uS)Zbc>YadOVSLDJX|~qU95*L)(XLXTI?=*EQJnARdMX?>OpgjWpNY`TDR`O9ox-dh2MdBFzQH|&eKA|nw_TvUN1rM zy~inzGFO6}h(R@g$Zn*(dn6?y6AwRQQ^^|jx^ zEcG986}4<;N42WB3#Rp* z2LH7=TIgHsM3eQ-Vv0H#gxn=4=>jJgjPMDTo z610i|t1CI{Y0n;hL{Q7Dqp$Hl&e2qGY9-EE?Dufh*w~ariA`C z08IzSam~w!8>^yG`*(~!toD8;ny>bLCYq_9^qFY7+WR$KvmDsxZSY|76`lRz1QN5= F{{X2Y@iYJc literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6cb1251dc5fb65f1c070926461a6c8c8dd4d9cfe GIT binary patch literal 510 zcmYjO&r2LJ6i)UBD-qk1UWD?F-GdXCQYa!KwLN%IsKvvA44FxGCw3+YNoMML^1o=0 zJz0w9-uh1{f@QD%11t8lr)Jh&@C$kGeZ2R`_g;RktPm9N>d(XQU-0)eS)e%&9^ZxF z8{(*sIPPPCe>4^)&pmHkVuY^3eL}y$Y6Yq+5@A6PAkCQN!jpm31$>o0lM0;hrSV$l4w&LFOU>)R zm5E{L7d8|wB4mq|KGSv!J}?FEbEalx@R~CfB@4PcESSurR2N-x-hLbPqRlCe4!W&z zCyu#J<9NIr$8%|cv|Z5d$DQMkpN{qq4}PJ?di3cD&2%B?DW}HjQ;~W{by3AhP*WOO z302WtCe)0ABK0Qf^{A6xY%J7LBMl9&D6TD?PZPRk`-seFy0rbY${kz(UA=F&5zM5C oF`hKqxHUnwd4XQ8T`d14t9NAmhOB?zyC!f;;G$C>yA(S91H_w{&;S4c literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5freq.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5freq.py new file mode 100644 index 0000000..87d9f97 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5freq.py @@ -0,0 +1,386 @@ +######################## 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 +# fmt: off +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 +) +# fmt: on diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5prober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5prober.py new file mode 100644 index 0000000..ef09c60 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5prober.py @@ -0,0 +1,47 @@ +######################## 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 .chardistribution import Big5DistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import BIG5_SM_MODEL + + +class Big5Prober(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) + self.distribution_analyzer = Big5DistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "Big5" + + @property + def language(self) -> str: + return "Chinese" diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/chardistribution.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/chardistribution.py new file mode 100644 index 0000000..176cb99 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/chardistribution.py @@ -0,0 +1,261 @@ +######################## 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 typing import Tuple, Union + +from .big5freq import ( + BIG5_CHAR_TO_FREQ_ORDER, + BIG5_TABLE_SIZE, + BIG5_TYPICAL_DISTRIBUTION_RATIO, +) +from .euckrfreq import ( + EUCKR_CHAR_TO_FREQ_ORDER, + EUCKR_TABLE_SIZE, + EUCKR_TYPICAL_DISTRIBUTION_RATIO, +) +from .euctwfreq import ( + EUCTW_CHAR_TO_FREQ_ORDER, + EUCTW_TABLE_SIZE, + EUCTW_TYPICAL_DISTRIBUTION_RATIO, +) +from .gb2312freq import ( + GB2312_CHAR_TO_FREQ_ORDER, + GB2312_TABLE_SIZE, + GB2312_TYPICAL_DISTRIBUTION_RATIO, +) +from .jisfreq import ( + JIS_CHAR_TO_FREQ_ORDER, + JIS_TABLE_SIZE, + JIS_TYPICAL_DISTRIBUTION_RATIO, +) +from .johabfreq import JOHAB_TO_EUCKR_ORDER_TABLE + + +class CharDistributionAnalysis: + ENOUGH_DATA_THRESHOLD = 1024 + SURE_YES = 0.99 + SURE_NO = 0.01 + MINIMUM_DATA_THRESHOLD = 3 + + def __init__(self) -> None: + # Mapping table to get frequency order from char order (get from + # GetOrder()) + self._char_to_freq_order: Tuple[int, ...] = tuple() + self._table_size = 0 # 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 = 0.0 + self._done = False + self._total_chars = 0 + self._freq_chars = 0 + self.reset() + + def reset(self) -> None: + """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: Union[bytes, bytearray], char_len: int) -> None: + """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) -> float: + """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) -> bool: + # 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, _: Union[bytes, bytearray]) -> int: + # 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) -> None: + super().__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: Union[bytes, bytearray]) -> int: + # 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 + return -1 + + +class EUCKRDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__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: Union[bytes, bytearray]) -> int: + # 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 + return -1 + + +class JOHABDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__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: Union[bytes, bytearray]) -> int: + first_char = byte_str[0] + if 0x88 <= first_char < 0xD4: + code = first_char * 256 + byte_str[1] + return JOHAB_TO_EUCKR_ORDER_TABLE.get(code, -1) + return -1 + + +class GB2312DistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__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: Union[bytes, bytearray]) -> int: + # 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 + return -1 + + +class Big5DistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__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: Union[bytes, bytearray]) -> int: + # 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 + return 157 * (first_char - 0xA4) + second_char - 0x40 + return -1 + + +class SJISDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__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: Union[bytes, bytearray]) -> int: + # 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 0x81 <= first_char <= 0x9F: + order = 188 * (first_char - 0x81) + elif 0xE0 <= 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) -> None: + super().__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: Union[bytes, bytearray]) -> int: + # 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 + return -1 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetgroupprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetgroupprober.py new file mode 100644 index 0000000..6def56b --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetgroupprober.py @@ -0,0 +1,106 @@ +######################## 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 typing import List, Optional, Union + +from .charsetprober import CharSetProber +from .enums import LanguageFilter, ProbingState + + +class CharSetGroupProber(CharSetProber): + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self._active_num = 0 + self.probers: List[CharSetProber] = [] + self._best_guess_prober: Optional[CharSetProber] = None + + def reset(self) -> None: + super().reset() + self._active_num = 0 + for prober in self.probers: + prober.reset() + prober.active = True + self._active_num += 1 + self._best_guess_prober = None + + @property + def charset_name(self) -> Optional[str]: + 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) -> Optional[str]: + 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: Union[bytes, bytearray]) -> ProbingState: + for prober in self.probers: + if not prober.active: + continue + state = prober.feed(byte_str) + if not state: + continue + if state == ProbingState.FOUND_IT: + self._best_guess_prober = prober + self._state = ProbingState.FOUND_IT + return self.state + if 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) -> float: + state = self.state + if state == ProbingState.FOUND_IT: + return 0.99 + if state == ProbingState.NOT_ME: + return 0.01 + best_conf = 0.0 + self._best_guess_prober = None + for prober in self.probers: + 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.11/site-packages/pip/_vendor/chardet/charsetprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetprober.py new file mode 100644 index 0000000..a103ca1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetprober.py @@ -0,0 +1,147 @@ +######################## 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 typing import Optional, Union + +from .enums import LanguageFilter, ProbingState + +INTERNATIONAL_WORDS_PATTERN = re.compile( + b"[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?" +) + + +class CharSetProber: + + SHORTCUT_THRESHOLD = 0.95 + + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + self._state = ProbingState.DETECTING + self.active = True + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + + def reset(self) -> None: + self._state = ProbingState.DETECTING + + @property + def charset_name(self) -> Optional[str]: + return None + + @property + def language(self) -> Optional[str]: + raise NotImplementedError + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + raise NotImplementedError + + @property + def state(self) -> ProbingState: + return self._state + + def get_confidence(self) -> float: + return 0.0 + + @staticmethod + def filter_high_byte_only(buf: Union[bytes, bytearray]) -> bytes: + buf = re.sub(b"([\x00-\x7F])+", b" ", buf) + return buf + + @staticmethod + def filter_international_words(buf: Union[bytes, bytearray]) -> bytearray: + """ + 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 = INTERNATIONAL_WORDS_PATTERN.findall(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 remove_xml_tags(buf: Union[bytes, bytearray]) -> bytes: + """ + Returns a copy of ``buf`` that retains only the sequences of English + alphabet and high byte characters that are not between <> characters. + 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 + buf = memoryview(buf).cast("c") + + for curr, buf_char in enumerate(buf): + # Check if we're coming out of or entering an XML tag + + # https://github.com/python/typeshed/issues/8182 + if buf_char == b">": # type: ignore[comparison-overlap] + prev = curr + 1 + in_tag = False + # https://github.com/python/typeshed/issues/8182 + elif buf_char == b"<": # type: ignore[comparison-overlap] + 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" ") + in_tag = True + + # 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.11/site-packages/pip/_vendor/chardet/cli/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..576ad12b35e0d0742db676527c489409642a111d GIT binary patch literal 207 zcmZ3^%ge<81af;mri19mAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnuO$79{M=Oi ztQ7r%qWrAX?3~I;~qMo5Bmd@z(5HC0Sxr1Zw#`$^l9f@eOPjn zVib9JKh8b(o_l}%ouj{|(;9*6@K?|0|B)i(TdZ_1sEg}G3tpcQgUk>^G9s2VBZ+rp zCIauM6|KrMa#fj8s_Kj?5koc;(RlSo4RjA0|eWR@K57$?NgSjtGU zw2^`*%~Y1!>8of)=B_f6G4>c)=u!IncC?JN5vj<=5NKxEkdeC`LE}6XAuRg{N{@SU z!HOc+#gpHwAC?Hwu9vx4^XT$|Sze%?ew(?}u^DwZtva01ifJ)g)4c_k>b5~St2x|5 z73wW8lT(9vtn4xH!7e+7Y0tZwcJV{KTC-TOsA&|gH)wf5=WRvmI#niYV!;6$9BV?a z+f}5?rfoRO?)c=Hx6VMtTcBmfu9ybQ!RYCUw|eS514XL4Wz+nD^5n#6O}kW~w$pV2 ze5!G035*%1sOfcFHo+&;uGKwS;ZBvh9=I~0Y2V?-UCu{?_$7~Vea>Qm{DJ9uLHtV1 zGaXyEzQe7~OF^pdIa^yy|z1Y zlT49Yg*%FeV>(w;*`=j4<%a?@U5)O0x28mz@?y^tk4VIp)=$Ie{uOoylik>Zu}Zh| zj@pdycvCeZJ2<{h2J3vJDSb|i=wK_f$k3wfjQgB?slZs&Rlfv$=VSUmVG9IIu8AF_ zI-Ds7cmiNuK>QpQ0ey&tIXqX|#V>U#pe!KjaACoM1IO030T*C_s4muYu2-oz%p$!3 zrbLl?4xMKJD`@C5Inf^Dt<*YtMcPFanx0$nnA>j_K~SWZL1K4jHSiT!7JO|0GHey| z_1SHYfmQY!dKIjSlwKETqst7wXdFk|fa@*U1wVutboKQYcnKUJh@$EkjN6p`zHTn* z7PCF~T;JMWvkW>rJLfpo?5t4DOFRwm2;$w1Yeb5)k^8|%9cVjr&`1{XT3N9yNE6iD^$$)$QAv->%mROUzy>Sms=zw&E=~_Rl6JCkw9WvGE%8>+{Sl z)XZ7|NCK#h7dnhsC|hQ?3{Pq*ucfc8t#jAgl~(+wpBZi?k92PN$O~9M31pqmFO_@z z1WgHekWpSt0Rs*4*Rft?!kMk4FFF#_zrzwxc$ zllLKGu^^u*JJl*CFZfwgz+b(J^d#~bplYDH1!^JWJV_=>drNebG1o-fIT4q$Sq6ir6HS~oc(bqVCOg9x7sq?36$kQbO$3uJU7P;79-4PqVTMq+%t zll?SKUWM2UJ8WAkgOL;Ffn%`^$RDXw_aH$FG}nW~wB+$R%SZSzz(%0zA}BT@<5nX+ zKHiRHjZ@cN8`=g!7MzDWfvf2xa6zn7Xe8b^0aQPqcPY&D6PSsg0MYpKZ=E_o0b*y} zwlR_D%WuIANEBf?OUzoCpjRQ*xb(t}YafhHQE%CV{8eu!2Lf#ZQ*_SK?b~g1qQB-m zCec|MKqF#(!>y(Fm%7fHgoVDkn7XGXXR8#GdZN9639P zmr8gr@J}ZykTE@-mk?aBQps@2r4m00T6_XkRrvJb6X6&SIUX*@NE(nfh;sGr-=sD< zIlP^~DIy^T=y?DQ%n;i!LLlJen6Z{hevsS))D@s*f8}i2W vFA`hXW1{{yL%eniNSWl+TH|SSv=tro<@oB<$J2MGSH%y|CXYe0*tY)xg9>m; literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/chardetect.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/chardetect.py new file mode 100644 index 0000000..43f6e14 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/chardetect.py @@ -0,0 +1,112 @@ +""" +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. + +""" + + +import argparse +import sys +from typing import Iterable, List, Optional + +from .. import __version__ +from ..universaldetector import UniversalDetector + + +def description_of( + lines: Iterable[bytes], + name: str = "stdin", + minimal: bool = False, + should_rename_legacy: bool = False, +) -> Optional[str]: + """ + 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 + :param should_rename_legacy: Should we rename legacy encodings to + their more modern equivalents? + :type should_rename_legacy: ``bool`` + """ + u = UniversalDetector(should_rename_legacy=should_rename_legacy) + 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 minimal: + return result["encoding"] + if result["encoding"]: + return f'{name}: {result["encoding"]} with confidence {result["confidence"]}' + return f"{name}: no result" + + +def main(argv: Optional[List[str]] = None) -> 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.buffer], + ) + parser.add_argument( + "--minimal", + help="Print only the encoding to standard output", + action="store_true", + ) + parser.add_argument( + "-l", + "--legacy", + help="Rename legacy encodings to more modern ones.", + action="store_true", + ) + parser.add_argument( + "--version", action="version", version=f"%(prog)s {__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, minimal=args.minimal, should_rename_legacy=args.legacy + ) + ) + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachine.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachine.py new file mode 100644 index 0000000..8ed4a87 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachine.py @@ -0,0 +1,90 @@ +######################## 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 .codingstatemachinedict import CodingStateMachineDict +from .enums import MachineState + + +class CodingStateMachine: + """ + 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: CodingStateMachineDict) -> None: + self._model = sm + self._curr_byte_pos = 0 + self._curr_char_len = 0 + self._curr_state = MachineState.START + self.active = True + self.logger = logging.getLogger(__name__) + self.reset() + + def reset(self) -> None: + self._curr_state = MachineState.START + + def next_state(self, c: int) -> int: + # 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) -> int: + return self._curr_char_len + + def get_coding_state_machine(self) -> str: + return self._model["name"] + + @property + def language(self) -> str: + return self._model["language"] diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachinedict.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachinedict.py new file mode 100644 index 0000000..7a3c4c7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachinedict.py @@ -0,0 +1,19 @@ +from typing import TYPE_CHECKING, Tuple + +if TYPE_CHECKING: + # TypedDict was introduced in Python 3.8. + # + # TODO: Remove the else block and TYPE_CHECKING check when dropping support + # for Python 3.7. + from typing import TypedDict + + class CodingStateMachineDict(TypedDict, total=False): + class_table: Tuple[int, ...] + class_factor: int + state_table: Tuple[int, ...] + char_len_table: Tuple[int, ...] + name: str + language: str # Optional key + +else: + CodingStateMachineDict = dict diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/cp949prober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/cp949prober.py new file mode 100644 index 0000000..fa7307e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/cp949prober.py @@ -0,0 +1,49 @@ +######################## 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) -> None: + super().__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) -> str: + return "CP949" + + @property + def language(self) -> str: + return "Korean" diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/enums.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/enums.py new file mode 100644 index 0000000..5e3e198 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/enums.py @@ -0,0 +1,85 @@ +""" +All of the Enums that are used throughout the chardet package. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +from enum import Enum, Flag + + +class InputState: + """ + This enum represents the different states a universal detector can be in. + """ + + PURE_ASCII = 0 + ESC_ASCII = 1 + HIGH_BYTE = 2 + + +class LanguageFilter(Flag): + """ + This enum represents the different language filters we can apply to a + ``UniversalDetector``. + """ + + NONE = 0x00 + 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(Enum): + """ + This enum represents the different states a prober can be in. + """ + + DETECTING = 0 + FOUND_IT = 1 + NOT_ME = 2 + + +class MachineState: + """ + This enum represents the different states a state machine can be in. + """ + + START = 0 + ERROR = 1 + ITS_ME = 2 + + +class SequenceLikelihood: + """ + 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) -> int: + """:returns: The number of likelihood categories in the enum.""" + return 4 + + +class CharacterCategory: + """ + 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.11/site-packages/pip/_vendor/chardet/escprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/escprober.py new file mode 100644 index 0000000..fd71383 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/escprober.py @@ -0,0 +1,102 @@ +######################## 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 typing import Optional, Union + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, MachineState, ProbingState +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: LanguageFilter = LanguageFilter.NONE) -> None: + super().__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 = 0 + self._detected_charset: Optional[str] = None + self._detected_language: Optional[str] = None + self._state = ProbingState.DETECTING + self.reset() + + def reset(self) -> None: + super().reset() + for coding_sm in self.coding_sm: + 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) -> Optional[str]: + return self._detected_charset + + @property + def language(self) -> Optional[str]: + return self._detected_language + + def get_confidence(self) -> float: + return 0.99 if self._detected_charset else 0.00 + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for c in byte_str: + for coding_sm in self.coding_sm: + if 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.11/site-packages/pip/_vendor/chardet/escsm.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/escsm.py new file mode 100644 index 0000000..11d4adf --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/escsm.py @@ -0,0 +1,261 @@ +######################## 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 .codingstatemachinedict import CodingStateMachineDict +from .enums import MachineState + +# fmt: off +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 +) +# fmt: on + +HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +HZ_SM_MODEL: CodingStateMachineDict = { + "class_table": HZ_CLS, + "class_factor": 6, + "state_table": HZ_ST, + "char_len_table": HZ_CHAR_LEN_TABLE, + "name": "HZ-GB-2312", + "language": "Chinese", +} + +# fmt: off +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 +) +# fmt: on + +ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022CN_SM_MODEL: CodingStateMachineDict = { + "class_table": ISO2022CN_CLS, + "class_factor": 9, + "state_table": ISO2022CN_ST, + "char_len_table": ISO2022CN_CHAR_LEN_TABLE, + "name": "ISO-2022-CN", + "language": "Chinese", +} + +# fmt: off +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 +) +# fmt: on + +ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022JP_SM_MODEL: CodingStateMachineDict = { + "class_table": ISO2022JP_CLS, + "class_factor": 10, + "state_table": ISO2022JP_ST, + "char_len_table": ISO2022JP_CHAR_LEN_TABLE, + "name": "ISO-2022-JP", + "language": "Japanese", +} + +# fmt: off +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 +) +# fmt: on + +ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +ISO2022KR_SM_MODEL: CodingStateMachineDict = { + "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.11/site-packages/pip/_vendor/chardet/eucjpprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/eucjpprober.py new file mode 100644 index 0000000..39487f4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/eucjpprober.py @@ -0,0 +1,102 @@ +######################## 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 typing import Union + +from .chardistribution import EUCJPDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .enums import MachineState, ProbingState +from .jpcntx import EUCJPContextAnalysis +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import EUCJP_SM_MODEL + + +class EUCJPProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) + self.distribution_analyzer = EUCJPDistributionAnalysis() + self.context_analyzer = EUCJPContextAnalysis() + self.reset() + + def reset(self) -> None: + super().reset() + self.context_analyzer.reset() + + @property + def charset_name(self) -> str: + return "EUC-JP" + + @property + def language(self) -> str: + return "Japanese" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + assert self.coding_sm is not None + assert self.distribution_analyzer is not None + + for i, byte in enumerate(byte_str): + # PY3K: byte_str is a byte array, so byte is an int, not a byte + coding_state = self.coding_sm.next_state(byte) + 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 + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte + 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) -> float: + assert self.distribution_analyzer is not None + + 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.11/site-packages/pip/_vendor/chardet/euckrfreq.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrfreq.py new file mode 100644 index 0000000..7dc3b10 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrfreq.py @@ -0,0 +1,196 @@ +######################## 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 , +# fmt: off +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 +) +# fmt: on diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrprober.py new file mode 100644 index 0000000..1fc5de0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrprober.py @@ -0,0 +1,47 @@ +######################## 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 EUCKR_SM_MODEL + + +class EUCKRProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "EUC-KR" + + @property + def language(self) -> str: + return "Korean" diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwfreq.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwfreq.py new file mode 100644 index 0000000..4900ccc --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwfreq.py @@ -0,0 +1,388 @@ +######################## 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 + +# fmt: off +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 +) +# fmt: on diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwprober.py new file mode 100644 index 0000000..a37ab18 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwprober.py @@ -0,0 +1,47 @@ +######################## 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 EUCTWDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import EUCTW_SM_MODEL + + +class EUCTWProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) + self.distribution_analyzer = EUCTWDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "EUC-TW" + + @property + def language(self) -> str: + return "Taiwan" diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312freq.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312freq.py new file mode 100644 index 0000000..b32bfc7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312freq.py @@ -0,0 +1,284 @@ +######################## 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 + +# fmt: off +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 +) +# fmt: on diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312prober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312prober.py new file mode 100644 index 0000000..d423e73 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312prober.py @@ -0,0 +1,47 @@ +######################## 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 GB2312DistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import GB2312_SM_MODEL + + +class GB2312Prober(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) + self.distribution_analyzer = GB2312DistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "GB2312" + + @property + def language(self) -> str: + return "Chinese" diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/hebrewprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/hebrewprober.py new file mode 100644 index 0000000..785d005 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/hebrewprober.py @@ -0,0 +1,316 @@ +######################## 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 typing import Optional, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState +from .sbcharsetprober import SingleByteCharSetProber + +# 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): + SPACE = 0x20 + # 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) -> None: + super().__init__() + self._final_char_logical_score = 0 + self._final_char_visual_score = 0 + self._prev = self.SPACE + self._before_prev = self.SPACE + self._logical_prober: Optional[SingleByteCharSetProber] = None + self._visual_prober: Optional[SingleByteCharSetProber] = None + self.reset() + + def reset(self) -> None: + 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.SPACE + self._before_prev = self.SPACE + # These probers are owned by the group prober. + + def set_model_probers( + self, + logical_prober: SingleByteCharSetProber, + visual_prober: SingleByteCharSetProber, + ) -> None: + self._logical_prober = logical_prober + self._visual_prober = visual_prober + + def is_final(self, c: int) -> bool: + return c in [ + self.FINAL_KAF, + self.FINAL_MEM, + self.FINAL_NUN, + self.FINAL_PE, + self.FINAL_TSADI, + ] + + def is_non_final(self, c: int) -> bool: + # 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: Union[bytes, bytearray]) -> ProbingState: + # 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 == self.SPACE: + # We stand on a space - a word just ended + if self._before_prev != self.SPACE: + # 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 == self.SPACE) + and (self.is_final(self._prev)) + and (cur != self.SPACE) + ): + # 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) -> str: + assert self._logical_prober is not None + assert self._visual_prober is not None + + # 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) -> str: + return "Hebrew" + + @property + def state(self) -> ProbingState: + assert self._logical_prober is not None + assert self._visual_prober is not None + + # 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.11/site-packages/pip/_vendor/chardet/jisfreq.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/jisfreq.py new file mode 100644 index 0000000..3293576 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/jisfreq.py @@ -0,0 +1,325 @@ +######################## 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 + +# fmt: off +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 +) +# fmt: on diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabfreq.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabfreq.py new file mode 100644 index 0000000..c129699 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabfreq.py @@ -0,0 +1,2382 @@ +######################## 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 ######################### + +# The frequency data itself is the same as euc-kr. +# This is just a mapping table to euc-kr. + +JOHAB_TO_EUCKR_ORDER_TABLE = { + 0x8861: 0, + 0x8862: 1, + 0x8865: 2, + 0x8868: 3, + 0x8869: 4, + 0x886A: 5, + 0x886B: 6, + 0x8871: 7, + 0x8873: 8, + 0x8874: 9, + 0x8875: 10, + 0x8876: 11, + 0x8877: 12, + 0x8878: 13, + 0x8879: 14, + 0x887B: 15, + 0x887C: 16, + 0x887D: 17, + 0x8881: 18, + 0x8882: 19, + 0x8885: 20, + 0x8889: 21, + 0x8891: 22, + 0x8893: 23, + 0x8895: 24, + 0x8896: 25, + 0x8897: 26, + 0x88A1: 27, + 0x88A2: 28, + 0x88A5: 29, + 0x88A9: 30, + 0x88B5: 31, + 0x88B7: 32, + 0x88C1: 33, + 0x88C5: 34, + 0x88C9: 35, + 0x88E1: 36, + 0x88E2: 37, + 0x88E5: 38, + 0x88E8: 39, + 0x88E9: 40, + 0x88EB: 41, + 0x88F1: 42, + 0x88F3: 43, + 0x88F5: 44, + 0x88F6: 45, + 0x88F7: 46, + 0x88F8: 47, + 0x88FB: 48, + 0x88FC: 49, + 0x88FD: 50, + 0x8941: 51, + 0x8945: 52, + 0x8949: 53, + 0x8951: 54, + 0x8953: 55, + 0x8955: 56, + 0x8956: 57, + 0x8957: 58, + 0x8961: 59, + 0x8962: 60, + 0x8963: 61, + 0x8965: 62, + 0x8968: 63, + 0x8969: 64, + 0x8971: 65, + 0x8973: 66, + 0x8975: 67, + 0x8976: 68, + 0x8977: 69, + 0x897B: 70, + 0x8981: 71, + 0x8985: 72, + 0x8989: 73, + 0x8993: 74, + 0x8995: 75, + 0x89A1: 76, + 0x89A2: 77, + 0x89A5: 78, + 0x89A8: 79, + 0x89A9: 80, + 0x89AB: 81, + 0x89AD: 82, + 0x89B0: 83, + 0x89B1: 84, + 0x89B3: 85, + 0x89B5: 86, + 0x89B7: 87, + 0x89B8: 88, + 0x89C1: 89, + 0x89C2: 90, + 0x89C5: 91, + 0x89C9: 92, + 0x89CB: 93, + 0x89D1: 94, + 0x89D3: 95, + 0x89D5: 96, + 0x89D7: 97, + 0x89E1: 98, + 0x89E5: 99, + 0x89E9: 100, + 0x89F3: 101, + 0x89F6: 102, + 0x89F7: 103, + 0x8A41: 104, + 0x8A42: 105, + 0x8A45: 106, + 0x8A49: 107, + 0x8A51: 108, + 0x8A53: 109, + 0x8A55: 110, + 0x8A57: 111, + 0x8A61: 112, + 0x8A65: 113, + 0x8A69: 114, + 0x8A73: 115, + 0x8A75: 116, + 0x8A81: 117, + 0x8A82: 118, + 0x8A85: 119, + 0x8A88: 120, + 0x8A89: 121, + 0x8A8A: 122, + 0x8A8B: 123, + 0x8A90: 124, + 0x8A91: 125, + 0x8A93: 126, + 0x8A95: 127, + 0x8A97: 128, + 0x8A98: 129, + 0x8AA1: 130, + 0x8AA2: 131, + 0x8AA5: 132, + 0x8AA9: 133, + 0x8AB6: 134, + 0x8AB7: 135, + 0x8AC1: 136, + 0x8AD5: 137, + 0x8AE1: 138, + 0x8AE2: 139, + 0x8AE5: 140, + 0x8AE9: 141, + 0x8AF1: 142, + 0x8AF3: 143, + 0x8AF5: 144, + 0x8B41: 145, + 0x8B45: 146, + 0x8B49: 147, + 0x8B61: 148, + 0x8B62: 149, + 0x8B65: 150, + 0x8B68: 151, + 0x8B69: 152, + 0x8B6A: 153, + 0x8B71: 154, + 0x8B73: 155, + 0x8B75: 156, + 0x8B77: 157, + 0x8B81: 158, + 0x8BA1: 159, + 0x8BA2: 160, + 0x8BA5: 161, + 0x8BA8: 162, + 0x8BA9: 163, + 0x8BAB: 164, + 0x8BB1: 165, + 0x8BB3: 166, + 0x8BB5: 167, + 0x8BB7: 168, + 0x8BB8: 169, + 0x8BBC: 170, + 0x8C61: 171, + 0x8C62: 172, + 0x8C63: 173, + 0x8C65: 174, + 0x8C69: 175, + 0x8C6B: 176, + 0x8C71: 177, + 0x8C73: 178, + 0x8C75: 179, + 0x8C76: 180, + 0x8C77: 181, + 0x8C7B: 182, + 0x8C81: 183, + 0x8C82: 184, + 0x8C85: 185, + 0x8C89: 186, + 0x8C91: 187, + 0x8C93: 188, + 0x8C95: 189, + 0x8C96: 190, + 0x8C97: 191, + 0x8CA1: 192, + 0x8CA2: 193, + 0x8CA9: 194, + 0x8CE1: 195, + 0x8CE2: 196, + 0x8CE3: 197, + 0x8CE5: 198, + 0x8CE9: 199, + 0x8CF1: 200, + 0x8CF3: 201, + 0x8CF5: 202, + 0x8CF6: 203, + 0x8CF7: 204, + 0x8D41: 205, + 0x8D42: 206, + 0x8D45: 207, + 0x8D51: 208, + 0x8D55: 209, + 0x8D57: 210, + 0x8D61: 211, + 0x8D65: 212, + 0x8D69: 213, + 0x8D75: 214, + 0x8D76: 215, + 0x8D7B: 216, + 0x8D81: 217, + 0x8DA1: 218, + 0x8DA2: 219, + 0x8DA5: 220, + 0x8DA7: 221, + 0x8DA9: 222, + 0x8DB1: 223, + 0x8DB3: 224, + 0x8DB5: 225, + 0x8DB7: 226, + 0x8DB8: 227, + 0x8DB9: 228, + 0x8DC1: 229, + 0x8DC2: 230, + 0x8DC9: 231, + 0x8DD6: 232, + 0x8DD7: 233, + 0x8DE1: 234, + 0x8DE2: 235, + 0x8DF7: 236, + 0x8E41: 237, + 0x8E45: 238, + 0x8E49: 239, + 0x8E51: 240, + 0x8E53: 241, + 0x8E57: 242, + 0x8E61: 243, + 0x8E81: 244, + 0x8E82: 245, + 0x8E85: 246, + 0x8E89: 247, + 0x8E90: 248, + 0x8E91: 249, + 0x8E93: 250, + 0x8E95: 251, + 0x8E97: 252, + 0x8E98: 253, + 0x8EA1: 254, + 0x8EA9: 255, + 0x8EB6: 256, + 0x8EB7: 257, + 0x8EC1: 258, + 0x8EC2: 259, + 0x8EC5: 260, + 0x8EC9: 261, + 0x8ED1: 262, + 0x8ED3: 263, + 0x8ED6: 264, + 0x8EE1: 265, + 0x8EE5: 266, + 0x8EE9: 267, + 0x8EF1: 268, + 0x8EF3: 269, + 0x8F41: 270, + 0x8F61: 271, + 0x8F62: 272, + 0x8F65: 273, + 0x8F67: 274, + 0x8F69: 275, + 0x8F6B: 276, + 0x8F70: 277, + 0x8F71: 278, + 0x8F73: 279, + 0x8F75: 280, + 0x8F77: 281, + 0x8F7B: 282, + 0x8FA1: 283, + 0x8FA2: 284, + 0x8FA5: 285, + 0x8FA9: 286, + 0x8FB1: 287, + 0x8FB3: 288, + 0x8FB5: 289, + 0x8FB7: 290, + 0x9061: 291, + 0x9062: 292, + 0x9063: 293, + 0x9065: 294, + 0x9068: 295, + 0x9069: 296, + 0x906A: 297, + 0x906B: 298, + 0x9071: 299, + 0x9073: 300, + 0x9075: 301, + 0x9076: 302, + 0x9077: 303, + 0x9078: 304, + 0x9079: 305, + 0x907B: 306, + 0x907D: 307, + 0x9081: 308, + 0x9082: 309, + 0x9085: 310, + 0x9089: 311, + 0x9091: 312, + 0x9093: 313, + 0x9095: 314, + 0x9096: 315, + 0x9097: 316, + 0x90A1: 317, + 0x90A2: 318, + 0x90A5: 319, + 0x90A9: 320, + 0x90B1: 321, + 0x90B7: 322, + 0x90E1: 323, + 0x90E2: 324, + 0x90E4: 325, + 0x90E5: 326, + 0x90E9: 327, + 0x90EB: 328, + 0x90EC: 329, + 0x90F1: 330, + 0x90F3: 331, + 0x90F5: 332, + 0x90F6: 333, + 0x90F7: 334, + 0x90FD: 335, + 0x9141: 336, + 0x9142: 337, + 0x9145: 338, + 0x9149: 339, + 0x9151: 340, + 0x9153: 341, + 0x9155: 342, + 0x9156: 343, + 0x9157: 344, + 0x9161: 345, + 0x9162: 346, + 0x9165: 347, + 0x9169: 348, + 0x9171: 349, + 0x9173: 350, + 0x9176: 351, + 0x9177: 352, + 0x917A: 353, + 0x9181: 354, + 0x9185: 355, + 0x91A1: 356, + 0x91A2: 357, + 0x91A5: 358, + 0x91A9: 359, + 0x91AB: 360, + 0x91B1: 361, + 0x91B3: 362, + 0x91B5: 363, + 0x91B7: 364, + 0x91BC: 365, + 0x91BD: 366, + 0x91C1: 367, + 0x91C5: 368, + 0x91C9: 369, + 0x91D6: 370, + 0x9241: 371, + 0x9245: 372, + 0x9249: 373, + 0x9251: 374, + 0x9253: 375, + 0x9255: 376, + 0x9261: 377, + 0x9262: 378, + 0x9265: 379, + 0x9269: 380, + 0x9273: 381, + 0x9275: 382, + 0x9277: 383, + 0x9281: 384, + 0x9282: 385, + 0x9285: 386, + 0x9288: 387, + 0x9289: 388, + 0x9291: 389, + 0x9293: 390, + 0x9295: 391, + 0x9297: 392, + 0x92A1: 393, + 0x92B6: 394, + 0x92C1: 395, + 0x92E1: 396, + 0x92E5: 397, + 0x92E9: 398, + 0x92F1: 399, + 0x92F3: 400, + 0x9341: 401, + 0x9342: 402, + 0x9349: 403, + 0x9351: 404, + 0x9353: 405, + 0x9357: 406, + 0x9361: 407, + 0x9362: 408, + 0x9365: 409, + 0x9369: 410, + 0x936A: 411, + 0x936B: 412, + 0x9371: 413, + 0x9373: 414, + 0x9375: 415, + 0x9377: 416, + 0x9378: 417, + 0x937C: 418, + 0x9381: 419, + 0x9385: 420, + 0x9389: 421, + 0x93A1: 422, + 0x93A2: 423, + 0x93A5: 424, + 0x93A9: 425, + 0x93AB: 426, + 0x93B1: 427, + 0x93B3: 428, + 0x93B5: 429, + 0x93B7: 430, + 0x93BC: 431, + 0x9461: 432, + 0x9462: 433, + 0x9463: 434, + 0x9465: 435, + 0x9468: 436, + 0x9469: 437, + 0x946A: 438, + 0x946B: 439, + 0x946C: 440, + 0x9470: 441, + 0x9471: 442, + 0x9473: 443, + 0x9475: 444, + 0x9476: 445, + 0x9477: 446, + 0x9478: 447, + 0x9479: 448, + 0x947D: 449, + 0x9481: 450, + 0x9482: 451, + 0x9485: 452, + 0x9489: 453, + 0x9491: 454, + 0x9493: 455, + 0x9495: 456, + 0x9496: 457, + 0x9497: 458, + 0x94A1: 459, + 0x94E1: 460, + 0x94E2: 461, + 0x94E3: 462, + 0x94E5: 463, + 0x94E8: 464, + 0x94E9: 465, + 0x94EB: 466, + 0x94EC: 467, + 0x94F1: 468, + 0x94F3: 469, + 0x94F5: 470, + 0x94F7: 471, + 0x94F9: 472, + 0x94FC: 473, + 0x9541: 474, + 0x9542: 475, + 0x9545: 476, + 0x9549: 477, + 0x9551: 478, + 0x9553: 479, + 0x9555: 480, + 0x9556: 481, + 0x9557: 482, + 0x9561: 483, + 0x9565: 484, + 0x9569: 485, + 0x9576: 486, + 0x9577: 487, + 0x9581: 488, + 0x9585: 489, + 0x95A1: 490, + 0x95A2: 491, + 0x95A5: 492, + 0x95A8: 493, + 0x95A9: 494, + 0x95AB: 495, + 0x95AD: 496, + 0x95B1: 497, + 0x95B3: 498, + 0x95B5: 499, + 0x95B7: 500, + 0x95B9: 501, + 0x95BB: 502, + 0x95C1: 503, + 0x95C5: 504, + 0x95C9: 505, + 0x95E1: 506, + 0x95F6: 507, + 0x9641: 508, + 0x9645: 509, + 0x9649: 510, + 0x9651: 511, + 0x9653: 512, + 0x9655: 513, + 0x9661: 514, + 0x9681: 515, + 0x9682: 516, + 0x9685: 517, + 0x9689: 518, + 0x9691: 519, + 0x9693: 520, + 0x9695: 521, + 0x9697: 522, + 0x96A1: 523, + 0x96B6: 524, + 0x96C1: 525, + 0x96D7: 526, + 0x96E1: 527, + 0x96E5: 528, + 0x96E9: 529, + 0x96F3: 530, + 0x96F5: 531, + 0x96F7: 532, + 0x9741: 533, + 0x9745: 534, + 0x9749: 535, + 0x9751: 536, + 0x9757: 537, + 0x9761: 538, + 0x9762: 539, + 0x9765: 540, + 0x9768: 541, + 0x9769: 542, + 0x976B: 543, + 0x9771: 544, + 0x9773: 545, + 0x9775: 546, + 0x9777: 547, + 0x9781: 548, + 0x97A1: 549, + 0x97A2: 550, + 0x97A5: 551, + 0x97A8: 552, + 0x97A9: 553, + 0x97B1: 554, + 0x97B3: 555, + 0x97B5: 556, + 0x97B6: 557, + 0x97B7: 558, + 0x97B8: 559, + 0x9861: 560, + 0x9862: 561, + 0x9865: 562, + 0x9869: 563, + 0x9871: 564, + 0x9873: 565, + 0x9875: 566, + 0x9876: 567, + 0x9877: 568, + 0x987D: 569, + 0x9881: 570, + 0x9882: 571, + 0x9885: 572, + 0x9889: 573, + 0x9891: 574, + 0x9893: 575, + 0x9895: 576, + 0x9896: 577, + 0x9897: 578, + 0x98E1: 579, + 0x98E2: 580, + 0x98E5: 581, + 0x98E9: 582, + 0x98EB: 583, + 0x98EC: 584, + 0x98F1: 585, + 0x98F3: 586, + 0x98F5: 587, + 0x98F6: 588, + 0x98F7: 589, + 0x98FD: 590, + 0x9941: 591, + 0x9942: 592, + 0x9945: 593, + 0x9949: 594, + 0x9951: 595, + 0x9953: 596, + 0x9955: 597, + 0x9956: 598, + 0x9957: 599, + 0x9961: 600, + 0x9976: 601, + 0x99A1: 602, + 0x99A2: 603, + 0x99A5: 604, + 0x99A9: 605, + 0x99B7: 606, + 0x99C1: 607, + 0x99C9: 608, + 0x99E1: 609, + 0x9A41: 610, + 0x9A45: 611, + 0x9A81: 612, + 0x9A82: 613, + 0x9A85: 614, + 0x9A89: 615, + 0x9A90: 616, + 0x9A91: 617, + 0x9A97: 618, + 0x9AC1: 619, + 0x9AE1: 620, + 0x9AE5: 621, + 0x9AE9: 622, + 0x9AF1: 623, + 0x9AF3: 624, + 0x9AF7: 625, + 0x9B61: 626, + 0x9B62: 627, + 0x9B65: 628, + 0x9B68: 629, + 0x9B69: 630, + 0x9B71: 631, + 0x9B73: 632, + 0x9B75: 633, + 0x9B81: 634, + 0x9B85: 635, + 0x9B89: 636, + 0x9B91: 637, + 0x9B93: 638, + 0x9BA1: 639, + 0x9BA5: 640, + 0x9BA9: 641, + 0x9BB1: 642, + 0x9BB3: 643, + 0x9BB5: 644, + 0x9BB7: 645, + 0x9C61: 646, + 0x9C62: 647, + 0x9C65: 648, + 0x9C69: 649, + 0x9C71: 650, + 0x9C73: 651, + 0x9C75: 652, + 0x9C76: 653, + 0x9C77: 654, + 0x9C78: 655, + 0x9C7C: 656, + 0x9C7D: 657, + 0x9C81: 658, + 0x9C82: 659, + 0x9C85: 660, + 0x9C89: 661, + 0x9C91: 662, + 0x9C93: 663, + 0x9C95: 664, + 0x9C96: 665, + 0x9C97: 666, + 0x9CA1: 667, + 0x9CA2: 668, + 0x9CA5: 669, + 0x9CB5: 670, + 0x9CB7: 671, + 0x9CE1: 672, + 0x9CE2: 673, + 0x9CE5: 674, + 0x9CE9: 675, + 0x9CF1: 676, + 0x9CF3: 677, + 0x9CF5: 678, + 0x9CF6: 679, + 0x9CF7: 680, + 0x9CFD: 681, + 0x9D41: 682, + 0x9D42: 683, + 0x9D45: 684, + 0x9D49: 685, + 0x9D51: 686, + 0x9D53: 687, + 0x9D55: 688, + 0x9D57: 689, + 0x9D61: 690, + 0x9D62: 691, + 0x9D65: 692, + 0x9D69: 693, + 0x9D71: 694, + 0x9D73: 695, + 0x9D75: 696, + 0x9D76: 697, + 0x9D77: 698, + 0x9D81: 699, + 0x9D85: 700, + 0x9D93: 701, + 0x9D95: 702, + 0x9DA1: 703, + 0x9DA2: 704, + 0x9DA5: 705, + 0x9DA9: 706, + 0x9DB1: 707, + 0x9DB3: 708, + 0x9DB5: 709, + 0x9DB7: 710, + 0x9DC1: 711, + 0x9DC5: 712, + 0x9DD7: 713, + 0x9DF6: 714, + 0x9E41: 715, + 0x9E45: 716, + 0x9E49: 717, + 0x9E51: 718, + 0x9E53: 719, + 0x9E55: 720, + 0x9E57: 721, + 0x9E61: 722, + 0x9E65: 723, + 0x9E69: 724, + 0x9E73: 725, + 0x9E75: 726, + 0x9E77: 727, + 0x9E81: 728, + 0x9E82: 729, + 0x9E85: 730, + 0x9E89: 731, + 0x9E91: 732, + 0x9E93: 733, + 0x9E95: 734, + 0x9E97: 735, + 0x9EA1: 736, + 0x9EB6: 737, + 0x9EC1: 738, + 0x9EE1: 739, + 0x9EE2: 740, + 0x9EE5: 741, + 0x9EE9: 742, + 0x9EF1: 743, + 0x9EF5: 744, + 0x9EF7: 745, + 0x9F41: 746, + 0x9F42: 747, + 0x9F45: 748, + 0x9F49: 749, + 0x9F51: 750, + 0x9F53: 751, + 0x9F55: 752, + 0x9F57: 753, + 0x9F61: 754, + 0x9F62: 755, + 0x9F65: 756, + 0x9F69: 757, + 0x9F71: 758, + 0x9F73: 759, + 0x9F75: 760, + 0x9F77: 761, + 0x9F78: 762, + 0x9F7B: 763, + 0x9F7C: 764, + 0x9FA1: 765, + 0x9FA2: 766, + 0x9FA5: 767, + 0x9FA9: 768, + 0x9FB1: 769, + 0x9FB3: 770, + 0x9FB5: 771, + 0x9FB7: 772, + 0xA061: 773, + 0xA062: 774, + 0xA065: 775, + 0xA067: 776, + 0xA068: 777, + 0xA069: 778, + 0xA06A: 779, + 0xA06B: 780, + 0xA071: 781, + 0xA073: 782, + 0xA075: 783, + 0xA077: 784, + 0xA078: 785, + 0xA07B: 786, + 0xA07D: 787, + 0xA081: 788, + 0xA082: 789, + 0xA085: 790, + 0xA089: 791, + 0xA091: 792, + 0xA093: 793, + 0xA095: 794, + 0xA096: 795, + 0xA097: 796, + 0xA098: 797, + 0xA0A1: 798, + 0xA0A2: 799, + 0xA0A9: 800, + 0xA0B7: 801, + 0xA0E1: 802, + 0xA0E2: 803, + 0xA0E5: 804, + 0xA0E9: 805, + 0xA0EB: 806, + 0xA0F1: 807, + 0xA0F3: 808, + 0xA0F5: 809, + 0xA0F7: 810, + 0xA0F8: 811, + 0xA0FD: 812, + 0xA141: 813, + 0xA142: 814, + 0xA145: 815, + 0xA149: 816, + 0xA151: 817, + 0xA153: 818, + 0xA155: 819, + 0xA156: 820, + 0xA157: 821, + 0xA161: 822, + 0xA162: 823, + 0xA165: 824, + 0xA169: 825, + 0xA175: 826, + 0xA176: 827, + 0xA177: 828, + 0xA179: 829, + 0xA181: 830, + 0xA1A1: 831, + 0xA1A2: 832, + 0xA1A4: 833, + 0xA1A5: 834, + 0xA1A9: 835, + 0xA1AB: 836, + 0xA1B1: 837, + 0xA1B3: 838, + 0xA1B5: 839, + 0xA1B7: 840, + 0xA1C1: 841, + 0xA1C5: 842, + 0xA1D6: 843, + 0xA1D7: 844, + 0xA241: 845, + 0xA245: 846, + 0xA249: 847, + 0xA253: 848, + 0xA255: 849, + 0xA257: 850, + 0xA261: 851, + 0xA265: 852, + 0xA269: 853, + 0xA273: 854, + 0xA275: 855, + 0xA281: 856, + 0xA282: 857, + 0xA283: 858, + 0xA285: 859, + 0xA288: 860, + 0xA289: 861, + 0xA28A: 862, + 0xA28B: 863, + 0xA291: 864, + 0xA293: 865, + 0xA295: 866, + 0xA297: 867, + 0xA29B: 868, + 0xA29D: 869, + 0xA2A1: 870, + 0xA2A5: 871, + 0xA2A9: 872, + 0xA2B3: 873, + 0xA2B5: 874, + 0xA2C1: 875, + 0xA2E1: 876, + 0xA2E5: 877, + 0xA2E9: 878, + 0xA341: 879, + 0xA345: 880, + 0xA349: 881, + 0xA351: 882, + 0xA355: 883, + 0xA361: 884, + 0xA365: 885, + 0xA369: 886, + 0xA371: 887, + 0xA375: 888, + 0xA3A1: 889, + 0xA3A2: 890, + 0xA3A5: 891, + 0xA3A8: 892, + 0xA3A9: 893, + 0xA3AB: 894, + 0xA3B1: 895, + 0xA3B3: 896, + 0xA3B5: 897, + 0xA3B6: 898, + 0xA3B7: 899, + 0xA3B9: 900, + 0xA3BB: 901, + 0xA461: 902, + 0xA462: 903, + 0xA463: 904, + 0xA464: 905, + 0xA465: 906, + 0xA468: 907, + 0xA469: 908, + 0xA46A: 909, + 0xA46B: 910, + 0xA46C: 911, + 0xA471: 912, + 0xA473: 913, + 0xA475: 914, + 0xA477: 915, + 0xA47B: 916, + 0xA481: 917, + 0xA482: 918, + 0xA485: 919, + 0xA489: 920, + 0xA491: 921, + 0xA493: 922, + 0xA495: 923, + 0xA496: 924, + 0xA497: 925, + 0xA49B: 926, + 0xA4A1: 927, + 0xA4A2: 928, + 0xA4A5: 929, + 0xA4B3: 930, + 0xA4E1: 931, + 0xA4E2: 932, + 0xA4E5: 933, + 0xA4E8: 934, + 0xA4E9: 935, + 0xA4EB: 936, + 0xA4F1: 937, + 0xA4F3: 938, + 0xA4F5: 939, + 0xA4F7: 940, + 0xA4F8: 941, + 0xA541: 942, + 0xA542: 943, + 0xA545: 944, + 0xA548: 945, + 0xA549: 946, + 0xA551: 947, + 0xA553: 948, + 0xA555: 949, + 0xA556: 950, + 0xA557: 951, + 0xA561: 952, + 0xA562: 953, + 0xA565: 954, + 0xA569: 955, + 0xA573: 956, + 0xA575: 957, + 0xA576: 958, + 0xA577: 959, + 0xA57B: 960, + 0xA581: 961, + 0xA585: 962, + 0xA5A1: 963, + 0xA5A2: 964, + 0xA5A3: 965, + 0xA5A5: 966, + 0xA5A9: 967, + 0xA5B1: 968, + 0xA5B3: 969, + 0xA5B5: 970, + 0xA5B7: 971, + 0xA5C1: 972, + 0xA5C5: 973, + 0xA5D6: 974, + 0xA5E1: 975, + 0xA5F6: 976, + 0xA641: 977, + 0xA642: 978, + 0xA645: 979, + 0xA649: 980, + 0xA651: 981, + 0xA653: 982, + 0xA661: 983, + 0xA665: 984, + 0xA681: 985, + 0xA682: 986, + 0xA685: 987, + 0xA688: 988, + 0xA689: 989, + 0xA68A: 990, + 0xA68B: 991, + 0xA691: 992, + 0xA693: 993, + 0xA695: 994, + 0xA697: 995, + 0xA69B: 996, + 0xA69C: 997, + 0xA6A1: 998, + 0xA6A9: 999, + 0xA6B6: 1000, + 0xA6C1: 1001, + 0xA6E1: 1002, + 0xA6E2: 1003, + 0xA6E5: 1004, + 0xA6E9: 1005, + 0xA6F7: 1006, + 0xA741: 1007, + 0xA745: 1008, + 0xA749: 1009, + 0xA751: 1010, + 0xA755: 1011, + 0xA757: 1012, + 0xA761: 1013, + 0xA762: 1014, + 0xA765: 1015, + 0xA769: 1016, + 0xA771: 1017, + 0xA773: 1018, + 0xA775: 1019, + 0xA7A1: 1020, + 0xA7A2: 1021, + 0xA7A5: 1022, + 0xA7A9: 1023, + 0xA7AB: 1024, + 0xA7B1: 1025, + 0xA7B3: 1026, + 0xA7B5: 1027, + 0xA7B7: 1028, + 0xA7B8: 1029, + 0xA7B9: 1030, + 0xA861: 1031, + 0xA862: 1032, + 0xA865: 1033, + 0xA869: 1034, + 0xA86B: 1035, + 0xA871: 1036, + 0xA873: 1037, + 0xA875: 1038, + 0xA876: 1039, + 0xA877: 1040, + 0xA87D: 1041, + 0xA881: 1042, + 0xA882: 1043, + 0xA885: 1044, + 0xA889: 1045, + 0xA891: 1046, + 0xA893: 1047, + 0xA895: 1048, + 0xA896: 1049, + 0xA897: 1050, + 0xA8A1: 1051, + 0xA8A2: 1052, + 0xA8B1: 1053, + 0xA8E1: 1054, + 0xA8E2: 1055, + 0xA8E5: 1056, + 0xA8E8: 1057, + 0xA8E9: 1058, + 0xA8F1: 1059, + 0xA8F5: 1060, + 0xA8F6: 1061, + 0xA8F7: 1062, + 0xA941: 1063, + 0xA957: 1064, + 0xA961: 1065, + 0xA962: 1066, + 0xA971: 1067, + 0xA973: 1068, + 0xA975: 1069, + 0xA976: 1070, + 0xA977: 1071, + 0xA9A1: 1072, + 0xA9A2: 1073, + 0xA9A5: 1074, + 0xA9A9: 1075, + 0xA9B1: 1076, + 0xA9B3: 1077, + 0xA9B7: 1078, + 0xAA41: 1079, + 0xAA61: 1080, + 0xAA77: 1081, + 0xAA81: 1082, + 0xAA82: 1083, + 0xAA85: 1084, + 0xAA89: 1085, + 0xAA91: 1086, + 0xAA95: 1087, + 0xAA97: 1088, + 0xAB41: 1089, + 0xAB57: 1090, + 0xAB61: 1091, + 0xAB65: 1092, + 0xAB69: 1093, + 0xAB71: 1094, + 0xAB73: 1095, + 0xABA1: 1096, + 0xABA2: 1097, + 0xABA5: 1098, + 0xABA9: 1099, + 0xABB1: 1100, + 0xABB3: 1101, + 0xABB5: 1102, + 0xABB7: 1103, + 0xAC61: 1104, + 0xAC62: 1105, + 0xAC64: 1106, + 0xAC65: 1107, + 0xAC68: 1108, + 0xAC69: 1109, + 0xAC6A: 1110, + 0xAC6B: 1111, + 0xAC71: 1112, + 0xAC73: 1113, + 0xAC75: 1114, + 0xAC76: 1115, + 0xAC77: 1116, + 0xAC7B: 1117, + 0xAC81: 1118, + 0xAC82: 1119, + 0xAC85: 1120, + 0xAC89: 1121, + 0xAC91: 1122, + 0xAC93: 1123, + 0xAC95: 1124, + 0xAC96: 1125, + 0xAC97: 1126, + 0xACA1: 1127, + 0xACA2: 1128, + 0xACA5: 1129, + 0xACA9: 1130, + 0xACB1: 1131, + 0xACB3: 1132, + 0xACB5: 1133, + 0xACB7: 1134, + 0xACC1: 1135, + 0xACC5: 1136, + 0xACC9: 1137, + 0xACD1: 1138, + 0xACD7: 1139, + 0xACE1: 1140, + 0xACE2: 1141, + 0xACE3: 1142, + 0xACE4: 1143, + 0xACE5: 1144, + 0xACE8: 1145, + 0xACE9: 1146, + 0xACEB: 1147, + 0xACEC: 1148, + 0xACF1: 1149, + 0xACF3: 1150, + 0xACF5: 1151, + 0xACF6: 1152, + 0xACF7: 1153, + 0xACFC: 1154, + 0xAD41: 1155, + 0xAD42: 1156, + 0xAD45: 1157, + 0xAD49: 1158, + 0xAD51: 1159, + 0xAD53: 1160, + 0xAD55: 1161, + 0xAD56: 1162, + 0xAD57: 1163, + 0xAD61: 1164, + 0xAD62: 1165, + 0xAD65: 1166, + 0xAD69: 1167, + 0xAD71: 1168, + 0xAD73: 1169, + 0xAD75: 1170, + 0xAD76: 1171, + 0xAD77: 1172, + 0xAD81: 1173, + 0xAD85: 1174, + 0xAD89: 1175, + 0xAD97: 1176, + 0xADA1: 1177, + 0xADA2: 1178, + 0xADA3: 1179, + 0xADA5: 1180, + 0xADA9: 1181, + 0xADAB: 1182, + 0xADB1: 1183, + 0xADB3: 1184, + 0xADB5: 1185, + 0xADB7: 1186, + 0xADBB: 1187, + 0xADC1: 1188, + 0xADC2: 1189, + 0xADC5: 1190, + 0xADC9: 1191, + 0xADD7: 1192, + 0xADE1: 1193, + 0xADE5: 1194, + 0xADE9: 1195, + 0xADF1: 1196, + 0xADF5: 1197, + 0xADF6: 1198, + 0xAE41: 1199, + 0xAE45: 1200, + 0xAE49: 1201, + 0xAE51: 1202, + 0xAE53: 1203, + 0xAE55: 1204, + 0xAE61: 1205, + 0xAE62: 1206, + 0xAE65: 1207, + 0xAE69: 1208, + 0xAE71: 1209, + 0xAE73: 1210, + 0xAE75: 1211, + 0xAE77: 1212, + 0xAE81: 1213, + 0xAE82: 1214, + 0xAE85: 1215, + 0xAE88: 1216, + 0xAE89: 1217, + 0xAE91: 1218, + 0xAE93: 1219, + 0xAE95: 1220, + 0xAE97: 1221, + 0xAE99: 1222, + 0xAE9B: 1223, + 0xAE9C: 1224, + 0xAEA1: 1225, + 0xAEB6: 1226, + 0xAEC1: 1227, + 0xAEC2: 1228, + 0xAEC5: 1229, + 0xAEC9: 1230, + 0xAED1: 1231, + 0xAED7: 1232, + 0xAEE1: 1233, + 0xAEE2: 1234, + 0xAEE5: 1235, + 0xAEE9: 1236, + 0xAEF1: 1237, + 0xAEF3: 1238, + 0xAEF5: 1239, + 0xAEF7: 1240, + 0xAF41: 1241, + 0xAF42: 1242, + 0xAF49: 1243, + 0xAF51: 1244, + 0xAF55: 1245, + 0xAF57: 1246, + 0xAF61: 1247, + 0xAF62: 1248, + 0xAF65: 1249, + 0xAF69: 1250, + 0xAF6A: 1251, + 0xAF71: 1252, + 0xAF73: 1253, + 0xAF75: 1254, + 0xAF77: 1255, + 0xAFA1: 1256, + 0xAFA2: 1257, + 0xAFA5: 1258, + 0xAFA8: 1259, + 0xAFA9: 1260, + 0xAFB0: 1261, + 0xAFB1: 1262, + 0xAFB3: 1263, + 0xAFB5: 1264, + 0xAFB7: 1265, + 0xAFBC: 1266, + 0xB061: 1267, + 0xB062: 1268, + 0xB064: 1269, + 0xB065: 1270, + 0xB069: 1271, + 0xB071: 1272, + 0xB073: 1273, + 0xB076: 1274, + 0xB077: 1275, + 0xB07D: 1276, + 0xB081: 1277, + 0xB082: 1278, + 0xB085: 1279, + 0xB089: 1280, + 0xB091: 1281, + 0xB093: 1282, + 0xB096: 1283, + 0xB097: 1284, + 0xB0B7: 1285, + 0xB0E1: 1286, + 0xB0E2: 1287, + 0xB0E5: 1288, + 0xB0E9: 1289, + 0xB0EB: 1290, + 0xB0F1: 1291, + 0xB0F3: 1292, + 0xB0F6: 1293, + 0xB0F7: 1294, + 0xB141: 1295, + 0xB145: 1296, + 0xB149: 1297, + 0xB185: 1298, + 0xB1A1: 1299, + 0xB1A2: 1300, + 0xB1A5: 1301, + 0xB1A8: 1302, + 0xB1A9: 1303, + 0xB1AB: 1304, + 0xB1B1: 1305, + 0xB1B3: 1306, + 0xB1B7: 1307, + 0xB1C1: 1308, + 0xB1C2: 1309, + 0xB1C5: 1310, + 0xB1D6: 1311, + 0xB1E1: 1312, + 0xB1F6: 1313, + 0xB241: 1314, + 0xB245: 1315, + 0xB249: 1316, + 0xB251: 1317, + 0xB253: 1318, + 0xB261: 1319, + 0xB281: 1320, + 0xB282: 1321, + 0xB285: 1322, + 0xB289: 1323, + 0xB291: 1324, + 0xB293: 1325, + 0xB297: 1326, + 0xB2A1: 1327, + 0xB2B6: 1328, + 0xB2C1: 1329, + 0xB2E1: 1330, + 0xB2E5: 1331, + 0xB357: 1332, + 0xB361: 1333, + 0xB362: 1334, + 0xB365: 1335, + 0xB369: 1336, + 0xB36B: 1337, + 0xB370: 1338, + 0xB371: 1339, + 0xB373: 1340, + 0xB381: 1341, + 0xB385: 1342, + 0xB389: 1343, + 0xB391: 1344, + 0xB3A1: 1345, + 0xB3A2: 1346, + 0xB3A5: 1347, + 0xB3A9: 1348, + 0xB3B1: 1349, + 0xB3B3: 1350, + 0xB3B5: 1351, + 0xB3B7: 1352, + 0xB461: 1353, + 0xB462: 1354, + 0xB465: 1355, + 0xB466: 1356, + 0xB467: 1357, + 0xB469: 1358, + 0xB46A: 1359, + 0xB46B: 1360, + 0xB470: 1361, + 0xB471: 1362, + 0xB473: 1363, + 0xB475: 1364, + 0xB476: 1365, + 0xB477: 1366, + 0xB47B: 1367, + 0xB47C: 1368, + 0xB481: 1369, + 0xB482: 1370, + 0xB485: 1371, + 0xB489: 1372, + 0xB491: 1373, + 0xB493: 1374, + 0xB495: 1375, + 0xB496: 1376, + 0xB497: 1377, + 0xB4A1: 1378, + 0xB4A2: 1379, + 0xB4A5: 1380, + 0xB4A9: 1381, + 0xB4AC: 1382, + 0xB4B1: 1383, + 0xB4B3: 1384, + 0xB4B5: 1385, + 0xB4B7: 1386, + 0xB4BB: 1387, + 0xB4BD: 1388, + 0xB4C1: 1389, + 0xB4C5: 1390, + 0xB4C9: 1391, + 0xB4D3: 1392, + 0xB4E1: 1393, + 0xB4E2: 1394, + 0xB4E5: 1395, + 0xB4E6: 1396, + 0xB4E8: 1397, + 0xB4E9: 1398, + 0xB4EA: 1399, + 0xB4EB: 1400, + 0xB4F1: 1401, + 0xB4F3: 1402, + 0xB4F4: 1403, + 0xB4F5: 1404, + 0xB4F6: 1405, + 0xB4F7: 1406, + 0xB4F8: 1407, + 0xB4FA: 1408, + 0xB4FC: 1409, + 0xB541: 1410, + 0xB542: 1411, + 0xB545: 1412, + 0xB549: 1413, + 0xB551: 1414, + 0xB553: 1415, + 0xB555: 1416, + 0xB557: 1417, + 0xB561: 1418, + 0xB562: 1419, + 0xB563: 1420, + 0xB565: 1421, + 0xB569: 1422, + 0xB56B: 1423, + 0xB56C: 1424, + 0xB571: 1425, + 0xB573: 1426, + 0xB574: 1427, + 0xB575: 1428, + 0xB576: 1429, + 0xB577: 1430, + 0xB57B: 1431, + 0xB57C: 1432, + 0xB57D: 1433, + 0xB581: 1434, + 0xB585: 1435, + 0xB589: 1436, + 0xB591: 1437, + 0xB593: 1438, + 0xB595: 1439, + 0xB596: 1440, + 0xB5A1: 1441, + 0xB5A2: 1442, + 0xB5A5: 1443, + 0xB5A9: 1444, + 0xB5AA: 1445, + 0xB5AB: 1446, + 0xB5AD: 1447, + 0xB5B0: 1448, + 0xB5B1: 1449, + 0xB5B3: 1450, + 0xB5B5: 1451, + 0xB5B7: 1452, + 0xB5B9: 1453, + 0xB5C1: 1454, + 0xB5C2: 1455, + 0xB5C5: 1456, + 0xB5C9: 1457, + 0xB5D1: 1458, + 0xB5D3: 1459, + 0xB5D5: 1460, + 0xB5D6: 1461, + 0xB5D7: 1462, + 0xB5E1: 1463, + 0xB5E2: 1464, + 0xB5E5: 1465, + 0xB5F1: 1466, + 0xB5F5: 1467, + 0xB5F7: 1468, + 0xB641: 1469, + 0xB642: 1470, + 0xB645: 1471, + 0xB649: 1472, + 0xB651: 1473, + 0xB653: 1474, + 0xB655: 1475, + 0xB657: 1476, + 0xB661: 1477, + 0xB662: 1478, + 0xB665: 1479, + 0xB669: 1480, + 0xB671: 1481, + 0xB673: 1482, + 0xB675: 1483, + 0xB677: 1484, + 0xB681: 1485, + 0xB682: 1486, + 0xB685: 1487, + 0xB689: 1488, + 0xB68A: 1489, + 0xB68B: 1490, + 0xB691: 1491, + 0xB693: 1492, + 0xB695: 1493, + 0xB697: 1494, + 0xB6A1: 1495, + 0xB6A2: 1496, + 0xB6A5: 1497, + 0xB6A9: 1498, + 0xB6B1: 1499, + 0xB6B3: 1500, + 0xB6B6: 1501, + 0xB6B7: 1502, + 0xB6C1: 1503, + 0xB6C2: 1504, + 0xB6C5: 1505, + 0xB6C9: 1506, + 0xB6D1: 1507, + 0xB6D3: 1508, + 0xB6D7: 1509, + 0xB6E1: 1510, + 0xB6E2: 1511, + 0xB6E5: 1512, + 0xB6E9: 1513, + 0xB6F1: 1514, + 0xB6F3: 1515, + 0xB6F5: 1516, + 0xB6F7: 1517, + 0xB741: 1518, + 0xB742: 1519, + 0xB745: 1520, + 0xB749: 1521, + 0xB751: 1522, + 0xB753: 1523, + 0xB755: 1524, + 0xB757: 1525, + 0xB759: 1526, + 0xB761: 1527, + 0xB762: 1528, + 0xB765: 1529, + 0xB769: 1530, + 0xB76F: 1531, + 0xB771: 1532, + 0xB773: 1533, + 0xB775: 1534, + 0xB777: 1535, + 0xB778: 1536, + 0xB779: 1537, + 0xB77A: 1538, + 0xB77B: 1539, + 0xB77C: 1540, + 0xB77D: 1541, + 0xB781: 1542, + 0xB785: 1543, + 0xB789: 1544, + 0xB791: 1545, + 0xB795: 1546, + 0xB7A1: 1547, + 0xB7A2: 1548, + 0xB7A5: 1549, + 0xB7A9: 1550, + 0xB7AA: 1551, + 0xB7AB: 1552, + 0xB7B0: 1553, + 0xB7B1: 1554, + 0xB7B3: 1555, + 0xB7B5: 1556, + 0xB7B6: 1557, + 0xB7B7: 1558, + 0xB7B8: 1559, + 0xB7BC: 1560, + 0xB861: 1561, + 0xB862: 1562, + 0xB865: 1563, + 0xB867: 1564, + 0xB868: 1565, + 0xB869: 1566, + 0xB86B: 1567, + 0xB871: 1568, + 0xB873: 1569, + 0xB875: 1570, + 0xB876: 1571, + 0xB877: 1572, + 0xB878: 1573, + 0xB881: 1574, + 0xB882: 1575, + 0xB885: 1576, + 0xB889: 1577, + 0xB891: 1578, + 0xB893: 1579, + 0xB895: 1580, + 0xB896: 1581, + 0xB897: 1582, + 0xB8A1: 1583, + 0xB8A2: 1584, + 0xB8A5: 1585, + 0xB8A7: 1586, + 0xB8A9: 1587, + 0xB8B1: 1588, + 0xB8B7: 1589, + 0xB8C1: 1590, + 0xB8C5: 1591, + 0xB8C9: 1592, + 0xB8E1: 1593, + 0xB8E2: 1594, + 0xB8E5: 1595, + 0xB8E9: 1596, + 0xB8EB: 1597, + 0xB8F1: 1598, + 0xB8F3: 1599, + 0xB8F5: 1600, + 0xB8F7: 1601, + 0xB8F8: 1602, + 0xB941: 1603, + 0xB942: 1604, + 0xB945: 1605, + 0xB949: 1606, + 0xB951: 1607, + 0xB953: 1608, + 0xB955: 1609, + 0xB957: 1610, + 0xB961: 1611, + 0xB965: 1612, + 0xB969: 1613, + 0xB971: 1614, + 0xB973: 1615, + 0xB976: 1616, + 0xB977: 1617, + 0xB981: 1618, + 0xB9A1: 1619, + 0xB9A2: 1620, + 0xB9A5: 1621, + 0xB9A9: 1622, + 0xB9AB: 1623, + 0xB9B1: 1624, + 0xB9B3: 1625, + 0xB9B5: 1626, + 0xB9B7: 1627, + 0xB9B8: 1628, + 0xB9B9: 1629, + 0xB9BD: 1630, + 0xB9C1: 1631, + 0xB9C2: 1632, + 0xB9C9: 1633, + 0xB9D3: 1634, + 0xB9D5: 1635, + 0xB9D7: 1636, + 0xB9E1: 1637, + 0xB9F6: 1638, + 0xB9F7: 1639, + 0xBA41: 1640, + 0xBA45: 1641, + 0xBA49: 1642, + 0xBA51: 1643, + 0xBA53: 1644, + 0xBA55: 1645, + 0xBA57: 1646, + 0xBA61: 1647, + 0xBA62: 1648, + 0xBA65: 1649, + 0xBA77: 1650, + 0xBA81: 1651, + 0xBA82: 1652, + 0xBA85: 1653, + 0xBA89: 1654, + 0xBA8A: 1655, + 0xBA8B: 1656, + 0xBA91: 1657, + 0xBA93: 1658, + 0xBA95: 1659, + 0xBA97: 1660, + 0xBAA1: 1661, + 0xBAB6: 1662, + 0xBAC1: 1663, + 0xBAE1: 1664, + 0xBAE2: 1665, + 0xBAE5: 1666, + 0xBAE9: 1667, + 0xBAF1: 1668, + 0xBAF3: 1669, + 0xBAF5: 1670, + 0xBB41: 1671, + 0xBB45: 1672, + 0xBB49: 1673, + 0xBB51: 1674, + 0xBB61: 1675, + 0xBB62: 1676, + 0xBB65: 1677, + 0xBB69: 1678, + 0xBB71: 1679, + 0xBB73: 1680, + 0xBB75: 1681, + 0xBB77: 1682, + 0xBBA1: 1683, + 0xBBA2: 1684, + 0xBBA5: 1685, + 0xBBA8: 1686, + 0xBBA9: 1687, + 0xBBAB: 1688, + 0xBBB1: 1689, + 0xBBB3: 1690, + 0xBBB5: 1691, + 0xBBB7: 1692, + 0xBBB8: 1693, + 0xBBBB: 1694, + 0xBBBC: 1695, + 0xBC61: 1696, + 0xBC62: 1697, + 0xBC65: 1698, + 0xBC67: 1699, + 0xBC69: 1700, + 0xBC6C: 1701, + 0xBC71: 1702, + 0xBC73: 1703, + 0xBC75: 1704, + 0xBC76: 1705, + 0xBC77: 1706, + 0xBC81: 1707, + 0xBC82: 1708, + 0xBC85: 1709, + 0xBC89: 1710, + 0xBC91: 1711, + 0xBC93: 1712, + 0xBC95: 1713, + 0xBC96: 1714, + 0xBC97: 1715, + 0xBCA1: 1716, + 0xBCA5: 1717, + 0xBCB7: 1718, + 0xBCE1: 1719, + 0xBCE2: 1720, + 0xBCE5: 1721, + 0xBCE9: 1722, + 0xBCF1: 1723, + 0xBCF3: 1724, + 0xBCF5: 1725, + 0xBCF6: 1726, + 0xBCF7: 1727, + 0xBD41: 1728, + 0xBD57: 1729, + 0xBD61: 1730, + 0xBD76: 1731, + 0xBDA1: 1732, + 0xBDA2: 1733, + 0xBDA5: 1734, + 0xBDA9: 1735, + 0xBDB1: 1736, + 0xBDB3: 1737, + 0xBDB5: 1738, + 0xBDB7: 1739, + 0xBDB9: 1740, + 0xBDC1: 1741, + 0xBDC2: 1742, + 0xBDC9: 1743, + 0xBDD6: 1744, + 0xBDE1: 1745, + 0xBDF6: 1746, + 0xBE41: 1747, + 0xBE45: 1748, + 0xBE49: 1749, + 0xBE51: 1750, + 0xBE53: 1751, + 0xBE77: 1752, + 0xBE81: 1753, + 0xBE82: 1754, + 0xBE85: 1755, + 0xBE89: 1756, + 0xBE91: 1757, + 0xBE93: 1758, + 0xBE97: 1759, + 0xBEA1: 1760, + 0xBEB6: 1761, + 0xBEB7: 1762, + 0xBEE1: 1763, + 0xBF41: 1764, + 0xBF61: 1765, + 0xBF71: 1766, + 0xBF75: 1767, + 0xBF77: 1768, + 0xBFA1: 1769, + 0xBFA2: 1770, + 0xBFA5: 1771, + 0xBFA9: 1772, + 0xBFB1: 1773, + 0xBFB3: 1774, + 0xBFB7: 1775, + 0xBFB8: 1776, + 0xBFBD: 1777, + 0xC061: 1778, + 0xC062: 1779, + 0xC065: 1780, + 0xC067: 1781, + 0xC069: 1782, + 0xC071: 1783, + 0xC073: 1784, + 0xC075: 1785, + 0xC076: 1786, + 0xC077: 1787, + 0xC078: 1788, + 0xC081: 1789, + 0xC082: 1790, + 0xC085: 1791, + 0xC089: 1792, + 0xC091: 1793, + 0xC093: 1794, + 0xC095: 1795, + 0xC096: 1796, + 0xC097: 1797, + 0xC0A1: 1798, + 0xC0A5: 1799, + 0xC0A7: 1800, + 0xC0A9: 1801, + 0xC0B1: 1802, + 0xC0B7: 1803, + 0xC0E1: 1804, + 0xC0E2: 1805, + 0xC0E5: 1806, + 0xC0E9: 1807, + 0xC0F1: 1808, + 0xC0F3: 1809, + 0xC0F5: 1810, + 0xC0F6: 1811, + 0xC0F7: 1812, + 0xC141: 1813, + 0xC142: 1814, + 0xC145: 1815, + 0xC149: 1816, + 0xC151: 1817, + 0xC153: 1818, + 0xC155: 1819, + 0xC157: 1820, + 0xC161: 1821, + 0xC165: 1822, + 0xC176: 1823, + 0xC181: 1824, + 0xC185: 1825, + 0xC197: 1826, + 0xC1A1: 1827, + 0xC1A2: 1828, + 0xC1A5: 1829, + 0xC1A9: 1830, + 0xC1B1: 1831, + 0xC1B3: 1832, + 0xC1B5: 1833, + 0xC1B7: 1834, + 0xC1C1: 1835, + 0xC1C5: 1836, + 0xC1C9: 1837, + 0xC1D7: 1838, + 0xC241: 1839, + 0xC245: 1840, + 0xC249: 1841, + 0xC251: 1842, + 0xC253: 1843, + 0xC255: 1844, + 0xC257: 1845, + 0xC261: 1846, + 0xC271: 1847, + 0xC281: 1848, + 0xC282: 1849, + 0xC285: 1850, + 0xC289: 1851, + 0xC291: 1852, + 0xC293: 1853, + 0xC295: 1854, + 0xC297: 1855, + 0xC2A1: 1856, + 0xC2B6: 1857, + 0xC2C1: 1858, + 0xC2C5: 1859, + 0xC2E1: 1860, + 0xC2E5: 1861, + 0xC2E9: 1862, + 0xC2F1: 1863, + 0xC2F3: 1864, + 0xC2F5: 1865, + 0xC2F7: 1866, + 0xC341: 1867, + 0xC345: 1868, + 0xC349: 1869, + 0xC351: 1870, + 0xC357: 1871, + 0xC361: 1872, + 0xC362: 1873, + 0xC365: 1874, + 0xC369: 1875, + 0xC371: 1876, + 0xC373: 1877, + 0xC375: 1878, + 0xC377: 1879, + 0xC3A1: 1880, + 0xC3A2: 1881, + 0xC3A5: 1882, + 0xC3A8: 1883, + 0xC3A9: 1884, + 0xC3AA: 1885, + 0xC3B1: 1886, + 0xC3B3: 1887, + 0xC3B5: 1888, + 0xC3B7: 1889, + 0xC461: 1890, + 0xC462: 1891, + 0xC465: 1892, + 0xC469: 1893, + 0xC471: 1894, + 0xC473: 1895, + 0xC475: 1896, + 0xC477: 1897, + 0xC481: 1898, + 0xC482: 1899, + 0xC485: 1900, + 0xC489: 1901, + 0xC491: 1902, + 0xC493: 1903, + 0xC495: 1904, + 0xC496: 1905, + 0xC497: 1906, + 0xC4A1: 1907, + 0xC4A2: 1908, + 0xC4B7: 1909, + 0xC4E1: 1910, + 0xC4E2: 1911, + 0xC4E5: 1912, + 0xC4E8: 1913, + 0xC4E9: 1914, + 0xC4F1: 1915, + 0xC4F3: 1916, + 0xC4F5: 1917, + 0xC4F6: 1918, + 0xC4F7: 1919, + 0xC541: 1920, + 0xC542: 1921, + 0xC545: 1922, + 0xC549: 1923, + 0xC551: 1924, + 0xC553: 1925, + 0xC555: 1926, + 0xC557: 1927, + 0xC561: 1928, + 0xC565: 1929, + 0xC569: 1930, + 0xC571: 1931, + 0xC573: 1932, + 0xC575: 1933, + 0xC576: 1934, + 0xC577: 1935, + 0xC581: 1936, + 0xC5A1: 1937, + 0xC5A2: 1938, + 0xC5A5: 1939, + 0xC5A9: 1940, + 0xC5B1: 1941, + 0xC5B3: 1942, + 0xC5B5: 1943, + 0xC5B7: 1944, + 0xC5C1: 1945, + 0xC5C2: 1946, + 0xC5C5: 1947, + 0xC5C9: 1948, + 0xC5D1: 1949, + 0xC5D7: 1950, + 0xC5E1: 1951, + 0xC5F7: 1952, + 0xC641: 1953, + 0xC649: 1954, + 0xC661: 1955, + 0xC681: 1956, + 0xC682: 1957, + 0xC685: 1958, + 0xC689: 1959, + 0xC691: 1960, + 0xC693: 1961, + 0xC695: 1962, + 0xC697: 1963, + 0xC6A1: 1964, + 0xC6A5: 1965, + 0xC6A9: 1966, + 0xC6B7: 1967, + 0xC6C1: 1968, + 0xC6D7: 1969, + 0xC6E1: 1970, + 0xC6E2: 1971, + 0xC6E5: 1972, + 0xC6E9: 1973, + 0xC6F1: 1974, + 0xC6F3: 1975, + 0xC6F5: 1976, + 0xC6F7: 1977, + 0xC741: 1978, + 0xC745: 1979, + 0xC749: 1980, + 0xC751: 1981, + 0xC761: 1982, + 0xC762: 1983, + 0xC765: 1984, + 0xC769: 1985, + 0xC771: 1986, + 0xC773: 1987, + 0xC777: 1988, + 0xC7A1: 1989, + 0xC7A2: 1990, + 0xC7A5: 1991, + 0xC7A9: 1992, + 0xC7B1: 1993, + 0xC7B3: 1994, + 0xC7B5: 1995, + 0xC7B7: 1996, + 0xC861: 1997, + 0xC862: 1998, + 0xC865: 1999, + 0xC869: 2000, + 0xC86A: 2001, + 0xC871: 2002, + 0xC873: 2003, + 0xC875: 2004, + 0xC876: 2005, + 0xC877: 2006, + 0xC881: 2007, + 0xC882: 2008, + 0xC885: 2009, + 0xC889: 2010, + 0xC891: 2011, + 0xC893: 2012, + 0xC895: 2013, + 0xC896: 2014, + 0xC897: 2015, + 0xC8A1: 2016, + 0xC8B7: 2017, + 0xC8E1: 2018, + 0xC8E2: 2019, + 0xC8E5: 2020, + 0xC8E9: 2021, + 0xC8EB: 2022, + 0xC8F1: 2023, + 0xC8F3: 2024, + 0xC8F5: 2025, + 0xC8F6: 2026, + 0xC8F7: 2027, + 0xC941: 2028, + 0xC942: 2029, + 0xC945: 2030, + 0xC949: 2031, + 0xC951: 2032, + 0xC953: 2033, + 0xC955: 2034, + 0xC957: 2035, + 0xC961: 2036, + 0xC965: 2037, + 0xC976: 2038, + 0xC981: 2039, + 0xC985: 2040, + 0xC9A1: 2041, + 0xC9A2: 2042, + 0xC9A5: 2043, + 0xC9A9: 2044, + 0xC9B1: 2045, + 0xC9B3: 2046, + 0xC9B5: 2047, + 0xC9B7: 2048, + 0xC9BC: 2049, + 0xC9C1: 2050, + 0xC9C5: 2051, + 0xC9E1: 2052, + 0xCA41: 2053, + 0xCA45: 2054, + 0xCA55: 2055, + 0xCA57: 2056, + 0xCA61: 2057, + 0xCA81: 2058, + 0xCA82: 2059, + 0xCA85: 2060, + 0xCA89: 2061, + 0xCA91: 2062, + 0xCA93: 2063, + 0xCA95: 2064, + 0xCA97: 2065, + 0xCAA1: 2066, + 0xCAB6: 2067, + 0xCAC1: 2068, + 0xCAE1: 2069, + 0xCAE2: 2070, + 0xCAE5: 2071, + 0xCAE9: 2072, + 0xCAF1: 2073, + 0xCAF3: 2074, + 0xCAF7: 2075, + 0xCB41: 2076, + 0xCB45: 2077, + 0xCB49: 2078, + 0xCB51: 2079, + 0xCB57: 2080, + 0xCB61: 2081, + 0xCB62: 2082, + 0xCB65: 2083, + 0xCB68: 2084, + 0xCB69: 2085, + 0xCB6B: 2086, + 0xCB71: 2087, + 0xCB73: 2088, + 0xCB75: 2089, + 0xCB81: 2090, + 0xCB85: 2091, + 0xCB89: 2092, + 0xCB91: 2093, + 0xCB93: 2094, + 0xCBA1: 2095, + 0xCBA2: 2096, + 0xCBA5: 2097, + 0xCBA9: 2098, + 0xCBB1: 2099, + 0xCBB3: 2100, + 0xCBB5: 2101, + 0xCBB7: 2102, + 0xCC61: 2103, + 0xCC62: 2104, + 0xCC63: 2105, + 0xCC65: 2106, + 0xCC69: 2107, + 0xCC6B: 2108, + 0xCC71: 2109, + 0xCC73: 2110, + 0xCC75: 2111, + 0xCC76: 2112, + 0xCC77: 2113, + 0xCC7B: 2114, + 0xCC81: 2115, + 0xCC82: 2116, + 0xCC85: 2117, + 0xCC89: 2118, + 0xCC91: 2119, + 0xCC93: 2120, + 0xCC95: 2121, + 0xCC96: 2122, + 0xCC97: 2123, + 0xCCA1: 2124, + 0xCCA2: 2125, + 0xCCE1: 2126, + 0xCCE2: 2127, + 0xCCE5: 2128, + 0xCCE9: 2129, + 0xCCF1: 2130, + 0xCCF3: 2131, + 0xCCF5: 2132, + 0xCCF6: 2133, + 0xCCF7: 2134, + 0xCD41: 2135, + 0xCD42: 2136, + 0xCD45: 2137, + 0xCD49: 2138, + 0xCD51: 2139, + 0xCD53: 2140, + 0xCD55: 2141, + 0xCD57: 2142, + 0xCD61: 2143, + 0xCD65: 2144, + 0xCD69: 2145, + 0xCD71: 2146, + 0xCD73: 2147, + 0xCD76: 2148, + 0xCD77: 2149, + 0xCD81: 2150, + 0xCD89: 2151, + 0xCD93: 2152, + 0xCD95: 2153, + 0xCDA1: 2154, + 0xCDA2: 2155, + 0xCDA5: 2156, + 0xCDA9: 2157, + 0xCDB1: 2158, + 0xCDB3: 2159, + 0xCDB5: 2160, + 0xCDB7: 2161, + 0xCDC1: 2162, + 0xCDD7: 2163, + 0xCE41: 2164, + 0xCE45: 2165, + 0xCE61: 2166, + 0xCE65: 2167, + 0xCE69: 2168, + 0xCE73: 2169, + 0xCE75: 2170, + 0xCE81: 2171, + 0xCE82: 2172, + 0xCE85: 2173, + 0xCE88: 2174, + 0xCE89: 2175, + 0xCE8B: 2176, + 0xCE91: 2177, + 0xCE93: 2178, + 0xCE95: 2179, + 0xCE97: 2180, + 0xCEA1: 2181, + 0xCEB7: 2182, + 0xCEE1: 2183, + 0xCEE5: 2184, + 0xCEE9: 2185, + 0xCEF1: 2186, + 0xCEF5: 2187, + 0xCF41: 2188, + 0xCF45: 2189, + 0xCF49: 2190, + 0xCF51: 2191, + 0xCF55: 2192, + 0xCF57: 2193, + 0xCF61: 2194, + 0xCF65: 2195, + 0xCF69: 2196, + 0xCF71: 2197, + 0xCF73: 2198, + 0xCF75: 2199, + 0xCFA1: 2200, + 0xCFA2: 2201, + 0xCFA5: 2202, + 0xCFA9: 2203, + 0xCFB1: 2204, + 0xCFB3: 2205, + 0xCFB5: 2206, + 0xCFB7: 2207, + 0xD061: 2208, + 0xD062: 2209, + 0xD065: 2210, + 0xD069: 2211, + 0xD06E: 2212, + 0xD071: 2213, + 0xD073: 2214, + 0xD075: 2215, + 0xD077: 2216, + 0xD081: 2217, + 0xD082: 2218, + 0xD085: 2219, + 0xD089: 2220, + 0xD091: 2221, + 0xD093: 2222, + 0xD095: 2223, + 0xD096: 2224, + 0xD097: 2225, + 0xD0A1: 2226, + 0xD0B7: 2227, + 0xD0E1: 2228, + 0xD0E2: 2229, + 0xD0E5: 2230, + 0xD0E9: 2231, + 0xD0EB: 2232, + 0xD0F1: 2233, + 0xD0F3: 2234, + 0xD0F5: 2235, + 0xD0F7: 2236, + 0xD141: 2237, + 0xD142: 2238, + 0xD145: 2239, + 0xD149: 2240, + 0xD151: 2241, + 0xD153: 2242, + 0xD155: 2243, + 0xD157: 2244, + 0xD161: 2245, + 0xD162: 2246, + 0xD165: 2247, + 0xD169: 2248, + 0xD171: 2249, + 0xD173: 2250, + 0xD175: 2251, + 0xD176: 2252, + 0xD177: 2253, + 0xD181: 2254, + 0xD185: 2255, + 0xD189: 2256, + 0xD193: 2257, + 0xD1A1: 2258, + 0xD1A2: 2259, + 0xD1A5: 2260, + 0xD1A9: 2261, + 0xD1AE: 2262, + 0xD1B1: 2263, + 0xD1B3: 2264, + 0xD1B5: 2265, + 0xD1B7: 2266, + 0xD1BB: 2267, + 0xD1C1: 2268, + 0xD1C2: 2269, + 0xD1C5: 2270, + 0xD1C9: 2271, + 0xD1D5: 2272, + 0xD1D7: 2273, + 0xD1E1: 2274, + 0xD1E2: 2275, + 0xD1E5: 2276, + 0xD1F5: 2277, + 0xD1F7: 2278, + 0xD241: 2279, + 0xD242: 2280, + 0xD245: 2281, + 0xD249: 2282, + 0xD253: 2283, + 0xD255: 2284, + 0xD257: 2285, + 0xD261: 2286, + 0xD265: 2287, + 0xD269: 2288, + 0xD273: 2289, + 0xD275: 2290, + 0xD281: 2291, + 0xD282: 2292, + 0xD285: 2293, + 0xD289: 2294, + 0xD28E: 2295, + 0xD291: 2296, + 0xD295: 2297, + 0xD297: 2298, + 0xD2A1: 2299, + 0xD2A5: 2300, + 0xD2A9: 2301, + 0xD2B1: 2302, + 0xD2B7: 2303, + 0xD2C1: 2304, + 0xD2C2: 2305, + 0xD2C5: 2306, + 0xD2C9: 2307, + 0xD2D7: 2308, + 0xD2E1: 2309, + 0xD2E2: 2310, + 0xD2E5: 2311, + 0xD2E9: 2312, + 0xD2F1: 2313, + 0xD2F3: 2314, + 0xD2F5: 2315, + 0xD2F7: 2316, + 0xD341: 2317, + 0xD342: 2318, + 0xD345: 2319, + 0xD349: 2320, + 0xD351: 2321, + 0xD355: 2322, + 0xD357: 2323, + 0xD361: 2324, + 0xD362: 2325, + 0xD365: 2326, + 0xD367: 2327, + 0xD368: 2328, + 0xD369: 2329, + 0xD36A: 2330, + 0xD371: 2331, + 0xD373: 2332, + 0xD375: 2333, + 0xD377: 2334, + 0xD37B: 2335, + 0xD381: 2336, + 0xD385: 2337, + 0xD389: 2338, + 0xD391: 2339, + 0xD393: 2340, + 0xD397: 2341, + 0xD3A1: 2342, + 0xD3A2: 2343, + 0xD3A5: 2344, + 0xD3A9: 2345, + 0xD3B1: 2346, + 0xD3B3: 2347, + 0xD3B5: 2348, + 0xD3B7: 2349, +} diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabprober.py new file mode 100644 index 0000000..d7364ba --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabprober.py @@ -0,0 +1,47 @@ +######################## 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 JOHABDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import JOHAB_SM_MODEL + + +class JOHABProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(JOHAB_SM_MODEL) + self.distribution_analyzer = JOHABDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "Johab" + + @property + def language(self) -> str: + return "Korean" diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/jpcntx.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/jpcntx.py new file mode 100644 index 0000000..2f53bdd --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/jpcntx.py @@ -0,0 +1,238 @@ +######################## 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 typing import List, Tuple, Union + +# This is hiragana 2-char sequence table, the number in each cell represents its frequency category +# fmt: off +jp2_char_context = ( + (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), +) +# fmt: on + + +class JapaneseContextAnalysis: + NUM_OF_CATEGORY = 6 + DONT_KNOW = -1 + ENOUGH_REL_THRESHOLD = 100 + MAX_REL_THRESHOLD = 1000 + MINIMUM_DATA_THRESHOLD = 4 + + def __init__(self) -> None: + self._total_rel = 0 + self._rel_sample: List[int] = [] + self._need_to_skip_char_num = 0 + self._last_char_order = -1 + self._done = False + self.reset() + + def reset(self) -> None: + 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: Union[bytes, bytearray], num_bytes: int) -> None: + 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[ + jp2_char_context[self._last_char_order][order] + ] += 1 + self._last_char_order = order + + def got_enough_data(self) -> bool: + return self._total_rel > self.ENOUGH_REL_THRESHOLD + + def get_confidence(self) -> float: + # 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 + return self.DONT_KNOW + + def get_order(self, _: Union[bytes, bytearray]) -> Tuple[int, int]: + return -1, 1 + + +class SJISContextAnalysis(JapaneseContextAnalysis): + def __init__(self) -> None: + super().__init__() + self._charset_name = "SHIFT_JIS" + + @property + def charset_name(self) -> str: + return self._charset_name + + def get_order(self, byte_str: Union[bytes, bytearray]) -> Tuple[int, int]: + 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: Union[bytes, bytearray]) -> Tuple[int, int]: + 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.11/site-packages/pip/_vendor/chardet/langbulgarianmodel.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langbulgarianmodel.py new file mode 100644 index 0000000..9946682 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langbulgarianmodel.py @@ -0,0 +1,4649 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +BULGARIAN_LANG_MODEL = { + 63: { # 'e' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 1, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 45: { # '\xad' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 1, # 'М' + 36: 0, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 31: { # 'А' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 1, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 2, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 2, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 0, # 'и' + 26: 2, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 32: { # 'Б' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 1, # 'Щ' + 61: 2, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 35: { # 'В' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 2, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 2, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 43: { # 'Г' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 1, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 37: { # 'Д' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 2, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 44: { # 'Е' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 2, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 0, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 55: { # 'Ж' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 47: { # 'З' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 40: { # 'И' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 2, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 2, # 'Я' + 1: 1, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 3, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 0, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 59: { # 'Й' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 33: { # 'К' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 46: { # 'Л' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 2, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 38: { # 'М' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 36: { # 'Н' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 2, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 41: { # 'О' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 2, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 2, # 'ч' + 27: 0, # 'ш' + 24: 2, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 30: { # 'П' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 2, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 39: { # 'Р' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 2, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 28: { # 'С' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 3, # 'А' + 32: 2, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 34: { # 'Т' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 51: { # 'У' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 2, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 48: { # 'Ф' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 49: { # 'Х' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 53: { # 'Ц' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 50: { # 'Ч' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 54: { # 'Ш' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 57: { # 'Щ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 61: { # 'Ъ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 60: { # 'Ю' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 1, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 0, # 'е' + 23: 2, # 'ж' + 15: 1, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 56: { # 'Я' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 1, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 1: { # 'а' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 18: { # 'б' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 0, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 2, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 3, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 9: { # 'в' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 0, # 'в' + 20: 2, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 20: { # 'г' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 11: { # 'д' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 1, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 3: { # 'е' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 2, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 23: { # 'ж' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 15: { # 'з' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 2: { # 'и' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 1, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 26: { # 'й' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 12: { # 'к' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 3, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 10: { # 'л' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 1, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 3, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 14: { # 'м' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 6: { # 'н' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 2, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 3, # 'ф' + 25: 2, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 4: { # 'о' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 13: { # 'п' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 7: { # 'р' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 2, # 'ч' + 27: 3, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 8: { # 'с' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 5: { # 'т' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 19: { # 'у' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 2, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 2, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 29: { # 'ф' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 2, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 25: { # 'х' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 22: { # 'ц' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 21: { # 'ч' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 27: { # 'ш' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 24: { # 'щ' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 17: { # 'ъ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 1, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 3, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 2, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 52: { # 'ь' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 42: { # 'ю' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 1, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 1, # 'е' + 23: 2, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 1, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 16: { # 'я' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 1, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 3, # 'х' + 22: 2, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 2, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 58: { # 'є' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 62: { # '№' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +ISO_8859_5_BULGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 77, # 'A' + 66: 90, # 'B' + 67: 99, # 'C' + 68: 100, # 'D' + 69: 72, # 'E' + 70: 109, # 'F' + 71: 107, # 'G' + 72: 101, # 'H' + 73: 79, # 'I' + 74: 185, # 'J' + 75: 81, # 'K' + 76: 102, # 'L' + 77: 76, # 'M' + 78: 94, # 'N' + 79: 82, # 'O' + 80: 110, # 'P' + 81: 186, # 'Q' + 82: 108, # 'R' + 83: 91, # 'S' + 84: 74, # 'T' + 85: 119, # 'U' + 86: 84, # 'V' + 87: 96, # 'W' + 88: 111, # 'X' + 89: 187, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 65, # 'a' + 98: 69, # 'b' + 99: 70, # 'c' + 100: 66, # 'd' + 101: 63, # 'e' + 102: 68, # 'f' + 103: 112, # 'g' + 104: 103, # 'h' + 105: 92, # 'i' + 106: 194, # 'j' + 107: 104, # 'k' + 108: 95, # 'l' + 109: 86, # 'm' + 110: 87, # 'n' + 111: 71, # 'o' + 112: 116, # 'p' + 113: 195, # 'q' + 114: 85, # 'r' + 115: 93, # 's' + 116: 97, # 't' + 117: 113, # 'u' + 118: 196, # 'v' + 119: 197, # 'w' + 120: 198, # 'x' + 121: 199, # 'y' + 122: 200, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 194, # '\x80' + 129: 195, # '\x81' + 130: 196, # '\x82' + 131: 197, # '\x83' + 132: 198, # '\x84' + 133: 199, # '\x85' + 134: 200, # '\x86' + 135: 201, # '\x87' + 136: 202, # '\x88' + 137: 203, # '\x89' + 138: 204, # '\x8a' + 139: 205, # '\x8b' + 140: 206, # '\x8c' + 141: 207, # '\x8d' + 142: 208, # '\x8e' + 143: 209, # '\x8f' + 144: 210, # '\x90' + 145: 211, # '\x91' + 146: 212, # '\x92' + 147: 213, # '\x93' + 148: 214, # '\x94' + 149: 215, # '\x95' + 150: 216, # '\x96' + 151: 217, # '\x97' + 152: 218, # '\x98' + 153: 219, # '\x99' + 154: 220, # '\x9a' + 155: 221, # '\x9b' + 156: 222, # '\x9c' + 157: 223, # '\x9d' + 158: 224, # '\x9e' + 159: 225, # '\x9f' + 160: 81, # '\xa0' + 161: 226, # 'Ё' + 162: 227, # 'Ђ' + 163: 228, # 'Ѓ' + 164: 229, # 'Є' + 165: 230, # 'Ѕ' + 166: 105, # 'І' + 167: 231, # 'Ї' + 168: 232, # 'Ј' + 169: 233, # 'Љ' + 170: 234, # 'Њ' + 171: 235, # 'Ћ' + 172: 236, # 'Ќ' + 173: 45, # '\xad' + 174: 237, # 'Ў' + 175: 238, # 'Џ' + 176: 31, # 'А' + 177: 32, # 'Б' + 178: 35, # 'В' + 179: 43, # 'Г' + 180: 37, # 'Д' + 181: 44, # 'Е' + 182: 55, # 'Ж' + 183: 47, # 'З' + 184: 40, # 'И' + 185: 59, # 'Й' + 186: 33, # 'К' + 187: 46, # 'Л' + 188: 38, # 'М' + 189: 36, # 'Н' + 190: 41, # 'О' + 191: 30, # 'П' + 192: 39, # 'Р' + 193: 28, # 'С' + 194: 34, # 'Т' + 195: 51, # 'У' + 196: 48, # 'Ф' + 197: 49, # 'Х' + 198: 53, # 'Ц' + 199: 50, # 'Ч' + 200: 54, # 'Ш' + 201: 57, # 'Щ' + 202: 61, # 'Ъ' + 203: 239, # 'Ы' + 204: 67, # 'Ь' + 205: 240, # 'Э' + 206: 60, # 'Ю' + 207: 56, # 'Я' + 208: 1, # 'а' + 209: 18, # 'б' + 210: 9, # 'в' + 211: 20, # 'г' + 212: 11, # 'д' + 213: 3, # 'е' + 214: 23, # 'ж' + 215: 15, # 'з' + 216: 2, # 'и' + 217: 26, # 'й' + 218: 12, # 'к' + 219: 10, # 'л' + 220: 14, # 'м' + 221: 6, # 'н' + 222: 4, # 'о' + 223: 13, # 'п' + 224: 7, # 'р' + 225: 8, # 'с' + 226: 5, # 'т' + 227: 19, # 'у' + 228: 29, # 'ф' + 229: 25, # 'х' + 230: 22, # 'ц' + 231: 21, # 'ч' + 232: 27, # 'ш' + 233: 24, # 'щ' + 234: 17, # 'ъ' + 235: 75, # 'ы' + 236: 52, # 'ь' + 237: 241, # 'э' + 238: 42, # 'ю' + 239: 16, # 'я' + 240: 62, # '№' + 241: 242, # 'ё' + 242: 243, # 'ђ' + 243: 244, # 'ѓ' + 244: 58, # 'є' + 245: 245, # 'ѕ' + 246: 98, # 'і' + 247: 246, # 'ї' + 248: 247, # 'ј' + 249: 248, # 'љ' + 250: 249, # 'њ' + 251: 250, # 'ћ' + 252: 251, # 'ќ' + 253: 91, # '§' + 254: 252, # 'ў' + 255: 253, # 'џ' +} + +ISO_8859_5_BULGARIAN_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-5", + language="Bulgarian", + char_to_order_map=ISO_8859_5_BULGARIAN_CHAR_TO_ORDER, + language_model=BULGARIAN_LANG_MODEL, + typical_positive_ratio=0.969392, + keep_ascii_letters=False, + alphabet="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", +) + +WINDOWS_1251_BULGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 77, # 'A' + 66: 90, # 'B' + 67: 99, # 'C' + 68: 100, # 'D' + 69: 72, # 'E' + 70: 109, # 'F' + 71: 107, # 'G' + 72: 101, # 'H' + 73: 79, # 'I' + 74: 185, # 'J' + 75: 81, # 'K' + 76: 102, # 'L' + 77: 76, # 'M' + 78: 94, # 'N' + 79: 82, # 'O' + 80: 110, # 'P' + 81: 186, # 'Q' + 82: 108, # 'R' + 83: 91, # 'S' + 84: 74, # 'T' + 85: 119, # 'U' + 86: 84, # 'V' + 87: 96, # 'W' + 88: 111, # 'X' + 89: 187, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 65, # 'a' + 98: 69, # 'b' + 99: 70, # 'c' + 100: 66, # 'd' + 101: 63, # 'e' + 102: 68, # 'f' + 103: 112, # 'g' + 104: 103, # 'h' + 105: 92, # 'i' + 106: 194, # 'j' + 107: 104, # 'k' + 108: 95, # 'l' + 109: 86, # 'm' + 110: 87, # 'n' + 111: 71, # 'o' + 112: 116, # 'p' + 113: 195, # 'q' + 114: 85, # 'r' + 115: 93, # 's' + 116: 97, # 't' + 117: 113, # 'u' + 118: 196, # 'v' + 119: 197, # 'w' + 120: 198, # 'x' + 121: 199, # 'y' + 122: 200, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 206, # 'Ђ' + 129: 207, # 'Ѓ' + 130: 208, # '‚' + 131: 209, # 'ѓ' + 132: 210, # '„' + 133: 211, # '…' + 134: 212, # '†' + 135: 213, # '‡' + 136: 120, # '€' + 137: 214, # '‰' + 138: 215, # 'Љ' + 139: 216, # '‹' + 140: 217, # 'Њ' + 141: 218, # 'Ќ' + 142: 219, # 'Ћ' + 143: 220, # 'Џ' + 144: 221, # 'ђ' + 145: 78, # '‘' + 146: 64, # '’' + 147: 83, # '“' + 148: 121, # '”' + 149: 98, # '•' + 150: 117, # '–' + 151: 105, # '—' + 152: 222, # None + 153: 223, # '™' + 154: 224, # 'љ' + 155: 225, # '›' + 156: 226, # 'њ' + 157: 227, # 'ќ' + 158: 228, # 'ћ' + 159: 229, # 'џ' + 160: 88, # '\xa0' + 161: 230, # 'Ў' + 162: 231, # 'ў' + 163: 232, # 'Ј' + 164: 233, # '¤' + 165: 122, # 'Ґ' + 166: 89, # '¦' + 167: 106, # '§' + 168: 234, # 'Ё' + 169: 235, # '©' + 170: 236, # 'Є' + 171: 237, # '«' + 172: 238, # '¬' + 173: 45, # '\xad' + 174: 239, # '®' + 175: 240, # 'Ї' + 176: 73, # '°' + 177: 80, # '±' + 178: 118, # 'І' + 179: 114, # 'і' + 180: 241, # 'ґ' + 181: 242, # 'µ' + 182: 243, # '¶' + 183: 244, # '·' + 184: 245, # 'ё' + 185: 62, # '№' + 186: 58, # 'є' + 187: 246, # '»' + 188: 247, # 'ј' + 189: 248, # 'Ѕ' + 190: 249, # 'ѕ' + 191: 250, # 'ї' + 192: 31, # 'А' + 193: 32, # 'Б' + 194: 35, # 'В' + 195: 43, # 'Г' + 196: 37, # 'Д' + 197: 44, # 'Е' + 198: 55, # 'Ж' + 199: 47, # 'З' + 200: 40, # 'И' + 201: 59, # 'Й' + 202: 33, # 'К' + 203: 46, # 'Л' + 204: 38, # 'М' + 205: 36, # 'Н' + 206: 41, # 'О' + 207: 30, # 'П' + 208: 39, # 'Р' + 209: 28, # 'С' + 210: 34, # 'Т' + 211: 51, # 'У' + 212: 48, # 'Ф' + 213: 49, # 'Х' + 214: 53, # 'Ц' + 215: 50, # 'Ч' + 216: 54, # 'Ш' + 217: 57, # 'Щ' + 218: 61, # 'Ъ' + 219: 251, # 'Ы' + 220: 67, # 'Ь' + 221: 252, # 'Э' + 222: 60, # 'Ю' + 223: 56, # 'Я' + 224: 1, # 'а' + 225: 18, # 'б' + 226: 9, # 'в' + 227: 20, # 'г' + 228: 11, # 'д' + 229: 3, # 'е' + 230: 23, # 'ж' + 231: 15, # 'з' + 232: 2, # 'и' + 233: 26, # 'й' + 234: 12, # 'к' + 235: 10, # 'л' + 236: 14, # 'м' + 237: 6, # 'н' + 238: 4, # 'о' + 239: 13, # 'п' + 240: 7, # 'р' + 241: 8, # 'с' + 242: 5, # 'т' + 243: 19, # 'у' + 244: 29, # 'ф' + 245: 25, # 'х' + 246: 22, # 'ц' + 247: 21, # 'ч' + 248: 27, # 'ш' + 249: 24, # 'щ' + 250: 17, # 'ъ' + 251: 75, # 'ы' + 252: 52, # 'ь' + 253: 253, # 'э' + 254: 42, # 'ю' + 255: 16, # 'я' +} + +WINDOWS_1251_BULGARIAN_MODEL = SingleByteCharSetModel( + charset_name="windows-1251", + language="Bulgarian", + char_to_order_map=WINDOWS_1251_BULGARIAN_CHAR_TO_ORDER, + language_model=BULGARIAN_LANG_MODEL, + typical_positive_ratio=0.969392, + keep_ascii_letters=False, + alphabet="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", +) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langgreekmodel.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langgreekmodel.py new file mode 100644 index 0000000..cfb8639 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langgreekmodel.py @@ -0,0 +1,4397 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +GREEK_LANG_MODEL = { + 60: { # 'e' + 60: 2, # 'e' + 55: 1, # 'o' + 58: 2, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 55: { # 'o' + 60: 0, # 'e' + 55: 2, # 'o' + 58: 2, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 58: { # 't' + 60: 2, # 'e' + 55: 1, # 'o' + 58: 1, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 1, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 36: { # '·' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 61: { # 'Ά' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 1, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 1, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 46: { # 'Έ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 2, # 'β' + 20: 2, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 1, # 'σ' + 2: 2, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 54: { # 'Ό' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 31: { # 'Α' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 2, # 'Β' + 43: 2, # 'Γ' + 41: 1, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 2, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 1, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 2, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 2, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 1, # 'θ' + 5: 0, # 'ι' + 11: 2, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 2, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 51: { # 'Β' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 1, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 43: { # 'Γ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 1, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 41: { # 'Δ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 1, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 34: { # 'Ε' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 2, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 1, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 2, # 'Χ' + 57: 2, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 1, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 1, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 1, # 'ύ' + 27: 0, # 'ώ' + }, + 40: { # 'Η' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 2, # 'Θ' + 47: 0, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 52: { # 'Θ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 1, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 47: { # 'Ι' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 1, # 'Β' + 43: 1, # 'Γ' + 41: 2, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 2, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 1, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 1, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 44: { # 'Κ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 1, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 1, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 53: { # 'Λ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 2, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 2, # 'Σ' + 33: 0, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 1, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 38: { # 'Μ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 2, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 2, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 49: { # 'Ν' + 60: 2, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 1, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 1, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 59: { # 'Ξ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 39: { # 'Ο' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 1, # 'Β' + 43: 2, # 'Γ' + 41: 2, # 'Δ' + 34: 2, # 'Ε' + 40: 1, # 'Η' + 52: 2, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 2, # 'Φ' + 50: 2, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 1, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 35: { # 'Π' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 2, # 'Λ' + 38: 1, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 1, # 'έ' + 22: 1, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 3, # 'ώ' + }, + 48: { # 'Ρ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 1, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 1, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 37: { # 'Σ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 2, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 2, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 2, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 2, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 33: { # 'Τ' + 60: 0, # 'e' + 55: 1, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 2, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 45: { # 'Υ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 2, # 'Η' + 52: 2, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 1, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 56: { # 'Φ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 1, # 'ύ' + 27: 1, # 'ώ' + }, + 50: { # 'Χ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 1, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 1, # 'Ω' + 17: 2, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 57: { # 'Ω' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 2, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 17: { # 'ά' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 3, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 3, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 18: { # 'έ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 3, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 22: { # 'ή' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 15: { # 'ί' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 3, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 1, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 1: { # 'α' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 2, # 'ε' + 32: 3, # 'ζ' + 13: 1, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 29: { # 'β' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 2, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 3, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 20: { # 'γ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 21: { # 'δ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 3: { # 'ε' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 2, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 2, # 'ε' + 32: 2, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 32: { # 'ζ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 2, # 'ώ' + }, + 13: { # 'η' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 25: { # 'θ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 1, # 'λ' + 10: 3, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 5: { # 'ι' + 60: 0, # 'e' + 55: 1, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 0, # 'ύ' + 27: 3, # 'ώ' + }, + 11: { # 'κ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 16: { # 'λ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 1, # 'β' + 20: 2, # 'γ' + 21: 1, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 10: { # 'μ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 3, # 'φ' + 23: 0, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 6: { # 'ν' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 1, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 30: { # 'ξ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 3, # 'ύ' + 27: 1, # 'ώ' + }, + 4: { # 'ο' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 2, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 1, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 9: { # 'π' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 3, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 2, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 8: { # 'ρ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 1, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 3, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 14: { # 'ς' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 7: { # 'σ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 2: { # 'τ' + 60: 0, # 'e' + 55: 2, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 12: { # 'υ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 2, # 'ε' + 32: 2, # 'ζ' + 13: 2, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 2, # 'ώ' + }, + 28: { # 'φ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 1, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 23: { # 'χ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 42: { # 'ψ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 1, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 24: { # 'ω' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 1, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 19: { # 'ό' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 1, # 'ε' + 32: 2, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 1, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 26: { # 'ύ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 2, # 'β' + 20: 2, # 'γ' + 21: 1, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 27: { # 'ώ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 1, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 1, # 'η' + 25: 2, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 1, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 1, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1253_GREEK_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 82, # 'A' + 66: 100, # 'B' + 67: 104, # 'C' + 68: 94, # 'D' + 69: 98, # 'E' + 70: 101, # 'F' + 71: 116, # 'G' + 72: 102, # 'H' + 73: 111, # 'I' + 74: 187, # 'J' + 75: 117, # 'K' + 76: 92, # 'L' + 77: 88, # 'M' + 78: 113, # 'N' + 79: 85, # 'O' + 80: 79, # 'P' + 81: 118, # 'Q' + 82: 105, # 'R' + 83: 83, # 'S' + 84: 67, # 'T' + 85: 114, # 'U' + 86: 119, # 'V' + 87: 95, # 'W' + 88: 99, # 'X' + 89: 109, # 'Y' + 90: 188, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 72, # 'a' + 98: 70, # 'b' + 99: 80, # 'c' + 100: 81, # 'd' + 101: 60, # 'e' + 102: 96, # 'f' + 103: 93, # 'g' + 104: 89, # 'h' + 105: 68, # 'i' + 106: 120, # 'j' + 107: 97, # 'k' + 108: 77, # 'l' + 109: 86, # 'm' + 110: 69, # 'n' + 111: 55, # 'o' + 112: 78, # 'p' + 113: 115, # 'q' + 114: 65, # 'r' + 115: 66, # 's' + 116: 58, # 't' + 117: 76, # 'u' + 118: 106, # 'v' + 119: 103, # 'w' + 120: 87, # 'x' + 121: 107, # 'y' + 122: 112, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 255, # '€' + 129: 255, # None + 130: 255, # '‚' + 131: 255, # 'ƒ' + 132: 255, # '„' + 133: 255, # '…' + 134: 255, # '†' + 135: 255, # '‡' + 136: 255, # None + 137: 255, # '‰' + 138: 255, # None + 139: 255, # '‹' + 140: 255, # None + 141: 255, # None + 142: 255, # None + 143: 255, # None + 144: 255, # None + 145: 255, # '‘' + 146: 255, # '’' + 147: 255, # '“' + 148: 255, # '”' + 149: 255, # '•' + 150: 255, # '–' + 151: 255, # '—' + 152: 255, # None + 153: 255, # '™' + 154: 255, # None + 155: 255, # '›' + 156: 255, # None + 157: 255, # None + 158: 255, # None + 159: 255, # None + 160: 253, # '\xa0' + 161: 233, # '΅' + 162: 61, # 'Ά' + 163: 253, # '£' + 164: 253, # '¤' + 165: 253, # '¥' + 166: 253, # '¦' + 167: 253, # '§' + 168: 253, # '¨' + 169: 253, # '©' + 170: 253, # None + 171: 253, # '«' + 172: 253, # '¬' + 173: 74, # '\xad' + 174: 253, # '®' + 175: 253, # '―' + 176: 253, # '°' + 177: 253, # '±' + 178: 253, # '²' + 179: 253, # '³' + 180: 247, # '΄' + 181: 253, # 'µ' + 182: 253, # '¶' + 183: 36, # '·' + 184: 46, # 'Έ' + 185: 71, # 'Ή' + 186: 73, # 'Ί' + 187: 253, # '»' + 188: 54, # 'Ό' + 189: 253, # '½' + 190: 108, # 'Ύ' + 191: 123, # 'Ώ' + 192: 110, # 'ΐ' + 193: 31, # 'Α' + 194: 51, # 'Β' + 195: 43, # 'Γ' + 196: 41, # 'Δ' + 197: 34, # 'Ε' + 198: 91, # 'Ζ' + 199: 40, # 'Η' + 200: 52, # 'Θ' + 201: 47, # 'Ι' + 202: 44, # 'Κ' + 203: 53, # 'Λ' + 204: 38, # 'Μ' + 205: 49, # 'Ν' + 206: 59, # 'Ξ' + 207: 39, # 'Ο' + 208: 35, # 'Π' + 209: 48, # 'Ρ' + 210: 250, # None + 211: 37, # 'Σ' + 212: 33, # 'Τ' + 213: 45, # 'Υ' + 214: 56, # 'Φ' + 215: 50, # 'Χ' + 216: 84, # 'Ψ' + 217: 57, # 'Ω' + 218: 120, # 'Ϊ' + 219: 121, # 'Ϋ' + 220: 17, # 'ά' + 221: 18, # 'έ' + 222: 22, # 'ή' + 223: 15, # 'ί' + 224: 124, # 'ΰ' + 225: 1, # 'α' + 226: 29, # 'β' + 227: 20, # 'γ' + 228: 21, # 'δ' + 229: 3, # 'ε' + 230: 32, # 'ζ' + 231: 13, # 'η' + 232: 25, # 'θ' + 233: 5, # 'ι' + 234: 11, # 'κ' + 235: 16, # 'λ' + 236: 10, # 'μ' + 237: 6, # 'ν' + 238: 30, # 'ξ' + 239: 4, # 'ο' + 240: 9, # 'π' + 241: 8, # 'ρ' + 242: 14, # 'ς' + 243: 7, # 'σ' + 244: 2, # 'τ' + 245: 12, # 'υ' + 246: 28, # 'φ' + 247: 23, # 'χ' + 248: 42, # 'ψ' + 249: 24, # 'ω' + 250: 64, # 'ϊ' + 251: 75, # 'ϋ' + 252: 19, # 'ό' + 253: 26, # 'ύ' + 254: 27, # 'ώ' + 255: 253, # None +} + +WINDOWS_1253_GREEK_MODEL = SingleByteCharSetModel( + charset_name="windows-1253", + language="Greek", + char_to_order_map=WINDOWS_1253_GREEK_CHAR_TO_ORDER, + language_model=GREEK_LANG_MODEL, + typical_positive_ratio=0.982851, + keep_ascii_letters=False, + alphabet="ΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίαβγδεζηθικλμνξοπρςστυφχψωόύώ", +) + +ISO_8859_7_GREEK_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 82, # 'A' + 66: 100, # 'B' + 67: 104, # 'C' + 68: 94, # 'D' + 69: 98, # 'E' + 70: 101, # 'F' + 71: 116, # 'G' + 72: 102, # 'H' + 73: 111, # 'I' + 74: 187, # 'J' + 75: 117, # 'K' + 76: 92, # 'L' + 77: 88, # 'M' + 78: 113, # 'N' + 79: 85, # 'O' + 80: 79, # 'P' + 81: 118, # 'Q' + 82: 105, # 'R' + 83: 83, # 'S' + 84: 67, # 'T' + 85: 114, # 'U' + 86: 119, # 'V' + 87: 95, # 'W' + 88: 99, # 'X' + 89: 109, # 'Y' + 90: 188, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 72, # 'a' + 98: 70, # 'b' + 99: 80, # 'c' + 100: 81, # 'd' + 101: 60, # 'e' + 102: 96, # 'f' + 103: 93, # 'g' + 104: 89, # 'h' + 105: 68, # 'i' + 106: 120, # 'j' + 107: 97, # 'k' + 108: 77, # 'l' + 109: 86, # 'm' + 110: 69, # 'n' + 111: 55, # 'o' + 112: 78, # 'p' + 113: 115, # 'q' + 114: 65, # 'r' + 115: 66, # 's' + 116: 58, # 't' + 117: 76, # 'u' + 118: 106, # 'v' + 119: 103, # 'w' + 120: 87, # 'x' + 121: 107, # 'y' + 122: 112, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 255, # '\x80' + 129: 255, # '\x81' + 130: 255, # '\x82' + 131: 255, # '\x83' + 132: 255, # '\x84' + 133: 255, # '\x85' + 134: 255, # '\x86' + 135: 255, # '\x87' + 136: 255, # '\x88' + 137: 255, # '\x89' + 138: 255, # '\x8a' + 139: 255, # '\x8b' + 140: 255, # '\x8c' + 141: 255, # '\x8d' + 142: 255, # '\x8e' + 143: 255, # '\x8f' + 144: 255, # '\x90' + 145: 255, # '\x91' + 146: 255, # '\x92' + 147: 255, # '\x93' + 148: 255, # '\x94' + 149: 255, # '\x95' + 150: 255, # '\x96' + 151: 255, # '\x97' + 152: 255, # '\x98' + 153: 255, # '\x99' + 154: 255, # '\x9a' + 155: 255, # '\x9b' + 156: 255, # '\x9c' + 157: 255, # '\x9d' + 158: 255, # '\x9e' + 159: 255, # '\x9f' + 160: 253, # '\xa0' + 161: 233, # '‘' + 162: 90, # '’' + 163: 253, # '£' + 164: 253, # '€' + 165: 253, # '₯' + 166: 253, # '¦' + 167: 253, # '§' + 168: 253, # '¨' + 169: 253, # '©' + 170: 253, # 'ͺ' + 171: 253, # '«' + 172: 253, # '¬' + 173: 74, # '\xad' + 174: 253, # None + 175: 253, # '―' + 176: 253, # '°' + 177: 253, # '±' + 178: 253, # '²' + 179: 253, # '³' + 180: 247, # '΄' + 181: 248, # '΅' + 182: 61, # 'Ά' + 183: 36, # '·' + 184: 46, # 'Έ' + 185: 71, # 'Ή' + 186: 73, # 'Ί' + 187: 253, # '»' + 188: 54, # 'Ό' + 189: 253, # '½' + 190: 108, # 'Ύ' + 191: 123, # 'Ώ' + 192: 110, # 'ΐ' + 193: 31, # 'Α' + 194: 51, # 'Β' + 195: 43, # 'Γ' + 196: 41, # 'Δ' + 197: 34, # 'Ε' + 198: 91, # 'Ζ' + 199: 40, # 'Η' + 200: 52, # 'Θ' + 201: 47, # 'Ι' + 202: 44, # 'Κ' + 203: 53, # 'Λ' + 204: 38, # 'Μ' + 205: 49, # 'Ν' + 206: 59, # 'Ξ' + 207: 39, # 'Ο' + 208: 35, # 'Π' + 209: 48, # 'Ρ' + 210: 250, # None + 211: 37, # 'Σ' + 212: 33, # 'Τ' + 213: 45, # 'Υ' + 214: 56, # 'Φ' + 215: 50, # 'Χ' + 216: 84, # 'Ψ' + 217: 57, # 'Ω' + 218: 120, # 'Ϊ' + 219: 121, # 'Ϋ' + 220: 17, # 'ά' + 221: 18, # 'έ' + 222: 22, # 'ή' + 223: 15, # 'ί' + 224: 124, # 'ΰ' + 225: 1, # 'α' + 226: 29, # 'β' + 227: 20, # 'γ' + 228: 21, # 'δ' + 229: 3, # 'ε' + 230: 32, # 'ζ' + 231: 13, # 'η' + 232: 25, # 'θ' + 233: 5, # 'ι' + 234: 11, # 'κ' + 235: 16, # 'λ' + 236: 10, # 'μ' + 237: 6, # 'ν' + 238: 30, # 'ξ' + 239: 4, # 'ο' + 240: 9, # 'π' + 241: 8, # 'ρ' + 242: 14, # 'ς' + 243: 7, # 'σ' + 244: 2, # 'τ' + 245: 12, # 'υ' + 246: 28, # 'φ' + 247: 23, # 'χ' + 248: 42, # 'ψ' + 249: 24, # 'ω' + 250: 64, # 'ϊ' + 251: 75, # 'ϋ' + 252: 19, # 'ό' + 253: 26, # 'ύ' + 254: 27, # 'ώ' + 255: 253, # None +} + +ISO_8859_7_GREEK_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-7", + language="Greek", + char_to_order_map=ISO_8859_7_GREEK_CHAR_TO_ORDER, + language_model=GREEK_LANG_MODEL, + typical_positive_ratio=0.982851, + keep_ascii_letters=False, + alphabet="ΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίαβγδεζηθικλμνξοπρςστυφχψωόύώ", +) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhebrewmodel.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhebrewmodel.py new file mode 100644 index 0000000..56d2975 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhebrewmodel.py @@ -0,0 +1,4380 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +HEBREW_LANG_MODEL = { + 50: { # 'a' + 50: 0, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 2, # 'l' + 54: 2, # 'n' + 49: 0, # 'o' + 51: 2, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 0, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 60: { # 'c' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 61: { # 'd' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 0, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 42: { # 'e' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 2, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 2, # 'l' + 54: 2, # 'n' + 49: 1, # 'o' + 51: 2, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 1, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 53: { # 'i' + 50: 1, # 'a' + 60: 2, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 0, # 'i' + 56: 1, # 'l' + 54: 2, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 56: { # 'l' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 2, # 'e' + 53: 2, # 'i' + 56: 2, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 54: { # 'n' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 49: { # 'o' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 2, # 'n' + 49: 1, # 'o' + 51: 2, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 51: { # 'r' + 50: 2, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 2, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 43: { # 's' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 2, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 2, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 44: { # 't' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 2, # 'e' + 53: 2, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 63: { # 'u' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 34: { # '\xa0' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 1, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 2, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 55: { # '´' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 2, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 1, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 48: { # '¼' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 39: { # '½' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 57: { # '¾' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 30: { # 'ְ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 2, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 0, # 'ף' + 18: 2, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 59: { # 'ֱ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 1, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 41: { # 'ֲ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 33: { # 'ִ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 2, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 37: { # 'ֵ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 1, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 36: { # 'ֶ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 1, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 2, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 31: { # 'ַ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 29: { # 'ָ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 2, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 35: { # 'ֹ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 62: { # 'ֻ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 1, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 28: { # 'ּ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 3, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 3, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 3, # 'ַ' + 29: 3, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 2, # 'ׁ' + 45: 1, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 2, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 2, # 'מ' + 23: 1, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 38: { # 'ׁ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 2, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 45: { # 'ׂ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 2, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 9: { # 'א' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 2, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 8: { # 'ב' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 1, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 20: { # 'ג' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 2, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 16: { # 'ד' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 3: { # 'ה' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 3, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 0, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 2: { # 'ו' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 3, # 'ֹ' + 62: 0, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 24: { # 'ז' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 1, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 1, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 14: { # 'ח' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 1, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 22: { # 'ט' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 1, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 2, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 1: { # 'י' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 25: { # 'ך' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 15: { # 'כ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 4: { # 'ל' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 3, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 11: { # 'ם' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 6: { # 'מ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 0, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 23: { # 'ן' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 12: { # 'נ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 19: { # 'ס' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 2, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 1, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 13: { # 'ע' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 1, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 26: { # 'ף' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 18: { # 'פ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 2, # 'ב' + 20: 3, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 27: { # 'ץ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 21: { # 'צ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 1, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 0, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 17: { # 'ק' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 7: { # 'ר' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 2, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 10: { # 'ש' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 3, # 'ׁ' + 45: 2, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 5: { # 'ת' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 1, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 32: { # '–' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 52: { # '’' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 47: { # '“' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 46: { # '”' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 58: { # '†' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 2, # '†' + 40: 0, # '…' + }, + 40: { # '…' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1255_HEBREW_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 69, # 'A' + 66: 91, # 'B' + 67: 79, # 'C' + 68: 80, # 'D' + 69: 92, # 'E' + 70: 89, # 'F' + 71: 97, # 'G' + 72: 90, # 'H' + 73: 68, # 'I' + 74: 111, # 'J' + 75: 112, # 'K' + 76: 82, # 'L' + 77: 73, # 'M' + 78: 95, # 'N' + 79: 85, # 'O' + 80: 78, # 'P' + 81: 121, # 'Q' + 82: 86, # 'R' + 83: 71, # 'S' + 84: 67, # 'T' + 85: 102, # 'U' + 86: 107, # 'V' + 87: 84, # 'W' + 88: 114, # 'X' + 89: 103, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 50, # 'a' + 98: 74, # 'b' + 99: 60, # 'c' + 100: 61, # 'd' + 101: 42, # 'e' + 102: 76, # 'f' + 103: 70, # 'g' + 104: 64, # 'h' + 105: 53, # 'i' + 106: 105, # 'j' + 107: 93, # 'k' + 108: 56, # 'l' + 109: 65, # 'm' + 110: 54, # 'n' + 111: 49, # 'o' + 112: 66, # 'p' + 113: 110, # 'q' + 114: 51, # 'r' + 115: 43, # 's' + 116: 44, # 't' + 117: 63, # 'u' + 118: 81, # 'v' + 119: 77, # 'w' + 120: 98, # 'x' + 121: 75, # 'y' + 122: 108, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 124, # '€' + 129: 202, # None + 130: 203, # '‚' + 131: 204, # 'ƒ' + 132: 205, # '„' + 133: 40, # '…' + 134: 58, # '†' + 135: 206, # '‡' + 136: 207, # 'ˆ' + 137: 208, # '‰' + 138: 209, # None + 139: 210, # '‹' + 140: 211, # None + 141: 212, # None + 142: 213, # None + 143: 214, # None + 144: 215, # None + 145: 83, # '‘' + 146: 52, # '’' + 147: 47, # '“' + 148: 46, # '”' + 149: 72, # '•' + 150: 32, # '–' + 151: 94, # '—' + 152: 216, # '˜' + 153: 113, # '™' + 154: 217, # None + 155: 109, # '›' + 156: 218, # None + 157: 219, # None + 158: 220, # None + 159: 221, # None + 160: 34, # '\xa0' + 161: 116, # '¡' + 162: 222, # '¢' + 163: 118, # '£' + 164: 100, # '₪' + 165: 223, # '¥' + 166: 224, # '¦' + 167: 117, # '§' + 168: 119, # '¨' + 169: 104, # '©' + 170: 125, # '×' + 171: 225, # '«' + 172: 226, # '¬' + 173: 87, # '\xad' + 174: 99, # '®' + 175: 227, # '¯' + 176: 106, # '°' + 177: 122, # '±' + 178: 123, # '²' + 179: 228, # '³' + 180: 55, # '´' + 181: 229, # 'µ' + 182: 230, # '¶' + 183: 101, # '·' + 184: 231, # '¸' + 185: 232, # '¹' + 186: 120, # '÷' + 187: 233, # '»' + 188: 48, # '¼' + 189: 39, # '½' + 190: 57, # '¾' + 191: 234, # '¿' + 192: 30, # 'ְ' + 193: 59, # 'ֱ' + 194: 41, # 'ֲ' + 195: 88, # 'ֳ' + 196: 33, # 'ִ' + 197: 37, # 'ֵ' + 198: 36, # 'ֶ' + 199: 31, # 'ַ' + 200: 29, # 'ָ' + 201: 35, # 'ֹ' + 202: 235, # None + 203: 62, # 'ֻ' + 204: 28, # 'ּ' + 205: 236, # 'ֽ' + 206: 126, # '־' + 207: 237, # 'ֿ' + 208: 238, # '׀' + 209: 38, # 'ׁ' + 210: 45, # 'ׂ' + 211: 239, # '׃' + 212: 240, # 'װ' + 213: 241, # 'ױ' + 214: 242, # 'ײ' + 215: 243, # '׳' + 216: 127, # '״' + 217: 244, # None + 218: 245, # None + 219: 246, # None + 220: 247, # None + 221: 248, # None + 222: 249, # None + 223: 250, # None + 224: 9, # 'א' + 225: 8, # 'ב' + 226: 20, # 'ג' + 227: 16, # 'ד' + 228: 3, # 'ה' + 229: 2, # 'ו' + 230: 24, # 'ז' + 231: 14, # 'ח' + 232: 22, # 'ט' + 233: 1, # 'י' + 234: 25, # 'ך' + 235: 15, # 'כ' + 236: 4, # 'ל' + 237: 11, # 'ם' + 238: 6, # 'מ' + 239: 23, # 'ן' + 240: 12, # 'נ' + 241: 19, # 'ס' + 242: 13, # 'ע' + 243: 26, # 'ף' + 244: 18, # 'פ' + 245: 27, # 'ץ' + 246: 21, # 'צ' + 247: 17, # 'ק' + 248: 7, # 'ר' + 249: 10, # 'ש' + 250: 5, # 'ת' + 251: 251, # None + 252: 252, # None + 253: 128, # '\u200e' + 254: 96, # '\u200f' + 255: 253, # None +} + +WINDOWS_1255_HEBREW_MODEL = SingleByteCharSetModel( + charset_name="windows-1255", + language="Hebrew", + char_to_order_map=WINDOWS_1255_HEBREW_CHAR_TO_ORDER, + language_model=HEBREW_LANG_MODEL, + typical_positive_ratio=0.984004, + keep_ascii_letters=False, + alphabet="אבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ", +) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhungarianmodel.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhungarianmodel.py new file mode 100644 index 0000000..09a0d32 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhungarianmodel.py @@ -0,0 +1,4649 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +HUNGARIAN_LANG_MODEL = { + 28: { # 'A' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 2, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 2, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 2, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 1, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 40: { # 'B' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 3, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 54: { # 'C' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 3, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 45: { # 'D' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 32: { # 'E' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 2, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 50: { # 'F' + 28: 1, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 0, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 49: { # 'G' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 2, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 38: { # 'H' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 0, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 1, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 2, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 39: { # 'I' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 2, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 53: { # 'J' + 28: 2, # 'A' + 40: 0, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 0, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 36: { # 'K' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 2, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 41: { # 'L' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 34: { # 'M' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 3, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 1, # 'ű' + }, + 35: { # 'N' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 2, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 2, # 'Y' + 52: 1, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 47: { # 'O' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 2, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 46: { # 'P' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 3, # 'á' + 15: 2, # 'é' + 30: 0, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 43: { # 'R' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 2, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 2, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 33: { # 'S' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 3, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 1, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 37: { # 'T' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 57: { # 'U' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 48: { # 'V' + 28: 2, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 55: { # 'Y' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 2, # 'Z' + 2: 1, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 52: { # 'Z' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 1, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 2: { # 'a' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 18: { # 'b' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 26: { # 'c' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 1, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 2, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 2, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 17: { # 'd' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 2, # 'k' + 6: 1, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 1: { # 'e' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 2, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 27: { # 'f' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 3, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 3, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 12: { # 'g' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 20: { # 'h' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 9: { # 'i' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 3, # 'ó' + 24: 1, # 'ö' + 31: 2, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 1, # 'ű' + }, + 22: { # 'j' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 1, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 1, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 7: { # 'k' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 1, # 'ú' + 29: 3, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 6: { # 'l' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 3, # 'ő' + 56: 1, # 'ű' + }, + 13: { # 'm' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 1, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 3, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 2, # 'ű' + }, + 4: { # 'n' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 1, # 'x' + 16: 3, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 8: { # 'o' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 23: { # 'p' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 10: { # 'r' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 2, # 'ű' + }, + 5: { # 's' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 3: { # 't' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 1, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 3, # 'ő' + 56: 2, # 'ű' + }, + 21: { # 'u' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 2, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 1, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 1, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 19: { # 'v' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 2, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 62: { # 'x' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 16: { # 'y' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 2, # 'ű' + }, + 11: { # 'z' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 51: { # 'Á' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 44: { # 'É' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 61: { # 'Í' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 0, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 58: { # 'Ó' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 2, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 59: { # 'Ö' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 60: { # 'Ú' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 2, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 63: { # 'Ü' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 14: { # 'á' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 15: { # 'é' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 30: { # 'í' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 25: { # 'ó' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 1, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 24: { # 'ö' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 0, # 'a' + 18: 3, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 31: { # 'ú' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 3, # 'j' + 7: 1, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 29: { # 'ü' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 0, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 42: { # 'ő' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 56: { # 'ű' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1250_HUNGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 28, # 'A' + 66: 40, # 'B' + 67: 54, # 'C' + 68: 45, # 'D' + 69: 32, # 'E' + 70: 50, # 'F' + 71: 49, # 'G' + 72: 38, # 'H' + 73: 39, # 'I' + 74: 53, # 'J' + 75: 36, # 'K' + 76: 41, # 'L' + 77: 34, # 'M' + 78: 35, # 'N' + 79: 47, # 'O' + 80: 46, # 'P' + 81: 72, # 'Q' + 82: 43, # 'R' + 83: 33, # 'S' + 84: 37, # 'T' + 85: 57, # 'U' + 86: 48, # 'V' + 87: 64, # 'W' + 88: 68, # 'X' + 89: 55, # 'Y' + 90: 52, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 2, # 'a' + 98: 18, # 'b' + 99: 26, # 'c' + 100: 17, # 'd' + 101: 1, # 'e' + 102: 27, # 'f' + 103: 12, # 'g' + 104: 20, # 'h' + 105: 9, # 'i' + 106: 22, # 'j' + 107: 7, # 'k' + 108: 6, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 8, # 'o' + 112: 23, # 'p' + 113: 67, # 'q' + 114: 10, # 'r' + 115: 5, # 's' + 116: 3, # 't' + 117: 21, # 'u' + 118: 19, # 'v' + 119: 65, # 'w' + 120: 62, # 'x' + 121: 16, # 'y' + 122: 11, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 161, # '€' + 129: 162, # None + 130: 163, # '‚' + 131: 164, # None + 132: 165, # '„' + 133: 166, # '…' + 134: 167, # '†' + 135: 168, # '‡' + 136: 169, # None + 137: 170, # '‰' + 138: 171, # 'Š' + 139: 172, # '‹' + 140: 173, # 'Ś' + 141: 174, # 'Ť' + 142: 175, # 'Ž' + 143: 176, # 'Ź' + 144: 177, # None + 145: 178, # '‘' + 146: 179, # '’' + 147: 180, # '“' + 148: 78, # '”' + 149: 181, # '•' + 150: 69, # '–' + 151: 182, # '—' + 152: 183, # None + 153: 184, # '™' + 154: 185, # 'š' + 155: 186, # '›' + 156: 187, # 'ś' + 157: 188, # 'ť' + 158: 189, # 'ž' + 159: 190, # 'ź' + 160: 191, # '\xa0' + 161: 192, # 'ˇ' + 162: 193, # '˘' + 163: 194, # 'Ł' + 164: 195, # '¤' + 165: 196, # 'Ą' + 166: 197, # '¦' + 167: 76, # '§' + 168: 198, # '¨' + 169: 199, # '©' + 170: 200, # 'Ş' + 171: 201, # '«' + 172: 202, # '¬' + 173: 203, # '\xad' + 174: 204, # '®' + 175: 205, # 'Ż' + 176: 81, # '°' + 177: 206, # '±' + 178: 207, # '˛' + 179: 208, # 'ł' + 180: 209, # '´' + 181: 210, # 'µ' + 182: 211, # '¶' + 183: 212, # '·' + 184: 213, # '¸' + 185: 214, # 'ą' + 186: 215, # 'ş' + 187: 216, # '»' + 188: 217, # 'Ľ' + 189: 218, # '˝' + 190: 219, # 'ľ' + 191: 220, # 'ż' + 192: 221, # 'Ŕ' + 193: 51, # 'Á' + 194: 83, # 'Â' + 195: 222, # 'Ă' + 196: 80, # 'Ä' + 197: 223, # 'Ĺ' + 198: 224, # 'Ć' + 199: 225, # 'Ç' + 200: 226, # 'Č' + 201: 44, # 'É' + 202: 227, # 'Ę' + 203: 228, # 'Ë' + 204: 229, # 'Ě' + 205: 61, # 'Í' + 206: 230, # 'Î' + 207: 231, # 'Ď' + 208: 232, # 'Đ' + 209: 233, # 'Ń' + 210: 234, # 'Ň' + 211: 58, # 'Ó' + 212: 235, # 'Ô' + 213: 66, # 'Ő' + 214: 59, # 'Ö' + 215: 236, # '×' + 216: 237, # 'Ř' + 217: 238, # 'Ů' + 218: 60, # 'Ú' + 219: 70, # 'Ű' + 220: 63, # 'Ü' + 221: 239, # 'Ý' + 222: 240, # 'Ţ' + 223: 241, # 'ß' + 224: 84, # 'ŕ' + 225: 14, # 'á' + 226: 75, # 'â' + 227: 242, # 'ă' + 228: 71, # 'ä' + 229: 82, # 'ĺ' + 230: 243, # 'ć' + 231: 73, # 'ç' + 232: 244, # 'č' + 233: 15, # 'é' + 234: 85, # 'ę' + 235: 79, # 'ë' + 236: 86, # 'ě' + 237: 30, # 'í' + 238: 77, # 'î' + 239: 87, # 'ď' + 240: 245, # 'đ' + 241: 246, # 'ń' + 242: 247, # 'ň' + 243: 25, # 'ó' + 244: 74, # 'ô' + 245: 42, # 'ő' + 246: 24, # 'ö' + 247: 248, # '÷' + 248: 249, # 'ř' + 249: 250, # 'ů' + 250: 31, # 'ú' + 251: 56, # 'ű' + 252: 29, # 'ü' + 253: 251, # 'ý' + 254: 252, # 'ţ' + 255: 253, # '˙' +} + +WINDOWS_1250_HUNGARIAN_MODEL = SingleByteCharSetModel( + charset_name="windows-1250", + language="Hungarian", + char_to_order_map=WINDOWS_1250_HUNGARIAN_CHAR_TO_ORDER, + language_model=HUNGARIAN_LANG_MODEL, + typical_positive_ratio=0.947368, + keep_ascii_letters=True, + alphabet="ABCDEFGHIJKLMNOPRSTUVZabcdefghijklmnoprstuvzÁÉÍÓÖÚÜáéíóöúüŐőŰű", +) + +ISO_8859_2_HUNGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 28, # 'A' + 66: 40, # 'B' + 67: 54, # 'C' + 68: 45, # 'D' + 69: 32, # 'E' + 70: 50, # 'F' + 71: 49, # 'G' + 72: 38, # 'H' + 73: 39, # 'I' + 74: 53, # 'J' + 75: 36, # 'K' + 76: 41, # 'L' + 77: 34, # 'M' + 78: 35, # 'N' + 79: 47, # 'O' + 80: 46, # 'P' + 81: 71, # 'Q' + 82: 43, # 'R' + 83: 33, # 'S' + 84: 37, # 'T' + 85: 57, # 'U' + 86: 48, # 'V' + 87: 64, # 'W' + 88: 68, # 'X' + 89: 55, # 'Y' + 90: 52, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 2, # 'a' + 98: 18, # 'b' + 99: 26, # 'c' + 100: 17, # 'd' + 101: 1, # 'e' + 102: 27, # 'f' + 103: 12, # 'g' + 104: 20, # 'h' + 105: 9, # 'i' + 106: 22, # 'j' + 107: 7, # 'k' + 108: 6, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 8, # 'o' + 112: 23, # 'p' + 113: 67, # 'q' + 114: 10, # 'r' + 115: 5, # 's' + 116: 3, # 't' + 117: 21, # 'u' + 118: 19, # 'v' + 119: 65, # 'w' + 120: 62, # 'x' + 121: 16, # 'y' + 122: 11, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 159, # '\x80' + 129: 160, # '\x81' + 130: 161, # '\x82' + 131: 162, # '\x83' + 132: 163, # '\x84' + 133: 164, # '\x85' + 134: 165, # '\x86' + 135: 166, # '\x87' + 136: 167, # '\x88' + 137: 168, # '\x89' + 138: 169, # '\x8a' + 139: 170, # '\x8b' + 140: 171, # '\x8c' + 141: 172, # '\x8d' + 142: 173, # '\x8e' + 143: 174, # '\x8f' + 144: 175, # '\x90' + 145: 176, # '\x91' + 146: 177, # '\x92' + 147: 178, # '\x93' + 148: 179, # '\x94' + 149: 180, # '\x95' + 150: 181, # '\x96' + 151: 182, # '\x97' + 152: 183, # '\x98' + 153: 184, # '\x99' + 154: 185, # '\x9a' + 155: 186, # '\x9b' + 156: 187, # '\x9c' + 157: 188, # '\x9d' + 158: 189, # '\x9e' + 159: 190, # '\x9f' + 160: 191, # '\xa0' + 161: 192, # 'Ą' + 162: 193, # '˘' + 163: 194, # 'Ł' + 164: 195, # '¤' + 165: 196, # 'Ľ' + 166: 197, # 'Ś' + 167: 75, # '§' + 168: 198, # '¨' + 169: 199, # 'Š' + 170: 200, # 'Ş' + 171: 201, # 'Ť' + 172: 202, # 'Ź' + 173: 203, # '\xad' + 174: 204, # 'Ž' + 175: 205, # 'Ż' + 176: 79, # '°' + 177: 206, # 'ą' + 178: 207, # '˛' + 179: 208, # 'ł' + 180: 209, # '´' + 181: 210, # 'ľ' + 182: 211, # 'ś' + 183: 212, # 'ˇ' + 184: 213, # '¸' + 185: 214, # 'š' + 186: 215, # 'ş' + 187: 216, # 'ť' + 188: 217, # 'ź' + 189: 218, # '˝' + 190: 219, # 'ž' + 191: 220, # 'ż' + 192: 221, # 'Ŕ' + 193: 51, # 'Á' + 194: 81, # 'Â' + 195: 222, # 'Ă' + 196: 78, # 'Ä' + 197: 223, # 'Ĺ' + 198: 224, # 'Ć' + 199: 225, # 'Ç' + 200: 226, # 'Č' + 201: 44, # 'É' + 202: 227, # 'Ę' + 203: 228, # 'Ë' + 204: 229, # 'Ě' + 205: 61, # 'Í' + 206: 230, # 'Î' + 207: 231, # 'Ď' + 208: 232, # 'Đ' + 209: 233, # 'Ń' + 210: 234, # 'Ň' + 211: 58, # 'Ó' + 212: 235, # 'Ô' + 213: 66, # 'Ő' + 214: 59, # 'Ö' + 215: 236, # '×' + 216: 237, # 'Ř' + 217: 238, # 'Ů' + 218: 60, # 'Ú' + 219: 69, # 'Ű' + 220: 63, # 'Ü' + 221: 239, # 'Ý' + 222: 240, # 'Ţ' + 223: 241, # 'ß' + 224: 82, # 'ŕ' + 225: 14, # 'á' + 226: 74, # 'â' + 227: 242, # 'ă' + 228: 70, # 'ä' + 229: 80, # 'ĺ' + 230: 243, # 'ć' + 231: 72, # 'ç' + 232: 244, # 'č' + 233: 15, # 'é' + 234: 83, # 'ę' + 235: 77, # 'ë' + 236: 84, # 'ě' + 237: 30, # 'í' + 238: 76, # 'î' + 239: 85, # 'ď' + 240: 245, # 'đ' + 241: 246, # 'ń' + 242: 247, # 'ň' + 243: 25, # 'ó' + 244: 73, # 'ô' + 245: 42, # 'ő' + 246: 24, # 'ö' + 247: 248, # '÷' + 248: 249, # 'ř' + 249: 250, # 'ů' + 250: 31, # 'ú' + 251: 56, # 'ű' + 252: 29, # 'ü' + 253: 251, # 'ý' + 254: 252, # 'ţ' + 255: 253, # '˙' +} + +ISO_8859_2_HUNGARIAN_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-2", + language="Hungarian", + char_to_order_map=ISO_8859_2_HUNGARIAN_CHAR_TO_ORDER, + language_model=HUNGARIAN_LANG_MODEL, + typical_positive_ratio=0.947368, + keep_ascii_letters=True, + alphabet="ABCDEFGHIJKLMNOPRSTUVZabcdefghijklmnoprstuvzÁÉÍÓÖÚÜáéíóöúüŐőŰű", +) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langrussianmodel.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langrussianmodel.py new file mode 100644 index 0000000..39a5388 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langrussianmodel.py @@ -0,0 +1,5725 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +RUSSIAN_LANG_MODEL = { + 37: { # 'А' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 44: { # 'Б' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 33: { # 'В' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 0, # 'ю' + 16: 1, # 'я' + }, + 46: { # 'Г' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 41: { # 'Д' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 3, # 'ж' + 20: 1, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 48: { # 'Е' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 2, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 1, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 56: { # 'Ж' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 1, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 2, # 'ю' + 16: 0, # 'я' + }, + 51: { # 'З' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 1, # 'я' + }, + 42: { # 'И' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 2, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 60: { # 'Й' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 36: { # 'К' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 49: { # 'Л' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 1, # 'я' + }, + 38: { # 'М' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 1, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 31: { # 'Н' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 2, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 34: { # 'О' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 2, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 2, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 35: { # 'П' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 1, # 'с' + 6: 1, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 2, # 'я' + }, + 45: { # 'Р' + 37: 2, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 2, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 32: { # 'С' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 2, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 40: { # 'Т' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 52: { # 'У' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 1, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 1, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 53: { # 'Ф' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 1, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 55: { # 'Х' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 58: { # 'Ц' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 50: { # 'Ч' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 57: { # 'Ш' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 63: { # 'Щ' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 62: { # 'Ы' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 61: { # 'Ь' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 47: { # 'Э' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 59: { # 'Ю' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 43: { # 'Я' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 1, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 3: { # 'а' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 21: { # 'б' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 10: { # 'в' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 19: { # 'г' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 13: { # 'д' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 3, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 2: { # 'е' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 24: { # 'ж' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 1, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 20: { # 'з' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 4: { # 'и' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 23: { # 'й' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 11: { # 'к' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 3, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 8: { # 'л' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 3, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 12: { # 'м' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 5: { # 'н' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 2, # 'щ' + 54: 1, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 1: { # 'о' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 15: { # 'п' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 9: { # 'р' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 7: { # 'с' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 6: { # 'т' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 2, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 14: { # 'у' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 2, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 2, # 'я' + }, + 39: { # 'ф' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 26: { # 'х' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 3, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 28: { # 'ц' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 1, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 22: { # 'ч' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 3, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 25: { # 'ш' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 29: { # 'щ' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 2, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 54: { # 'ъ' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 18: { # 'ы' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 1, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 2, # 'я' + }, + 17: { # 'ь' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 0, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 0, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 30: { # 'э' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 27: { # 'ю' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 1, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 1, # 'я' + }, + 16: { # 'я' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 2, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 2, # 'ю' + 16: 2, # 'я' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +IBM866_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 37, # 'А' + 129: 44, # 'Б' + 130: 33, # 'В' + 131: 46, # 'Г' + 132: 41, # 'Д' + 133: 48, # 'Е' + 134: 56, # 'Ж' + 135: 51, # 'З' + 136: 42, # 'И' + 137: 60, # 'Й' + 138: 36, # 'К' + 139: 49, # 'Л' + 140: 38, # 'М' + 141: 31, # 'Н' + 142: 34, # 'О' + 143: 35, # 'П' + 144: 45, # 'Р' + 145: 32, # 'С' + 146: 40, # 'Т' + 147: 52, # 'У' + 148: 53, # 'Ф' + 149: 55, # 'Х' + 150: 58, # 'Ц' + 151: 50, # 'Ч' + 152: 57, # 'Ш' + 153: 63, # 'Щ' + 154: 70, # 'Ъ' + 155: 62, # 'Ы' + 156: 61, # 'Ь' + 157: 47, # 'Э' + 158: 59, # 'Ю' + 159: 43, # 'Я' + 160: 3, # 'а' + 161: 21, # 'б' + 162: 10, # 'в' + 163: 19, # 'г' + 164: 13, # 'д' + 165: 2, # 'е' + 166: 24, # 'ж' + 167: 20, # 'з' + 168: 4, # 'и' + 169: 23, # 'й' + 170: 11, # 'к' + 171: 8, # 'л' + 172: 12, # 'м' + 173: 5, # 'н' + 174: 1, # 'о' + 175: 15, # 'п' + 176: 191, # '░' + 177: 192, # '▒' + 178: 193, # '▓' + 179: 194, # '│' + 180: 195, # '┤' + 181: 196, # '╡' + 182: 197, # '╢' + 183: 198, # '╖' + 184: 199, # '╕' + 185: 200, # '╣' + 186: 201, # '║' + 187: 202, # '╗' + 188: 203, # '╝' + 189: 204, # '╜' + 190: 205, # '╛' + 191: 206, # '┐' + 192: 207, # '└' + 193: 208, # '┴' + 194: 209, # '┬' + 195: 210, # '├' + 196: 211, # '─' + 197: 212, # '┼' + 198: 213, # '╞' + 199: 214, # '╟' + 200: 215, # '╚' + 201: 216, # '╔' + 202: 217, # '╩' + 203: 218, # '╦' + 204: 219, # '╠' + 205: 220, # '═' + 206: 221, # '╬' + 207: 222, # '╧' + 208: 223, # '╨' + 209: 224, # '╤' + 210: 225, # '╥' + 211: 226, # '╙' + 212: 227, # '╘' + 213: 228, # '╒' + 214: 229, # '╓' + 215: 230, # '╫' + 216: 231, # '╪' + 217: 232, # '┘' + 218: 233, # '┌' + 219: 234, # '█' + 220: 235, # '▄' + 221: 236, # '▌' + 222: 237, # '▐' + 223: 238, # '▀' + 224: 9, # 'р' + 225: 7, # 'с' + 226: 6, # 'т' + 227: 14, # 'у' + 228: 39, # 'ф' + 229: 26, # 'х' + 230: 28, # 'ц' + 231: 22, # 'ч' + 232: 25, # 'ш' + 233: 29, # 'щ' + 234: 54, # 'ъ' + 235: 18, # 'ы' + 236: 17, # 'ь' + 237: 30, # 'э' + 238: 27, # 'ю' + 239: 16, # 'я' + 240: 239, # 'Ё' + 241: 68, # 'ё' + 242: 240, # 'Є' + 243: 241, # 'є' + 244: 242, # 'Ї' + 245: 243, # 'ї' + 246: 244, # 'Ў' + 247: 245, # 'ў' + 248: 246, # '°' + 249: 247, # '∙' + 250: 248, # '·' + 251: 249, # '√' + 252: 250, # '№' + 253: 251, # '¤' + 254: 252, # '■' + 255: 255, # '\xa0' +} + +IBM866_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="IBM866", + language="Russian", + char_to_order_map=IBM866_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +WINDOWS_1251_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # 'Ђ' + 129: 192, # 'Ѓ' + 130: 193, # '‚' + 131: 194, # 'ѓ' + 132: 195, # '„' + 133: 196, # '…' + 134: 197, # '†' + 135: 198, # '‡' + 136: 199, # '€' + 137: 200, # '‰' + 138: 201, # 'Љ' + 139: 202, # '‹' + 140: 203, # 'Њ' + 141: 204, # 'Ќ' + 142: 205, # 'Ћ' + 143: 206, # 'Џ' + 144: 207, # 'ђ' + 145: 208, # '‘' + 146: 209, # '’' + 147: 210, # '“' + 148: 211, # '”' + 149: 212, # '•' + 150: 213, # '–' + 151: 214, # '—' + 152: 215, # None + 153: 216, # '™' + 154: 217, # 'љ' + 155: 218, # '›' + 156: 219, # 'њ' + 157: 220, # 'ќ' + 158: 221, # 'ћ' + 159: 222, # 'џ' + 160: 223, # '\xa0' + 161: 224, # 'Ў' + 162: 225, # 'ў' + 163: 226, # 'Ј' + 164: 227, # '¤' + 165: 228, # 'Ґ' + 166: 229, # '¦' + 167: 230, # '§' + 168: 231, # 'Ё' + 169: 232, # '©' + 170: 233, # 'Є' + 171: 234, # '«' + 172: 235, # '¬' + 173: 236, # '\xad' + 174: 237, # '®' + 175: 238, # 'Ї' + 176: 239, # '°' + 177: 240, # '±' + 178: 241, # 'І' + 179: 242, # 'і' + 180: 243, # 'ґ' + 181: 244, # 'µ' + 182: 245, # '¶' + 183: 246, # '·' + 184: 68, # 'ё' + 185: 247, # '№' + 186: 248, # 'є' + 187: 249, # '»' + 188: 250, # 'ј' + 189: 251, # 'Ѕ' + 190: 252, # 'ѕ' + 191: 253, # 'ї' + 192: 37, # 'А' + 193: 44, # 'Б' + 194: 33, # 'В' + 195: 46, # 'Г' + 196: 41, # 'Д' + 197: 48, # 'Е' + 198: 56, # 'Ж' + 199: 51, # 'З' + 200: 42, # 'И' + 201: 60, # 'Й' + 202: 36, # 'К' + 203: 49, # 'Л' + 204: 38, # 'М' + 205: 31, # 'Н' + 206: 34, # 'О' + 207: 35, # 'П' + 208: 45, # 'Р' + 209: 32, # 'С' + 210: 40, # 'Т' + 211: 52, # 'У' + 212: 53, # 'Ф' + 213: 55, # 'Х' + 214: 58, # 'Ц' + 215: 50, # 'Ч' + 216: 57, # 'Ш' + 217: 63, # 'Щ' + 218: 70, # 'Ъ' + 219: 62, # 'Ы' + 220: 61, # 'Ь' + 221: 47, # 'Э' + 222: 59, # 'Ю' + 223: 43, # 'Я' + 224: 3, # 'а' + 225: 21, # 'б' + 226: 10, # 'в' + 227: 19, # 'г' + 228: 13, # 'д' + 229: 2, # 'е' + 230: 24, # 'ж' + 231: 20, # 'з' + 232: 4, # 'и' + 233: 23, # 'й' + 234: 11, # 'к' + 235: 8, # 'л' + 236: 12, # 'м' + 237: 5, # 'н' + 238: 1, # 'о' + 239: 15, # 'п' + 240: 9, # 'р' + 241: 7, # 'с' + 242: 6, # 'т' + 243: 14, # 'у' + 244: 39, # 'ф' + 245: 26, # 'х' + 246: 28, # 'ц' + 247: 22, # 'ч' + 248: 25, # 'ш' + 249: 29, # 'щ' + 250: 54, # 'ъ' + 251: 18, # 'ы' + 252: 17, # 'ь' + 253: 30, # 'э' + 254: 27, # 'ю' + 255: 16, # 'я' +} + +WINDOWS_1251_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="windows-1251", + language="Russian", + char_to_order_map=WINDOWS_1251_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +IBM855_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # 'ђ' + 129: 192, # 'Ђ' + 130: 193, # 'ѓ' + 131: 194, # 'Ѓ' + 132: 68, # 'ё' + 133: 195, # 'Ё' + 134: 196, # 'є' + 135: 197, # 'Є' + 136: 198, # 'ѕ' + 137: 199, # 'Ѕ' + 138: 200, # 'і' + 139: 201, # 'І' + 140: 202, # 'ї' + 141: 203, # 'Ї' + 142: 204, # 'ј' + 143: 205, # 'Ј' + 144: 206, # 'љ' + 145: 207, # 'Љ' + 146: 208, # 'њ' + 147: 209, # 'Њ' + 148: 210, # 'ћ' + 149: 211, # 'Ћ' + 150: 212, # 'ќ' + 151: 213, # 'Ќ' + 152: 214, # 'ў' + 153: 215, # 'Ў' + 154: 216, # 'џ' + 155: 217, # 'Џ' + 156: 27, # 'ю' + 157: 59, # 'Ю' + 158: 54, # 'ъ' + 159: 70, # 'Ъ' + 160: 3, # 'а' + 161: 37, # 'А' + 162: 21, # 'б' + 163: 44, # 'Б' + 164: 28, # 'ц' + 165: 58, # 'Ц' + 166: 13, # 'д' + 167: 41, # 'Д' + 168: 2, # 'е' + 169: 48, # 'Е' + 170: 39, # 'ф' + 171: 53, # 'Ф' + 172: 19, # 'г' + 173: 46, # 'Г' + 174: 218, # '«' + 175: 219, # '»' + 176: 220, # '░' + 177: 221, # '▒' + 178: 222, # '▓' + 179: 223, # '│' + 180: 224, # '┤' + 181: 26, # 'х' + 182: 55, # 'Х' + 183: 4, # 'и' + 184: 42, # 'И' + 185: 225, # '╣' + 186: 226, # '║' + 187: 227, # '╗' + 188: 228, # '╝' + 189: 23, # 'й' + 190: 60, # 'Й' + 191: 229, # '┐' + 192: 230, # '└' + 193: 231, # '┴' + 194: 232, # '┬' + 195: 233, # '├' + 196: 234, # '─' + 197: 235, # '┼' + 198: 11, # 'к' + 199: 36, # 'К' + 200: 236, # '╚' + 201: 237, # '╔' + 202: 238, # '╩' + 203: 239, # '╦' + 204: 240, # '╠' + 205: 241, # '═' + 206: 242, # '╬' + 207: 243, # '¤' + 208: 8, # 'л' + 209: 49, # 'Л' + 210: 12, # 'м' + 211: 38, # 'М' + 212: 5, # 'н' + 213: 31, # 'Н' + 214: 1, # 'о' + 215: 34, # 'О' + 216: 15, # 'п' + 217: 244, # '┘' + 218: 245, # '┌' + 219: 246, # '█' + 220: 247, # '▄' + 221: 35, # 'П' + 222: 16, # 'я' + 223: 248, # '▀' + 224: 43, # 'Я' + 225: 9, # 'р' + 226: 45, # 'Р' + 227: 7, # 'с' + 228: 32, # 'С' + 229: 6, # 'т' + 230: 40, # 'Т' + 231: 14, # 'у' + 232: 52, # 'У' + 233: 24, # 'ж' + 234: 56, # 'Ж' + 235: 10, # 'в' + 236: 33, # 'В' + 237: 17, # 'ь' + 238: 61, # 'Ь' + 239: 249, # '№' + 240: 250, # '\xad' + 241: 18, # 'ы' + 242: 62, # 'Ы' + 243: 20, # 'з' + 244: 51, # 'З' + 245: 25, # 'ш' + 246: 57, # 'Ш' + 247: 30, # 'э' + 248: 47, # 'Э' + 249: 29, # 'щ' + 250: 63, # 'Щ' + 251: 22, # 'ч' + 252: 50, # 'Ч' + 253: 251, # '§' + 254: 252, # '■' + 255: 255, # '\xa0' +} + +IBM855_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="IBM855", + language="Russian", + char_to_order_map=IBM855_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +KOI8_R_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # '─' + 129: 192, # '│' + 130: 193, # '┌' + 131: 194, # '┐' + 132: 195, # '└' + 133: 196, # '┘' + 134: 197, # '├' + 135: 198, # '┤' + 136: 199, # '┬' + 137: 200, # '┴' + 138: 201, # '┼' + 139: 202, # '▀' + 140: 203, # '▄' + 141: 204, # '█' + 142: 205, # '▌' + 143: 206, # '▐' + 144: 207, # '░' + 145: 208, # '▒' + 146: 209, # '▓' + 147: 210, # '⌠' + 148: 211, # '■' + 149: 212, # '∙' + 150: 213, # '√' + 151: 214, # '≈' + 152: 215, # '≤' + 153: 216, # '≥' + 154: 217, # '\xa0' + 155: 218, # '⌡' + 156: 219, # '°' + 157: 220, # '²' + 158: 221, # '·' + 159: 222, # '÷' + 160: 223, # '═' + 161: 224, # '║' + 162: 225, # '╒' + 163: 68, # 'ё' + 164: 226, # '╓' + 165: 227, # '╔' + 166: 228, # '╕' + 167: 229, # '╖' + 168: 230, # '╗' + 169: 231, # '╘' + 170: 232, # '╙' + 171: 233, # '╚' + 172: 234, # '╛' + 173: 235, # '╜' + 174: 236, # '╝' + 175: 237, # '╞' + 176: 238, # '╟' + 177: 239, # '╠' + 178: 240, # '╡' + 179: 241, # 'Ё' + 180: 242, # '╢' + 181: 243, # '╣' + 182: 244, # '╤' + 183: 245, # '╥' + 184: 246, # '╦' + 185: 247, # '╧' + 186: 248, # '╨' + 187: 249, # '╩' + 188: 250, # '╪' + 189: 251, # '╫' + 190: 252, # '╬' + 191: 253, # '©' + 192: 27, # 'ю' + 193: 3, # 'а' + 194: 21, # 'б' + 195: 28, # 'ц' + 196: 13, # 'д' + 197: 2, # 'е' + 198: 39, # 'ф' + 199: 19, # 'г' + 200: 26, # 'х' + 201: 4, # 'и' + 202: 23, # 'й' + 203: 11, # 'к' + 204: 8, # 'л' + 205: 12, # 'м' + 206: 5, # 'н' + 207: 1, # 'о' + 208: 15, # 'п' + 209: 16, # 'я' + 210: 9, # 'р' + 211: 7, # 'с' + 212: 6, # 'т' + 213: 14, # 'у' + 214: 24, # 'ж' + 215: 10, # 'в' + 216: 17, # 'ь' + 217: 18, # 'ы' + 218: 20, # 'з' + 219: 25, # 'ш' + 220: 30, # 'э' + 221: 29, # 'щ' + 222: 22, # 'ч' + 223: 54, # 'ъ' + 224: 59, # 'Ю' + 225: 37, # 'А' + 226: 44, # 'Б' + 227: 58, # 'Ц' + 228: 41, # 'Д' + 229: 48, # 'Е' + 230: 53, # 'Ф' + 231: 46, # 'Г' + 232: 55, # 'Х' + 233: 42, # 'И' + 234: 60, # 'Й' + 235: 36, # 'К' + 236: 49, # 'Л' + 237: 38, # 'М' + 238: 31, # 'Н' + 239: 34, # 'О' + 240: 35, # 'П' + 241: 43, # 'Я' + 242: 45, # 'Р' + 243: 32, # 'С' + 244: 40, # 'Т' + 245: 52, # 'У' + 246: 56, # 'Ж' + 247: 33, # 'В' + 248: 61, # 'Ь' + 249: 62, # 'Ы' + 250: 51, # 'З' + 251: 57, # 'Ш' + 252: 47, # 'Э' + 253: 63, # 'Щ' + 254: 50, # 'Ч' + 255: 70, # 'Ъ' +} + +KOI8_R_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="KOI8-R", + language="Russian", + char_to_order_map=KOI8_R_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +MACCYRILLIC_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 37, # 'А' + 129: 44, # 'Б' + 130: 33, # 'В' + 131: 46, # 'Г' + 132: 41, # 'Д' + 133: 48, # 'Е' + 134: 56, # 'Ж' + 135: 51, # 'З' + 136: 42, # 'И' + 137: 60, # 'Й' + 138: 36, # 'К' + 139: 49, # 'Л' + 140: 38, # 'М' + 141: 31, # 'Н' + 142: 34, # 'О' + 143: 35, # 'П' + 144: 45, # 'Р' + 145: 32, # 'С' + 146: 40, # 'Т' + 147: 52, # 'У' + 148: 53, # 'Ф' + 149: 55, # 'Х' + 150: 58, # 'Ц' + 151: 50, # 'Ч' + 152: 57, # 'Ш' + 153: 63, # 'Щ' + 154: 70, # 'Ъ' + 155: 62, # 'Ы' + 156: 61, # 'Ь' + 157: 47, # 'Э' + 158: 59, # 'Ю' + 159: 43, # 'Я' + 160: 191, # '†' + 161: 192, # '°' + 162: 193, # 'Ґ' + 163: 194, # '£' + 164: 195, # '§' + 165: 196, # '•' + 166: 197, # '¶' + 167: 198, # 'І' + 168: 199, # '®' + 169: 200, # '©' + 170: 201, # '™' + 171: 202, # 'Ђ' + 172: 203, # 'ђ' + 173: 204, # '≠' + 174: 205, # 'Ѓ' + 175: 206, # 'ѓ' + 176: 207, # '∞' + 177: 208, # '±' + 178: 209, # '≤' + 179: 210, # '≥' + 180: 211, # 'і' + 181: 212, # 'µ' + 182: 213, # 'ґ' + 183: 214, # 'Ј' + 184: 215, # 'Є' + 185: 216, # 'є' + 186: 217, # 'Ї' + 187: 218, # 'ї' + 188: 219, # 'Љ' + 189: 220, # 'љ' + 190: 221, # 'Њ' + 191: 222, # 'њ' + 192: 223, # 'ј' + 193: 224, # 'Ѕ' + 194: 225, # '¬' + 195: 226, # '√' + 196: 227, # 'ƒ' + 197: 228, # '≈' + 198: 229, # '∆' + 199: 230, # '«' + 200: 231, # '»' + 201: 232, # '…' + 202: 233, # '\xa0' + 203: 234, # 'Ћ' + 204: 235, # 'ћ' + 205: 236, # 'Ќ' + 206: 237, # 'ќ' + 207: 238, # 'ѕ' + 208: 239, # '–' + 209: 240, # '—' + 210: 241, # '“' + 211: 242, # '”' + 212: 243, # '‘' + 213: 244, # '’' + 214: 245, # '÷' + 215: 246, # '„' + 216: 247, # 'Ў' + 217: 248, # 'ў' + 218: 249, # 'Џ' + 219: 250, # 'џ' + 220: 251, # '№' + 221: 252, # 'Ё' + 222: 68, # 'ё' + 223: 16, # 'я' + 224: 3, # 'а' + 225: 21, # 'б' + 226: 10, # 'в' + 227: 19, # 'г' + 228: 13, # 'д' + 229: 2, # 'е' + 230: 24, # 'ж' + 231: 20, # 'з' + 232: 4, # 'и' + 233: 23, # 'й' + 234: 11, # 'к' + 235: 8, # 'л' + 236: 12, # 'м' + 237: 5, # 'н' + 238: 1, # 'о' + 239: 15, # 'п' + 240: 9, # 'р' + 241: 7, # 'с' + 242: 6, # 'т' + 243: 14, # 'у' + 244: 39, # 'ф' + 245: 26, # 'х' + 246: 28, # 'ц' + 247: 22, # 'ч' + 248: 25, # 'ш' + 249: 29, # 'щ' + 250: 54, # 'ъ' + 251: 18, # 'ы' + 252: 17, # 'ь' + 253: 30, # 'э' + 254: 27, # 'ю' + 255: 255, # '€' +} + +MACCYRILLIC_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="MacCyrillic", + language="Russian", + char_to_order_map=MACCYRILLIC_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +ISO_8859_5_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # '\x80' + 129: 192, # '\x81' + 130: 193, # '\x82' + 131: 194, # '\x83' + 132: 195, # '\x84' + 133: 196, # '\x85' + 134: 197, # '\x86' + 135: 198, # '\x87' + 136: 199, # '\x88' + 137: 200, # '\x89' + 138: 201, # '\x8a' + 139: 202, # '\x8b' + 140: 203, # '\x8c' + 141: 204, # '\x8d' + 142: 205, # '\x8e' + 143: 206, # '\x8f' + 144: 207, # '\x90' + 145: 208, # '\x91' + 146: 209, # '\x92' + 147: 210, # '\x93' + 148: 211, # '\x94' + 149: 212, # '\x95' + 150: 213, # '\x96' + 151: 214, # '\x97' + 152: 215, # '\x98' + 153: 216, # '\x99' + 154: 217, # '\x9a' + 155: 218, # '\x9b' + 156: 219, # '\x9c' + 157: 220, # '\x9d' + 158: 221, # '\x9e' + 159: 222, # '\x9f' + 160: 223, # '\xa0' + 161: 224, # 'Ё' + 162: 225, # 'Ђ' + 163: 226, # 'Ѓ' + 164: 227, # 'Є' + 165: 228, # 'Ѕ' + 166: 229, # 'І' + 167: 230, # 'Ї' + 168: 231, # 'Ј' + 169: 232, # 'Љ' + 170: 233, # 'Њ' + 171: 234, # 'Ћ' + 172: 235, # 'Ќ' + 173: 236, # '\xad' + 174: 237, # 'Ў' + 175: 238, # 'Џ' + 176: 37, # 'А' + 177: 44, # 'Б' + 178: 33, # 'В' + 179: 46, # 'Г' + 180: 41, # 'Д' + 181: 48, # 'Е' + 182: 56, # 'Ж' + 183: 51, # 'З' + 184: 42, # 'И' + 185: 60, # 'Й' + 186: 36, # 'К' + 187: 49, # 'Л' + 188: 38, # 'М' + 189: 31, # 'Н' + 190: 34, # 'О' + 191: 35, # 'П' + 192: 45, # 'Р' + 193: 32, # 'С' + 194: 40, # 'Т' + 195: 52, # 'У' + 196: 53, # 'Ф' + 197: 55, # 'Х' + 198: 58, # 'Ц' + 199: 50, # 'Ч' + 200: 57, # 'Ш' + 201: 63, # 'Щ' + 202: 70, # 'Ъ' + 203: 62, # 'Ы' + 204: 61, # 'Ь' + 205: 47, # 'Э' + 206: 59, # 'Ю' + 207: 43, # 'Я' + 208: 3, # 'а' + 209: 21, # 'б' + 210: 10, # 'в' + 211: 19, # 'г' + 212: 13, # 'д' + 213: 2, # 'е' + 214: 24, # 'ж' + 215: 20, # 'з' + 216: 4, # 'и' + 217: 23, # 'й' + 218: 11, # 'к' + 219: 8, # 'л' + 220: 12, # 'м' + 221: 5, # 'н' + 222: 1, # 'о' + 223: 15, # 'п' + 224: 9, # 'р' + 225: 7, # 'с' + 226: 6, # 'т' + 227: 14, # 'у' + 228: 39, # 'ф' + 229: 26, # 'х' + 230: 28, # 'ц' + 231: 22, # 'ч' + 232: 25, # 'ш' + 233: 29, # 'щ' + 234: 54, # 'ъ' + 235: 18, # 'ы' + 236: 17, # 'ь' + 237: 30, # 'э' + 238: 27, # 'ю' + 239: 16, # 'я' + 240: 239, # '№' + 241: 68, # 'ё' + 242: 240, # 'ђ' + 243: 241, # 'ѓ' + 244: 242, # 'є' + 245: 243, # 'ѕ' + 246: 244, # 'і' + 247: 245, # 'ї' + 248: 246, # 'ј' + 249: 247, # 'љ' + 250: 248, # 'њ' + 251: 249, # 'ћ' + 252: 250, # 'ќ' + 253: 251, # '§' + 254: 252, # 'ў' + 255: 255, # 'џ' +} + +ISO_8859_5_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-5", + language="Russian", + char_to_order_map=ISO_8859_5_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langthaimodel.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langthaimodel.py new file mode 100644 index 0000000..489cad9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langthaimodel.py @@ -0,0 +1,4380 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +THAI_LANG_MODEL = { + 5: { # 'ก' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 3, # 'ฎ' + 57: 2, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 2, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 2, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 3, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 1, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 30: { # 'ข' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 0, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 2, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 2, # 'ี' + 40: 3, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 24: { # 'ค' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 2, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 3, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 8: { # 'ง' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 1, # 'ฉ' + 34: 2, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 2, # 'ศ' + 46: 1, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 3, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 26: { # 'จ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 3, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 52: { # 'ฉ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 1, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 34: { # 'ช' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 1, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 51: { # 'ซ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 3, # 'ึ' + 27: 2, # 'ื' + 32: 1, # 'ุ' + 35: 1, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 1, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 47: { # 'ญ' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 3, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 2, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 58: { # 'ฎ' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 1, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 57: { # 'ฏ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 49: { # 'ฐ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 53: { # 'ฑ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 55: { # 'ฒ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 43: { # 'ณ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 3, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 3, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 3, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 20: { # 'ด' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 2, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 1, # 'ึ' + 27: 2, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 2, # 'ๆ' + 37: 2, # '็' + 6: 1, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 19: { # 'ต' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 2, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 2, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 1, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 2, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 44: { # 'ถ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 3, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 14: { # 'ท' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 3, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 3, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 1, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 3, # 'ศ' + 46: 1, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 48: { # 'ธ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 2, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 2, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 3: { # 'น' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 2, # 'ถ' + 14: 3, # 'ท' + 48: 3, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 1, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 3, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 3, # 'โ' + 29: 3, # 'ใ' + 33: 3, # 'ไ' + 50: 2, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 17: { # 'บ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 1, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 2, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 2, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 25: { # 'ป' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 1, # 'ฎ' + 57: 3, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 1, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 2, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 1, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 39: { # 'ผ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 1, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 0, # 'ุ' + 35: 3, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 1, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 62: { # 'ฝ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 1, # 'ี' + 40: 2, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 1, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 31: { # 'พ' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 2, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 1, # 'ึ' + 27: 3, # 'ื' + 32: 1, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 0, # '่' + 7: 1, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 54: { # 'ฟ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 45: { # 'ภ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 2, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 9: { # 'ม' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 2, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 1, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 2, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 16: { # 'ย' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 2, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 1, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 2, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 2: { # 'ร' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 2, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 3, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 3, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 3, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 2, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 2, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 3, # 'เ' + 28: 3, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 61: { # 'ฤ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 2, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 15: { # 'ล' + 5: 2, # 'ก' + 30: 3, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 3, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 2, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 2, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 12: { # 'ว' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 2, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 42: { # 'ศ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 2, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 3, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 2, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 46: { # 'ษ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 2, # 'ฎ' + 57: 1, # 'ฏ' + 49: 2, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 18: { # 'ส' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 3, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 2, # 'ภ' + 9: 3, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 0, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 1, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 21: { # 'ห' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 4: { # 'อ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 63: { # 'ฯ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 22: { # 'ะ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 1, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 10: { # 'ั' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 3, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 2, # 'ฐ' + 53: 0, # 'ฑ' + 55: 3, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 1: { # 'า' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 1, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 2, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 3, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 3, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 36: { # 'ำ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 23: { # 'ิ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 3, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 2, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 3, # 'ศ' + 46: 2, # 'ษ' + 18: 2, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 13: { # 'ี' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 40: { # 'ึ' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 3, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 27: { # 'ื' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 32: { # 'ุ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 3, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 1, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 1, # 'ศ' + 46: 2, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 35: { # 'ู' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 11: { # 'เ' + 5: 3, # 'ก' + 30: 3, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 3, # 'ฉ' + 34: 3, # 'ช' + 51: 2, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 3, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 3, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 28: { # 'แ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 3, # 'ต' + 44: 2, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 3, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 41: { # 'โ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 1, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 29: { # 'ใ' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 33: { # 'ไ' + 5: 1, # 'ก' + 30: 2, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 1, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 2, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 50: { # 'ๆ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 37: { # '็' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 6: { # '่' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 7: { # '้' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 38: { # '์' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 1, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 56: { # '๑' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 2, # '๑' + 59: 1, # '๒' + 60: 1, # '๕' + }, + 59: { # '๒' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 1, # '๑' + 59: 1, # '๒' + 60: 3, # '๕' + }, + 60: { # '๕' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 2, # '๑' + 59: 1, # '๒' + 60: 0, # '๕' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +TIS_620_THAI_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 182, # 'A' + 66: 106, # 'B' + 67: 107, # 'C' + 68: 100, # 'D' + 69: 183, # 'E' + 70: 184, # 'F' + 71: 185, # 'G' + 72: 101, # 'H' + 73: 94, # 'I' + 74: 186, # 'J' + 75: 187, # 'K' + 76: 108, # 'L' + 77: 109, # 'M' + 78: 110, # 'N' + 79: 111, # 'O' + 80: 188, # 'P' + 81: 189, # 'Q' + 82: 190, # 'R' + 83: 89, # 'S' + 84: 95, # 'T' + 85: 112, # 'U' + 86: 113, # 'V' + 87: 191, # 'W' + 88: 192, # 'X' + 89: 193, # 'Y' + 90: 194, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 64, # 'a' + 98: 72, # 'b' + 99: 73, # 'c' + 100: 114, # 'd' + 101: 74, # 'e' + 102: 115, # 'f' + 103: 116, # 'g' + 104: 102, # 'h' + 105: 81, # 'i' + 106: 201, # 'j' + 107: 117, # 'k' + 108: 90, # 'l' + 109: 103, # 'm' + 110: 78, # 'n' + 111: 82, # 'o' + 112: 96, # 'p' + 113: 202, # 'q' + 114: 91, # 'r' + 115: 79, # 's' + 116: 84, # 't' + 117: 104, # 'u' + 118: 105, # 'v' + 119: 97, # 'w' + 120: 98, # 'x' + 121: 92, # 'y' + 122: 203, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 209, # '\x80' + 129: 210, # '\x81' + 130: 211, # '\x82' + 131: 212, # '\x83' + 132: 213, # '\x84' + 133: 88, # '\x85' + 134: 214, # '\x86' + 135: 215, # '\x87' + 136: 216, # '\x88' + 137: 217, # '\x89' + 138: 218, # '\x8a' + 139: 219, # '\x8b' + 140: 220, # '\x8c' + 141: 118, # '\x8d' + 142: 221, # '\x8e' + 143: 222, # '\x8f' + 144: 223, # '\x90' + 145: 224, # '\x91' + 146: 99, # '\x92' + 147: 85, # '\x93' + 148: 83, # '\x94' + 149: 225, # '\x95' + 150: 226, # '\x96' + 151: 227, # '\x97' + 152: 228, # '\x98' + 153: 229, # '\x99' + 154: 230, # '\x9a' + 155: 231, # '\x9b' + 156: 232, # '\x9c' + 157: 233, # '\x9d' + 158: 234, # '\x9e' + 159: 235, # '\x9f' + 160: 236, # None + 161: 5, # 'ก' + 162: 30, # 'ข' + 163: 237, # 'ฃ' + 164: 24, # 'ค' + 165: 238, # 'ฅ' + 166: 75, # 'ฆ' + 167: 8, # 'ง' + 168: 26, # 'จ' + 169: 52, # 'ฉ' + 170: 34, # 'ช' + 171: 51, # 'ซ' + 172: 119, # 'ฌ' + 173: 47, # 'ญ' + 174: 58, # 'ฎ' + 175: 57, # 'ฏ' + 176: 49, # 'ฐ' + 177: 53, # 'ฑ' + 178: 55, # 'ฒ' + 179: 43, # 'ณ' + 180: 20, # 'ด' + 181: 19, # 'ต' + 182: 44, # 'ถ' + 183: 14, # 'ท' + 184: 48, # 'ธ' + 185: 3, # 'น' + 186: 17, # 'บ' + 187: 25, # 'ป' + 188: 39, # 'ผ' + 189: 62, # 'ฝ' + 190: 31, # 'พ' + 191: 54, # 'ฟ' + 192: 45, # 'ภ' + 193: 9, # 'ม' + 194: 16, # 'ย' + 195: 2, # 'ร' + 196: 61, # 'ฤ' + 197: 15, # 'ล' + 198: 239, # 'ฦ' + 199: 12, # 'ว' + 200: 42, # 'ศ' + 201: 46, # 'ษ' + 202: 18, # 'ส' + 203: 21, # 'ห' + 204: 76, # 'ฬ' + 205: 4, # 'อ' + 206: 66, # 'ฮ' + 207: 63, # 'ฯ' + 208: 22, # 'ะ' + 209: 10, # 'ั' + 210: 1, # 'า' + 211: 36, # 'ำ' + 212: 23, # 'ิ' + 213: 13, # 'ี' + 214: 40, # 'ึ' + 215: 27, # 'ื' + 216: 32, # 'ุ' + 217: 35, # 'ู' + 218: 86, # 'ฺ' + 219: 240, # None + 220: 241, # None + 221: 242, # None + 222: 243, # None + 223: 244, # '฿' + 224: 11, # 'เ' + 225: 28, # 'แ' + 226: 41, # 'โ' + 227: 29, # 'ใ' + 228: 33, # 'ไ' + 229: 245, # 'ๅ' + 230: 50, # 'ๆ' + 231: 37, # '็' + 232: 6, # '่' + 233: 7, # '้' + 234: 67, # '๊' + 235: 77, # '๋' + 236: 38, # '์' + 237: 93, # 'ํ' + 238: 246, # '๎' + 239: 247, # '๏' + 240: 68, # '๐' + 241: 56, # '๑' + 242: 59, # '๒' + 243: 65, # '๓' + 244: 69, # '๔' + 245: 60, # '๕' + 246: 70, # '๖' + 247: 80, # '๗' + 248: 71, # '๘' + 249: 87, # '๙' + 250: 248, # '๚' + 251: 249, # '๛' + 252: 250, # None + 253: 251, # None + 254: 252, # None + 255: 253, # None +} + +TIS_620_THAI_MODEL = SingleByteCharSetModel( + charset_name="TIS-620", + language="Thai", + char_to_order_map=TIS_620_THAI_CHAR_TO_ORDER, + language_model=THAI_LANG_MODEL, + typical_positive_ratio=0.926386, + keep_ascii_letters=False, + alphabet="กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛", +) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langturkishmodel.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langturkishmodel.py new file mode 100644 index 0000000..291857c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/langturkishmodel.py @@ -0,0 +1,4380 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +TURKISH_LANG_MODEL = { + 23: { # 'A' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 37: { # 'B' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 47: { # 'C' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 39: { # 'D' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 0, # 'ş' + }, + 29: { # 'E' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 52: { # 'F' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 1, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 2, # 'ş' + }, + 36: { # 'G' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 2, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 1, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 45: { # 'H' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 2, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 2, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 53: { # 'I' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 60: { # 'J' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 16: { # 'K' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 1, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 49: { # 'L' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 2, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 20: { # 'M' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 0, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 46: { # 'N' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 42: { # 'O' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 2, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 48: { # 'P' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 44: { # 'R' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 35: { # 'S' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 1, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 2, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 31: { # 'T' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 2, # 't' + 14: 2, # 'u' + 32: 1, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 51: { # 'U' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 38: { # 'V' + 23: 1, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 1, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 62: { # 'W' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 43: { # 'Y' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 0, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 1, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 56: { # 'Z' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 1: { # 'a' + 23: 3, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 1, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 21: { # 'b' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 3, # 'g' + 25: 1, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 2, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 28: { # 'c' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 2, # 'T' + 51: 2, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 3, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 1, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 1, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 2, # 'ş' + }, + 12: { # 'd' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 2: { # 'e' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 18: { # 'f' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 1, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 1, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 27: { # 'g' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 25: { # 'h' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 3: { # 'i' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 1, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 3, # 'g' + 25: 1, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 24: { # 'j' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 10: { # 'k' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 2, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 5: { # 'l' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 1, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 2, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 13: { # 'm' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 2, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 4: { # 'n' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 15: { # 'o' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 2, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 2, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 2, # 'ş' + }, + 26: { # 'p' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 7: { # 'r' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 1, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 8: { # 's' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 9: { # 't' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 14: { # 'u' + 23: 3, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 2, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 2, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 32: { # 'v' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 57: { # 'w' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 1, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 58: { # 'x' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 11: { # 'y' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 22: { # 'z' + 23: 2, # 'A' + 37: 2, # 'B' + 47: 1, # 'C' + 39: 2, # 'D' + 29: 3, # 'E' + 52: 1, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 2, # 'N' + 42: 2, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 3, # 'T' + 51: 2, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 1, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 2, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 1, # 'Ş' + 19: 2, # 'ş' + }, + 63: { # '·' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 54: { # 'Ç' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 3, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 50: { # 'Ö' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 2, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 1, # 'N' + 42: 2, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 1, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 1, # 's' + 9: 2, # 't' + 14: 0, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 55: { # 'Ü' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 59: { # 'â' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 0, # 'ş' + }, + 33: { # 'ç' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 0, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 61: { # 'î' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 1, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 34: { # 'ö' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 1, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 3, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 1, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 17: { # 'ü' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 30: { # 'ğ' + 23: 0, # 'A' + 37: 2, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 2, # 'N' + 42: 2, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 3, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 2, # 'İ' + 6: 2, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 41: { # 'İ' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 2, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 6: { # 'ı' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 40: { # 'Ş' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 2, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 0, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 3, # 'f' + 27: 0, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 1, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 1, # 'ü' + 30: 2, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 2, # 'ş' + }, + 19: { # 'ş' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 2, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 1, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +ISO_8859_9_TURKISH_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 255, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 255, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 255, # ' ' + 33: 255, # '!' + 34: 255, # '"' + 35: 255, # '#' + 36: 255, # '$' + 37: 255, # '%' + 38: 255, # '&' + 39: 255, # "'" + 40: 255, # '(' + 41: 255, # ')' + 42: 255, # '*' + 43: 255, # '+' + 44: 255, # ',' + 45: 255, # '-' + 46: 255, # '.' + 47: 255, # '/' + 48: 255, # '0' + 49: 255, # '1' + 50: 255, # '2' + 51: 255, # '3' + 52: 255, # '4' + 53: 255, # '5' + 54: 255, # '6' + 55: 255, # '7' + 56: 255, # '8' + 57: 255, # '9' + 58: 255, # ':' + 59: 255, # ';' + 60: 255, # '<' + 61: 255, # '=' + 62: 255, # '>' + 63: 255, # '?' + 64: 255, # '@' + 65: 23, # 'A' + 66: 37, # 'B' + 67: 47, # 'C' + 68: 39, # 'D' + 69: 29, # 'E' + 70: 52, # 'F' + 71: 36, # 'G' + 72: 45, # 'H' + 73: 53, # 'I' + 74: 60, # 'J' + 75: 16, # 'K' + 76: 49, # 'L' + 77: 20, # 'M' + 78: 46, # 'N' + 79: 42, # 'O' + 80: 48, # 'P' + 81: 69, # 'Q' + 82: 44, # 'R' + 83: 35, # 'S' + 84: 31, # 'T' + 85: 51, # 'U' + 86: 38, # 'V' + 87: 62, # 'W' + 88: 65, # 'X' + 89: 43, # 'Y' + 90: 56, # 'Z' + 91: 255, # '[' + 92: 255, # '\\' + 93: 255, # ']' + 94: 255, # '^' + 95: 255, # '_' + 96: 255, # '`' + 97: 1, # 'a' + 98: 21, # 'b' + 99: 28, # 'c' + 100: 12, # 'd' + 101: 2, # 'e' + 102: 18, # 'f' + 103: 27, # 'g' + 104: 25, # 'h' + 105: 3, # 'i' + 106: 24, # 'j' + 107: 10, # 'k' + 108: 5, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 15, # 'o' + 112: 26, # 'p' + 113: 64, # 'q' + 114: 7, # 'r' + 115: 8, # 's' + 116: 9, # 't' + 117: 14, # 'u' + 118: 32, # 'v' + 119: 57, # 'w' + 120: 58, # 'x' + 121: 11, # 'y' + 122: 22, # 'z' + 123: 255, # '{' + 124: 255, # '|' + 125: 255, # '}' + 126: 255, # '~' + 127: 255, # '\x7f' + 128: 180, # '\x80' + 129: 179, # '\x81' + 130: 178, # '\x82' + 131: 177, # '\x83' + 132: 176, # '\x84' + 133: 175, # '\x85' + 134: 174, # '\x86' + 135: 173, # '\x87' + 136: 172, # '\x88' + 137: 171, # '\x89' + 138: 170, # '\x8a' + 139: 169, # '\x8b' + 140: 168, # '\x8c' + 141: 167, # '\x8d' + 142: 166, # '\x8e' + 143: 165, # '\x8f' + 144: 164, # '\x90' + 145: 163, # '\x91' + 146: 162, # '\x92' + 147: 161, # '\x93' + 148: 160, # '\x94' + 149: 159, # '\x95' + 150: 101, # '\x96' + 151: 158, # '\x97' + 152: 157, # '\x98' + 153: 156, # '\x99' + 154: 155, # '\x9a' + 155: 154, # '\x9b' + 156: 153, # '\x9c' + 157: 152, # '\x9d' + 158: 151, # '\x9e' + 159: 106, # '\x9f' + 160: 150, # '\xa0' + 161: 149, # '¡' + 162: 148, # '¢' + 163: 147, # '£' + 164: 146, # '¤' + 165: 145, # '¥' + 166: 144, # '¦' + 167: 100, # '§' + 168: 143, # '¨' + 169: 142, # '©' + 170: 141, # 'ª' + 171: 140, # '«' + 172: 139, # '¬' + 173: 138, # '\xad' + 174: 137, # '®' + 175: 136, # '¯' + 176: 94, # '°' + 177: 80, # '±' + 178: 93, # '²' + 179: 135, # '³' + 180: 105, # '´' + 181: 134, # 'µ' + 182: 133, # '¶' + 183: 63, # '·' + 184: 132, # '¸' + 185: 131, # '¹' + 186: 130, # 'º' + 187: 129, # '»' + 188: 128, # '¼' + 189: 127, # '½' + 190: 126, # '¾' + 191: 125, # '¿' + 192: 124, # 'À' + 193: 104, # 'Á' + 194: 73, # 'Â' + 195: 99, # 'Ã' + 196: 79, # 'Ä' + 197: 85, # 'Å' + 198: 123, # 'Æ' + 199: 54, # 'Ç' + 200: 122, # 'È' + 201: 98, # 'É' + 202: 92, # 'Ê' + 203: 121, # 'Ë' + 204: 120, # 'Ì' + 205: 91, # 'Í' + 206: 103, # 'Î' + 207: 119, # 'Ï' + 208: 68, # 'Ğ' + 209: 118, # 'Ñ' + 210: 117, # 'Ò' + 211: 97, # 'Ó' + 212: 116, # 'Ô' + 213: 115, # 'Õ' + 214: 50, # 'Ö' + 215: 90, # '×' + 216: 114, # 'Ø' + 217: 113, # 'Ù' + 218: 112, # 'Ú' + 219: 111, # 'Û' + 220: 55, # 'Ü' + 221: 41, # 'İ' + 222: 40, # 'Ş' + 223: 86, # 'ß' + 224: 89, # 'à' + 225: 70, # 'á' + 226: 59, # 'â' + 227: 78, # 'ã' + 228: 71, # 'ä' + 229: 82, # 'å' + 230: 88, # 'æ' + 231: 33, # 'ç' + 232: 77, # 'è' + 233: 66, # 'é' + 234: 84, # 'ê' + 235: 83, # 'ë' + 236: 110, # 'ì' + 237: 75, # 'í' + 238: 61, # 'î' + 239: 96, # 'ï' + 240: 30, # 'ğ' + 241: 67, # 'ñ' + 242: 109, # 'ò' + 243: 74, # 'ó' + 244: 87, # 'ô' + 245: 102, # 'õ' + 246: 34, # 'ö' + 247: 95, # '÷' + 248: 81, # 'ø' + 249: 108, # 'ù' + 250: 76, # 'ú' + 251: 72, # 'û' + 252: 17, # 'ü' + 253: 6, # 'ı' + 254: 19, # 'ş' + 255: 107, # 'ÿ' +} + +ISO_8859_9_TURKISH_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-9", + language="Turkish", + char_to_order_map=ISO_8859_9_TURKISH_CHAR_TO_ORDER, + language_model=TURKISH_LANG_MODEL, + typical_positive_ratio=0.97029, + keep_ascii_letters=True, + alphabet="ABCDEFGHIJKLMNOPRSTUVYZabcdefghijklmnoprstuvyzÂÇÎÖÛÜâçîöûüĞğİıŞş", +) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/latin1prober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/latin1prober.py new file mode 100644 index 0000000..59a01d9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/latin1prober.py @@ -0,0 +1,147 @@ +######################## 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 typing import List, Union + +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 + +# fmt: off +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 +) +# fmt: on + + +class Latin1Prober(CharSetProber): + def __init__(self) -> None: + super().__init__() + self._last_char_class = OTH + self._freq_counter: List[int] = [] + self.reset() + + def reset(self) -> None: + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + super().reset() + + @property + def charset_name(self) -> str: + return "ISO-8859-1" + + @property + def language(self) -> str: + return "" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + byte_str = self.remove_xml_tags(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) -> float: + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + confidence = ( + 0.0 + if total < 0.01 + else (self._freq_counter[3] - self._freq_counter[1] * 20.0) / total + ) + confidence = max(confidence, 0.0) + # lower the confidence of latin1 so that other more accurate + # detector can take priority. + confidence *= 0.73 + return confidence diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/macromanprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/macromanprober.py new file mode 100644 index 0000000..1425d10 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/macromanprober.py @@ -0,0 +1,162 @@ +######################## BEGIN LICENSE BLOCK ######################## +# This code was modified from latin1prober.py by Rob Speer . +# 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): +# Rob Speer - adapt to MacRoman encoding +# 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 typing import List, Union + +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 +ODD = 8 # character that is unlikely to appear +CLASS_NUM = 9 # total classes + +# The change from Latin1 is that we explicitly look for extended characters +# that are infrequently-occurring symbols, and consider them to always be +# improbable. This should let MacRoman get out of the way of more likely +# encodings in most situations. + +# fmt: off +MacRoman_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 + ACV, ACV, ACO, ACV, ACO, ACV, ACV, ASV, # 80 - 87 + ASV, ASV, ASV, ASV, ASV, ASO, ASV, ASV, # 88 - 8F + ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASV, # 90 - 97 + ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # 98 - 9F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, ASO, # A0 - A7 + OTH, OTH, ODD, ODD, OTH, OTH, ACV, ACV, # A8 - AF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 + OTH, OTH, OTH, OTH, OTH, OTH, ASV, ASV, # B8 - BF + OTH, OTH, ODD, OTH, ODD, OTH, OTH, OTH, # C0 - C7 + OTH, OTH, OTH, ACV, ACV, ACV, ACV, ASV, # C8 - CF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, ODD, # D0 - D7 + ASV, ACV, ODD, OTH, OTH, OTH, OTH, OTH, # D8 - DF + OTH, OTH, OTH, OTH, OTH, ACV, ACV, ACV, # E0 - E7 + ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # E8 - EF + ODD, ACV, ACV, ACV, ACV, ASV, ODD, ODD, # F0 - F7 + ODD, ODD, ODD, ODD, ODD, ODD, ODD, ODD, # F8 - FF +) + +# 0 : illegal +# 1 : very unlikely +# 2 : normal +# 3 : very likely +MacRomanClassModel = ( +# UDF OTH ASC ASS ACV ACO ASV ASO ODD + 0, 0, 0, 0, 0, 0, 0, 0, 0, # UDF + 0, 3, 3, 3, 3, 3, 3, 3, 1, # OTH + 0, 3, 3, 3, 3, 3, 3, 3, 1, # ASC + 0, 3, 3, 3, 1, 1, 3, 3, 1, # ASS + 0, 3, 3, 3, 1, 2, 1, 2, 1, # ACV + 0, 3, 3, 3, 3, 3, 3, 3, 1, # ACO + 0, 3, 1, 3, 1, 1, 1, 3, 1, # ASV + 0, 3, 1, 3, 1, 1, 3, 3, 1, # ASO + 0, 1, 1, 1, 1, 1, 1, 1, 1, # ODD +) +# fmt: on + + +class MacRomanProber(CharSetProber): + def __init__(self) -> None: + super().__init__() + self._last_char_class = OTH + self._freq_counter: List[int] = [] + self.reset() + + def reset(self) -> None: + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + + # express the prior that MacRoman is a somewhat rare encoding; + # this can be done by starting out in a slightly improbable state + # that must be overcome + self._freq_counter[2] = 10 + + super().reset() + + @property + def charset_name(self) -> str: + return "MacRoman" + + @property + def language(self) -> str: + return "" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + byte_str = self.remove_xml_tags(byte_str) + for c in byte_str: + char_class = MacRoman_CharToClass[c] + freq = MacRomanClassModel[(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) -> float: + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + confidence = ( + 0.0 + if total < 0.01 + else (self._freq_counter[3] - self._freq_counter[1] * 20.0) / total + ) + confidence = max(confidence, 0.0) + # lower the confidence of MacRoman so that other more accurate + # detector can take priority. + confidence *= 0.73 + return confidence diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcharsetprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcharsetprober.py new file mode 100644 index 0000000..666307e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcharsetprober.py @@ -0,0 +1,95 @@ +######################## 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 typing import Optional, Union + +from .chardistribution import CharDistributionAnalysis +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, MachineState, ProbingState + + +class MultiByteCharSetProber(CharSetProber): + """ + MultiByteCharSetProber + """ + + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self.distribution_analyzer: Optional[CharDistributionAnalysis] = None + self.coding_sm: Optional[CodingStateMachine] = None + self._last_char = bytearray(b"\0\0") + + def reset(self) -> None: + super().reset() + if self.coding_sm: + self.coding_sm.reset() + if self.distribution_analyzer: + self.distribution_analyzer.reset() + self._last_char = bytearray(b"\0\0") + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + assert self.coding_sm is not None + assert self.distribution_analyzer is not None + + for i, byte in enumerate(byte_str): + coding_state = self.coding_sm.next_state(byte) + 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 + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte + 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) -> float: + assert self.distribution_analyzer is not None + return self.distribution_analyzer.get_confidence() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcsgroupprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcsgroupprober.py new file mode 100644 index 0000000..6cb9cc7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcsgroupprober.py @@ -0,0 +1,57 @@ +######################## 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 .big5prober import Big5Prober +from .charsetgroupprober import CharSetGroupProber +from .cp949prober import CP949Prober +from .enums import LanguageFilter +from .eucjpprober import EUCJPProber +from .euckrprober import EUCKRProber +from .euctwprober import EUCTWProber +from .gb2312prober import GB2312Prober +from .johabprober import JOHABProber +from .sjisprober import SJISProber +from .utf8prober import UTF8Prober + + +class MBCSGroupProber(CharSetGroupProber): + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self.probers = [ + UTF8Prober(), + SJISProber(), + EUCJPProber(), + GB2312Prober(), + EUCKRProber(), + CP949Prober(), + Big5Prober(), + EUCTWProber(), + JOHABProber(), + ] + self.reset() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcssm.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcssm.py new file mode 100644 index 0000000..7bbe97e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcssm.py @@ -0,0 +1,661 @@ +######################## 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 .codingstatemachinedict import CodingStateMachineDict +from .enums import MachineState + +# BIG5 + +# fmt: off +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 +) +# fmt: on + +BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) + +BIG5_SM_MODEL: CodingStateMachineDict = { + "class_table": BIG5_CLS, + "class_factor": 5, + "state_table": BIG5_ST, + "char_len_table": BIG5_CHAR_LEN_TABLE, + "name": "Big5", +} + +# CP949 +# fmt: off +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 +) +# fmt: on + +CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) + +CP949_SM_MODEL: CodingStateMachineDict = { + "class_table": CP949_CLS, + "class_factor": 10, + "state_table": CP949_ST, + "char_len_table": CP949_CHAR_LEN_TABLE, + "name": "CP949", +} + +# EUC-JP +# fmt: off +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 +) +# fmt: on + +EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) + +EUCJP_SM_MODEL: CodingStateMachineDict = { + "class_table": EUCJP_CLS, + "class_factor": 6, + "state_table": EUCJP_ST, + "char_len_table": EUCJP_CHAR_LEN_TABLE, + "name": "EUC-JP", +} + +# EUC-KR +# fmt: off +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 +) +# fmt: on + +EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) + +EUCKR_SM_MODEL: CodingStateMachineDict = { + "class_table": EUCKR_CLS, + "class_factor": 4, + "state_table": EUCKR_ST, + "char_len_table": EUCKR_CHAR_LEN_TABLE, + "name": "EUC-KR", +} + +# JOHAB +# fmt: off +JOHAB_CLS = ( + 4,4,4,4,4,4,4,4, # 00 - 07 + 4,4,4,4,4,4,0,0, # 08 - 0f + 4,4,4,4,4,4,4,4, # 10 - 17 + 4,4,4,0,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,3,3,3,3,3,3,3, # 30 - 37 + 3,3,3,3,3,3,3,3, # 38 - 3f + 3,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,2, # 78 - 7f + 6,6,6,6,8,8,8,8, # 80 - 87 + 8,8,8,8,8,8,8,8, # 88 - 8f + 8,7,7,7,7,7,7,7, # 90 - 97 + 7,7,7,7,7,7,7,7, # 98 - 9f + 7,7,7,7,7,7,7,7, # a0 - a7 + 7,7,7,7,7,7,7,7, # a8 - af + 7,7,7,7,7,7,7,7, # b0 - b7 + 7,7,7,7,7,7,7,7, # b8 - bf + 7,7,7,7,7,7,7,7, # c0 - c7 + 7,7,7,7,7,7,7,7, # c8 - cf + 7,7,7,7,5,5,5,5, # d0 - d7 + 5,9,9,9,9,9,9,5, # d8 - df + 9,9,9,9,9,9,9,9, # e0 - e7 + 9,9,9,9,9,9,9,9, # e8 - ef + 9,9,9,9,9,9,9,9, # f0 - f7 + 9,9,5,5,5,5,5,0 # f8 - ff +) + +JOHAB_ST = ( +# cls = 0 1 2 3 4 5 6 7 8 9 + MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.ERROR ,MachineState.ERROR ,3 ,3 ,4 , # MachineState.START + 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.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR , # MachineState.ERROR + MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.ERROR ,MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START , # 3 + MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START , # 4 +) +# fmt: on + +JOHAB_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 0, 0, 2, 2, 2) + +JOHAB_SM_MODEL: CodingStateMachineDict = { + "class_table": JOHAB_CLS, + "class_factor": 10, + "state_table": JOHAB_ST, + "char_len_table": JOHAB_CHAR_LEN_TABLE, + "name": "Johab", +} + +# EUC-TW +# fmt: off +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 +) +# fmt: on + +EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) + +EUCTW_SM_MODEL: CodingStateMachineDict = { + "class_table": EUCTW_CLS, + "class_factor": 7, + "state_table": EUCTW_ST, + "char_len_table": EUCTW_CHAR_LEN_TABLE, + "name": "x-euc-tw", +} + +# GB2312 +# fmt: off +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 +) +# fmt: on + +# 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: CodingStateMachineDict = { + "class_table": GB2312_CLS, + "class_factor": 7, + "state_table": GB2312_ST, + "char_len_table": GB2312_CHAR_LEN_TABLE, + "name": "GB2312", +} + +# Shift_JIS +# fmt: off +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 +) +# fmt: on + +SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) + +SJIS_SM_MODEL: CodingStateMachineDict = { + "class_table": SJIS_CLS, + "class_factor": 6, + "state_table": SJIS_ST, + "char_len_table": SJIS_CHAR_LEN_TABLE, + "name": "Shift_JIS", +} + +# UCS2-BE +# fmt: off +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 +) +# fmt: on + +UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) + +UCS2BE_SM_MODEL: CodingStateMachineDict = { + "class_table": UCS2BE_CLS, + "class_factor": 6, + "state_table": UCS2BE_ST, + "char_len_table": UCS2BE_CHAR_LEN_TABLE, + "name": "UTF-16BE", +} + +# UCS2-LE +# fmt: off +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 +) +# fmt: on + +UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) + +UCS2LE_SM_MODEL: CodingStateMachineDict = { + "class_table": UCS2LE_CLS, + "class_factor": 6, + "state_table": UCS2LE_ST, + "char_len_table": UCS2LE_CHAR_LEN_TABLE, + "name": "UTF-16LE", +} + +# UTF-8 +# fmt: off +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 +) +# fmt: on + +UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) + +UTF8_SM_MODEL: CodingStateMachineDict = { + "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.11/site-packages/pip/_vendor/chardet/metadata/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e38d0e5d38e1975cdd40ae17133f272920a78c0b GIT binary patch literal 212 zcmXwzK?=e!5JeM&ekdB*XE1nu76Vyd4Bv*_Opt6&~PkSp2K%Zu1W=!YpB3n;ZhxCt;;-!S(Mv}#$# z^Lt~U#kz$`W?(vB>iU?ZDLCozU_#CdbYP?b7S@EekeA#F^q|ml!954YWGy{oiRs4m aNomnkc(%)Mclyk21Nw+k+LIYJ3bP+cB{<&z literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e34ebe9c3da924f078f8080c12bd652486c3547 GIT binary patch literal 10812 zcmb7Jc~Bc?mTw732yD*y06cNpaXc}J0pG^tnD~l~59}CxgiJNK*AK?4G?X-MlYg@{u_7BmTb(NZ~nyQ}K+N$0El!~`%%75+qJ{?E|yt6`j zeZBX6@A$pYyQ5FqW%M4L_bp^C%@1}iaJFhs**xFq_^wp^_6-Z zK2NeI)f*}e^~Or0j?z=BDP(A;knxJ1qHe-3{HZkAC}h%8tO=P=GBVdtDCL34bASdJpA-o-~X(1HC^c=S;#m6MYcloP~ZnCg+EQ^FuTnnNdFa2xk8n z%^8!kfN&O|LNaC%%svYTv($+i_qdR$6G@9mZ0L8j!RL= zn4F&w&QH*%#FwAJ%%7v*jmh~1;rs$Ei;cM)tr(MYCE;9&R>e5KM61!78vPhiFD1OC zXf0T@4y^|tZ9rvXj=GU>ZbX}aGaSpW(B?5Y%L!*Ws)%uJL0iY<+(tOJq3tnEzebf~ zaT307(C>+tz6CG+0a<>{N4UO2OpL1vS;yf*h$URrFjft!9f!+?b`Z@lBIN`ejF}05@MOsfOd|4d3!9apr;Ml^{)QVagA08WyRScfr8D@!UMb}5Qt>&Ed zL|U-ItcZ2fF3!1wwYm#a{~Onwe4U!c@K&46VrSiMP$yrn8rIu*w`$(#a@(8^#%_%i zCvwP$T>NqePC8)eV5v$SEFXHLt4vCvM*dJ5GOz~Lm>ZKu#!=TMST>U3UUEEF9KU%K zf67~UQ<1(py_2fep$YA2m1dO68mskaV!NR-rIXsFt4xJ3rmN=lk+3nHNfb3Iq)aTR zI1bfiLHU*Xa`fzme3Utnp&Zraggh<4BU!_Vh#@9DhR!euPqD< zyBl3>M3{GTaRb_Trv+oCgq~jz4hLOYzL8$MU}?cT+Ez`woIG!5I))pNVYp`Xojb;*}R+PSl-D2DzH!q(QrhYL@i+)3xP}t zy{(odK!wp^V0u~kiqcX#0wkKRjl$aIu-XNvh6KqtIaoBNlHvT}=aR#q6|0?HN<)D6B@t!WAo)C)maD3jSJ=(QYoQPz^YjRC5$^YD&y^ zsyP}T)f}}|%^W?bYT{U^jt*;btlUr(K8G}?e%Y?0s1v$VlpBuG&lNbi8NHwe;-18A zQi(h|s#(`eSz^s^vmUPS_~g@^1XqUGl>x3|ZCx|9Bld)w+-&3~G#lL$qr4Q=ltxjz zjgH*-dvKlAY~(ZC(TWS~NOuMFycyHAO$TEYA^m`PWUP@h_d9XtlSj^*jftbY?aBeQ z9W0p;m2Nh{RZMe4K~+sEYx-z|0EvUs4Ims15-wP=C_)0zUov){RjK?m)d;LCr)E0ms3@{J@@x=dann zk>4#1WUqady;h#MRw-F7=dAD5pHJ>fzHGY8Un?HmeQ9@qUi6Ay6v$cpDrd2rv-l?i znU+IKx4`p!y{Z^%#)lu1}E@hsT+XfuRloN4!GJ8lN^X;RXlHE{;eF9 zkBPY54Y|1^mW?C%)=#0NW*tz&Sp%TeSk|PULno+=Q*#0QeyISmj?#hJ&D6Iue-A3{ z*6r3ek7ojvsKC8EGL5cT->*NLw3Rxg(@|X?AU#eIRcCpl`>YI_tyEHy`JFa*E!@@@ z&Q*1Fs;+^@ngbj;-2S{t`Lu?0u)AE`=S?5PL4{*ooW)Z3soiOXRQkLy#`P%(@mqlW z7yPwQAxb|zm5||gXY_tGp!??;|2pSi=KRD5mY2U;ULHz<$4W+K=lag|-SaRdcSfW} zopE_sC*ABfy8L`2Hwi9q<|3OFGFLT19@O((PUJ2w;}%Q4o|}qqq_`N4sfSgF<8gc= z=3(iuDG7-XzV!+4@!tYzp#blvN{^L}Xrs)^zw~WzR`FkE6$fUOyqZ-)^!^!J`x+BC zn~cvUr*@`D5j~Bkm&X+Ta;d`w#e8kjTOiao*m6cVLm6hdB;AUfOQ!N(g@dP^< zpiZ<{{wOf^usLcnnCrBH))?JTdE8Kpa5utX=#Z4=KEhAZBIU)(+U?*49dQefLH-2^ zEQePlLek-c|0@v4_vl|ppKUaUC`{&1@6A-+|E-cYU70-xpUhnt%9vuD7ovb@=~KG- zuKJJ>-vBeG^)5JG5K6{ZW@=JSCD08D0}HPu zU0V7ouOK{lCY72V%EAxvG-Hyv2IJD+nIQ@e{{SIwCibePWgJswv#NTA`!e6qlnQ-q zL2>b-r3H(dCT=S&Te)#tdBME-ix#WK6`PjKpNkL0ix&!2;38#Exu9HBE-9ClE6P>n znsQyaq1;q%DYun7%3bB2a$k9%JX9VjkCi9N_ll@^l&8uw<+<`gd8zy`+%nuc+%~*t zxP5r<@V?=W;m+ax!v}^B4tEV78a_OHWVn0ysPHbH=IU^}@_4uvhP`ef7x$Gb!v~ay z@VlOG`af2d)a9(5;RN2sI8=QVn{RkCV&bAV@g~kwO{L2>6fa(^PT0U$S2S`qyWM6L z+CT-lTRtiulY8Xj@(H-$(c~HI}Uz88am*mUx75S=s zO};7Ll5fj*ekebZ9|w-gPvq|dCuNWPRDLEumtV*)+jC(CR-*?7dM3XNoCBeIfg=_y11Bvo!V4Jfo|>{; zu-7nL*w~u>6zkwx)L+YesCjF5duaM%jWbk;QQ=8L?x3-~dYozg?!Y2Tplvh>tUm!v-59qFv^g@7}C zjh$(5NVjnzWE_lYTFE%zZBW%CCIKh&nkK~3VqPL>=Bs7^%VsCMW(v5Sk*-LhbXnRb z^-6oy0d|84&r|J|Xkp+iH5{YU-B{5}5T{uBO_{!{*5|7m}p zzu$kxf7XA_f8IafAM{^@zf1nh{ww~g{%ij0{(b&V|9<}gf0zHT|A>HFTK~Y%A(-_0 z5`Q0z*$O(`SCb=e*kFSL;J6&vxD}YJ1fr&FfOk&ICTP`Q0UN8=#4V(nvWkbU6y6=3 zFp4uSe-{XN6sF4R-H+Jn8t>U!?`7K#@8ddqy~F9^c;8vK;Je+>v~2kbZ|BNYU#|9^ zS>wG_y4L$>-TDn>8#iq(_noQO;=8rAlIXuR@($)K@piJ+F2;M-sV0}ZBA8%#;Wsdw zbYB{ju1mM2htg9B;Zdno+AkfFdZa#xV%A6$H$gWH`%ST7ru!@ z)q;dlv_x18Q!QJ*a@FcJrE8{uxc3L&B;GB$`M5vY%z5wkoq7HdGkoPE{D$dKkLGW{v?C-LeC8Io!x{TQR{6xv&|?GH*Nf#mZIQUhhe)r1#F(F}z}T z_#XIfV3#o7z1XRU^`7>g!d83lHpbA4{px$@yNP|PP6AZ`D+t~|d5cTn!5AB_Ca-7Q z4PjLpgzaSJmdMP~ss1g@p@|!#Ayx-fs z&+8q&eWX%g4aocge$g%Ww$=&tFf*g3LV0IVB!lbg@(m+PDpvxm+-E?9W*~7*!X9W7 z@UprW7S>MEChRAT!hyI}p$nRY=<<35nuS=45a^K~lNR9wEQr0hNeGKjS{p6&tRAbxH%YOSzRf(aZWqz>V!2;XElP2CJ4D|+T_GrpsL}+iEJ@q{o z@VnDUWh{4duzPK(@wG`0cY*?`xKs)?0t=fEdY4<63)}$jHfaykmky{c2S|NA4z;fj z(&K`35x{#DzIaP*~cb0yvOKJ~uD z?UnS%cOu+ih1)BsJ=|bPhrAx|3*2H!$9>1cO%`dfGGX#?i#3Q#p)}~IV_-#vncyuN zrm_pTGbPn_R4GiTw4=&jtjbP|ud*;M%TCO*`}N1FIp6Q5|}_nP=r6Gct*XyOl=r$zI$YMwUD zvq$r^Yo5KDXP@Tj&^(=*XTRn-pm`2zo-WOENb?-lJV!K7x8^yjd5&qG9?f%H^PJE; zCpFJ0&C{!SPHUb%&C@UBfUk)za0Bdy`9UvG7IbM9*QfH{QCym9D{-Fn_VI2Im4UN>x_ec}O>4l_dS0 z^ytSy*B?3FE&O<|VOQfaT&|!gfbK&&081`u52fQj4s7~rb9u#J-H%_BpYgrdBM)kI ze=wx!6~n~N+Rj=fZL*RzS;?LXTQk|qb#m4+_$pa~lDAaOEeTDYkYW0n0`eM@P!g65 zZOoQ1zwc0I^`BIkYzve{TR8_Q;!LLU>^63RHSb9?7@C2bOsouXt3hcS>HdT(VZqT{k*58^Zwp!)WPPYzUGf_9g(r5|(s; zWSqTW4@WRquH=0z=gtXbn6a@yz{y~&Gc5UqVT{;BB(33~j*8AQ1BuRN5d8l}r#viL zWq`fagglMJM$2L&;LR}OBn1M>LXu`vnK>hXf|S_D%=mFbseIKfoY+^aOE* zU=v`R6p>MdAd^a;5}(8)$o{bRJwP_jU?6~O$l!D;V`{WYC3qVQSS05z28D2(fPg}f zxQPnIC;AGEirl3DiG;G0NoD1Bo0SNB<4Otuuu#q|0)8A$AOL&_XJ(>@Li*%v_@_pU zWK!AN!S3J5xnG2)rDIn$(ac>aXW=gv{@S4AEtGQ?fl_JM{4{KSTB7+_sjSar w@>MXRaAkTsKtk_R@63?1W+++TMBH026^8@JYfM5L%mnn*2yIEhe`M+WU-*arGXMYp literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/languages.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/languages.py new file mode 100644 index 0000000..eb40c5f --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/languages.py @@ -0,0 +1,352 @@ +""" +Metadata about languages used by our model training code for our +SingleByteCharSetProbers. Could be used for other things in the future. + +This code is based on the language metadata from the uchardet project. +""" + +from string import ascii_letters +from typing import List, Optional + +# TODO: Add Ukrainian (KOI8-U) + + +class Language: + """Metadata about a language useful for training models + + :ivar name: The human name for the language, in English. + :type name: str + :ivar iso_code: 2-letter ISO 639-1 if possible, 3-letter ISO code otherwise, + or use another catalog as a last resort. + :type iso_code: str + :ivar use_ascii: Whether or not ASCII letters should be included in trained + models. + :type use_ascii: bool + :ivar charsets: The charsets we want to support and create data for. + :type charsets: list of str + :ivar alphabet: The characters in the language's alphabet. If `use_ascii` is + `True`, you only need to add those not in the ASCII set. + :type alphabet: str + :ivar wiki_start_pages: The Wikipedia pages to start from if we're crawling + Wikipedia for training data. + :type wiki_start_pages: list of str + """ + + def __init__( + self, + name: Optional[str] = None, + iso_code: Optional[str] = None, + use_ascii: bool = True, + charsets: Optional[List[str]] = None, + alphabet: Optional[str] = None, + wiki_start_pages: Optional[List[str]] = None, + ) -> None: + super().__init__() + self.name = name + self.iso_code = iso_code + self.use_ascii = use_ascii + self.charsets = charsets + if self.use_ascii: + if alphabet: + alphabet += ascii_letters + else: + alphabet = ascii_letters + elif not alphabet: + raise ValueError("Must supply alphabet if use_ascii is False") + self.alphabet = "".join(sorted(set(alphabet))) if alphabet else None + self.wiki_start_pages = wiki_start_pages + + def __repr__(self) -> str: + param_str = ", ".join( + f"{k}={v!r}" for k, v in self.__dict__.items() if not k.startswith("_") + ) + return f"{self.__class__.__name__}({param_str})" + + +LANGUAGES = { + "Arabic": Language( + name="Arabic", + iso_code="ar", + use_ascii=False, + # We only support encodings that use isolated + # forms, because the current recommendation is + # that the rendering system handles presentation + # forms. This means we purposefully skip IBM864. + charsets=["ISO-8859-6", "WINDOWS-1256", "CP720", "CP864"], + alphabet="ءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿـفقكلمنهوىيًٌٍَُِّ", + wiki_start_pages=["الصفحة_الرئيسية"], + ), + "Belarusian": Language( + name="Belarusian", + iso_code="be", + use_ascii=False, + charsets=["ISO-8859-5", "WINDOWS-1251", "IBM866", "MacCyrillic"], + alphabet="АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШЫЬЭЮЯабвгдеёжзійклмнопрстуўфхцчшыьэюяʼ", + wiki_start_pages=["Галоўная_старонка"], + ), + "Bulgarian": Language( + name="Bulgarian", + iso_code="bg", + use_ascii=False, + charsets=["ISO-8859-5", "WINDOWS-1251", "IBM855"], + alphabet="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", + wiki_start_pages=["Начална_страница"], + ), + "Czech": Language( + name="Czech", + iso_code="cz", + use_ascii=True, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ", + wiki_start_pages=["Hlavní_strana"], + ), + "Danish": Language( + name="Danish", + iso_code="da", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="æøåÆØÅ", + wiki_start_pages=["Forside"], + ), + "German": Language( + name="German", + iso_code="de", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="äöüßẞÄÖÜ", + wiki_start_pages=["Wikipedia:Hauptseite"], + ), + "Greek": Language( + name="Greek", + iso_code="el", + use_ascii=False, + charsets=["ISO-8859-7", "WINDOWS-1253"], + alphabet="αβγδεζηθικλμνξοπρσςτυφχψωάέήίόύώΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΣΤΥΦΧΨΩΆΈΉΊΌΎΏ", + wiki_start_pages=["Πύλη:Κύρια"], + ), + "English": Language( + name="English", + iso_code="en", + use_ascii=True, + charsets=["ISO-8859-1", "WINDOWS-1252", "MacRoman"], + wiki_start_pages=["Main_Page"], + ), + "Esperanto": Language( + name="Esperanto", + iso_code="eo", + # Q, W, X, and Y not used at all + use_ascii=False, + charsets=["ISO-8859-3"], + alphabet="abcĉdefgĝhĥijĵklmnoprsŝtuŭvzABCĈDEFGĜHĤIJĴKLMNOPRSŜTUŬVZ", + wiki_start_pages=["Vikipedio:Ĉefpaĝo"], + ), + "Spanish": Language( + name="Spanish", + iso_code="es", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ñáéíóúüÑÁÉÍÓÚÜ", + wiki_start_pages=["Wikipedia:Portada"], + ), + "Estonian": Language( + name="Estonian", + iso_code="et", + use_ascii=False, + charsets=["ISO-8859-4", "ISO-8859-13", "WINDOWS-1257"], + # C, F, Š, Q, W, X, Y, Z, Ž are only for + # loanwords + alphabet="ABDEGHIJKLMNOPRSTUVÕÄÖÜabdeghijklmnoprstuvõäöü", + wiki_start_pages=["Esileht"], + ), + "Finnish": Language( + name="Finnish", + iso_code="fi", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ÅÄÖŠŽåäöšž", + wiki_start_pages=["Wikipedia:Etusivu"], + ), + "French": Language( + name="French", + iso_code="fr", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="œàâçèéîïùûêŒÀÂÇÈÉÎÏÙÛÊ", + wiki_start_pages=["Wikipédia:Accueil_principal", "Bœuf (animal)"], + ), + "Hebrew": Language( + name="Hebrew", + iso_code="he", + use_ascii=False, + charsets=["ISO-8859-8", "WINDOWS-1255"], + alphabet="אבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ", + wiki_start_pages=["עמוד_ראשי"], + ), + "Croatian": Language( + name="Croatian", + iso_code="hr", + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="abcčćdđefghijklmnoprsštuvzžABCČĆDĐEFGHIJKLMNOPRSŠTUVZŽ", + wiki_start_pages=["Glavna_stranica"], + ), + "Hungarian": Language( + name="Hungarian", + iso_code="hu", + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="abcdefghijklmnoprstuvzáéíóöőúüűABCDEFGHIJKLMNOPRSTUVZÁÉÍÓÖŐÚÜŰ", + wiki_start_pages=["Kezdőlap"], + ), + "Italian": Language( + name="Italian", + iso_code="it", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ÀÈÉÌÒÓÙàèéìòóù", + wiki_start_pages=["Pagina_principale"], + ), + "Lithuanian": Language( + name="Lithuanian", + iso_code="lt", + use_ascii=False, + charsets=["ISO-8859-13", "WINDOWS-1257", "ISO-8859-4"], + # Q, W, and X not used at all + alphabet="AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽaąbcčdeęėfghiįyjklmnoprsštuųūvzž", + wiki_start_pages=["Pagrindinis_puslapis"], + ), + "Latvian": Language( + name="Latvian", + iso_code="lv", + use_ascii=False, + charsets=["ISO-8859-13", "WINDOWS-1257", "ISO-8859-4"], + # Q, W, X, Y are only for loanwords + alphabet="AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽaābcčdeēfgģhiījkķlļmnņoprsštuūvzž", + wiki_start_pages=["Sākumlapa"], + ), + "Macedonian": Language( + name="Macedonian", + iso_code="mk", + use_ascii=False, + charsets=["ISO-8859-5", "WINDOWS-1251", "MacCyrillic", "IBM855"], + alphabet="АБВГДЃЕЖЗЅИЈКЛЉМНЊОПРСТЌУФХЦЧЏШабвгдѓежзѕијклљмнњопрстќуфхцчџш", + wiki_start_pages=["Главна_страница"], + ), + "Dutch": Language( + name="Dutch", + iso_code="nl", + use_ascii=True, + charsets=["ISO-8859-1", "WINDOWS-1252", "MacRoman"], + wiki_start_pages=["Hoofdpagina"], + ), + "Polish": Language( + name="Polish", + iso_code="pl", + # Q and X are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻaąbcćdeęfghijklłmnńoóprsśtuwyzźż", + wiki_start_pages=["Wikipedia:Strona_główna"], + ), + "Portuguese": Language( + name="Portuguese", + iso_code="pt", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ÁÂÃÀÇÉÊÍÓÔÕÚáâãàçéêíóôõú", + wiki_start_pages=["Wikipédia:Página_principal"], + ), + "Romanian": Language( + name="Romanian", + iso_code="ro", + use_ascii=True, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="ăâîșțĂÂÎȘȚ", + wiki_start_pages=["Pagina_principală"], + ), + "Russian": Language( + name="Russian", + iso_code="ru", + use_ascii=False, + charsets=[ + "ISO-8859-5", + "WINDOWS-1251", + "KOI8-R", + "MacCyrillic", + "IBM866", + "IBM855", + ], + alphabet="абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", + wiki_start_pages=["Заглавная_страница"], + ), + "Slovak": Language( + name="Slovak", + iso_code="sk", + use_ascii=True, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="áäčďéíĺľňóôŕšťúýžÁÄČĎÉÍĹĽŇÓÔŔŠŤÚÝŽ", + wiki_start_pages=["Hlavná_stránka"], + ), + "Slovene": Language( + name="Slovene", + iso_code="sl", + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="abcčdefghijklmnoprsštuvzžABCČDEFGHIJKLMNOPRSŠTUVZŽ", + wiki_start_pages=["Glavna_stran"], + ), + # Serbian can be written in both Latin and Cyrillic, but there's no + # simple way to get the Latin alphabet pages from Wikipedia through + # the API, so for now we just support Cyrillic. + "Serbian": Language( + name="Serbian", + iso_code="sr", + alphabet="АБВГДЂЕЖЗИЈКЛЉМНЊОПРСТЋУФХЦЧЏШабвгдђежзијклљмнњопрстћуфхцчџш", + charsets=["ISO-8859-5", "WINDOWS-1251", "MacCyrillic", "IBM855"], + wiki_start_pages=["Главна_страна"], + ), + "Thai": Language( + name="Thai", + iso_code="th", + use_ascii=False, + charsets=["ISO-8859-11", "TIS-620", "CP874"], + alphabet="กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛", + wiki_start_pages=["หน้าหลัก"], + ), + "Turkish": Language( + name="Turkish", + iso_code="tr", + # Q, W, and X are not used by Turkish + use_ascii=False, + charsets=["ISO-8859-3", "ISO-8859-9", "WINDOWS-1254"], + alphabet="abcçdefgğhıijklmnoöprsştuüvyzâîûABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZÂÎÛ", + wiki_start_pages=["Ana_Sayfa"], + ), + "Vietnamese": Language( + name="Vietnamese", + iso_code="vi", + use_ascii=False, + # Windows-1258 is the only common 8-bit + # Vietnamese encoding supported by Python. + # From Wikipedia: + # For systems that lack support for Unicode, + # dozens of 8-bit Vietnamese code pages are + # available.[1] The most common are VISCII + # (TCVN 5712:1993), VPS, and Windows-1258.[3] + # Where ASCII is required, such as when + # ensuring readability in plain text e-mail, + # Vietnamese letters are often encoded + # according to Vietnamese Quoted-Readable + # (VIQR) or VSCII Mnemonic (VSCII-MNEM),[4] + # though usage of either variable-width + # scheme has declined dramatically following + # the adoption of Unicode on the World Wide + # Web. + charsets=["WINDOWS-1258"], + alphabet="aăâbcdđeêghiklmnoôơpqrstuưvxyAĂÂBCDĐEÊGHIKLMNOÔƠPQRSTUƯVXY", + wiki_start_pages=["Chữ_Quốc_ngữ"], + ), +} diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/resultdict.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/resultdict.py new file mode 100644 index 0000000..7d36e64 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/resultdict.py @@ -0,0 +1,16 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + # TypedDict was introduced in Python 3.8. + # + # TODO: Remove the else block and TYPE_CHECKING check when dropping support + # for Python 3.7. + from typing import TypedDict + + class ResultDict(TypedDict): + encoding: Optional[str] + confidence: float + language: Optional[str] + +else: + ResultDict = dict diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcharsetprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcharsetprober.py new file mode 100644 index 0000000..0ffbcdd --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcharsetprober.py @@ -0,0 +1,162 @@ +######################## 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 typing import Dict, List, NamedTuple, Optional, Union + +from .charsetprober import CharSetProber +from .enums import CharacterCategory, ProbingState, SequenceLikelihood + + +class SingleByteCharSetModel(NamedTuple): + charset_name: str + language: str + char_to_order_map: Dict[int, int] + language_model: Dict[int, Dict[int, int]] + typical_positive_ratio: float + keep_ascii_letters: bool + alphabet: str + + +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: SingleByteCharSetModel, + is_reversed: bool = False, + name_prober: Optional[CharSetProber] = None, + ) -> None: + super().__init__() + self._model = model + # TRUE if we need to reverse every pair in the model lookup + self._reversed = is_reversed + # Optional auxiliary prober for name decision + self._name_prober = name_prober + self._last_order = 255 + self._seq_counters: List[int] = [] + self._total_seqs = 0 + self._total_char = 0 + self._control_char = 0 + self._freq_char = 0 + self.reset() + + def reset(self) -> None: + super().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 + self._control_char = 0 + # characters that fall in our sampling range + self._freq_char = 0 + + @property + def charset_name(self) -> Optional[str]: + if self._name_prober: + return self._name_prober.charset_name + return self._model.charset_name + + @property + def language(self) -> Optional[str]: + if self._name_prober: + return self._name_prober.language + return self._model.language + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + # TODO: Make filter_international_words keep things in self.alphabet + if not self._model.keep_ascii_letters: + byte_str = self.filter_international_words(byte_str) + else: + byte_str = self.remove_xml_tags(byte_str) + if not byte_str: + return self.state + char_to_order_map = self._model.char_to_order_map + language_model = self._model.language_model + for char in byte_str: + order = char_to_order_map.get(char, CharacterCategory.UNDEFINED) + # 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: + lm_cat = language_model[self._last_order][order] + else: + lm_cat = language_model[order][self._last_order] + self._seq_counters[lm_cat] += 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 threshold %s", + charset_name, + confidence, + self.NEGATIVE_SHORTCUT_THRESHOLD, + ) + self._state = ProbingState.NOT_ME + + return self.state + + def get_confidence(self) -> float: + r = 0.01 + if self._total_seqs > 0: + r = ( + ( + self._seq_counters[SequenceLikelihood.POSITIVE] + + 0.25 * self._seq_counters[SequenceLikelihood.LIKELY] + ) + / self._total_seqs + / self._model.typical_positive_ratio + ) + # The more control characters (proportionnaly to the size + # of the text), the less confident we become in the current + # charset. + r = r * (self._total_char - self._control_char) / self._total_char + r = r * self._freq_char / self._total_char + if r >= 1.0: + r = 0.99 + return r diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcsgroupprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcsgroupprober.py new file mode 100644 index 0000000..890ae84 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcsgroupprober.py @@ -0,0 +1,88 @@ +######################## 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 .hebrewprober import HebrewProber +from .langbulgarianmodel import ISO_8859_5_BULGARIAN_MODEL, WINDOWS_1251_BULGARIAN_MODEL +from .langgreekmodel import ISO_8859_7_GREEK_MODEL, WINDOWS_1253_GREEK_MODEL +from .langhebrewmodel import WINDOWS_1255_HEBREW_MODEL + +# from .langhungarianmodel import (ISO_8859_2_HUNGARIAN_MODEL, +# WINDOWS_1250_HUNGARIAN_MODEL) +from .langrussianmodel import ( + IBM855_RUSSIAN_MODEL, + IBM866_RUSSIAN_MODEL, + ISO_8859_5_RUSSIAN_MODEL, + KOI8_R_RUSSIAN_MODEL, + MACCYRILLIC_RUSSIAN_MODEL, + WINDOWS_1251_RUSSIAN_MODEL, +) +from .langthaimodel import TIS_620_THAI_MODEL +from .langturkishmodel import ISO_8859_9_TURKISH_MODEL +from .sbcharsetprober import SingleByteCharSetProber + + +class SBCSGroupProber(CharSetGroupProber): + def __init__(self) -> None: + super().__init__() + hebrew_prober = HebrewProber() + logical_hebrew_prober = SingleByteCharSetProber( + WINDOWS_1255_HEBREW_MODEL, is_reversed=False, name_prober=hebrew_prober + ) + # TODO: See if using ISO-8859-8 Hebrew model works better here, since + # it's actually the visual one + visual_hebrew_prober = SingleByteCharSetProber( + WINDOWS_1255_HEBREW_MODEL, is_reversed=True, name_prober=hebrew_prober + ) + hebrew_prober.set_model_probers(logical_hebrew_prober, visual_hebrew_prober) + # TODO: ORDER MATTERS HERE. I changed the order vs what was in master + # and several tests failed that did not before. Some thought + # should be put into the ordering, and we should consider making + # order not matter here, because that is very counter-intuitive. + self.probers = [ + SingleByteCharSetProber(WINDOWS_1251_RUSSIAN_MODEL), + SingleByteCharSetProber(KOI8_R_RUSSIAN_MODEL), + SingleByteCharSetProber(ISO_8859_5_RUSSIAN_MODEL), + SingleByteCharSetProber(MACCYRILLIC_RUSSIAN_MODEL), + SingleByteCharSetProber(IBM866_RUSSIAN_MODEL), + SingleByteCharSetProber(IBM855_RUSSIAN_MODEL), + SingleByteCharSetProber(ISO_8859_7_GREEK_MODEL), + SingleByteCharSetProber(WINDOWS_1253_GREEK_MODEL), + SingleByteCharSetProber(ISO_8859_5_BULGARIAN_MODEL), + SingleByteCharSetProber(WINDOWS_1251_BULGARIAN_MODEL), + # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) + # after we retrain model. + # SingleByteCharSetProber(ISO_8859_2_HUNGARIAN_MODEL), + # SingleByteCharSetProber(WINDOWS_1250_HUNGARIAN_MODEL), + SingleByteCharSetProber(TIS_620_THAI_MODEL), + SingleByteCharSetProber(ISO_8859_9_TURKISH_MODEL), + hebrew_prober, + logical_hebrew_prober, + visual_hebrew_prober, + ] + self.reset() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/sjisprober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/sjisprober.py new file mode 100644 index 0000000..91df077 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/sjisprober.py @@ -0,0 +1,105 @@ +######################## 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 typing import Union + +from .chardistribution import SJISDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .enums import MachineState, ProbingState +from .jpcntx import SJISContextAnalysis +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import SJIS_SM_MODEL + + +class SJISProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) + self.distribution_analyzer = SJISDistributionAnalysis() + self.context_analyzer = SJISContextAnalysis() + self.reset() + + def reset(self) -> None: + super().reset() + self.context_analyzer.reset() + + @property + def charset_name(self) -> str: + return self.context_analyzer.charset_name + + @property + def language(self) -> str: + return "Japanese" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + assert self.coding_sm is not None + assert self.distribution_analyzer is not None + + for i, byte in enumerate(byte_str): + coding_state = self.coding_sm.next_state(byte) + 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 + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte + 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) -> float: + assert self.distribution_analyzer is not None + + 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.11/site-packages/pip/_vendor/chardet/universaldetector.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/universaldetector.py new file mode 100644 index 0000000..30c441d --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/universaldetector.py @@ -0,0 +1,362 @@ +######################## 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 typing import List, Optional, Union + +from .charsetgroupprober import CharSetGroupProber +from .charsetprober import CharSetProber +from .enums import InputState, LanguageFilter, ProbingState +from .escprober import EscCharSetProber +from .latin1prober import Latin1Prober +from .macromanprober import MacRomanProber +from .mbcsgroupprober import MBCSGroupProber +from .resultdict import ResultDict +from .sbcsgroupprober import SBCSGroupProber +from .utf1632prober import UTF1632Prober + + +class UniversalDetector: + """ + 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", + } + # Based on https://encoding.spec.whatwg.org/#names-and-labels + # but altered to match Python names for encodings and remove mappings + # that break tests. + LEGACY_MAP = { + "ascii": "Windows-1252", + "iso-8859-1": "Windows-1252", + "tis-620": "ISO-8859-11", + "iso-8859-9": "Windows-1254", + "gb2312": "GB18030", + "euc-kr": "CP949", + "utf-16le": "UTF-16", + } + + def __init__( + self, + lang_filter: LanguageFilter = LanguageFilter.ALL, + should_rename_legacy: bool = False, + ) -> None: + self._esc_charset_prober: Optional[EscCharSetProber] = None + self._utf1632_prober: Optional[UTF1632Prober] = None + self._charset_probers: List[CharSetProber] = [] + self.result: ResultDict = { + "encoding": None, + "confidence": 0.0, + "language": None, + } + self.done = False + self._got_data = False + self._input_state = InputState.PURE_ASCII + self._last_char = b"" + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + self._has_win_bytes = False + self.should_rename_legacy = should_rename_legacy + self.reset() + + @property + def input_state(self) -> int: + return self._input_state + + @property + def has_win_bytes(self) -> bool: + return self._has_win_bytes + + @property + def charset_probers(self) -> List[CharSetProber]: + return self._charset_probers + + def reset(self) -> None: + """ + 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() + if self._utf1632_prober: + self._utf1632_prober.reset() + for prober in self._charset_probers: + prober.reset() + + def feed(self, byte_str: Union[bytes, bytearray]) -> None: + """ + 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 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 = { + # TODO: This encoding is not supported by Python. Should remove? + "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 = { + # TODO: This encoding is not supported by Python. Should remove? + "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:] + + # next we will look to see if it is appears to be either a UTF-16 or + # UTF-32 encoding + if not self._utf1632_prober: + self._utf1632_prober = UTF1632Prober() + + if self._utf1632_prober.state == ProbingState.DETECTING: + if self._utf1632_prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = { + "encoding": self._utf1632_prober.charset_name, + "confidence": self._utf1632_prober.get_confidence(), + "language": "", + } + self.done = True + return + + # 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()) + self._charset_probers.append(MacRomanProber()) + 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) -> ResultDict: + """ + 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 + assert charset_name is not None + lower_charset_name = 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 + ) + # Rename legacy encodings with superset encodings if asked + if self.should_rename_legacy: + charset_name = self.LEGACY_MAP.get( + (charset_name or "").lower(), 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", + group_prober.charset_name, + group_prober.language, + group_prober.get_confidence(), + ) + return self.result diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf1632prober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf1632prober.py new file mode 100644 index 0000000..6bdec63 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf1632prober.py @@ -0,0 +1,225 @@ +######################## BEGIN LICENSE BLOCK ######################## +# +# Contributor(s): +# Jason Zavaglia +# +# 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 typing import List, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState + + +class UTF1632Prober(CharSetProber): + """ + This class simply looks for occurrences of zero bytes, and infers + whether the file is UTF16 or UTF32 (low-endian or big-endian) + For instance, files looking like ( \0 \0 \0 [nonzero] )+ + have a good probability to be UTF32BE. Files looking like ( \0 [nonzero] )+ + may be guessed to be UTF16BE, and inversely for little-endian varieties. + """ + + # how many logical characters to scan before feeling confident of prediction + MIN_CHARS_FOR_DETECTION = 20 + # a fixed constant ratio of expected zeros or non-zeros in modulo-position. + EXPECTED_RATIO = 0.94 + + def __init__(self) -> None: + super().__init__() + self.position = 0 + self.zeros_at_mod = [0] * 4 + self.nonzeros_at_mod = [0] * 4 + self._state = ProbingState.DETECTING + self.quad = [0, 0, 0, 0] + self.invalid_utf16be = False + self.invalid_utf16le = False + self.invalid_utf32be = False + self.invalid_utf32le = False + self.first_half_surrogate_pair_detected_16be = False + self.first_half_surrogate_pair_detected_16le = False + self.reset() + + def reset(self) -> None: + super().reset() + self.position = 0 + self.zeros_at_mod = [0] * 4 + self.nonzeros_at_mod = [0] * 4 + self._state = ProbingState.DETECTING + self.invalid_utf16be = False + self.invalid_utf16le = False + self.invalid_utf32be = False + self.invalid_utf32le = False + self.first_half_surrogate_pair_detected_16be = False + self.first_half_surrogate_pair_detected_16le = False + self.quad = [0, 0, 0, 0] + + @property + def charset_name(self) -> str: + if self.is_likely_utf32be(): + return "utf-32be" + if self.is_likely_utf32le(): + return "utf-32le" + if self.is_likely_utf16be(): + return "utf-16be" + if self.is_likely_utf16le(): + return "utf-16le" + # default to something valid + return "utf-16" + + @property + def language(self) -> str: + return "" + + def approx_32bit_chars(self) -> float: + return max(1.0, self.position / 4.0) + + def approx_16bit_chars(self) -> float: + return max(1.0, self.position / 2.0) + + def is_likely_utf32be(self) -> bool: + approx_chars = self.approx_32bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + self.zeros_at_mod[0] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[1] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[2] / approx_chars > self.EXPECTED_RATIO + and self.nonzeros_at_mod[3] / approx_chars > self.EXPECTED_RATIO + and not self.invalid_utf32be + ) + + def is_likely_utf32le(self) -> bool: + approx_chars = self.approx_32bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + self.nonzeros_at_mod[0] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[1] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[2] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[3] / approx_chars > self.EXPECTED_RATIO + and not self.invalid_utf32le + ) + + def is_likely_utf16be(self) -> bool: + approx_chars = self.approx_16bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + (self.nonzeros_at_mod[1] + self.nonzeros_at_mod[3]) / approx_chars + > self.EXPECTED_RATIO + and (self.zeros_at_mod[0] + self.zeros_at_mod[2]) / approx_chars + > self.EXPECTED_RATIO + and not self.invalid_utf16be + ) + + def is_likely_utf16le(self) -> bool: + approx_chars = self.approx_16bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + (self.nonzeros_at_mod[0] + self.nonzeros_at_mod[2]) / approx_chars + > self.EXPECTED_RATIO + and (self.zeros_at_mod[1] + self.zeros_at_mod[3]) / approx_chars + > self.EXPECTED_RATIO + and not self.invalid_utf16le + ) + + def validate_utf32_characters(self, quad: List[int]) -> None: + """ + Validate if the quad of bytes is valid UTF-32. + + UTF-32 is valid in the range 0x00000000 - 0x0010FFFF + excluding 0x0000D800 - 0x0000DFFF + + https://en.wikipedia.org/wiki/UTF-32 + """ + if ( + quad[0] != 0 + or quad[1] > 0x10 + or (quad[0] == 0 and quad[1] == 0 and 0xD8 <= quad[2] <= 0xDF) + ): + self.invalid_utf32be = True + if ( + quad[3] != 0 + or quad[2] > 0x10 + or (quad[3] == 0 and quad[2] == 0 and 0xD8 <= quad[1] <= 0xDF) + ): + self.invalid_utf32le = True + + def validate_utf16_characters(self, pair: List[int]) -> None: + """ + Validate if the pair of bytes is valid UTF-16. + + UTF-16 is valid in the range 0x0000 - 0xFFFF excluding 0xD800 - 0xFFFF + with an exception for surrogate pairs, which must be in the range + 0xD800-0xDBFF followed by 0xDC00-0xDFFF + + https://en.wikipedia.org/wiki/UTF-16 + """ + if not self.first_half_surrogate_pair_detected_16be: + if 0xD8 <= pair[0] <= 0xDB: + self.first_half_surrogate_pair_detected_16be = True + elif 0xDC <= pair[0] <= 0xDF: + self.invalid_utf16be = True + else: + if 0xDC <= pair[0] <= 0xDF: + self.first_half_surrogate_pair_detected_16be = False + else: + self.invalid_utf16be = True + + if not self.first_half_surrogate_pair_detected_16le: + if 0xD8 <= pair[1] <= 0xDB: + self.first_half_surrogate_pair_detected_16le = True + elif 0xDC <= pair[1] <= 0xDF: + self.invalid_utf16le = True + else: + if 0xDC <= pair[1] <= 0xDF: + self.first_half_surrogate_pair_detected_16le = False + else: + self.invalid_utf16le = True + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for c in byte_str: + mod4 = self.position % 4 + self.quad[mod4] = c + if mod4 == 3: + self.validate_utf32_characters(self.quad) + self.validate_utf16_characters(self.quad[0:2]) + self.validate_utf16_characters(self.quad[2:4]) + if c == 0: + self.zeros_at_mod[mod4] += 1 + else: + self.nonzeros_at_mod[mod4] += 1 + self.position += 1 + return self.state + + @property + def state(self) -> ProbingState: + if self._state in {ProbingState.NOT_ME, ProbingState.FOUND_IT}: + # terminal, decided states + return self._state + if self.get_confidence() > 0.80: + self._state = ProbingState.FOUND_IT + elif self.position > 4 * 1024: + # if we get to 4kb into the file, and we can't conclude it's UTF, + # let's give up + self._state = ProbingState.NOT_ME + return self._state + + def get_confidence(self) -> float: + return ( + 0.85 + if ( + self.is_likely_utf16le() + or self.is_likely_utf16be() + or self.is_likely_utf32le() + or self.is_likely_utf32be() + ) + else 0.00 + ) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf8prober.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf8prober.py new file mode 100644 index 0000000..d96354d --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf8prober.py @@ -0,0 +1,82 @@ +######################## 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 typing import Union + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import MachineState, ProbingState +from .mbcssm import UTF8_SM_MODEL + + +class UTF8Prober(CharSetProber): + ONE_CHAR_PROB = 0.5 + + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) + self._num_mb_chars = 0 + self.reset() + + def reset(self) -> None: + super().reset() + self.coding_sm.reset() + self._num_mb_chars = 0 + + @property + def charset_name(self) -> str: + return "utf-8" + + @property + def language(self) -> str: + return "" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for c in byte_str: + coding_state = self.coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + self._state = ProbingState.NOT_ME + break + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if 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) -> float: + unlike = 0.99 + if self._num_mb_chars < 6: + unlike *= self.ONE_CHAR_PROB**self._num_mb_chars + return 1.0 - unlike + return unlike diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/chardet/version.py b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/version.py new file mode 100644 index 0000000..c5e9d85 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/chardet/version.py @@ -0,0 +1,9 @@ +""" +This module exists only to simplify retrieving the version number of chardet +from within setuptools and from chardet subpackages. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +__version__ = "5.1.0" +VERSION = __version__.split(".") diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__init__.py new file mode 100644 index 0000000..383101c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__init__.py @@ -0,0 +1,7 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from .initialise import init, deinit, reinit, colorama_text, just_fix_windows_console +from .ansi import Fore, Back, Style, Cursor +from .ansitowin32 import AnsiToWin32 + +__version__ = '0.4.6' + diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c601af222582e96ac125131771228cdd2c90d7a GIT binary patch literal 579 zcma)2y>3%66t;7HZ+>pl0TrneQeh*4+76wHee|85Pd?}K`8F8z5S$l3{+#zPLO)~ja9a1l%`pUD zQH3h3kj4z_7HjE*C7LjzQQ8OEWtBlI{s{4V2I=rx#WWI<08!>{Lt|PpzKw zQxH0<>0FpORq~Y9%jUwG(eU7aLR0aw2EIHOp4PIa&=vmc=)*cF=TSQ6!+Lq!d97_V rQ{s)=hIw(H-T?egFvc5nvid(;qrKHrwnn?F$F|veex1kbp25h!;Yz9d literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b72bd2f85d947ba8a7d54f4bdc8352b544208a07 GIT binary patch literal 4577 zcmc&%-ER}w6~FW0@6XtL#DVUbg)Q~M+OSB~l3f)!i4#&B2gL!pL+RA`&L#%OcJEBs zO_Y`VzypzZ2o)>xNTos-@v?tF|A<)PA-WPzeVR8%p;E4m39CR2p^?i1=ayw4RvUc&7Z%_npL&;<|Z{6ZH3UD)sqj0*@|1a#2@ zx}eYvfi8AH7m|q)cn*ud?3zHdFvx-fvIxjR1F|T{`~$Kf8ZVO6;nk*pez9UEm+Ex6 zY9tqon!!qzVJ5SM;&igSSYoBJWw2zqPC;nZlMPm>S(VxXNUC)vM4(@))Jjz|?JpX} zXmZiA8l#zvQA>YQxm#%%v{Fjf*+K?e8Jt%)%yOw==s2l=RX%nT?ptpqPZ zyLW#H@Pt@B1tC`N7zkM-&tcTd-pEzxMisD zGmG^lBXfsl8mxZDC|hQxzI0E&T`J#QZe;EmwR@Rr<#wjAVlCEd7t-g?XUvLaeA)ng zX~8fvjY=b7g@xgK+O21!$7jf$;b7jrm83 z$BFezo5fZjxuqs|K}Gt!AcH`7;Ve}8z2NL}jo@A_?AIy1y|2ojeUXCA&lbnIGM3B3 z=3Q3Bsv4%)J%d0Y+-Dk=E~IP-+7YP`i% zLC#N*TekeMCh?b)}-ffpf7t2`cAey-La0|LZ)=en%qBI ze|nS1!%5nWJU!*&3av2iH?0!0%x@~zBKIs9R>`s$_W<#*A_4>4pqfVYYp&KxO9pq{ zD^-^b6StpCCLN-Bb-hxnSh~I%>p3jlmEkd%C4eURyO$gu-c%n=Kb~$A#WyP8!Nhj_ z=#xu-y!7-!D}MS_{B)bhq0!gFA3jx|($?^qSHovET(6@?H`Pu0Z05(0Tcr>S)-{!J-!qLB%H6aS#Yd zpus1F!A&q4ueR)Qfwc!gEGb5nVL-2R53G|Qd))F;8QxtA^-=|%Dm+zqy5Q-8rS}1uiuARsAA`1=CL^)$i-}>J216gN}VST;c#X}kUVxld)mA>H8WnpBU^bD-J(s>2r@q#*@TkP7L?1*ylad8tS9QLpBwJ}p4~T95{`5DjW! z8qy*(tVL-=8=_GyMu)UGjlucFxfc&*vd#?q16acT5Fv?h0^uVB%r7>2$i^IEqpxiZ z;U)rd%)W*2I|Lo!_XzmrD7-i{a5mgEmIwB7WiB_tT~l+pT!Fj4%H{L3H@G^Mzn0^k zne0@qFrVe>_*dBicip%=J)h&Qxm+oX0mzi6O`Ap`TU@7)?gNffN^JHknZDObf`JG4KThPjXAaHCR`4Aa8My7F|;TZ z;~rh7^|G!rH?&z80e@D+=cD*_5q|~ZgPgnTxAAYz`P>qj6PYNENZ7(vOd}A)z!UBg zyXWq4@e&=d|E>2+=iBaAY#pY+Bxl|MY%7u^wN*t@;rkN6PdwqKvh5Bb_?t@GElDRJ zg?0g&r?A<90j=owE}7RW!6)HC*l_Ql^v#~?h+l$ieGoQ|?4b0`o@yj6CEDa5JXqO5 z>6<;(*|;=|&K_+t--*GC?XG}Ue2&|Wq6AhCYz X;jyM`+ZTT@vVQ#G@unLuL56<<)|s;H literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0ad041572a60ffd00759bb1e6e3dc6c05186f01 GIT binary patch literal 16223 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 R%fp4v&k5%DPr;Km`fot58A$*D literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c65fb9665fb6cab7978a815e7d143ee127c8c558 GIT binary patch literal 3940 zcmc&%O>7(25q^)mOD?%0WlEwWT0f>0rVU+3tYa5xfu@05SaxcZ7byv>gNe0vB`r;H ziMLBj4p@LLbYKf7&>@C%r~w^PHHLEVspz4H9(yWCgFx5?2nZ+)G&dTm0U?<;qX^bctkX!(K13MuC7QTRmL*LB8rBk;yiJ!QS`=!s76Tg9X^GE=BWubw*@N#sR(M)g zv=QJM(c(bkA)-scei)xFlHBN5$X)n~0?koJxl*x=CG!KLa_P+#KF)xM@D(5*+CXsq zDrQ)>8iFinR23mhQDVmj67VTSys~}DD-p5>bM51NJi$81B6*eAV_pj(S;AodH+jz{ z*%EG&O_~c87IHC1F`2Pev~10+*~b-~F(6turUebW693YPswruGls+Zr5!6Dq|*lLJo1w zU#t0bb3@OUw0xDBC4I%V^5(|f;%#;1POX~1t5@#k%f{_|^`5GRcl&MYjosuzt4tf-=vVUMuV;;PAt zwr<%L8;5m7AzM0-200iz-MG<3(hrlM7|y2}$u|av+a1#irPop!MkJ$N~)~AE$HVN$f4*cl0eGpf0E?TwOFM zJR+zxUb_Ff?O#42wr3d79aN0np&m~bc%XQ!Be4!&>XnAj6Ao5w@8Rf zLLKK@-GOaAB6Yz!H@v|*sndFBO$cs|joK(PNE!|H{({;=Gn9NzRSdLCp1c|kwEO%G z0cS}A5Dz}X7Ty?EYTCQpmq!r?*Bi|;*X|A z?Fmm3ZfVAT<+xVzN43u!w+7D+R3fCtP$e+ugu;gx5E$NGP|KE{0YhIc8(^WCO~YQ# zsFiye(_YtEMrCVnFR_}wluI}QG&`~P)pE_Xb4Rf5Sx(pm9j;!y0-(b1@)@3}qu?xH zmrPeT7@8tOaAvq-NA|#kt6)xaqH4`HIj%SnSkhgc*^UIVM%58<91E{M1BolHBO(~E zIcR$gvh`;mVB^YYpHS&t`tT>8rgyJ>{$6YHQhVZZXX3Kk+)GTh(%0IF>z%~)mVEtX zjEtZDUh>t3%44&NpV%$nI){F(vB(Q5-HQ#lHW6AJ7OVHvbjov{X!oc$`l3|-1 zv<&UN5gE4k`>upC7zjRr8GJd2M!<@`5cc4F_Wd*ZIjIkMbT(2CNEdx+`?x6 zr*(Q9F~InAcy+~NX%S-%ux+W}NZ`RQy}9s2U}y0}GDv2DEajpMug{UIWz_~hxxsK% z+*Dob#BI5k%O&x0b0H^I(Ko#S!YhNFTc}u`HBOdlmR*DZ;$-;1z5`s>AzKfDGzi#~ ztZdhJHlIai!FhD$L^IrrOrv>@4l1cu^j<5u z*iJ5Xl8cR>b|cA71Uxd8GTqc!u2sqD|B~}yIs@L`egDGa79kP!^sA9d;t1c1^ zRXik`gML>nd>;(rXw4jnR-ph5LO``-7 z6S8#;NP~1EN}q^Qwl_BO>1uakYWI6j-vxI!{>}>mSN%}Q9mKzcL7LI;g8BTIZnCpDaPtRPc%OXnCtT0h@((vmtyb25#C`xQc;?n$fWRgwJs|N0f4U^u z^4>0qHTZKtvaR6T4^L1C^?foQqHlm>_DC#E!A}Rt_eFXRPS7KX6qbB4PeLOddZr(e rXtGa$ybwre%5OO((ku!ONFq$f`ot#_gr04Y**3{^NT%hz{ILHC5#bQt literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c64773d818069e43631a362fa98bc40afe5845d GIT binary patch literal 7928 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 b&vFecaAGegcvAYY5M+KL#{B=r#{7Q)73et& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/ansi.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/ansi.py new file mode 100644 index 0000000..11ec695 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/ansi.py @@ -0,0 +1,102 @@ +# 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 = '\a' + + +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.11/site-packages/pip/_vendor/colorama/ansitowin32.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/ansitowin32.py new file mode 100644 index 0000000..abf209e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/ansitowin32.py @@ -0,0 +1,277 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import re +import sys +import os + +from .ansi import AnsiFore, AnsiBack, AnsiStyle, Style, BEL +from .winterm import enable_vt_processing, WinTerm, WinColor, WinStyle +from .win32 import windll, winapi_test + + +winterm = None +if windll is not None: + winterm = WinTerm() + + +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 __enter__(self, *args, **kwargs): + # special method lookup bypasses __getattr__/__getattribute__, see + # https://stackoverflow.com/questions/12632894/why-doesnt-getattr-work-with-exit + # thus, contextlib magic methods are not proxied via __getattr__ + return self.__wrapped.__enter__(*args, **kwargs) + + def __exit__(self, *args, **kwargs): + return self.__wrapped.__exit__(*args, **kwargs) + + def __setstate__(self, state): + self.__dict__ = state + + def __getstate__(self): + return self.__dict__ + + def write(self, text): + self.__convertor.write(text) + + def isatty(self): + stream = self.__wrapped + if 'PYCHARM_HOSTED' in os.environ: + if stream is not None and (stream is sys.__stdout__ or stream is sys.__stderr__): + return True + try: + stream_isatty = stream.isatty + except AttributeError: + return False + else: + return stream_isatty() + + @property + def closed(self): + stream = self.__wrapped + try: + return stream.closed + # AttributeError in the case that the stream doesn't support being closed + # ValueError for the case that the stream has already been detached when atexit runs + except (AttributeError, ValueError): + return True + + +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\\]([^\a]*)(\a)\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() + try: + fd = wrapped.fileno() + except Exception: + fd = -1 + system_has_native_ansi = not on_windows or enable_vt_processing(fd) + have_tty = not self.stream.closed and self.stream.isatty() + need_conversion = conversion_supported and not system_has_native_ansi + + # should we strip ANSI sequences from our output? + if strip is None: + strip = need_conversion or not have_tty + self.strip = strip + + # should we should convert ANSI sequences into win32 calls? + if convert is None: + convert = need_conversion and have_tty + 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 self.stream.closed: + 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 == BEL: + if paramstring.count(";") == 1: + 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 + + + def flush(self): + self.wrapped.flush() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/initialise.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/initialise.py new file mode 100644 index 0000000..d5fd4b7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/initialise.py @@ -0,0 +1,121 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import atexit +import contextlib +import sys + +from .ansitowin32 import AnsiToWin32 + + +def _wipe_internal_state_for_tests(): + global orig_stdout, orig_stderr + orig_stdout = None + orig_stderr = None + + global wrapped_stdout, wrapped_stderr + wrapped_stdout = None + wrapped_stderr = None + + global atexit_done + atexit_done = False + + global fixed_windows_console + fixed_windows_console = False + + try: + # no-op if it wasn't registered + atexit.unregister(reset_all) + except AttributeError: + # python 2: no atexit.unregister. Oh well, we did our best. + pass + + +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 + + +def just_fix_windows_console(): + global fixed_windows_console + + if sys.platform != "win32": + return + if fixed_windows_console: + return + if wrapped_stdout is not None or wrapped_stderr is not None: + # Someone already ran init() and it did stuff, so we won't second-guess them + return + + # On newer versions of Windows, AnsiToWin32.__init__ will implicitly enable the + # native ANSI support in the console as a side-effect. We only need to actually + # replace sys.stdout/stderr if we're in the old-style conversion mode. + new_stdout = AnsiToWin32(sys.stdout, convert=None, strip=None, autoreset=False) + if new_stdout.convert: + sys.stdout = new_stdout + new_stderr = AnsiToWin32(sys.stderr, convert=None, strip=None, autoreset=False) + if new_stderr.convert: + sys.stderr = new_stderr + + fixed_windows_console = True + +@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 + + +# Use this for initial setup as well, to reduce code duplication +_wipe_internal_state_for_tests() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__init__.py new file mode 100644 index 0000000..8c5661e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__init__.py @@ -0,0 +1 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8446f3adc4e778d803391eb3da08e3100ac1e85c GIT binary patch literal 210 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..054e84e18fd8196223e66b0cf3a3d61fb69040f1 GIT binary patch literal 14149 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 MmT+%DG41dF0IDV`egFUf literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa291ed49eb2f2ce34c812e64739a91858b7c428 GIT binary patch literal 2889 zcmds3&1)M+6rb5$eantw*>y-=N5)NEHN>iEOG-!zZjvf>s8VWEurAA5yS3%6cGcOH z69pUgpnwZLHS&cTEp`rfRx)`y!m^wyc(H*em@ z?7ZK6y#1lCFG`?{{(QK2MIz)k?6gXt$sGLx%qCHZN_A4Ac}kHNbfF~XMb3-5l$Ssz z>VbSfAX%bHHKGPIaZ4m*2VSq_gIpH`U8qMF(x@7)ku5OYX*rO57^IONX#}Lv9%&S$ zu^wqm6=z90{s)ekrfz@1G;Hm@T~Z8XQDYzp&)TeLEPi@7SMa|J3~hFf27%cm8p%_Y z4&UNVjMCa0z{R?*fjmq8D6w=(5o zIU|FaYO+kh)J>+8l#H!eFiyoT>eghr>IRFJV%yaR34f}So+JWOutGo_Qa_Viw~v4& zxoyb}%d(-AG+B0|vRpFNijI6-mcOYex~E}ruw`K+eMn+RFj!7dZjA$R{Mry`V6Z`Y ziRX{5uMB?NizsIr{|^68yb1HTIsV?XF_Z_%_OY4(VPrl)gXwad+rRlp(>v zP6>SoL+>VD=;+n4c?1w3ct?34cVI7V5*xTyS@t*D8eQ$s$i7A;Uy@BYrK_~vvt2(6 zTQQdwT*0(l3D-0&uygPUS29^~(ZV^TQXC&QXj*8%&Vwuguk|*N-=R9>S*&m4igUBx zKk)G5TDC4loLg9%eJAT=d5our_dN{r^6=Uxzl>AjWli|Iu)E~G$3MZbDztw|Zu6TZ z>^1l(oOIEuT5iy?RkLFAR%2{iL=GA&R13=})5^M1(By?G!!;g; z*SZd*iRZx3ckeiN4!ov*cKG3q+DxnQ(LFojiFxD9I5Ynjkl6?zftQYlqjv!T4=~Cy zyMS1ApqXr;iQpFvMMqdCz-$anJ7JylV1=eW^g7^|Yc)QsLn%+p8z<-FJXm2Uzu;}j zkEQ@e&D*(}tq~hXYnD~A1taeG2lxXx_BLKrFVVMlHKbjr zTd-?){GCgQ5gR8{#FFj__r-Z~k5V!ZWAbGE3fArCqCK|jFa{>ToJ*(N{?F%c+@Aj8 zGx_%2*|}Rc(*cIt+6_VaDl*gH_afizd~G1%h78k?At!lR(7R z)e~Vo+_xUU+7MfITzQCY&wbw$hc52;__#}QTK7MW_ADITi0&oF_rh;_kM%wP@MB_n zLi{x_oe1noabR~7()3_tcThxrm?D3U^ApnarO@sq1)7e#(dJJM{5>!{GOkcGnFI_! zVtjqPbj=eN-s~p}#8;pz!MzAy^L_+AV()@6?o%rO6ac04DY>}U`P9kqUguLMQHR$$ zi8#DAf&zsP#JMU& j-)ImZz6u2cP1P8x#@bY4O;vziY!D#6swLo3eoy=b8ZR@~ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c6c6cb198cd654b93624a00a3bcfc56127de847 GIT binary patch literal 7242 zcmeHM+iw%u89#HgkL`)EfLx&=>4L(nHZciXpkmb(gpg7#p(REXzgWgIAr8LnnF-lM zK}sba0zzF@LZYm;YSf1;h^@p!`&RX#e}RogT5BXEq>6{U89^(ws?>hpaXh}pP;J`n z!=B81bFSa{e9rH?oRcp*I{XAu|DRu6xgI3sZ&;`#Wi#{gF=Xx$o#;Y}MDZ)8gtQnH z(^6DQ%TZY%KCG2eO4<|kq`gtEKr*}DAqL$~SU@PZ`KoP~NJd^DpGcR;f}qQ~lJchm z(Lh>_s_Bkshd@L!Np#N*qI(T-T_WTWyyX-P8as4)Rm2igMPf+nkb6{a1PXHr)BM$Z z8(2G~Ne+z|rZpZn4M$GLlNrZvUQOmMWKxD{YN8{b%_gooN-l0CW;c*Aj<}f2jAv6> z#&grwV#;v5P!};+I)Q8}$z7r@72loB)8~L%$&(2t)<-{6k4YUwp40&fJo*%kQMTLSNCT}?jBjC#eKu8 z)TVojADmkC+4Mb|{`l#RuA7Uu7gyyXRllY^PiW6?c7M^g_KN}?vguHs4!uqNp0#*^ z9<=GfeC2rw6B9=QnU_M$_;^0a408a))Uyj_!bL3f!42eSUj?+ZMY{lK7piFIB^T|y z1-_5%ZKAGWKgvtYK+pqNWNjoMsk!D&s1w@{-iTKlZCYgNAOFK&Lix}g-PQQ6=1 zf8Jl{)$CsF!DxXF+jKZjho5);;BJf$tLl8U;~$QF^@feS)yO{L1Z z>q$V?&{-dhb{%+)LY~L&CsL_qg{-uMapYftyrqkMzGvV4BVQa@m2KKn>_k-s#Vvoj zdQd~2QT5Z{tzd!nK#x4_f%3NaRI{m;r`p>ZRE+W}$vx>D1OwOBp#IO|6Noz8=%gYhe%Ilxo`<*zcH@NF zesJI5Mgntg`~tOZ+yFDUzP@&3{R}f=lFT&SGVn-1ESunVPTvEkOdY&Bx5+##@1Az= z03yaGJg(-q1C9@Uek{(en2u*Ua_ZcL2s;2`wTc0P98oTxrM@OuxortxVcrB%7Y7V% zdDMQ|)%V%V-I+~~U-s|?+Go?gJneHKS5!M~b=X#q7K7b(uzyYdGWh#oVc?KGa46p~ z`gkm_9(kciKL0BMq*PCuqhl9+@BQDSPZz&xxb*x^5x8lfBAVd%vKhD&(hbJi;E|m` zM7dyO=-}Bn5DvMC^XIpOTvt8h&Sj?gTuVRP8hVvJ4EUSB2J$T+xb{ATobEl&_Tg|! z3pq3v%f!=0Eav!Qv2<3SPhnn-#qi#(+``brumL0(Z#j~=XgV~Pidzt2rQzbh#b`no$C3;7?t9~6CdJ-CXpcFzQc4#Dj=wv||x0UgdxJ$tUDpDMJ zN~l)8OFV(PIYP>@5&=@318erbc@ByLfz-@^RlC2Nk@Y`HRlo=Vss1Re+1vQrTX(~O zd^9&)e6J8P_#c~CObaoLp&U97mz}604C8(#BjHHts5Fe=wQTuxh+uL8XVSSWT<$Uk z|ILxH(eZ+_z$;sRU&F6w%27SX$j^}F&yfrw!ONL%=m%xE{)AnGB4CG@{{&K!1VMO4 z{44ygNW%H8pOP#IgGE`(Z}Ge?dUuwHAPiPXQ69)|{ov$-uV23|d5AEUC! zSlHI|&cPSF_KtJ615ukgPTwDm!?iPxcbXfL_np-B$} GP5L)wjYeYt literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansi_test.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansi_test.py new file mode 100644 index 0000000..0a20c80 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansi_test.py @@ -0,0 +1,76 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main + +from ..ansi import Back, Fore, Style +from ..ansitowin32 import AnsiToWin32 + +stdout_orig = sys.stdout +stderr_orig = sys.stderr + + +class AnsiTest(TestCase): + + def setUp(self): + # sanity check: stdout should be a file or StringIO object. + # It will only be AnsiToWin32 if init() has previously wrapped it + self.assertNotEqual(type(sys.stdout), AnsiToWin32) + self.assertNotEqual(type(sys.stderr), AnsiToWin32) + + def tearDown(self): + sys.stdout = stdout_orig + sys.stderr = stderr_orig + + + def testForeAttributes(self): + self.assertEqual(Fore.BLACK, '\033[30m') + self.assertEqual(Fore.RED, '\033[31m') + self.assertEqual(Fore.GREEN, '\033[32m') + self.assertEqual(Fore.YELLOW, '\033[33m') + self.assertEqual(Fore.BLUE, '\033[34m') + self.assertEqual(Fore.MAGENTA, '\033[35m') + self.assertEqual(Fore.CYAN, '\033[36m') + self.assertEqual(Fore.WHITE, '\033[37m') + self.assertEqual(Fore.RESET, '\033[39m') + + # Check the light, extended versions. + self.assertEqual(Fore.LIGHTBLACK_EX, '\033[90m') + self.assertEqual(Fore.LIGHTRED_EX, '\033[91m') + self.assertEqual(Fore.LIGHTGREEN_EX, '\033[92m') + self.assertEqual(Fore.LIGHTYELLOW_EX, '\033[93m') + self.assertEqual(Fore.LIGHTBLUE_EX, '\033[94m') + self.assertEqual(Fore.LIGHTMAGENTA_EX, '\033[95m') + self.assertEqual(Fore.LIGHTCYAN_EX, '\033[96m') + self.assertEqual(Fore.LIGHTWHITE_EX, '\033[97m') + + + def testBackAttributes(self): + self.assertEqual(Back.BLACK, '\033[40m') + self.assertEqual(Back.RED, '\033[41m') + self.assertEqual(Back.GREEN, '\033[42m') + self.assertEqual(Back.YELLOW, '\033[43m') + self.assertEqual(Back.BLUE, '\033[44m') + self.assertEqual(Back.MAGENTA, '\033[45m') + self.assertEqual(Back.CYAN, '\033[46m') + self.assertEqual(Back.WHITE, '\033[47m') + self.assertEqual(Back.RESET, '\033[49m') + + # Check the light, extended versions. + self.assertEqual(Back.LIGHTBLACK_EX, '\033[100m') + self.assertEqual(Back.LIGHTRED_EX, '\033[101m') + self.assertEqual(Back.LIGHTGREEN_EX, '\033[102m') + self.assertEqual(Back.LIGHTYELLOW_EX, '\033[103m') + self.assertEqual(Back.LIGHTBLUE_EX, '\033[104m') + self.assertEqual(Back.LIGHTMAGENTA_EX, '\033[105m') + self.assertEqual(Back.LIGHTCYAN_EX, '\033[106m') + self.assertEqual(Back.LIGHTWHITE_EX, '\033[107m') + + + def testStyleAttributes(self): + self.assertEqual(Style.DIM, '\033[2m') + self.assertEqual(Style.NORMAL, '\033[22m') + self.assertEqual(Style.BRIGHT, '\033[1m') + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py new file mode 100644 index 0000000..91ca551 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py @@ -0,0 +1,294 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from io import StringIO, TextIOWrapper +from unittest import TestCase, main +try: + from contextlib import ExitStack +except ImportError: + # python 2 + from contextlib2 import ExitStack + +try: + from unittest.mock import MagicMock, Mock, patch +except ImportError: + from mock import MagicMock, Mock, patch + +from ..ansitowin32 import AnsiToWin32, StreamWrapper +from ..win32 import ENABLE_VIRTUAL_TERMINAL_PROCESSING +from .utils import osname + + +class StreamWrapperTest(TestCase): + + def testIsAProxy(self): + mockStream = Mock() + wrapper = StreamWrapper(mockStream, None) + self.assertTrue( wrapper.random_attr is mockStream.random_attr ) + + def testDelegatesWrite(self): + mockStream = Mock() + mockConverter = Mock() + wrapper = StreamWrapper(mockStream, mockConverter) + wrapper.write('hello') + self.assertTrue(mockConverter.write.call_args, (('hello',), {})) + + def testDelegatesContext(self): + mockConverter = Mock() + s = StringIO() + with StreamWrapper(s, mockConverter) as fp: + fp.write(u'hello') + self.assertTrue(s.closed) + + def testProxyNoContextManager(self): + mockStream = MagicMock() + mockStream.__enter__.side_effect = AttributeError() + mockConverter = Mock() + with self.assertRaises(AttributeError) as excinfo: + with StreamWrapper(mockStream, mockConverter) as wrapper: + wrapper.write('hello') + + def test_closed_shouldnt_raise_on_closed_stream(self): + stream = StringIO() + stream.close() + wrapper = StreamWrapper(stream, None) + self.assertEqual(wrapper.closed, True) + + def test_closed_shouldnt_raise_on_detached_stream(self): + stream = TextIOWrapper(StringIO()) + stream.detach() + wrapper = StreamWrapper(stream, None) + self.assertEqual(wrapper.closed, True) + +class AnsiToWin32Test(TestCase): + + def testInit(self): + mockStdout = Mock() + auto = Mock() + stream = AnsiToWin32(mockStdout, autoreset=auto) + self.assertEqual(stream.wrapped, mockStdout) + self.assertEqual(stream.autoreset, auto) + + @patch('colorama.ansitowin32.winterm', None) + @patch('colorama.ansitowin32.winapi_test', lambda *_: True) + def testStripIsTrueOnWindows(self): + with osname('nt'): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + self.assertTrue(stream.strip) + + def testStripIsFalseOffWindows(self): + with osname('posix'): + mockStdout = Mock(closed=False) + stream = AnsiToWin32(mockStdout) + self.assertFalse(stream.strip) + + def testWriteStripsAnsi(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + stream.wrapped = Mock() + stream.write_and_convert = Mock() + stream.strip = True + + stream.write('abc') + + self.assertFalse(stream.wrapped.write.called) + self.assertEqual(stream.write_and_convert.call_args, (('abc',), {})) + + def testWriteDoesNotStripAnsi(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + stream.wrapped = Mock() + stream.write_and_convert = Mock() + stream.strip = False + stream.convert = False + + stream.write('abc') + + self.assertFalse(stream.write_and_convert.called) + self.assertEqual(stream.wrapped.write.call_args, (('abc',), {})) + + def assert_autoresets(self, convert, autoreset=True): + stream = AnsiToWin32(Mock()) + stream.convert = convert + stream.reset_all = Mock() + stream.autoreset = autoreset + stream.winterm = Mock() + + stream.write('abc') + + self.assertEqual(stream.reset_all.called, autoreset) + + def testWriteAutoresets(self): + self.assert_autoresets(convert=True) + self.assert_autoresets(convert=False) + self.assert_autoresets(convert=True, autoreset=False) + self.assert_autoresets(convert=False, autoreset=False) + + def testWriteAndConvertWritesPlainText(self): + stream = AnsiToWin32(Mock()) + stream.write_and_convert( 'abc' ) + self.assertEqual( stream.wrapped.write.call_args, (('abc',), {}) ) + + def testWriteAndConvertStripsAllValidAnsi(self): + stream = AnsiToWin32(Mock()) + stream.call_win32 = Mock() + data = [ + 'abc\033[mdef', + 'abc\033[0mdef', + 'abc\033[2mdef', + 'abc\033[02mdef', + 'abc\033[002mdef', + 'abc\033[40mdef', + 'abc\033[040mdef', + 'abc\033[0;1mdef', + 'abc\033[40;50mdef', + 'abc\033[50;30;40mdef', + 'abc\033[Adef', + 'abc\033[0Gdef', + 'abc\033[1;20;128Hdef', + ] + for datum in data: + stream.wrapped.write.reset_mock() + stream.write_and_convert( datum ) + self.assertEqual( + [args[0] for args in stream.wrapped.write.call_args_list], + [ ('abc',), ('def',) ] + ) + + def testWriteAndConvertSkipsEmptySnippets(self): + stream = AnsiToWin32(Mock()) + stream.call_win32 = Mock() + stream.write_and_convert( '\033[40m\033[41m' ) + self.assertFalse( stream.wrapped.write.called ) + + def testWriteAndConvertCallsWin32WithParamsAndCommand(self): + stream = AnsiToWin32(Mock()) + stream.convert = True + stream.call_win32 = Mock() + stream.extract_params = Mock(return_value='params') + data = { + 'abc\033[adef': ('a', 'params'), + 'abc\033[;;bdef': ('b', 'params'), + 'abc\033[0cdef': ('c', 'params'), + 'abc\033[;;0;;Gdef': ('G', 'params'), + 'abc\033[1;20;128Hdef': ('H', 'params'), + } + for datum, expected in data.items(): + stream.call_win32.reset_mock() + stream.write_and_convert( datum ) + self.assertEqual( stream.call_win32.call_args[0], expected ) + + def test_reset_all_shouldnt_raise_on_closed_orig_stdout(self): + stream = StringIO() + converter = AnsiToWin32(stream) + stream.close() + + converter.reset_all() + + def test_wrap_shouldnt_raise_on_closed_orig_stdout(self): + stream = StringIO() + stream.close() + with \ + patch("colorama.ansitowin32.os.name", "nt"), \ + patch("colorama.ansitowin32.winapi_test", lambda: True): + converter = AnsiToWin32(stream) + self.assertTrue(converter.strip) + self.assertFalse(converter.convert) + + def test_wrap_shouldnt_raise_on_missing_closed_attr(self): + with \ + patch("colorama.ansitowin32.os.name", "nt"), \ + patch("colorama.ansitowin32.winapi_test", lambda: True): + converter = AnsiToWin32(object()) + self.assertTrue(converter.strip) + self.assertFalse(converter.convert) + + def testExtractParams(self): + stream = AnsiToWin32(Mock()) + data = { + '': (0,), + ';;': (0,), + '2': (2,), + ';;002;;': (2,), + '0;1': (0, 1), + ';;003;;456;;': (3, 456), + '11;22;33;44;55': (11, 22, 33, 44, 55), + } + for datum, expected in data.items(): + self.assertEqual(stream.extract_params('m', datum), expected) + + def testCallWin32UsesLookup(self): + listener = Mock() + stream = AnsiToWin32(listener) + stream.win32_calls = { + 1: (lambda *_, **__: listener(11),), + 2: (lambda *_, **__: listener(22),), + 3: (lambda *_, **__: listener(33),), + } + stream.call_win32('m', (3, 1, 99, 2)) + self.assertEqual( + [a[0][0] for a in listener.call_args_list], + [33, 11, 22] ) + + def test_osc_codes(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout, convert=True) + with patch('colorama.ansitowin32.winterm') as winterm: + data = [ + '\033]0\x07', # missing arguments + '\033]0;foo\x08', # wrong OSC command + '\033]0;colorama_test_title\x07', # should work + '\033]1;colorama_test_title\x07', # wrong set command + '\033]2;colorama_test_title\x07', # should work + '\033]' + ';' * 64 + '\x08', # see issue #247 + ] + for code in data: + stream.write(code) + self.assertEqual(winterm.set_title.call_count, 2) + + def test_native_windows_ansi(self): + with ExitStack() as stack: + def p(a, b): + stack.enter_context(patch(a, b, create=True)) + # Pretend to be on Windows + p("colorama.ansitowin32.os.name", "nt") + p("colorama.ansitowin32.winapi_test", lambda: True) + p("colorama.win32.winapi_test", lambda: True) + p("colorama.winterm.win32.windll", "non-None") + p("colorama.winterm.get_osfhandle", lambda _: 1234) + + # Pretend that our mock stream has native ANSI support + p( + "colorama.winterm.win32.GetConsoleMode", + lambda _: ENABLE_VIRTUAL_TERMINAL_PROCESSING, + ) + SetConsoleMode = Mock() + p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode) + + stdout = Mock() + stdout.closed = False + stdout.isatty.return_value = True + stdout.fileno.return_value = 1 + + # Our fake console says it has native vt support, so AnsiToWin32 should + # enable that support and do nothing else. + stream = AnsiToWin32(stdout) + SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING) + self.assertFalse(stream.strip) + self.assertFalse(stream.convert) + self.assertFalse(stream.should_wrap()) + + # Now let's pretend we're on an old Windows console, that doesn't have + # native ANSI support. + p("colorama.winterm.win32.GetConsoleMode", lambda _: 0) + SetConsoleMode = Mock() + p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode) + + stream = AnsiToWin32(stdout) + SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING) + self.assertTrue(stream.strip) + self.assertTrue(stream.convert) + self.assertTrue(stream.should_wrap()) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/initialise_test.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/initialise_test.py new file mode 100644 index 0000000..89f9b07 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/initialise_test.py @@ -0,0 +1,189 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main, skipUnless + +try: + from unittest.mock import patch, Mock +except ImportError: + from mock import patch, Mock + +from ..ansitowin32 import StreamWrapper +from ..initialise import init, just_fix_windows_console, _wipe_internal_state_for_tests +from .utils import osname, replace_by + +orig_stdout = sys.stdout +orig_stderr = sys.stderr + + +class InitTest(TestCase): + + @skipUnless(sys.stdout.isatty(), "sys.stdout is not a tty") + def setUp(self): + # sanity check + self.assertNotWrapped() + + def tearDown(self): + _wipe_internal_state_for_tests() + sys.stdout = orig_stdout + sys.stderr = orig_stderr + + def assertWrapped(self): + self.assertIsNot(sys.stdout, orig_stdout, 'stdout should be wrapped') + self.assertIsNot(sys.stderr, orig_stderr, 'stderr should be wrapped') + self.assertTrue(isinstance(sys.stdout, StreamWrapper), + 'bad stdout wrapper') + self.assertTrue(isinstance(sys.stderr, StreamWrapper), + 'bad stderr wrapper') + + def assertNotWrapped(self): + self.assertIs(sys.stdout, orig_stdout, 'stdout should not be wrapped') + self.assertIs(sys.stderr, orig_stderr, 'stderr should not be wrapped') + + @patch('colorama.initialise.reset_all') + @patch('colorama.ansitowin32.winapi_test', lambda *_: True) + @patch('colorama.ansitowin32.enable_vt_processing', lambda *_: False) + def testInitWrapsOnWindows(self, _): + with osname("nt"): + init() + self.assertWrapped() + + @patch('colorama.initialise.reset_all') + @patch('colorama.ansitowin32.winapi_test', lambda *_: False) + def testInitDoesntWrapOnEmulatedWindows(self, _): + with osname("nt"): + init() + self.assertNotWrapped() + + def testInitDoesntWrapOnNonWindows(self): + with osname("posix"): + init() + self.assertNotWrapped() + + def testInitDoesntWrapIfNone(self): + with replace_by(None): + init() + # We can't use assertNotWrapped here because replace_by(None) + # changes stdout/stderr already. + self.assertIsNone(sys.stdout) + self.assertIsNone(sys.stderr) + + def testInitAutoresetOnWrapsOnAllPlatforms(self): + with osname("posix"): + init(autoreset=True) + self.assertWrapped() + + def testInitWrapOffDoesntWrapOnWindows(self): + with osname("nt"): + init(wrap=False) + self.assertNotWrapped() + + def testInitWrapOffIncompatibleWithAutoresetOn(self): + self.assertRaises(ValueError, lambda: init(autoreset=True, wrap=False)) + + @patch('colorama.win32.SetConsoleTextAttribute') + @patch('colorama.initialise.AnsiToWin32') + def testAutoResetPassedOn(self, mockATW32, _): + with osname("nt"): + init(autoreset=True) + self.assertEqual(len(mockATW32.call_args_list), 2) + self.assertEqual(mockATW32.call_args_list[1][1]['autoreset'], True) + self.assertEqual(mockATW32.call_args_list[0][1]['autoreset'], True) + + @patch('colorama.initialise.AnsiToWin32') + def testAutoResetChangeable(self, mockATW32): + with osname("nt"): + init() + + init(autoreset=True) + self.assertEqual(len(mockATW32.call_args_list), 4) + self.assertEqual(mockATW32.call_args_list[2][1]['autoreset'], True) + self.assertEqual(mockATW32.call_args_list[3][1]['autoreset'], True) + + init() + self.assertEqual(len(mockATW32.call_args_list), 6) + self.assertEqual( + mockATW32.call_args_list[4][1]['autoreset'], False) + self.assertEqual( + mockATW32.call_args_list[5][1]['autoreset'], False) + + + @patch('colorama.initialise.atexit.register') + def testAtexitRegisteredOnlyOnce(self, mockRegister): + init() + self.assertTrue(mockRegister.called) + mockRegister.reset_mock() + init() + self.assertFalse(mockRegister.called) + + +class JustFixWindowsConsoleTest(TestCase): + def _reset(self): + _wipe_internal_state_for_tests() + sys.stdout = orig_stdout + sys.stderr = orig_stderr + + def tearDown(self): + self._reset() + + @patch("colorama.ansitowin32.winapi_test", lambda: True) + def testJustFixWindowsConsole(self): + if sys.platform != "win32": + # just_fix_windows_console should be a no-op + just_fix_windows_console() + self.assertIs(sys.stdout, orig_stdout) + self.assertIs(sys.stderr, orig_stderr) + else: + def fake_std(): + # Emulate stdout=not a tty, stderr=tty + # to check that we handle both cases correctly + stdout = Mock() + stdout.closed = False + stdout.isatty.return_value = False + stdout.fileno.return_value = 1 + sys.stdout = stdout + + stderr = Mock() + stderr.closed = False + stderr.isatty.return_value = True + stderr.fileno.return_value = 2 + sys.stderr = stderr + + for native_ansi in [False, True]: + with patch( + 'colorama.ansitowin32.enable_vt_processing', + lambda *_: native_ansi + ): + self._reset() + fake_std() + + # Regular single-call test + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(sys.stdout, prev_stdout) + if native_ansi: + self.assertIs(sys.stderr, prev_stderr) + else: + self.assertIsNot(sys.stderr, prev_stderr) + + # second call without resetting is always a no-op + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(sys.stdout, prev_stdout) + self.assertIs(sys.stderr, prev_stderr) + + self._reset() + fake_std() + + # If init() runs first, just_fix_windows_console should be a no-op + init() + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(prev_stdout, sys.stdout) + self.assertIs(prev_stderr, sys.stderr) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/isatty_test.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/isatty_test.py new file mode 100644 index 0000000..0f84e4b --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/isatty_test.py @@ -0,0 +1,57 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main + +from ..ansitowin32 import StreamWrapper, AnsiToWin32 +from .utils import pycharm, replace_by, replace_original_by, StreamTTY, StreamNonTTY + + +def is_a_tty(stream): + return StreamWrapper(stream, None).isatty() + +class IsattyTest(TestCase): + + def test_TTY(self): + tty = StreamTTY() + self.assertTrue(is_a_tty(tty)) + with pycharm(): + self.assertTrue(is_a_tty(tty)) + + def test_nonTTY(self): + non_tty = StreamNonTTY() + self.assertFalse(is_a_tty(non_tty)) + with pycharm(): + self.assertFalse(is_a_tty(non_tty)) + + def test_withPycharm(self): + with pycharm(): + self.assertTrue(is_a_tty(sys.stderr)) + self.assertTrue(is_a_tty(sys.stdout)) + + def test_withPycharmTTYOverride(self): + tty = StreamTTY() + with pycharm(), replace_by(tty): + self.assertTrue(is_a_tty(tty)) + + def test_withPycharmNonTTYOverride(self): + non_tty = StreamNonTTY() + with pycharm(), replace_by(non_tty): + self.assertFalse(is_a_tty(non_tty)) + + def test_withPycharmNoneOverride(self): + with pycharm(): + with replace_by(None), replace_original_by(None): + self.assertFalse(is_a_tty(None)) + self.assertFalse(is_a_tty(StreamNonTTY())) + self.assertTrue(is_a_tty(StreamTTY())) + + def test_withPycharmStreamWrapped(self): + with pycharm(): + self.assertTrue(AnsiToWin32(StreamTTY()).stream.isatty()) + self.assertFalse(AnsiToWin32(StreamNonTTY()).stream.isatty()) + self.assertTrue(AnsiToWin32(sys.stdout).stream.isatty()) + self.assertTrue(AnsiToWin32(sys.stderr).stream.isatty()) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/utils.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/utils.py new file mode 100644 index 0000000..472fafb --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/utils.py @@ -0,0 +1,49 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from contextlib import contextmanager +from io import StringIO +import sys +import os + + +class StreamTTY(StringIO): + def isatty(self): + return True + +class StreamNonTTY(StringIO): + def isatty(self): + return False + +@contextmanager +def osname(name): + orig = os.name + os.name = name + yield + os.name = orig + +@contextmanager +def replace_by(stream): + orig_stdout = sys.stdout + orig_stderr = sys.stderr + sys.stdout = stream + sys.stderr = stream + yield + sys.stdout = orig_stdout + sys.stderr = orig_stderr + +@contextmanager +def replace_original_by(stream): + orig_stdout = sys.__stdout__ + orig_stderr = sys.__stderr__ + sys.__stdout__ = stream + sys.__stderr__ = stream + yield + sys.__stdout__ = orig_stdout + sys.__stderr__ = orig_stderr + +@contextmanager +def pycharm(): + os.environ["PYCHARM_HOSTED"] = "1" + non_tty = StreamNonTTY() + with replace_by(non_tty), replace_original_by(non_tty): + yield + del os.environ["PYCHARM_HOSTED"] diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/winterm_test.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/winterm_test.py new file mode 100644 index 0000000..d0955f9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/winterm_test.py @@ -0,0 +1,131 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main, skipUnless + +try: + from unittest.mock import Mock, patch +except ImportError: + from mock import Mock, patch + +from ..winterm import WinColor, WinStyle, WinTerm + + +class WinTermTest(TestCase): + + @patch('colorama.winterm.win32') + def testInit(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 7 + 6 * 16 + 8 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + self.assertEqual(term._fore, 7) + self.assertEqual(term._back, 6) + self.assertEqual(term._style, 8) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testGetAttrs(self): + term = WinTerm() + + term._fore = 0 + term._back = 0 + term._style = 0 + self.assertEqual(term.get_attrs(), 0) + + term._fore = WinColor.YELLOW + self.assertEqual(term.get_attrs(), WinColor.YELLOW) + + term._back = WinColor.MAGENTA + self.assertEqual( + term.get_attrs(), + WinColor.YELLOW + WinColor.MAGENTA * 16) + + term._style = WinStyle.BRIGHT + self.assertEqual( + term.get_attrs(), + WinColor.YELLOW + WinColor.MAGENTA * 16 + WinStyle.BRIGHT) + + @patch('colorama.winterm.win32') + def testResetAll(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 1 + 2 * 16 + 8 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + + term.set_console = Mock() + term._fore = -1 + term._back = -1 + term._style = -1 + + term.reset_all() + + self.assertEqual(term._fore, 1) + self.assertEqual(term._back, 2) + self.assertEqual(term._style, 8) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testFore(self): + term = WinTerm() + term.set_console = Mock() + term._fore = 0 + + term.fore(5) + + self.assertEqual(term._fore, 5) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testBack(self): + term = WinTerm() + term.set_console = Mock() + term._back = 0 + + term.back(5) + + self.assertEqual(term._back, 5) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testStyle(self): + term = WinTerm() + term.set_console = Mock() + term._style = 0 + + term.style(22) + + self.assertEqual(term._style, 22) + self.assertEqual(term.set_console.called, True) + + @patch('colorama.winterm.win32') + def testSetConsole(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 0 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + term.windll = Mock() + + term.set_console() + + self.assertEqual( + mockWin32.SetConsoleTextAttribute.call_args, + ((mockWin32.STDOUT, term.get_attrs()), {}) + ) + + @patch('colorama.winterm.win32') + def testSetConsoleOnStderr(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 0 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + term.windll = Mock() + + term.set_console(on_stderr=True) + + self.assertEqual( + mockWin32.SetConsoleTextAttribute.call_args, + ((mockWin32.STDERR, term.get_attrs()), {}) + ) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/win32.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/win32.py new file mode 100644 index 0000000..841b0e2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/win32.py @@ -0,0 +1,180 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. + +# from winbase.h +STDOUT = -11 +STDERR = -12 + +ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004 + +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 + + _GetConsoleMode = windll.kernel32.GetConsoleMode + _GetConsoleMode.argtypes = [ + wintypes.HANDLE, + POINTER(wintypes.DWORD) + ] + _GetConsoleMode.restype = wintypes.BOOL + + _SetConsoleMode = windll.kernel32.SetConsoleMode + _SetConsoleMode.argtypes = [ + wintypes.HANDLE, + wintypes.DWORD + ] + _SetConsoleMode.restype = wintypes.BOOL + + 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 + (_GetStdHandle(STDOUT), _GetStdHandle(STDERR))) + + def GetConsoleScreenBufferInfo(stream_id=STDOUT): + handle = _GetStdHandle(stream_id) + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return csbi + + def SetConsoleTextAttribute(stream_id, attrs): + handle = _GetStdHandle(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 = _GetStdHandle(stream_id) + return _SetConsoleCursorPosition(handle, adjusted_position) + + def FillConsoleOutputCharacter(stream_id, char, length, start): + handle = _GetStdHandle(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 = _GetStdHandle(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) + + def GetConsoleMode(handle): + mode = wintypes.DWORD() + success = _GetConsoleMode(handle, byref(mode)) + if not success: + raise ctypes.WinError() + return mode.value + + def SetConsoleMode(handle, mode): + success = _SetConsoleMode(handle, mode) + if not success: + raise ctypes.WinError() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/colorama/winterm.py b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/winterm.py new file mode 100644 index 0000000..aad867e --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/colorama/winterm.py @@ -0,0 +1,195 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +try: + from msvcrt import get_osfhandle +except ImportError: + def get_osfhandle(_): + raise OSError("This isn't windows!") + + +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) + self._light = 0 + + 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 + elif 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 + else: + # invalid mode + return + # 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 + elif 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 + else: + # invalid mode + return + # 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) + + +def enable_vt_processing(fd): + if win32.windll is None or not win32.winapi_test(): + return False + + try: + handle = get_osfhandle(fd) + mode = win32.GetConsoleMode(handle) + win32.SetConsoleMode( + handle, + mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING, + ) + + mode = win32.GetConsoleMode(handle) + if mode & win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING: + return True + # Can get TypeError in testsuite where 'fd' is a Mock() + except (OSError, TypeError): + return False diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__init__.py new file mode 100644 index 0000000..962173c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2022 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import logging + +__version__ = '0.3.6' + +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.11/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdb40dbfab1e9c5ffe4ef3f80648caf3de87d8d5 GIT binary patch literal 1448 zcmah|&2Q646n|qoj-8a!mQU>p6x3*?sA{|j3H5+DQSBn3TsV;fR`3j|i(`AoZlM*2 z960Q;DTzS_D?nxz1GM%!Qz zUYrL}s)IbsKv|h+RTi*Xc!zK7jXMw;58;u12OeS^)GQaig|)*l7QW+HwyMxnP&+!^<#-Xh#GcB9B;U{U} z-&=m;edjCy6db&J>jf!CzjEw z@Y2MIdh71Jj`v_KcGg9>?x1%k-bh!X@JjRYWhe1du^6Mg(-nym`?2Gq8jqyI^Q$xX{oy3Ke)8W==D6^Y~|LjUL)8dm>?v}oYh{mjf2 zb(_t(iJLWZ-W^!@3$l)ZT= zzm1Q|wbd|X2?df$D(T;lR1$fH;5-3UH}5aiQZ+@vES{1Dgo##KKcpru_NWIdb1ZtGF_H3l395?TbbPz=`Hjj zq)H(($)S*0rNjAH=bPJqvaaQS(sg+W{ZbK=e-TDHV{9}H>|}qMp8uxL^s6I-F?$5Z zVQXWbxF5fWOp`f7V}5XK9}dfNBQTgV0h(UI<8j#PK8^N?|M5G*k&aFd4-ZFEQ2Fuq zb9?p=+e`24`kr0yn?o@Ff!V)dc57j4;g7|qi|?Se2em=5Rp+0X7vSajCH*h9q<;qJ C?LcV& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1289093d6e4099ef5fc5efcc5f01bdc2d8047ff GIT binary patch literal 52314 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf7c53621032a2dab53219cbd02b9e6bf94e9a24 GIT binary patch literal 72102 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..adfdcec3f4a397a720985b640e2f5e014e364816 GIT binary patch literal 65867 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

    tcK{R~0np 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 OBYW~Mdpu`L{(k|r@}oWg literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b417803d8ee488aedf3c749fec0f2e1909bc86f5 GIT binary patch literal 8170 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 qFvQWC6DH$6 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9944bba4a58addf43f3a46bda54d6b260f8641f GIT binary patch literal 18997 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 J>%Bba{{w4ZjjaFx literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1423fb9240653c029ac171e57084b8e9ebe24311 GIT binary patch literal 21273 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 z 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 GG5-f0To&H| literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/compat.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/compat.py new file mode 100644 index 0000000..1fe3d22 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/compat.py @@ -0,0 +1,1116 @@ +# -*- 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 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 + + # Leaving this around for now, in case it needs resurrecting in some way + # _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, 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' + +import shutil +import sysconfig + +try: + callable = callable +except NameError: # pragma: no cover + from collections.abc 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 + 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[a-z]+)://(?P.*)$') + + 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.11/site-packages/pip/_vendor/distlib/database.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/database.py new file mode 100644 index 0000000..5db5d7f --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/database.py @@ -0,0 +1,1350 @@ +# -*- 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, + LEGACY_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 + try: + if self._include_dist and entry.endswith(DISTINFO_EXT): + possible_filenames = [METADATA_FILENAME, + WHEEL_METADATA_FILENAME, + LEGACY_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) + except Exception as e: + msg = 'Unable to read distribution at %s, perhaps due to bad metadata: %s' + logger.warning(msg, r.path, e) + import warnings + warnings.warn(msg % (r.path, e), stacklevel=2) + + 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 + reqts = getattr(md, req_attr) + logger.debug('%s: got requirements %r from metadata: %r', self.name, req_attr, + reqts) + 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 '' % (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(LEGACY_METADATA_FILENAME) + 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().decode('utf-8') + self.modules = data.splitlines() + + def __repr__(self): + return '' % ( + 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 '' % ( + 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 + in finding the dependencies. + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + req = set() # required distributions + todo = graph.adjacency_list[dist] # list of nodes we should inspect + seen = set(t[0] for t in todo) # already added to todo + + while todo: + d = todo.pop()[0] + req.add(d) + pred_list = graph.adjacency_list[d] + for pred in pred_list: + d = pred[0] + if d not in req and d not in seen: + seen.add(d) + 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.11/site-packages/pip/_vendor/distlib/index.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/index.py new file mode 100644 index 0000000..9b6d129 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/index.py @@ -0,0 +1,508 @@ +# -*- 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: # pragma: no cover + from dummy_threading import Thread + +from . import DistlibException +from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, + urlparse, build_opener, string_types) +from .util import zip_dir, ServerProxy + +logger = logging.getLogger(__name__) + +DEFAULT_INDEX = 'https://pypi.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 .util import _get_pypirc_command as cmd + return cmd() + + def read_configuration(self): + """ + Read the PyPI access configuration as supported by distutils. This populates + ``username``, ``password``, ``realm`` and ``url`` attributes from the + configuration. + """ + from .util import _load_pypirc + cfg = _load_pypirc(self) + 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. + """ + self.check_credentials() + from .util import _store_pypirc + _store_pypirc(self) + + 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): # pragma: no cover + """ + 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): # pragma: no cover + """ + 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): # pragma: no cover + """ + 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): # pragma: no cover + """ + 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): # pragma: no cover + 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.11/site-packages/pip/_vendor/distlib/locators.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/locators.py new file mode 100644 index 0000000..966ebc0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/locators.py @@ -0,0 +1,1300 @@ +# -*- 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, 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, 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.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.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 not is_compatible(wheel, self.wheel_tags): + logger.debug('Wheel not compatible: %s', path) + else: + 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 a "digests" dictionary + or 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 + if 'digests' in info: + digests = info['digests'] + for algo in ('sha256', 'md5'): + if algo in digests: + result = (algo, digests[algo]) + break + if not result: + 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): + pass # 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[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*))\\s+)? +href\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)) +(\\s+rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)))? +""", re.I | re.S | re.X) + _base = re.compile(r"""]+)""", 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(b)).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() + self.platform_check = False # See issue #112 + + 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.daemon = 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.platform_check and 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(']*>([^<]+)<') + + 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 440. +default_locator = AggregatingLocator( + # JSONLocator(), # don't use as PEP 426 is withdrawn + SimpleScrapingLocator('https://pypi.org/simple/', + timeout=3.0), + scheme='legacy') + +locate = default_locator.locate + + +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.11/site-packages/pip/_vendor/distlib/manifest.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/manifest.py new file mode 100644 index 0000000..ca0fe44 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/manifest.py @@ -0,0 +1,393 @@ +# -*- 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 ...' % 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 ...' % 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 ' % 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'((? 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) + if ((elhs == 'python_version' or erhs == 'python_version') and + op in ('<', '<=', '>', '>=', '===', '==', '!=', '~=')): + lhs = NV(lhs) + rhs = NV(rhs) + elif elhs == 'python_version' and op in ('in', 'not in'): + lhs = NV(lhs) + rhs = _get_versions(rhs) + result = self.operations[op](lhs, rhs) + return result + +_DIGITS = re.compile(r'\d+\.\d+') + +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 = '' + + ppv = platform.python_version() + m = _DIGITS.match(ppv) + pv = m.group(0) + 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': ppv, + 'python_version': pv, + '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.11/site-packages/pip/_vendor/distlib/metadata.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/metadata.py new file mode 100644 index 0000000..c329e19 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/metadata.py @@ -0,0 +1,1076 @@ +# -*- 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, 1.3/2.1 and 2.2). +""" +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') + +# See issue #106: Sometimes 'Requires' and 'Provides' occur wrongly in +# the metadata. Include them in the tuple literal below to allow them +# (for now). +# Ditto for Obsoletes - see issue #140. +_566_FIELDS = _426_FIELDS + ('Description-Content-Type', + 'Requires', 'Provides', 'Obsoletes') + +_566_MARKERS = ('Description-Content-Type',) + +_643_MARKERS = ('Dynamic', 'License-File') + +_643_FIELDS = _566_FIELDS + _643_MARKERS + +_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) +_ALL_FIELDS.update(_643_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'): + # avoid adding field names if already there + return _345_FIELDS + tuple(f for f in _566_FIELDS if f not in _345_FIELDS) + elif version == '2.0': + raise ValueError('Metadata 2.0 is withdrawn and not supported') + # return _426_FIELDS + elif version == '2.2': + return _643_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.1', '2.2'] # 2.0 removed + + # 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 _643_FIELDS and '2.2' in possible_versions: + possible_versions.remove('2.2') + logger.debug('Removed 2.2 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) + is_2_2 = '2.2' in possible_versions and _has_marker(keys, _643_MARKERS) + if int(is_1_1) + int(is_1_2) + int(is_2_1) + int(is_2_2) > 1: + raise MetadataConflictError('You used incompatible 1.1/1.2/2.1/2.2 fields') + + # we have the choice, 1.0, or 1.2, 2.1 or 2.2 + # - 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.1 adds more features + # - 2.2 is the latest + if not is_1_1 and not is_1_2 and not is_2_1 and not is_2_2: + # 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' + # if is_2_2: + # return '2.2' + + return '2.2' + +# This follows the rules about transforming keys as described in +# https://www.python.org/dev/peps/pep-0566/#id17 +_ATTR2FIELD = { + name.lower().replace("-", "_"): name for name in _ALL_FIELDS +} +_FIELD2ATTR = {field: attr for attr, field in _ATTR2FIELD.items()} + +_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', 'License-File') +_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, 1.2, 2.0 and 1.3/2.1 (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) + + # PEP 566 specifies that the body be used for the description, if + # available + body = msg.get_payload() + self["Description"] = body if body else self["Description"] + # 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). + This is as per https://www.python.org/dev/peps/pep-0566/#id17. + """ + self.set_metadata_version() + + fields = _version2fieldlist(self['Metadata-Version']) + + data = {} + + for field_name in fields: + if not skip_missing or field_name in self._fields: + key = _FIELD2ATTR[field_name] + if key != 'project_url': + data[key] = self[field_name] + else: + data[key] = [','.join(u) for u in 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' +LEGACY_METADATA_FILENAME = 'METADATA' + + +class Metadata(object): + """ + The metadata of a release. This implementation uses 2.1 + 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) + + FIELDNAME_MATCHER = re.compile('^[A-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',)), + 'dynamic': (FIELDNAME_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', + ('extensions', 'python.details', 'license'): 'License', + 'summary': 'Summary', + 'description': 'Description', + ('extensions', 'python.project', 'project_urls', 'Home'): 'Home-page', + ('extensions', 'python.project', 'contacts', 0, 'name'): 'Author', + ('extensions', 'python.project', 'contacts', 0, 'email'): 'Author-email', + 'source_url': 'Download-URL', + ('extensions', 'python.details', '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 + # import pdb; pdb.set_trace() + for nk, ok in self.LEGACY_MAPPING.items(): + if not isinstance(nk, tuple): + if nk in nmd: + result[ok] = nmd[nk] + else: + d = nmd + found = True + for k in nk: + try: + d = d[k] + except (KeyError, IndexError): + found = False + break + if found: + result[ok] = d + 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: any other fields wanted + 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.11/site-packages/pip/_vendor/distlib/resources.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/resources.py new file mode 100644 index 0000000..fef52aa --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/resources.py @@ -0,0 +1,358 @@ +# -*- 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 sys +import types +import zipimport + +from . import DistlibException +from .util import cached_property, get_cache_base, 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 + # See issue #146 + _finder_registry[_fi.SourcelessFileLoader] = 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.11/site-packages/pip/_vendor/distlib/scripts.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/scripts.py new file mode 100644 index 0000000..d270624 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/scripts.py @@ -0,0 +1,437 @@ +# -*- 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 +import time +from zipfile import ZipInfo + +from .compat import sysconfig, detect_encoding, ZipFile +from .resources import finder +from .util import (FileOperator, get_export_entry, convert_path, + get_executable, get_platform, in_venv) + +logger = logging.getLogger(__name__) + +_DEFAULT_MANIFEST = ''' + + + + + + + + + + + + +'''.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 -*- +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()) +''' + + +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 + +# Keep the old name around (for now), as there is at least one project using it! +_enquote_executable = enquote_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') + self.version_info = sys.version_info + + 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 not os.path.isfile(executable): + # for Python builds from source on Windows, no Python executables with + # a version suffix are created, so we use python.exe + executable = os.path.join(sysconfig.get_config_var('BINDIR'), + 'python%s' % (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 - COMMENTED OUT + # executable = os.path.normcase(executable) + # N.B. The normalising operation above has been commented out: See + # issue #124. Although paths in Windows are generally case-insensitive, + # they aren't always. For example, a path containing a ẞ (which is a + # LATIN CAPITAL LETTER SHARP S - U+1E9E) is normcased to ß (which is a + # LATIN SMALL LETTER SHARP S' - U+00DF). The two are not considered by + # Windows as equivalent in path names. + + # 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, + import_name=entry.suffix.split('.')[0], + 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 shebang.endswith(linesep): + shebang += linesep + if not use_launcher: + script_bytes = shebang + 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: + source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') + if source_date_epoch: + date_time = time.gmtime(int(source_date_epoch))[:6] + zinfo = ZipInfo(filename='__main__.py', date_time=date_time) + zf.writestr(zinfo, script_bytes) + else: + zf.writestr('__main__.py', script_bytes) + zip_data = stream.getvalue() + script_bytes = launcher + shebang + 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) + + variant_separator = '-' + + def get_script_filenames(self, name): + result = set() + if '' in self.variants: + result.add(name) + if 'X' in self.variants: + result.add('%s%s' % (name, self.version_info[0])) + if 'X.Y' in self.variants: + result.add('%s%s%s.%s' % (name, self.variant_separator, + self.version_info[0], self.version_info[1])) + return result + + 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') + scriptnames = self.get_script_filenames(entry.name) + 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 is an empty file (skipping)', 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' + platform_suffix = '-arm' if get_platform() == 'win-arm64' else '' + name = '%s%s%s.exe' % (kind, bits, platform_suffix) + # Issue 31: don't hardcode an absolute package name, but + # determine it relative to the current package + distlib_package = __name__.rsplit('.', 1)[0] + resource = finder(distlib_package).find(name) + if not resource: + msg = ('Unable to find resource %s in package %s' % (name, + distlib_package)) + raise ValueError(msg) + return resource.bytes + + # 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.11/site-packages/pip/_vendor/distlib/util.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/util.py new file mode 100644 index 0000000..dd01849 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/util.py @@ -0,0 +1,1932 @@ +# +# Copyright (C) 2012-2021 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() + # Some packages have a trailing comma which would break things + # See issue #148 + if not ver_remaining: + break + 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 + # Avoid normcasing: see issue #143 + # result = os.path.normcase(sys.executable) + result = 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: + if os.path.exists(path): + os.remove(path) + with open(path, 'wb') as f: + f.write(data) + self.record_as_written(path) + + def write_text_file(self, path, data, encoding): + self.write_binary_file(path, data.encode(encoding)) + + 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, hashed_invalidation=False): + 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):] + compile_kwargs = {} + if hashed_invalidation and hasattr(py_compile, 'PycInvalidationMode'): + compile_kwargs['invalidation_mode'] = py_compile.PycInvalidationMode.CHECKED_HASH + py_compile.compile(path, dpath, diagpath, True, **compile_kwargs) # 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 '' % (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(\w|[-.+])+) + \s*=\s*(?P(\w+)([:\.]\w+)*) + \s*(\[\s*(?P[\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.rsplit('@', 1) + if ':' not in prefix: + username = prefix + else: + username, password = prefix.split(':', 1) + if username: + username = unquote(username) + if password: + password = unquote(password) + 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[\w .-]+)\s*' + r'\(\s*(?P[^\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() + + context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + if hasattr(ssl, 'OP_NO_SSLv2'): + 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 +# +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 not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPConnection(h) + return self._connection[1] + +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 not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPSConnection(h, None, + **kwargs) + return self._connection[1] + + +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) # deprecated as of Python 3.8 + scheme = urlparse(uri)[0] + 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() + +# def _get_pypirc_command(): + # """ + # 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) + +class PyPIRCFile(object): + + DEFAULT_REPOSITORY = 'https://upload.pypi.org/legacy/' + DEFAULT_REALM = 'pypi' + + def __init__(self, fn=None, url=None): + if fn is None: + fn = os.path.join(os.path.expanduser('~'), '.pypirc') + self.filename = fn + self.url = url + + def read(self): + result = {} + + if os.path.exists(self.filename): + repository = self.url or self.DEFAULT_REPOSITORY + + config = configparser.RawConfigParser() + config.read(self.filename) + sections = config.sections() + if 'distutils' in sections: + # let's get the list of servers + index_servers = config.get('distutils', 'index-servers') + _servers = [server.strip() for server in + index_servers.split('\n') + if server.strip() != ''] + if _servers == []: + # nothing set, let's try to get the default pypi + if 'pypi' in sections: + _servers = ['pypi'] + else: + for server in _servers: + result = {'server': server} + result['username'] = config.get(server, 'username') + + # optional params + for key, default in (('repository', self.DEFAULT_REPOSITORY), + ('realm', self.DEFAULT_REALM), + ('password', None)): + if config.has_option(server, key): + result[key] = config.get(server, key) + else: + result[key] = default + + # work around people having "repository" for the "pypi" + # section of their config set to the HTTP (rather than + # HTTPS) URL + if (server == 'pypi' and + repository in (self.DEFAULT_REPOSITORY, 'pypi')): + result['repository'] = self.DEFAULT_REPOSITORY + elif (result['server'] != repository and + result['repository'] != repository): + result = {} + elif 'server-login' in sections: + # old format + server = 'server-login' + if config.has_option(server, 'repository'): + repository = config.get(server, 'repository') + else: + repository = self.DEFAULT_REPOSITORY + result = { + 'username': config.get(server, 'username'), + 'password': config.get(server, 'password'), + 'repository': repository, + 'server': server, + 'realm': self.DEFAULT_REALM + } + return result + + def update(self, username, password): + # import pdb; pdb.set_trace() + config = configparser.RawConfigParser() + fn = self.filename + config.read(fn) + if not config.has_section('pypi'): + config.add_section('pypi') + config.set('pypi', 'username', username) + config.set('pypi', 'password', password) + with open(fn, 'w') as f: + config.write(f) + +def _load_pypirc(index): + """ + Read the PyPI access configuration as supported by distutils. + """ + return PyPIRCFile(url=index.url).read() + +def _store_pypirc(index): + PyPIRCFile().update(index.username, index.password) + +# +# get_platform()/get_host_platform() copied from Python 3.10.a0 source, with some minor +# tweaks +# + +def get_host_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. on Linux, the kernel version isn't + particularly important. + + Examples of returned values: + linux-i586 + linux-alpha (?) + solaris-2.6-sun4u + + Windows will return one of: + win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) + win32 (all others - specifically, sys.platform is returned) + + For other non-POSIX platforms, currently just returns 'sys.platform'. + + """ + if os.name == 'nt': + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): + return 'win-arm32' + if '(arm64)' in sys.version.lower(): + return 'win-arm64' + return sys.platform + + # Set for cross builds explicitly + if "_PYTHON_HOST_PLATFORM" in os.environ: + return os.environ["_PYTHON_HOST_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, and translate + # spaces (for "Power Macintosh") + osname = osname.lower().replace('/', '') + machine = machine.replace(' ', '_').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:]) + # We can't use 'platform.architecture()[0]' because a + # bootstrap problem. We use a dict to get an error + # if some suspicious happens. + bitness = {2147483647:'32bit', 9223372036854775807:'64bit'} + machine += '.%s' % bitness[sys.maxsize] + # fall through to standard osname-release-machine representation + elif osname[:3] == 'aix': + from _aix_support import aix_platform + return aix_platform() + elif osname[:6] == 'cygwin': + osname = 'cygwin' + rel_re = re.compile (r'[\d.]+', re.ASCII) + m = rel_re.match(release) + if m: + release = m.group() + elif osname[:6] == 'darwin': + import _osx_support, distutils.sysconfig + osname, release, machine = _osx_support.get_platform_osx( + distutils.sysconfig.get_config_vars(), + osname, release, machine) + + return '%s-%s-%s' % (osname, release, machine) + + +_TARGET_TO_PLAT = { + 'x86' : 'win32', + 'x64' : 'win-amd64', + 'arm' : 'win-arm32', +} + + +def get_platform(): + if os.name != 'nt': + return get_host_platform() + cross_compilation_target = os.environ.get('VSCMD_ARG_TGT_ARCH') + if cross_compilation_target not in _TARGET_TO_PLAT: + return get_host_platform() + return _TARGET_TO_PLAT[cross_compilation_target] diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/version.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/version.py new file mode 100644 index 0000000..c7c8bb6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/version.py @@ -0,0 +1,739 @@ +# -*- 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][:-1]) + 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 + """ + # See issue #140. Be tolerant of a single trailing comma. + if s.endswith(','): + s = s[:-1] + 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.11/site-packages/pip/_vendor/distlib/wheel.py b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/wheel.py new file mode 100644 index 0000000..028c2d9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/wheel.py @@ -0,0 +1,1082 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2020 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 +from email import message_from_file +import hashlib +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, + LEGACY_METADATA_FILENAME) +from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache, + cached_property, get_cache_base, read_exports, tempdir, + get_platform) +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 = get_platform().replace('-', '_').replace('.', '_') + +ABI = sysconfig.get_config_var('SOABI') +if ABI and ABI.startswith('cpython-'): + ABI = ABI.replace('cpython-', 'cp').split('-')[0] +else: + def _derive_abi(): + parts = ['cp', VER_SUFFIX] + if sysconfig.get_config_var('Py_DEBUG'): + parts.append('d') + if IMP_PREFIX == 'cp': + vi = sys.version_info[:2] + if vi < (3, 8): + wpm = sysconfig.get_config_var('WITH_PYMALLOC') + if wpm is None: + wpm = True + if wpm: + parts.append('m') + if vi < (3, 3): + us = sysconfig.get_config_var('Py_UNICODE_SIZE') + if us == 4 or (us is None and sys.maxunicode == 0x10FFFF): + parts.append('u') + return ''.join(parts) + ABI = _derive_abi() + del _derive_abi + +FILENAME_RE = re.compile(r''' +(?P[^-]+) +-(?P\d+[^-]*) +(-(?P\d+[^-]*))? +-(?P\w+\d+(\.\w+\d+)*) +-(?P\w+) +-(?P\w+(\.\w+)*) +\.whl$ +''', re.IGNORECASE | re.VERBOSE) + +NAME_VERSION_RE = re.compile(r''' +(?P[^-]+) +-(?P\d+[^-]*) +(-(?P\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, '/') + +if sys.version_info[0] < 3: + import imp +else: + imp = None + import importlib.machinery + import importlib.util + +def _get_suffixes(): + if imp: + return [s[0] for s in imp.get_suffixes()] + else: + return importlib.machinery.EXTENSION_SUFFIXES + +def _load_dynamic(name, path): + # https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly + if imp: + return imp.load_dynamic(name, path) + else: + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + +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 = _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, + # LEGACY_METADATA_FILENAME] + # else: + # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME] + fns = [WHEEL_METADATA_FILENAME, LEGACY_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, archive_record_path): + records = list(records) # make a copy, as mutated + records.append((archive_record_path, '', '')) + 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') + ap = to_posix(os.path.join(info_dir, 'RECORD')) + self.write_record(records, p, ap) + 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)) + + # sort the entries by archive path. Not needed by any spec, but it + # keeps the archive listing and RECORD tidier than they would otherwise + # be. Use the number of path segments to keep directory entries together, + # and keep the dist-info stuff at the end. + def sorter(t): + ap = t[0] + n = ap.count('/') + if '.dist-info' in ap: + n += 10000 + return (n, ap) + archive_paths = sorted(archive_paths, key=sorter) + + # 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 skip_entry(self, arcname): + """ + Determine whether an archive entry should be skipped when verifying + or installing. + """ + # The signature file won't be in RECORD, + # and we don't currently don't do anything with it + # We also skip directories, as they won't be in RECORD + # either. See: + # + # https://github.com/pypa/wheel/issues/294 + # https://github.com/pypa/wheel/issues/287 + # https://github.com/pypa/wheel/pull/289 + # + return arcname.endswith(('/', '/RECORD.jws')) + + 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. If kwarg ``bytecode_hashed_invalidation`` is True, written + bytecode will try to use file-hash based invalidation (PEP-552) on + supported interpreter versions (CPython 2.7+). + + 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) + bc_hashed_invalidation = kwargs.get('bytecode_hashed_invalidation', 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, LEGACY_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') + if self.skip_entry(u_arcname): + 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) + # Issue #147: permission bits aren't preserved. Using + # zf.extract(zinfo, libdir) should have worked, but didn't, + # see https://www.thetopsites.net/article/53834422.shtml + # So ... manually preserve permission bits as given in zinfo + if os.name == 'posix': + # just set the normal permission bits + os.chmod(outfile, (zinfo.external_attr >> 16) & 0x1FF) + 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, + hashed_invalidation=bc_hashed_invalidation) + 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]' % ','.join(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'), + '%s.%s' % sys.version_info[:2]) + 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, LEGACY_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') + # See issue #115: some wheels have .. in their entries, but + # in the filename ... e.g. __main__..py ! So the check is + # updated to look for .. in the directory portions + p = u_arcname.split('/') + if '..' in p: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + + if self.skip_entry(u_arcname): + 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, LEGACY_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 = path.endswith(LEGACY_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 _get_glibc_version(): + import platform + ver = platform.libc_ver() + result = [] + if ver[0] == 'glibc': + for s in ver[1].split('.'): + result.append(int(s) if s.isdigit() else 0) + result = tuple(result) + return result + +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 _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)) + # manylinux + if abi != 'none' and sys.platform.startswith('linux'): + arch = arch.replace('linux_', '') + parts = _get_glibc_version() + if len(parts) == 2: + if parts >= (2, 5): + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux1_%s' % arch)) + if parts >= (2, 12): + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux2010_%s' % arch)) + if parts >= (2, 17): + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux2014_%s' % arch)) + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux_%s_%s_%s' % (parts[0], parts[1], + 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.11/site-packages/pip/_vendor/distro/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/distro/__init__.py new file mode 100644 index 0000000..7686fe8 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distro/__init__.py @@ -0,0 +1,54 @@ +from .distro import ( + NORMALIZED_DISTRO_ID, + NORMALIZED_LSB_ID, + NORMALIZED_OS_ID, + LinuxDistribution, + __version__, + build_number, + codename, + distro_release_attr, + distro_release_info, + id, + info, + like, + linux_distribution, + lsb_release_attr, + lsb_release_info, + major_version, + minor_version, + name, + os_release_attr, + os_release_info, + uname_attr, + uname_info, + version, + version_parts, +) + +__all__ = [ + "NORMALIZED_DISTRO_ID", + "NORMALIZED_LSB_ID", + "NORMALIZED_OS_ID", + "LinuxDistribution", + "build_number", + "codename", + "distro_release_attr", + "distro_release_info", + "id", + "info", + "like", + "linux_distribution", + "lsb_release_attr", + "lsb_release_info", + "major_version", + "minor_version", + "name", + "os_release_attr", + "os_release_info", + "uname_attr", + "uname_info", + "version", + "version_parts", +] + +__version__ = __version__ diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distro/__main__.py b/venv/lib/python3.11/site-packages/pip/_vendor/distro/__main__.py new file mode 100644 index 0000000..0c01d5b --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distro/__main__.py @@ -0,0 +1,4 @@ +from .distro import main + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92683c84abd0b1d8374d5abf5804922bdbb14116 GIT binary patch literal 1201 zcmd^-J#W)M7{||!n|C+wP1>PiVaU*06^IETfx=L!v{J+LNa*C$M|-Is+dA73W$L$J zXF+@iz6Q&!Ol(2jI&qKNNU30D;w=62+~3dZ-F;r-3vIBm1SNF9!425JGL*3b6|6!PYf!^F)Ug2#Y(f)VaB&khu>~z`LmNBL z!7g;M2R-aV9|thNE!e^#3~>Y_i=DH;{%pavFqwnWl#QLAmT6!-(*5I;(>E`V4&n8L zPY$PVPfz&aM0eKIqv

    +H2Cuv~W6-QT|~f(@e=(p2;}U4bB%rrN-o3H)pvF10Ll# z6G~Ul;y^?`3f&7RB<4zl!cPVFvrPRV%IJNpZ5e2%u$)j{3f&EMi9edk@oD7<;#B`Thavn=&uT=1EHc9|#MLPQHMlrt~6$}ZyQ$^OBC zm+CFZ|>E>bU%iD&LE3S#BmjplJKBbjl&pIqHmpJN>4p?IMlnQHW`)5nI(l4V&- fd)u;??El8IQNx_U3fGn8Q`XwKZqTQ8&2jw(NHsS; literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..282ae8ccd2496dcd81a8bdf4cb9b2ced327b0ffa GIT binary patch literal 335 zcmZ3^%ge<81af;mraJ)X#~=<2FhLog&47&Q3@HpLj5!Rsj8Tk?45>^hOxa-hA|57& zRK{gM6{}(T7#JB+n1jJsljS8NP*{`k7E5koX5KB1_;?T@b`WgATsrp$d`UOS#S*gh-#rpZVW${Ug$=Rg^`emtkW%@ap zN%{qqB^mj7#(IW^`o)Jqc$1!l<`EF29kjczS&4Pf|znSn(L KC|tw=)C~X%tXc&C literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a2a82021e1998f7d4e23b28699e06a62cc2dc28b GIT binary patch literal 57734 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 G@c#j>Bcv(- literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distro/distro.py b/venv/lib/python3.11/site-packages/pip/_vendor/distro/distro.py new file mode 100644 index 0000000..89e1868 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/distro/distro.py @@ -0,0 +1,1399 @@ +#!/usr/bin/env python +# Copyright 2015,2016,2017 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 the recommended replacement 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.8 removed it altogether. Its +predecessor function :py:func:`platform.dist` was already deprecated since +Python 2.6 and removed in Python 3.8. Still, there are many cases in which +access to OS distribution information is needed. See `Python issue 1322 +`_ for more information. +""" + +import argparse +import json +import logging +import os +import re +import shlex +import subprocess +import sys +import warnings +from typing import ( + Any, + Callable, + Dict, + Iterable, + Optional, + Sequence, + TextIO, + Tuple, + Type, +) + +try: + from typing import TypedDict +except ImportError: + # Python 3.7 + TypedDict = dict + +__version__ = "1.8.0" + + +class VersionDict(TypedDict): + major: str + minor: str + build_number: str + + +class InfoDict(TypedDict): + id: str + version: str + version_parts: VersionDict + like: str + codename: str + + +_UNIXCONFDIR = os.environ.get("UNIXCONFDIR", "/etc") +_UNIXUSRLIBDIR = os.environ.get("UNIXUSRLIBDIR", "/usr/lib") +_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 = { + "ol": "oracle", # Oracle Linux + "opensuse-leap": "opensuse", # Newer versions of OpenSuSE report as opensuse-leap +} + +#: 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 = { + "enterpriseenterpriseas": "oracle", # Oracle Enterprise Linux 4 + "enterpriseenterpriseserver": "oracle", # Oracle Linux 5 + "redhatenterpriseworkstation": "rhel", # RHEL 6, 7 Workstation + "redhatenterpriseserver": "rhel", # RHEL 6, 7 Server + "redhatenterprisecomputenode": "rhel", # RHEL 6 ComputeNode +} + +#: 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 looked up for if _UNIXCONFDIR is not readable. +_DISTRO_RELEASE_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", + "rocky-release", + "sl-release", + "slackware-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", + "plesk-release", + "iredmail-release", +) + + +def linux_distribution(full_distribution_name: bool = True) -> Tuple[str, str, str]: + """ + .. deprecated:: 1.6.0 + + :func:`distro.linux_distribution()` is deprecated. It should only be + used as a compatibility shim with Python's + :py:func:`platform.linux_distribution()`. Please use :func:`distro.id`, + :func:`distro.version` and :func:`distro.name` instead. + + Return information about the current OS 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 extra item (usually in parentheses) after the + os-release version number, or 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 OS 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 OS distributions. + """ + warnings.warn( + "distro.linux_distribution() is deprecated. It should only be used as a " + "compatibility shim with Python's platform.linux_distribution(). Please use " + "distro.id(), distro.version() and distro.name() instead.", + DeprecationWarning, + stacklevel=2, + ) + return _distro.linux_distribution(full_distribution_name) + + +def id() -> str: + """ + Return the distro ID of the current distribution, as a + machine-readable string. + + For a number of OS 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 + "amzn" Amazon Linux + "arch" Arch Linux + "buildroot" Buildroot + "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 + "openbsd" OpenBSD + "netbsd" NetBSD + "freebsd" FreeBSD + "midnightbsd" MidnightBSD + "rocky" Rocky Linux + "aix" AIX + "guix" Guix System + ============== ========================================= + + 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 OS 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: bool = False) -> str: + """ + Return the name of the current OS 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 "" 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 "" field of the distro release file, appended + with the value of the pretty version ("" and "" + fields) of the distro release file, if available. + """ + return _distro.name(pretty) + + +def version(pretty: bool = False, best: bool = False) -> str: + """ + Return the version of the current OS 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). + + Some other distributions may not provide this kind of information. In these + cases, an empty string would be returned. This behavior can be observed + with rolling releases distributions (e.g. Arch Linux). + + 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 "" 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: bool = False) -> Tuple[str, str, str]: + """ + Return the version of the current OS 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: bool = False) -> str: + """ + Return the major version of the current OS 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: bool = False) -> str: + """ + Return the minor version of the current OS 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: bool = False) -> str: + """ + Return the build number of the current OS 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() -> str: + """ + Return a space-separated list of distro IDs of distributions that are + closely related to the current OS 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 + `_. + """ + return _distro.like() + + +def codename() -> str: + """ + Return the codename for the release of the current OS 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 "" field of the distro release file. + """ + return _distro.codename() + + +def info(pretty: bool = False, best: bool = False) -> InfoDict: + """ + Return certain machine-readable information items about the current OS + 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() -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information items + from the os-release file data source of the current OS distribution. + + See `os-release file`_ for details about these information items. + """ + return _distro.os_release_info() + + +def lsb_release_info() -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information items + from the lsb_release command data source of the current OS distribution. + + See `lsb_release command output`_ for details about these information + items. + """ + return _distro.lsb_release_info() + + +def distro_release_info() -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information items + from the distro release file data source of the current OS distribution. + + See `distro release file`_ for details about these information items. + """ + return _distro.distro_release_info() + + +def uname_info() -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information items + from the distro release file data source of the current OS distribution. + """ + return _distro.uname_info() + + +def os_release_attr(attribute: str) -> str: + """ + Return a single named information item from the os-release file data source + of the current OS 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: str) -> str: + """ + Return a single named information item from the lsb_release command output + data source of the current OS 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: str) -> str: + """ + Return a single named information item from the distro release file + data source of the current OS 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) + + +def uname_attr(attribute: str) -> str: + """ + Return a single named information item from the distro release file + data source of the current OS 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. + """ + return _distro.uname_attr(attribute) + + +try: + from functools import cached_property +except ImportError: + # Python < 3.8 + class cached_property: # type: ignore + """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: Callable[[Any], Any]) -> None: + self._fname = f.__name__ + self._f = f + + def __get__(self, obj: Any, owner: Type[Any]) -> Any: + assert obj is not None, f"call {self._fname} on an instance" + ret = obj.__dict__[self._fname] = self._f(obj) + return ret + + +class LinuxDistribution: + """ + Provides information about a OS 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 OS 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: Optional[bool] = None, + os_release_file: str = "", + distro_release_file: str = "", + include_uname: Optional[bool] = None, + root_dir: Optional[str] = None, + include_oslevel: Optional[bool] = None, + ) -> None: + """ + 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. + + * ``include_uname`` (bool): Controls whether uname command output is + included as a data source. If the uname command is not available in + the program execution path the data source for the uname command will + be empty. + + * ``root_dir`` (string): The absolute path to the root directory to use + to find distro-related information files. Note that ``include_*`` + parameters must not be enabled in combination with ``root_dir``. + + * ``include_oslevel`` (bool): Controls whether (AIX) oslevel command + output is included as a data source. If the oslevel command is not + available in the program execution path the data source 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. + + * ``include_uname`` (bool): The result of the ``include_uname`` + parameter. This controls whether the uname information will + be loaded. + + * ``include_oslevel`` (bool): The result of the ``include_oslevel`` + parameter. This controls whether (AIX) oslevel information will be + loaded. + + * ``root_dir`` (string): The result of the ``root_dir`` parameter. + The absolute path to the root directory to use to find distro-related + information files. + + Raises: + + * :py:exc:`ValueError`: Initialization parameters combination is not + supported. + + * :py:exc:`OSError`: Some I/O issue with an os-release file or distro + release file. + + * :py:exc:`UnicodeError`: A data source has unexpected characters or + uses an unexpected encoding. + """ + self.root_dir = root_dir + self.etc_dir = os.path.join(root_dir, "etc") if root_dir else _UNIXCONFDIR + self.usr_lib_dir = ( + os.path.join(root_dir, "usr/lib") if root_dir else _UNIXUSRLIBDIR + ) + + if os_release_file: + self.os_release_file = os_release_file + else: + etc_dir_os_release_file = os.path.join(self.etc_dir, _OS_RELEASE_BASENAME) + usr_lib_os_release_file = os.path.join( + self.usr_lib_dir, _OS_RELEASE_BASENAME + ) + + # NOTE: The idea is to respect order **and** have it set + # at all times for API backwards compatibility. + if os.path.isfile(etc_dir_os_release_file) or not os.path.isfile( + usr_lib_os_release_file + ): + self.os_release_file = etc_dir_os_release_file + else: + self.os_release_file = usr_lib_os_release_file + + self.distro_release_file = distro_release_file or "" # updated later + + is_root_dir_defined = root_dir is not None + if is_root_dir_defined and (include_lsb or include_uname or include_oslevel): + raise ValueError( + "Including subprocess data sources from specific root_dir is disallowed" + " to prevent false information" + ) + self.include_lsb = ( + include_lsb if include_lsb is not None else not is_root_dir_defined + ) + self.include_uname = ( + include_uname if include_uname is not None else not is_root_dir_defined + ) + self.include_oslevel = ( + include_oslevel if include_oslevel is not None else not is_root_dir_defined + ) + + def __repr__(self) -> str: + """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}, " + "include_uname={self.include_uname!r}, " + "include_oslevel={self.include_oslevel!r}, " + "root_dir={self.root_dir!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}, " + "_uname_info={self._uname_info!r}, " + "_oslevel_info={self._oslevel_info!r})".format(self=self) + ) + + def linux_distribution( + self, full_distribution_name: bool = True + ) -> Tuple[str, str, str]: + """ + Return information about the OS 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._os_release_info.get("release_codename") or self.codename(), + ) + + def id(self) -> str: + """Return the distro ID of the OS distribution, as a string. + + For details, see :func:`distro.id`. + """ + + def normalize(distro_id: str, table: Dict[str, str]) -> str: + 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) + + distro_id = self.uname_attr("id") + if distro_id: + return normalize(distro_id, NORMALIZED_DISTRO_ID) + + return "" + + def name(self, pretty: bool = False) -> str: + """ + Return the name of the OS 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") + or self.uname_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") or self.uname_attr("name") + version = self.version(pretty=True) + if version: + name = f"{name} {version}" + return name or "" + + def version(self, pretty: bool = False, best: bool = False) -> str: + """ + Return the version of the OS 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", ""), + self.uname_attr("release"), + ] + if self.uname_attr("id").startswith("aix"): + # On AIX platforms, prefer oslevel command output. + versions.insert(0, self.oslevel_info()) + elif self.id() == "debian" or "debian" in self.like().split(): + # On Debian-like, add debian_version file content to candidates list. + versions.append(self._debian_version) + 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 = f"{version} ({self.codename()})" + return version + + def version_parts(self, best: bool = False) -> Tuple[str, str, str]: + """ + Return the version of the OS 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: bool = False) -> str: + """ + 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: bool = False) -> str: + """ + Return the minor version number of the current distribution. + + For details, see :func:`distro.minor_version`. + """ + return self.version_parts(best)[1] + + def build_number(self, best: bool = False) -> str: + """ + Return the build number of the current distribution. + + For details, see :func:`distro.build_number`. + """ + return self.version_parts(best)[2] + + def like(self) -> str: + """ + Return the IDs of distributions that are like the OS distribution. + + For details, see :func:`distro.like`. + """ + return self.os_release_attr("id_like") or "" + + def codename(self) -> str: + """ + Return the codename of the OS distribution. + + For details, see :func:`distro.codename`. + """ + try: + # Handle os_release specially since distros might purposefully set + # this to empty string to have no codename + return self._os_release_info["codename"] + except KeyError: + return ( + self.lsb_release_attr("codename") + or self.distro_release_attr("codename") + or "" + ) + + def info(self, pretty: bool = False, best: bool = False) -> InfoDict: + """ + Return certain machine-readable information about the OS + 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) -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information + items from the os-release file data source of the OS distribution. + + For details, see :func:`distro.os_release_info`. + """ + return self._os_release_info + + def lsb_release_info(self) -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information + items from the lsb_release command data source of the OS + distribution. + + For details, see :func:`distro.lsb_release_info`. + """ + return self._lsb_release_info + + def distro_release_info(self) -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information + items from the distro release file data source of the OS + distribution. + + For details, see :func:`distro.distro_release_info`. + """ + return self._distro_release_info + + def uname_info(self) -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information + items from the uname command data source of the OS distribution. + + For details, see :func:`distro.uname_info`. + """ + return self._uname_info + + def oslevel_info(self) -> str: + """ + Return AIX' oslevel command output. + """ + return self._oslevel_info + + def os_release_attr(self, attribute: str) -> str: + """ + Return a single named information item from the os-release file data + source of the OS distribution. + + For details, see :func:`distro.os_release_attr`. + """ + return self._os_release_info.get(attribute, "") + + def lsb_release_attr(self, attribute: str) -> str: + """ + Return a single named information item from the lsb_release command + output data source of the OS distribution. + + For details, see :func:`distro.lsb_release_attr`. + """ + return self._lsb_release_info.get(attribute, "") + + def distro_release_attr(self, attribute: str) -> str: + """ + Return a single named information item from the distro release file + data source of the OS distribution. + + For details, see :func:`distro.distro_release_attr`. + """ + return self._distro_release_info.get(attribute, "") + + def uname_attr(self, attribute: str) -> str: + """ + Return a single named information item from the uname command + output data source of the OS distribution. + + For details, see :func:`distro.uname_attr`. + """ + return self._uname_info.get(attribute, "") + + @cached_property + def _os_release_info(self) -> Dict[str, str]: + """ + 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, encoding="utf-8") as release_file: + return self._parse_os_release_content(release_file) + return {} + + @staticmethod + def _parse_os_release_content(lines: TextIO) -> Dict[str, str]: + """ + 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 + + 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) + # Ignore any tokens that are not variable assignments + if "=" in token: + k, v = token.split("=", 1) + props[k.lower()] = v + + if "version" in props: + # extract release codename (if any) from version attribute + match = re.search(r"\((\D+)\)|,\s*(\D+)", props["version"]) + if match: + release_codename = match.group(1) or match.group(2) + props["codename"] = props["release_codename"] = release_codename + + if "version_codename" in props: + # os-release added a version_codename field. Use that in + # preference to anything else Note that some distros purposefully + # do not have code names. They should be setting + # version_codename="" + props["codename"] = props["version_codename"] + elif "ubuntu_codename" in props: + # Same as above but a non-standard field name used on older Ubuntus + props["codename"] = props["ubuntu_codename"] + + return props + + @cached_property + def _lsb_release_info(self) -> Dict[str, str]: + """ + Get the information items from the lsb_release command output. + + Returns: + A dictionary containing all information items. + """ + if not self.include_lsb: + return {} + try: + cmd = ("lsb_release", "-a") + stdout = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) + # Command not found or lsb_release returned error + except (OSError, subprocess.CalledProcessError): + return {} + content = self._to_str(stdout).splitlines() + return self._parse_lsb_release_content(content) + + @staticmethod + def _parse_lsb_release_content(lines: Iterable[str]) -> Dict[str, str]: + """ + 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 _uname_info(self) -> Dict[str, str]: + if not self.include_uname: + return {} + try: + cmd = ("uname", "-rs") + stdout = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) + except OSError: + return {} + content = self._to_str(stdout).splitlines() + return self._parse_uname_content(content) + + @cached_property + def _oslevel_info(self) -> str: + if not self.include_oslevel: + return "" + try: + stdout = subprocess.check_output("oslevel", stderr=subprocess.DEVNULL) + except (OSError, subprocess.CalledProcessError): + return "" + return self._to_str(stdout).strip() + + @cached_property + def _debian_version(self) -> str: + try: + with open( + os.path.join(self.etc_dir, "debian_version"), encoding="ascii" + ) as fp: + return fp.readline().rstrip() + except FileNotFoundError: + return "" + + @staticmethod + def _parse_uname_content(lines: Sequence[str]) -> Dict[str, str]: + if not lines: + return {} + props = {} + match = re.search(r"^([^\s]+)\s+([\d\.]+)", lines[0].strip()) + if match: + name, version = match.groups() + + # This is to prevent the Linux kernel version from + # appearing as the 'best' version on otherwise + # identifiable distributions. + if name == "Linux": + return {} + props["id"] = name.lower() + props["name"] = name + props["release"] = version + return props + + @staticmethod + def _to_str(bytestring: bytes) -> str: + encoding = sys.getfilesystemencoding() + return bytestring.decode(encoding) + + @cached_property + def _distro_release_info(self) -> Dict[str, str]: + """ + 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) + else: + try: + basenames = [ + basename + for basename in os.listdir(self.etc_dir) + if basename not in _DISTRO_RELEASE_IGNORE_BASENAMES + and os.path.isfile(os.path.join(self.etc_dir, basename)) + ] + # 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 = _DISTRO_RELEASE_BASENAMES + for basename in basenames: + match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) + if match is None: + continue + filepath = os.path.join(self.etc_dir, basename) + distro_info = self._parse_distro_release_file(filepath) + # The name is always present if the pattern matches. + if "name" not in distro_info: + continue + self.distro_release_file = filepath + break + else: # the loop didn't "break": no candidate. + return {} + + if match is not None: + distro_info["id"] = match.group(1) + + # CloudLinux < 7: manually enrich info with proper id. + if "cloudlinux" in distro_info.get("name", "").lower(): + distro_info["id"] = "cloudlinux" + + return distro_info + + def _parse_distro_release_file(self, filepath: str) -> Dict[str, str]: + """ + 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, encoding="utf-8") 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: + # Ignore not being able to read a specific, seemingly version + # related file. + # See https://github.com/python-distro/distro/issues/162 + return {} + + @staticmethod + def _parse_distro_release_content(line: str) -> Dict[str, str]: + """ + 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. + """ + 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() -> None: + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + logger.addHandler(logging.StreamHandler(sys.stdout)) + + parser = argparse.ArgumentParser(description="OS distro info tool") + parser.add_argument( + "--json", "-j", help="Output in machine readable format", action="store_true" + ) + + parser.add_argument( + "--root-dir", + "-r", + type=str, + dest="root_dir", + help="Path to the root filesystem directory (defaults to /)", + ) + + args = parser.parse_args() + + if args.root_dir: + dist = LinuxDistribution( + include_lsb=False, + include_uname=False, + include_oslevel=False, + root_dir=args.root_dir, + ) + else: + dist = _distro + + if args.json: + logger.info(json.dumps(dist.info(), indent=4, sort_keys=True)) + else: + logger.info("Name: %s", dist.name(pretty=True)) + distribution_version = dist.version(pretty=True) + logger.info("Version: %s", distribution_version) + distribution_codename = dist.codename() + logger.info("Codename: %s", distribution_codename) + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py new file mode 100644 index 0000000..a40eeaf --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py @@ -0,0 +1,44 @@ +from .package_data import __version__ +from .core import ( + IDNABidiError, + IDNAError, + InvalidCodepoint, + InvalidCodepointContext, + alabel, + check_bidi, + check_hyphen_ok, + check_initial_combiner, + check_label, + check_nfc, + decode, + encode, + ulabel, + uts46_remap, + valid_contextj, + valid_contexto, + valid_label_length, + valid_string_length, +) +from .intranges import intranges_contain + +__all__ = [ + "IDNABidiError", + "IDNAError", + "InvalidCodepoint", + "InvalidCodepointContext", + "alabel", + "check_bidi", + "check_hyphen_ok", + "check_initial_combiner", + "check_label", + "check_nfc", + "decode", + "encode", + "intranges_contain", + "ulabel", + "uts46_remap", + "valid_contextj", + "valid_contexto", + "valid_label_length", + "valid_string_length", +] diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ee8daac716b49563b104266d7d8c939ee0f4a0e GIT binary patch literal 1102 zcmdUty>AmS6u|9#Ts|(}NmB;Y4XGLEsVZVZNKhEMR6=ZKu$;3=oZPcdzDq% z#Q(q_(GhuNVhifl2|Je}=)l5+&-&ea&v)<3?^Cd+t!Xp$y`B!m`eL7TLpLpsnUUFeY> z^hqBEWB@}lgb^9-{FRdf7?UwZGsG(&F*)Sb*Ju)a$1eB;+mO<=Fqzbf(#gQKFJ4?e zdoHK+Xbf8{3hXnC|fIv!n*u}9CN?=kQgdW<{{94;sKY%68)lFbC=EN8}z4ziV48}Uz} z{~FacepR~5(bgzsNkZvobnU{Un>W#1gNPP9N{wEKIL{&tYdUp_uF_~N)H+J!G)g!5 zT&uH_)6*!Exp=rQB#Tm+MsCOy*Cvu&v4~QC>y)0Po16L*(0rAMr{>7T@d(C`4RL9U{(l@JJh?*0zwd2j6uR1O@xJCCbKiC3C;i$Y8~^|S literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a15c2cbc19e282336b0c3b9b1db7aab85eebeb24 GIT binary patch literal 5393 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6cf9c815387ed8550e3d05e6bf0971269fa93655 GIT binary patch literal 19454 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d0b5a3cb9849ce64b17334ecdca25bb90ae15a2 GIT binary patch literal 38978 zcmaLg3w)M!{RaMrF%H5w=>*iNQ&9mYpdunpePA1GV{BuLF~(pAp0N#fVkZV{Fb$7Q zLn9+2BSS+YQzJ7YTZ)QGd5DyVjEoA4Y!sOpzx-dH&vkwK%j@-j{rmmAKG*xc@8^E* z-4A0A&uQNpHf%@)|GQw%iRwk)i9~*H2>%>3>TRPWb%PV>CZbGqmCo-;ge@Z(7Jexs#d(@pN1J)^$GOwU=KX?~8< zy=QpN_MGF}XL@FNW_!-{%<-J(nQQ6Sl;_U(obOrSxxll~bD?LE=OVwRV$a2%C7w$> zOFfr*F7qt2^lK`2S9n%>F87RiR(Y=QtoE$&to3VM>AA|Y&a>XL!L!k`$peR?yF52|ZuIQ-yv5S5=~nmWJU4mX=6Sp49iDf3-sO3> z=jT0pJn!+m*YgYh6>s)_pXdFy#INa#zHW=>mpmWv{Icg(&#!ns==oK@{5J1j^Zt7$%L^a=g)k}&pqGpeADwS&$m5);d#LGm!9u|gB`Ny9Bwk3W|pZL1}c%Jh7KhOVqermb7Uo4{8Pcu%l zzh=DV0L_7#gER+go}oF!rd>bwJygpQG>2&p*BqfaQgf8%nVM&5CTgCoIa+g!rvH4w z^_?U8&lvbTvyLT6>(1A_K=VS)Wcvw#%lOY6%!{@B63ua%mumV?A8dEIopsFdniI5s zqI`v%VpGR*rIt<7oUA!T^D51&HLuZ}s(G#UJx#t&p00VlrvI$MvE5*QH(;h}`x|ZQ zSZ>m?n>C}_)_-#0GPATiP5bnpUs&!x!7%-280H+U&(zG)%+{Q%nWH&RGuNh$B~Q!p zHRo#4)ox z>9SRtE402^vqrO4bET&LG{oiWFv#^84+!)UkX~>$Yg!moy*H{Icd&&97)asQFdRZJJ-xd`R=_ zn%gzMq4}`pH*M-zc4*lnnvZIJOLM2@W15d^ep_>w=65uo(EP5Z|8&OrdP;s;^Lv`R zZR%LQuVv3@`p;@y)_+=K{!q)G)BKU<9?c(XKCk%`&0fu)YQCWPqUK)Bmu%`-Ue>Z# zH1}z~s`;Ac>zeyDf2R3!%{Mgtr#rrew`Bhb5Btw}%mZ5fOU-v|>R9~eJ+?Whb-&U) zr1@*j!zZ}A87tr^DmmmHUFwV;~#4N zO|wt)gy!GvULC%+e`uc6<^QSqk>O!IQh@tPAfCu&|{Q^%5`WmjrW(wwZx`wnrjt7P7Hh>P*QLmdBYi?8omt)HfO zo#u4S>osR+-k_OkQ^#_nmffUzvu0FtrsgcoG|hC)49(e^b2KwGvoy0c=W6C?&av=4wd@tmeVVUozNY!Q=6=neY5rXE4c)rD?+~Z^4so%! zwf+}6<^%FCHQ%wRV|iE04r*I}tN?#n4r%$XH4kh4M)N(*-)bJw{GI0en!ndPs`&@a zKWhHTz6Kr3F)jN*(;rR1vH0T&n8$UDyzdYf`%v5cP0RZhl|PtA{X z{{AI@Y?s%u{9F6_MC<;eZBJ?bpXPrxKlSbV>%K$(nEhQiAAckE$Gr#p3EUr#M{~ye z9{c05Y1|4}K2URz=3vb;Z2Hmk*S&}SdgP&hEJ520(;TijLX-C%`s?09e>{%O>pDv_ zQS)rg(VAm4$7-IVd9Fi-YEIIetjT*1{dMo5f9z^4zeaPa=CzvBG_TX-y@&p>>*X1mH)y8Xe59Y9 z=l_rY+l5>A#%&3Y^ec%&y9xi@jQ^teZ|1iCCH*mHEr^Uy>mP}%8+g^Vlcr3XGGSaD z6lq2D4)fZ9dVqBU>M_=C)Kjdtp^hBx+ungXmi6MOws~D;OIdqSPqq8f(HG)KJH1|jTFyEfwVO2;HM#3Jt|(HB8tw9J zOHgC1rKokR%TQZcH=uU1ejhcm!7ug_>Os~6sAD(!(!;35tbM4htp7ya$NDMi!HsqJ z3L}?ags&pLU&OKEihhwTR}LV)&@V0$88Ddm2GBiFm|cLQ&m10^aJFCS!AaQ94DI41 zP#5sdWUNWmnt@Xyk;JGl7)T132y6;S1&#p6?dW>vA@X&ZNOC{iP;oqeA&%Sk zRs(DXCJZ<L=hjP*`due z&az0eNVmwam~An~BGV$vBHNpgu-4>s>=&`uR;$Dj{SZubq&*FZIFIsG|_>#o~ z7GJj5YVj3|2Q9v8vCZOZ77tl`-D11NH!L2u_@>1Ui$^RTwfL6BPK(DZ9=G_m#V(8Q zSUh3zU5h6zp0aq_;(HdmExvE@jKvQup0)U)#d8)vve;wsV~gi4eqzyU@l%TzEMBzO zYw?oB%NDO#?6Y{);x&ucE%sad%;M)3Z&c-!I^76&YTY4MK5yA}s6er0jU;@1|3Eq-J1p2cr1j#&K8;(d$XTO76cgT)^$ z{$z2?;sc96TYO>>9gLW1G0P&&BHbdxVz$K`i%g3wi)@Rz7C9F4EOIUKEb=YpTNGF< zuqd=xXi;Rb$fDSy+@ivw(qg$q%%aL-g+;YRjYX}+N{c3o)fUYbEf%d7Z5HhoYb-h} z)>^EySZ~p3(Pgp0VxvX3#Vr=MT71r8lf`Wow_Ds{ai_&y7I#~G-lE6i9*cV|He1|h zvEAYu77tr|(_)9kBNmTZe9K~|#bXwaTYTGMm&JE1p0N0?#gi6KSv+m=J&WBI-?w&f-#w%PcOp7;iDbVxq+r7AY22T1>K-Y%#^+DvPTvuCbVEajnHP zi|Z_=TU>83!{P>uRErxeZnC)9B5EOwqSd0!qTOPRMTbSV#Vr=MT71r8lf`Wow_Ds{ zai_&y7I#~G-lE6i9*cV|zF@K0;y#P}Exu^6#o|jA4_JKJVynehEFQG@s>L>ouUR}~ z@pX&s7T>UV*y5WOJ1ictc+}!s7CS8-w@64v46~SQvBIL-qQ;`uBDxbX(_)rInnk)r zhQ(})ITo1~Sr*wAb1iZ#=2_%gWqc z2Q7YOameD=7KbfdJZ|xAi(MAqv3SDbyB3jQh<+Av z7X2;aEe2Q&v>0SD*y0R}Ar?a|5-f&U47V6zG16j`#hDgoStMGVZ86$njKx@sb1cra zIL{)<;(Ut>EH1Q2wz$aRVv9>Gri?&bWpTB|H5OAXuCL@j1o%(6(cNVmwam~T;FvB09xqRC>lMYBbVMXN=dMZ3isiw=vm7V9k5TXb4< zS!}S_XwhwPi^Y=`Pgy)|@jZ*(7T>pc#^MJS&szM@;yH^SS?sa+vBmQiKe6bw_^HJU z7B5=twRp+mWs6rV_F24Y@tVc!7C#<|_?boI14KWIIE(%k@fHIt23icV7;JHd#Sn|3 z76}%^EQVW*uo!7E%Hm9mvn&!V&bAnBF~(x7#W@z|TAXK*WO2U51r`@tBwJi$ak0fE z7UL`~wYbdUa*Od66D%fLTw#%7aizs1i^&#KEUvP++Tt3EsTS8-OtZMoVme|%Lhbd| zXIR`|k!o?H#Z4ABTSP5pTFkOYvzUt*|9w14<&W*yV_>^kXQ1}7u1DR}&o}rNYG;41 z5j?1Kgf$K|KHit&LAXc)>p;{**1@PrtoYj|GLAI?HHCFJ>Qq+T){#`!Gf~r76H#+m zN23<9jzukHJr^~`nuJ=%dI4%Ht3B@4$$ByBCf0GNJ*=0ZZebmdx{Y-r>JHWv)LpET zPGns)pk`)hBMaHsb zp(eB9L8?d!YcA?k)_l}d)&kUY)oU|<)^gNN)=Jb( ztTEIc))lB*SZh$Xv93hj!CHs9i?soDH)|8>9@b{my{xUM`&rvj53qKi9%i+N6pyiX zq4u%j5xU67thb;>2Kt%Ygqpy5J8B~9U8u>d_o7Z={UT~6>jS8TtlLmytY1g%V0{>M z6YCDt9@a-ux3E5jx}9|w>Q2@tPHgNKFGhe zw@{<3zd+4o{UvHX>$|AMtiM7nXZAXS zGwKf3KSbTldIEJ1>qn>uSU*8M%6ba*IO~5=PqIev(ETaaIMn#T{2K-}fps8i zBI{t(B-SCQ<5&|=Q&@+iPGud5n#y`6YC3BoY7XmY)I!#=sHLpuqQ+R0Q0rJPKy77B zM(t$17kFtyhxl248+GhZuYW~-lJ#$>&$34C zX@Ugbz@GIQ%xAFjP{*=1p+;HlQTn~C_H@{OR(m?^FsnTscAWJ-)F_|KdIR-I)`O^} zd|vAiYK-+TY8~r)sI9C=P&--enXyf*M^SrN|A@MU^%&|l)<2`}U_Fkyi}gd)-K>46 zdst7R?q~fs>JireLp{z~j-Rl-BmL}DqHY@HHHO;5x&n0zYYpl))|IF`SnU~vU91hL zyIGr1_pmmj?qzL7-Ot*NdVsY9^)Tx?)T6AOsK;41pq^yyMm@!PD{B0ie!O?0Cb0IP zrm)_NI+b-ZYAWmfsOhX*P;*!xKrLk5idxG0AZm>VsCBIGp|-LfLG5IHA9WM!QPdvRKca47J%+lC_0Om~Snav1U92CX z?q=;n-NX8K)V-`HQTMZcgnEGWW7NZ}pP(LPJ%xIl^}nbmStEGj@f2$uYJ8%f)Ogec z)`6&rtb8y#UIjo~m3t7jama?9U8e>gDtz*3a zwUsp)wUhN?)J?48P-td#`D?Smr+Nu+S9#BW1182_qbp7A26Qi#b08P^YH9Rbgb7X zYBy^+YWz9A)Sg^>mh}MYQC53Ortm!9-~-f7);`potPwnpevEZ4YBb5WeHwM@`CdOl zja=yUzo;i!Ck@8ZWM5ip^&+pUP`g?0MD1n$0_wPneFJ+aww$&24BQHr_|h0^_oZH& zP`9#fLfy-H4{G9NzQKK{sjQEo=CD46x|8*LsQXx-Lp{j)5^5jotEfqr`_A4#O<_HV zTFQD9wVU88p{R+hqfk>>C!prAUWK}o^%~TDtkX~r zu+Bg|!g?cWA8Q)w$E;bXNfZ3qa#2%Q3sBQpm!dYYwxe!k-GmxH(Jyu{Y9j0XsHv=v zq2{nYg}ResXT zQ+yA@P!m~4p{BAbKFtZ$)4Sr4L?vi6~FWgTXJX-x5pjY6HyIsrA4bq4BA)(q4>)-2Sq zSMfxlj%QtjTFANtwVZVsYAb6DwVSmGbt~&8)X3GovwKhzS?@!g&iWW?ChKn0ovhEH z9$VDSeQBShI zf*QHbFZMd>c-CK{rn0_^TFiO`wVbsNbt~&h)P1bi4977{_nqB<`X*~0YUFxfT7nv7 z{hVz(!r1GS8+>Q4ppIpI12viT5Nee5 z2xPgi}}IvEGI{_$I%$FQSfR-HMve`Zd%T z>%*uWtlvWIVcmtgo%M&PyIFsXdW`iI)Uh}FRb-FEIg5II2sJv>>wm1Kd5w(1A1>Cc zGqG)^FU>_ApXGHCYLs;`YB}pN)Ed^iP`g?0MIE2*7kdgd%K8lIKGvV09%20{YGkf& z`!eca)^|~pSx23PYhxXanwjI{N8=A|zAx=Y-Lu&1 zS8ZvD*T0~4v;G@(?-E}+dJJ|}>h)UGPS!$Oy407}qjs~dMtzpG6?Gr$ZrgU5Z+igs zAnQTY(lTHA9%>WopHaJ6&&Bh4(Q@BlEowLGw^1XNzVsv1Ue*iG!P1y7O+oEuO-1cx zZ9pAcXtk(L{yHQWEK8PA!=}UK_ zZex8OwU_k`+m?0SdDw5AZ(D*It@qlBx{LLsZP4ILrzfE{dCj)E+Uo|?sjR<1jkfsG z|Dfixrr`CkczL7U|DA%mhcy-TIBOp2^fuq119cbcS5c3$MlQf**Z2l;sPP?M<53e> z2cjmj4n|F49fCTJH32n+bvWu&){&^GtY@O8vnHbEu#QG8WF3oI%6cwpj5P_hj`af6 zR@P+HPS%T2H?fXG?P0wPbqniw)NQO2QFpMWpzdOwgu0t`3hEx#t5Nr|PDS0%It}#z z>vYt^tTRxLvZkUQXT1saBx@A)6zeS1__cn1(@_&xXQL*vW}+ssW}}W{%|T6J%|)Hc znva^wT7a6)T8Ns%T7+82T8vuCT7nv5Ek&(kU547qT8`SuT8X-eHHO;5x&n0zYYpl) z)|IF`SnE)Cu{NOYW^F>sF2kFs{69%tQvdXlvp^%U!^ zsPXIk{BA-`V7(nRk@Zg0B-Xo8$FcUHrm)_NI+b-ZYAWmfsOhX*P;*!xL@i`}2(^iI zJ8CEE!>F5BccAvLK8m`9btmdJ*2htIuVDQ|P!F&^ zi+Y&#In<-9dr*(FK972mwHNgi>kFvy>;3fYMNMFR88wl0A8HcoYpCN`_oJq;{v35G z>zk;ltZ$>HvmQXrVSNX+ko6#HDeEEB80%rwI@b44TUn2wcCx;Yx{38DY7grlQMa%j zL*2&uXVe|6$5D5&eu%o8wGVX<>)%oLvYtfU&-xMS0oIRE53_!PdX)7P>T%ZpqMl?O zj5h$BVzoCcL_7Wbjz`tI6sDv0a;d#{A=1^1$Ezd0RgG=c<#n}f#oB_pkF^c;P1ZH2 z2U*vm9${UNdW^LTwU6~_)ZPug-yfjrZ4IxW>TM0bK#gwn4GyB}9S*-o?dH;BsGC{; zg{pTr4= z08kjP6(|jO5QqhA1L^`E0$KyM1Dyd61DgVN06hVZ0$T!h0^0%}2X+MP0(J#F0qhQV z64(>)G_W^dH?Tk88Q?&`v%uki=YXRDdw}Bs&jTj|dVx~`F97k^==RwQBm}$+BnIpQ zk^)`>#s%yLQUZPsObvJwNDX)!NDnvwS0;T|arfUcGZlnLb^=J~XGpaQ= z0)0U9F#GGx{vP-$mc(Xh_16J=Cr$Inu=-QG0A6e0+fKn7V-nMaUZ8t6w#C2WBKABT zx4CB=o|X;oTKX>#Jxgz}8g?1h;K6d=RSFQrW8{umK>RsEI*<@B8%PYu1d;->fpGyj zKuSO^Ff||_NDU|e(gO;CoPZ*rFrXMH4JZL(0i{4)z%rmUpd9E7s020z#DJcF6~LB& z8em(%N?=Do9k45)3D_O50eCZ@8#onkD-e&T8vKlI0ulml2NDDB1d;;o2F3;S04V|Y z0#gGv1E~S`1L*-4!vQmZqXDVF@qn9vlL1lS zRKP4C{`~Og8b}D34I~C+0!abcz_@@MASECdm>Q4|qy`iK=>dg6PCyY*7*Gt929yA? zfKs3?U>VRFP!4nkR05j4X`a>C9or)4%ijY0PGHE0`>%~1@;E42aW}F z0eu18z^Q;+fp|Qp#y|c*Lcr}nV!&NMQoudHlz`2^^nm+;^neF|oPe!BX~2U(EMOZ@ z7w{0!8n7Mc40ssW6tDy633wFP60j547VtQ*Bj8D3Prx(4fq-X$!vW6$M+5c%#{-@R zP6qS>rvhF8;xE)m+zTWGyb2@-ybg>HcpFF$H~{1XyaN;l90W=O4gs-%e**ggJ_Zg3 zjK{0%js;u^JejOxYXu?~2`?M)#Hru(hk)oM!pA^&z$xH(z@!N{2LXjZFP?7o9sCrC z;0agm4M@FQ_!Q_4xXxbghbLowvs}Xjp#+EqtO2?MUIdN>ya&`>q098yW&!^K_5}>O z0yhbs-u3Gl0gMY61EdFB4s-`h2DS$*0eS;!ZL{!>=f41v$=daYz>@)=*kuBCEW&1Z zD%p=I}Fr)8;t915*QT0JaC*1oQ>u0;d9&0nvWi!GC~Aobca%ad<_U@HKlS z*%09^pgZ7qhM`)M+#j1I2s44*0olOdVOp~uhz2}lml>`#dx7qNH-Y34TJummzMhf7 z<3RVB!YQEqEMfcr>@87<0lfha1Er(2=4qfO;5lG_z>k6B0oM(}-p1-OMTYZ*8lXGi zc3X3S);t9y1^fuu7ckIXZI`Ug&H$1FrUByvt_KbW+z9jq6al9K)&SiXX>VT#A{Pt) zur-$m9|3O$j6MUKjnkSLKzG2iw&pUe=>~5FeP9tP#7=`hy~mL z90`a5rvkcw?g`rU*MP`GVV~g&;ZMN0fN4XqCPizC3|9&*KzG3XwgxYF@b8i=dqLwA z;U9);gz>|Gslp7PH{fx5<>L&k`3|rv;Ax;Y;QSHzF1aD>4cL|{%m;b{Za3VhH7^-% z68;5r-z?0r*H}h{c3|sF;YYx!fER(mX|AUa>D1UdplL$-+7y}drOasaTt_KbW zqyxtTN`PpU_O=t~ULhO=b_To;)KqKDAAp{Ko9#u-HCmGiB-IKJ0?~knfYy~-^KYOx z;0${ybd%Ox2aFGx2^iqEyav2`y*3+l zA&$CJxBip-pf}((+w2N$_8|}r_@`|aaNR0wmZHtl4Oa>! zKs2BO=n2>ioDAr0z!6-p%gk-W4pN0Xfz%s??S`9#_knJF6pnuhe*k)bW_!rXmwY@3 z4_QUE`ke$IIe}}=7zRvDh&0>l1e)#n{pQ4QDf?g+`;?Yuyf`G%j8{8En$NbtbNIaQ zsjK@(dc%jztV+e!co~jgVHeQ5TDZ&B;6XTF^B@on_&U%UFv(sOpE{hI%>jA?t}DTs z8m*}Zjt8^@2WqwEHelpRVLMP4@FcJ);KDNOty7y_0c;5vRE{-~5j=u(faHLSfx3W8 zfu4XXfUN-yKySciAT>^VyRrhiju&nMdIPd;%>b>*1EvRjw-Tpnh}L`pM1}^$u;wh` zPu2MRoC}5H!1jQ@0lNb}1$qNss=?lpb(wd8=p{lP($x1&oI4v)?Fr&CI`+qGjcS8K3 zp=D+5Rn0B6jSXdGhX%DQZ?0`>Z8)NKOmP4bKH^!=(u&A|cd0jRGBA+aoT+>)zHF;%ha#M5T%Btn9Et4DT+si5|mal4Sn%rL1&_21YwsLaQ z+SZ!JhHEBWb=BmS+SaNoo3Os3x~gSzQ*F~^96&>?v3YWBtf9gqh7Ti})U@`K!Kw9) zv9`LZo0{>EJI+ZY(o%Uf9%1g^uU|jB+IPg5?xB70mkuA;m(y=_!oa>sLq-hj8$D>$ zz`l_q5X<8#`VEcii&%CK>Pzq6l`tyqVEh?(Uft*Qh}QwO6gwL*1j`3G1`}sEh7dy? z3B)kRaAJgGBr(cyCUKS{kvQ8ini%64OPu34mpIRnM4a!qfVj|+OkCu+n7G6d@f^oR zmpU#ZE_aM4CO9S%S2$9LD;<-F$&M++RgSBPYaCOFYaP>w>m1XG>m4(Q8yu;`jgFg$ zn;p@9)XaX)Sz;QA=MenX$sqZKGG}Ym9Ina~v&d|5E{Qib`hMn-xndrPH#qv*`DB5( zfGiXjl11Vo5^s3)%PuBM#3dx&_~>hwlFP(0vRtenE5+qxOspbTh}Gn0PeqMZ)pFHJ zaTSR-N%}F=lMP}ci8o97+SO#U*h037ZDhN+hQymE{jzIGJVxVOPj-r3Bp#aawHwK3 z962+Nx4W1|ri&RQ?tb`X=a89V7Wvszk*!s8xeD(`^9#-+bHzL|Uz|@ChzrO;j zEgQ)uaW&a2wver28`&lc+aG7xtgo+e5|vD z#Cs>5Z6xk@IM$j1J(H&g8wVSz;QQE@qIk#W`fAm_=rbbIBZW9*GYp^{+0E%opdA z1>yp-P+UlU_EZ#U)grDc78jEx;u5k{TuLqz%gA!Ef~*vmlQFT1Tp?DIHDWEfQd~vW ziS=ZI*hn^st4aI|gtt4{Dz=gB;u`X^r=mlv)^gQ4aXr~7c99#zjbv2!t7i`6_q&)z z;-feHkTOVo{-$#di4Wm)W|7(ATrx+TN9KxoWWG3`ED#rvh2lc8NL)k~i;Kz6o{AE! zTEbPO;!<*%SVoqM6=bEjoQ#Q8f$PVuBl&eBN-h;&g4I+W{GKJx|l)E7Uz(e zViuV#&Lwlic_cp1(yup<#D`is=aU8E0umo@>1!8~_>4>EA`%~T>0C_W(=MG$NPOg_ zb1C`RQ-ROG^i^eCRW4SLmEv*|ABpK3SCRN!OlLKTCpVq7&J!!eRV1G6^tJUQJ}cAN zNa6!CovTSa&fshz@zI&iHWHto>0CqNsZ-}#5}%~$Tu% z%=oIAgYEnM#4It5OcygqJa6I~&mr-|hck=BGZ)UeB%V`n&LeZhJQB|Y_}cj-9`ScB zAPdEXBp%!MwTnnRpzmBv;(>eT5)zNeJC~Bn#4-|(%lq02=V_;+QmdA8OFXjfTUL>H z1l?Ip;*oM^Er|!govX+?v7T%Y8%aDA?i;Tr@z9d9g~Y?u&NdPcEj!nc9pYMYow%OF zW6Hj97l{Xwof}C!M(mvFkCU93C8qIVlh6LCNY|@70;&Kx2{PsOpIZyjju|lh= zxn+%5ORf}Gk#%A{*&sHOcvHDw%W4vjCOTWlRU*6ZQAv?sivxk9WaYs6Y|rMQZ$6YHI)or(snYUGx9N55aoY7);GI9te8v5jmO z*N`3JT5_GZp6nF6$PMB~GO7o?XD0CbT}&g>#SC(`IETy>v&d|4=$*6r=8`$$JTh0z zbDnl8^0jI{w=57BkcHwxvPfJ+7K@9?5^)JxDlR4QX#jqNWn{TnK~{>($(UG0t`Muq z8nKpKDXt>x#CozpY$WmV1AZ8*ou{1&e2$8*YT=fxVjI~mt|2?bwd6W+J=rOCksHK~ zB%ZhQE1K!gcAS_crjht{6TUWsoGs2FGsP@2TbxVgi1Wx?F^|j_=aU8E0_SO`qEM?A za?2ud5s8mE@FQGImWWHpQgJD{Oe`bI#R{@gTu$Os6MWBAaSn-( zrtm#yk=f#0GDn<8=8Ab_zBr%6=UMo!7LbMFLb6C)L>7yS$r5pi^R!ce55(}@F6EZX z#4@s6tRO4Je!mQ|xk{b}BY#)kba^#Z%Y*{XUZ4?_wI6E@qIk#W`fAm__1KJbYJk$sBPWnJeaz z`Qm)CKwLl;iVMjiaS>T8E+$LFC1k0%lw2m3IZrzkx{VzNYBLY9h4 z$z@_0SuR$PmEv;eX@4qWT2;j@SBTYQjaW;r6jzaTVm;X)Hj+)^Y7%dT6=JpXv{O-ItL`f3tL2s}wdE?ZPOK*z#7447TutJ&f_{W8WUJUlwu@`X4sk8H zPFzoR8gW!z_3;v%wGTuhdTOUP1jDY;B6Bk{3Iev&K5N^v$jN(OS_N_NF zk>BrP8ksI;kh8@(WTu!!W{Y#l9C4oWv{R9*Re9VpUz|@ChzrOPF4%o5YcbTNaREzTh`#Vj&goJ;12 z^T=E=kIWb6J5M_m1zNR$TNa87$s%zPSu8FlOT;B)skoF}CYF)-ouvGJCo9F}WK66g zSBTYQjaW;r6jzaTVm;X)Hj+)^Y7(#T=56gf?NqdCRU5Z#7uS#-;#zW@xSs43yT}dV zMly=mmHPMlXnwzoX=J*XLCzNEkeOl@nJvyGbHsUMu9!#Wi}T3>aRFH#M?wvp}P8s}-JqC>0Ja?5q%da_gOA~%Q|$>!~`DB5(fW$`-`l(n*7Kw|iNcVNc>(sXBLTHuIHRf;y3I$ z=aKj|d(J!(ziZDqpTsZRb1oq9Tlbs`N&Mpo(Rtdbh@Qj!%=GsRoR}r1 zk?CRvIa{1VW{O#4wm6r}5$BP)Vjh_<&L<1R1!SSPkSr1xk;UR-vP4`$mWoTsWnvjw zE><{oDk{&33?F%L*ogoC|39(zvzPHlI=Y9Q*lukJB#PZF^sJ9}ckj)eEUX%X^G8fua literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23a2393be294b9ddc03d2188773335b9cb0518d9 GIT binary patch literal 2987 zcmai0O>7&-6`uVgY0{KL5tilHwT709iV00dq8tQ;+yZrA1F_}8mJ^_IiuH;+q}E#Q z(z8p;QmKY0T7U{vlm%*-ha6ZSa2O;9^_D{qJ@n8cY4AWSV4y&egD(XOqnBLVH?x!| zs((xJ&AgfSH*df9hMz~HVFb_lKmMcelORHWW6Z%57))M0gUM5*qgA8}x@Zck0*sO= z7Nu3GD6h%_(q$qM<;;O5(iI{TMGxe~;aXnSgTItl19}K{PQXtgNxj1TzVKuO7haQ{*1mtDtAVeR;UDBNWh% zs0%xi%QOa$s~pS_stBVRquhJwr{x{FBJ1KdsQfRz4Q`U2sR$K$2q?z+y2CZ#0ni&F zQ=r1$Jjh7C%z^B$j=*b2sff)Zv2!<^xF?45ilR$H55NgS&bR#x{C&xNGOf{53aBFQ zNPCam$PtU;s0;vC*3Lp=?;PL=Fm)We7=QpUB>)X8M;OMaW)+C@{V;}S05kP%jw|); zL!hZX@>B*rhP4!S%DHtwk>-v-iCa0S6Rc5!$zv_&np+@cI|MK|)Z>U&4ZL&(mX{c? zfdRB*#|97@=`c5Thll5zvU0Xgban*CunOj|iU#F?mzHpL0autU2+^`#ChIb|I%#h0 z14nQI5u^O?kPMEo@5fs3uvVhnDC-1Bne!q{+_}uB?FX!(~J0uD$6ib z0T0s)n;I0wCN*5*35FNVl_`aS_6<0!7qT>C{Ow1XbvR|_fu1Q*`vJ+hPR1@iQrEQH zM!A%MzVj$!8f%%-7Ua#!rswA~4%oa@f_)8MSEgi?GAfAaHq98irDY)Lehlf-mKQ(d z)I7C|JVrVN-WhzHKLe?ve@>wInZ~K#Ui#go>WyA>yn3w{i&x)&5uJRJt^ceOpY6tH zJJE~X=*2z?D5p883BAb4+U?!!lX(4JCzj~O63-)vb|ldof1@$K_w(l2*6r5AFIKvV z`TayEk$pa%ZI5Sr6Vtuv+2;GLhrhqMAKRb*L%e-)u{(Xa7VU+`eiQv9`lQ%g-cNKd zF76lq^rP-O*Z-2}ymO;7b+bElvlCkGhL+o*<=&~OTDTVeCNfc<+P$)Or7cgtf^#5G z;W+Xn$VKk3dSHXiSyjH81o9MB;M&;+z9MYH6$P~--g=2)=L?w8X_!z}j}Ftqn4V$_ zV+RDo#EAi^qTb0^{m$-W}Z%MVHh45*YvJ(3oNT^`&y@Nv8~>%wRg+7XX7`5qLOOz1Xng;ctek85T`~%=h5ud=8|FzKOokSZu~R(b;ZvwtDSF zc%mCV*Z8pcVJDpGhEvt6{QwF@YPWx}S>1dwHQT(_%0ek${%pB3wa}ef*p1ZW8tFyG z>x=Ek41Aw++W4+N`fEUY@zeFizXrp~`&V0!znbCf*LV5wUkT60zW|^*;EDhM literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cba0eecfaa6f85e6f0e65ef103c71f40a047fbc GIT binary patch literal 222 zcmZ3^%ge<81af;mri%jU#~=<2FhUuhK}x1Gq%cG=q%a0EXfjnX8|#_)X)@m8j*l-( zEh^5;&x?;=$?zGZ{#U$yMt*LpepZTpK~a8IYH~@jetvFQd{Sa^c4>irS!!OHeokhR zenDkPMt+{Lo}rk3B811ML-1X z8XGN5eLkOx&-(oKf9A~Gy|-Dc^|9i5`wH-g)Q5(SO(F{HOanwl5ELzE7lWq)$TIg!s6#;}Ron%OoarjqjS!HPZEr zu4TJLu5{POSwbu!#<JK3ri)Y^C_nCr4rKx6w^he64Qkg z)5WC{Q+bN%l2VE3B8utKQiGD#E=~9a6ic*Q`GK%TSQiFQF6=}L;}no^1BDvIgaQiH1QM=~{}ZLaD@b9mRA*sl;?W z#dKq-#8iP|x~WuRx`AT4xm04hkz%@~RARb`V!E|dV!D}Px~)`Vx`kq@SSm5yN-Rw^-7p_rX%AP zbt$F>r4my;im73##8jVRy0cVbYCtjFRVpzxq?j6&N=$cBOm~+`Om|UCjY}n_Mif(% zQi+OC_dO z6w}kC64O%@Q=3R!*JtS8nM>)kew9D5Cvuh~!$>1~c8T7^yo%Sxn|mq@QDkzQFMy{bfdb&2$v66v)i((6j3*Oy2u zlt^zVk=|G$y{SZcbBXkp66via(%VX;6-%U*N~D!bq_>wy?MEY=vv}uX7S&6iHiS&^Y>7ymm7A4ZhN~A4Iq>q}{&xq?zx6K#EQ-qNg zl@cpO0?2vswJJr5kz#hnEPtxzJ|H4Wo~+6!C!kl zb5~&Q8<_h>=Dvx!Z)WaWnEO`dzKyvnGIu5BuFTxGGxr_LU4`6v@vW&hR0XX|f5=^p zg{aPW4d$-N+_jjyHgnfuZba?kugBc=nY#gVH-tOvsdqB>UCiBxx$kD~#?0NsyAz7< zA$MNx_pz9_A9-8Gyh-GJJm!6#yidfu z0ePQ{dHa*MRm?kpyidiv1IgPu<{d=dr(@p1a@-G*uJPr{ z{tzeso>4X!MKbc~|AQ$`pnoOX@8U#~Tv@v^cQ@wl&fGniJIdTWnY$Nr_h#-s%-xr{ z`!RPCb3f1A0dx0f?g7j_khupj_h9B8!rViddl+-S0C(7rUS#fTEx;%kyM+~~Zv?keWNO-$ zcR8iLPofos_Di&q&^r>XB6L8a)r8)aXbqu*60Ie4NTPLw4okG2(0dYP6MA2w4TL_B zXd|HyCE7&jBZ)Q>`dFeZ)XhEt3OmN9Qr<>ad?wL$LU|JHAoRIJI|+RuQ4XOmCE7*k zD~WOmeN8AY{{Fm3|NfM{BM4x!7b!l<+{c*vICGz1?tJDhVD3WZE@JLt=KhAczh&<4 znEPMM{XKL4o4J2r?*B0NkIelObN|fTCz<;f=Ke2p|H|CIG57Dx{ReaZ$=rW2_y3st zZ|_bhj-!!h#?C+tvNwlUibUgqY>$azU@|$CWP149%VngTM)Da2floyeF6O(V2 z@)DA7Ve+j`Hir1kWhCFm%#-OHGuq6g5&YcRd0)AJ%x+Gs{=JHM@i%@n*23tm^sTS>0R zHYdv%I-a$!92W`LYLgjF1b(2v;vFX z&*TTBJd)%Gnf#EHX?YlZn8{7OjQs4+p}lsrnPaAhy#<@loL%yWlTGcu1)K0FlUqm` zHsLWQx0Et$!sASS!pSym*n}sU+{(!|ZPQ zQie_F#pK>n#@Ow{|%;S%fA^G@H;Qhitr)Dc;FI;VNi~lWpd*PB9zR3NRjwT|BMXXsS#K zgKZki$#f~xz9u?DBHH~#XF6ny17k9aMKZ_9wm7s^iO!X116?tXT`^zEwAF}aIb_p- z(OAH)SSV$bV-b@VOBqIE36qyP+2nA4GNrf7A)DTEx?(xIVuh3K73i-knY`M`_G%c4 zHB4UXWP5c6rMJ!@d&PRXVm-Se+sXEd(R9TIiN+Ax=#Y(M6GgI#MY37Sv|WpCVe(cd z+cYLqgxegl5pJg|wzDg8q`ZsdT}*z{%a~CU-=ghU^liuTBE7Ld*&p-wh5udWHz~e7 zo}xSm6b_9;Ql3ciVJ5#PWelwMnf!s2r;_|3lRuL3bdo=2@+VTBN%E&m{!Gf5BMt+ES4zuh|Zm678cS z`sfCSg7!AdMi2U0u*m^iKsp_cZkC9Sf}>jm+E4dRqFWsbhS-?4dGI0tEn5J>iux38 zcKc)`#qgP8>BRCB!>a3Z#jyVULa|h0Un+*`{t7J2!x6Y~yC%Snl`c5yL1$ZpV;-0- zR6_K)2g7WL6AqZ_+7IiM4-_WRgnDP}2;czv**y|r_PG}*yy8A7V`Fx|M`b9{0~rTU z-48fu8uuV3&sO{;UT}G!YJ1t~zsKK6-dEs77ckXv z2<1%%3S%4LLI=1BLE+OJIElM641hcI*(NQ9xg5GZV$MN)5%Qwu$QYGGF5O0W^gr7*aKdNyCxQjI9DL?4JICP*V^cCB6HZG04F#E z-tz!QF9hEA0A~;cKJWm?Lj?l*pYr>m;da=u#?~s z4mWhBDM>lqH29{wKo;AJJk zY3rE|nM!*PWBV+J?1eK4o$Zhfh2zw7B*J?9T#05ADksq#Lgz_@)7tYTnn&mYhioS1 z6S`2K!}MH5w7f)^xGs_i6W7HOVdA<(B1~MDN`#5)GKny8T`mzOt}7(M#C4@ZroIki z0ezK2ra*@=bzLnHdgL_{p+{aT5qjix5@GVXULs6h6$E-Ona~XqVGVhsL@9)Bk_dCy z%@Sb_yG0_*VYf7BKB_uUIJtC`G7NktCUPQl zP$mzPGR*r6OnyV^uet$)lx=)zcUzkCig^?Bkd`Udrfe z6PP^F$)+>CkE63mOrGpy)0y6%Lh=+QPn9w@pVOE;UCKB*o5AFnQpO@`7Lzljj78LJ zCeM*F7EyDZe2V$6Uho#pe`Xtf8hbrjyUS#;IGgX1rJ`?q()$kut{aRwi$gGRE$9Chw3k#_mog=SUf2cNdd$rHrw=+sl#Y zt8j)%ub8Rc}_MR z>jM~x&zby%l+8|y$zMs??6jDCM9LVZ;^M9E9qm(h2e`4~_QpR9D$>d+8jKTb0 zCjTmB4CddM{JWGfnEzn%pHjwP{)@@~lQIVL-%O69Gqu=e>qAV$@j&6aEF$I9Q_M2; zg99|nG{=7KG-jDdG=U{sMkbp^xjKW%Wu=@>@|jFNOUk22KAXwsNEwTZbD3OD%2-^S z$K>;+jK#$TOukUcup8x>e36u4H!f!KB~pgnxRlA4Nf~zIawcCPW!Q}?nS7O$VK=U3 z@-Os*qvwfc6BAft)+Sr(fcsb`V!$jO#_MWG*d%~RuZ~XB6>?BdY42vV{ar84%F|K2nXto zCBmamO(eo;!aWk9gwuqFCBkV!Q;Bez z&`ctnCN!4_rwNZpgwupaCBkV!3yE-=@R&q6O=v05$2d)RTq2w%JRuQI6P}a^rwOej z!fC=&65%wVwM1BrJq=`fH$5i{cQ`Gi`=B(H#C^2nV=VkKd;r?5u?xpBK9TWBjPGUq zFyr4c{%^){E68Q6Y+0AFNc0-G!wg^R_$el>1_7S3+IX6iRzh?j(r8X~Fc1~->9Wtz z7Y7OWS%!gw9mK*Q?(=j5hd5|1|7%#rXMW#`uMBhvAzu{wU)c z7=M-VKN$au@v3w?&!t-(?lAtwj5lGt9pmj8@4$FR#(OcI#P|fpXEJ__@#CH+MBAKA zc{BA-l@oVl@w6k0G3uUCc)G=H6`o=7vkK3#xShfaEPhVmg%-D0c$LK+6kZ1$iFO1I z>vRO%VH>A0K92DTj89^G3gasnU&(kj;~N;?$oLk&G*?sVa1;C!6VTE#{XtK{+w9&GH{0t zaR%e(GJXN$ud9M@v%%}J;PriQ zdUJ*GyBKf8_}z@($M{2xH)Xsz<1H9}obe|-r|}3kE8%oxIU(9s;TaY`tMD9Kz;?i4 z(>@0`nyN(Gex~_EL5=DGo{PO2yPeb6kt9Uht9-1o`RL%%rZ(!v@-&$7;f#-9JdN@3 zj89;EGUHPiU%~iF#&XX8b+Ik1&3M@dCzw zWc)YA@pTC|9OK~*+rA9rXE1&q;}I~dPl{4K`!FusrR{fr-E{3FIcVf;(Rzh?Xh z<0lv|VEhNh|HJstjK`hFIxO6-!!ll;@rxLLfbjO+UIqj(6j+JxAsv|q__|TXC#5kkRW{kL*I<8o+`K{AUnz zR3vfkh9kK+=^N}ZZB^rr5Z;w-l_6d+m7TlM;-Mbf3pR!q(7Vl0!j>HFL)n%xaYmvk zEXWiYBzLl{sHr|kBsvrBuoh-{PEY-+OXt{2=dmCQRgeWX$RZYGnF_Mh23gL6tX4r* z*&u6JknJkSMBA7Gah%LtJFv|3vLq+z2ymabJ$A^m1CQ5 zr(!SD-&HzpHXQUiz0(PI*jRtMuy|-Q?r7>93j3GWX+dA!rAyCB!5uE{n_d*-&EO7s z3&vYA{xsul7=MQGwv4xDyd&eI7$42}c*Z9(p3V3M#(`F z{t4rsGG6}TSiM~YH|p(FvqG%^ufdw*_OS>$ivDz=fBrvu;4}_xSK{}yBGJoOf>*c% zsga*${5i&7Vmz7gOvbYq|HX59^%HL2F^^8b?U&ya!~K`v6~hgfKNQ0qm_HSRE&EF` zSkM1~g@Y{a5^{%~G5N9>9}aiO=Q5tf_-~BIT^vyb0s?Fn&MdeHl+;d?4e= zjIU;VJ>&ZsKg{^&jDN-WHCM&TbsgMczwN+yN5)@b{1wJWGd_{=OvbYqU(5J<#t$(b zcXcd3kHQ_+e@n(+VLX}fpBev?@%q=q;<*#s&-s}UJ+nLjX& z!D#xE7aq>m4)B$Low$#88rCx*I^3s(4^WW#N$~)mgCLOV0lxM?V1x%-Eg0!Rt_A5H zykS9x17;HbW){}Iqrgnv(nn65ZYKPrsd!mol45vUVX|VAiA_-q?-fi{Y$~y7is8+I z>5Adif*Fe8-GZ5l;pKu^ieY<@sTf`_n5`JzFPP(4@QJOUxekOCfY%G=DTen8<|~F5 z46+o!rF+54JOffu4v0O1cOR+*RJWR1t zF+5GNN-;c6v05=aPq9WZJW#P#F+5SRPBA=Ev0gDu>e-56Qs1B$CiRVqVN&0u7$)`2 zis8YEEsEjEimi&_(TZ(~;n|Aqis9jk9g5+TOgq8CLAFcjc!(lbF+4@FTQNNA_9|Ft zwD!Us8pXqm|G{|NwJtop>;ShhW{;5Jq6DgVfNwhzsOmur0D3ftU0&UbPuS2kJZNP> zO%FQS(NxQWHa0|U587H#$Afkj)b${IyS$zU9c_sE9(1;#fd`2eH1wbw03GT8m|CNU zfV|klhHm7+V4Lf^J?LpeH1?pc1x-8%EV##m0T$fr!4M1X^B}DJ`yDV(hwg)=eLx}@ z+6Nu7_GlBHhA@rz2foZ)+ zv;{y|jgNV;qb*=d55iV>+=FLq5>I##*8GzmJVzl;wKu5~;LABT(Ki3|X4h6OrLYU-_fl+o z4@TQ)I(UFjn$aa4JqTZU?c~918=|uZ;Q;I6LD-oSJqSzG)q^mz-8=~2*6r>=n6Vxn zgzs@iJqR<_(*u(+dg%xt>`X(vh_7MMfE~)j*-o@Q6HARb4h1c3bS+;1#|jBhiu}Qz86V^mRsyl(8ET(#Dne@EOo%fgDG{H zL$(WS#uInT9W%l9qc5#+$Yu%?>PnByQOXuP?Y7D@Y}5B6@2efMX=3VJm0CQFq5vA2oq_xLqRWl*#-yfWtbc{I%G1iAGT|gLjk_HNMN%A=CVClS8Q=8 z7-GY0^`M^x+Z+f-53JR8$ATmqXom+wE!gS7%eK999589`hY8*#5lnEdL&5Vlp4}dp z*N|ya1_--y+;!x}Bx|#_%{+k)7U~hDr&4cEV0sy)n`gzDURLSmVR5FPrF8SOIMdHj zx_Mlj>E)Deo)>5O`ARnrj5Ga0rJE9 zN_PoUH@{Ws=Bae1S5&%rES>3 zYB9aG(s7(uhv{{dj(a}!m|kD$c&()Y(;F%s@3q{?^t+Uf7h4)J{cfdWwcnWOO{BgZ zhUFfn->Y;Omiw4~ztUk?9$@-|N{3;2i0Kb29fqYT)0-(BhNU^vA5l6C%cD$hp>!CQ z$C%zy=`bvhGyMsr!>~Nb^j1oTVR?$_t(6YL@-)-iC>@678K$>YItvu5ruSAl#(y8C_fvt*(?=>D<3HW$ zr<$1R1^71TPp3UGWvGNXNlc%t zbQqQ?OrNTB7?x>F&lGy6{W#j0?O1?stkMN@*ah>vSj&p@nV987JIr^$3@l*!LZ!nD zEMod%rNay?Vfs>~!wf8A`f{bi46I=KN~OaLtYZ3VrNa!YVftF7!wjrr`g*0q3}iEX zgVJFJHZpya(qRTRGkuHFVFtD`eVfu@2DUSOhtgpNb}~Ij=`aJkn4YV2n1S6)e^u%` zVFq4f`s+%E8F+)~Zz>&T;4P-_Q98`P+f3i9bd1)0Oy93`jMjIUen9CMt?x4Zpwcl~ z4>A3)(lJ`!WBU6_$7ub4=^rW`qxB=Ef2?#Y13qE;r%J~%;4`M@DILpz&zb&((yvt?(~Fdj@n6jJZfF;ByJ6}&Oi*o^{;bk5LA7K0b4o{FYtQr!O2-7%5iD%e9!f|5iz#lh*!Dej^-rOXM^df4n>C> znxbfmp{a_d8ahJJ5r(EInr7%oMMoN%u4wwf?WdYE8wB`Wg*Q%f&P<4Axa5K#P)qcI zVh`{u5Cleh@S_D|Jow3iu^!-uBIuHF9-Opbya)KL2nsR5ga2AE(Sfi*vP@-6Qgnf# zlNDWP=oCd489G(b#fDB(bcvzU6?w=K+4fg1~$a@cR`6vK+AWw#(Mr0!3}TEmYLj+ag76y)9PM z*4q+AZM`j3)YjWFMQyz;cQlCD0<7>L!Ge_@;CDBuh^sunuWk@n?E!vzgTNXO@WUGf z)_Qw*D@g0)wLb#odSqq#H&G7)gBSIl|0h~oP&73<{ zIDj=$t`8J`SbMh%6yT>uD8#D{m}80x?_%bC%`@blK74NI>n^Uat~Qx6z2T^>tE~pU z>7cEvwWhA#0u1YF58Pp0z3l^=y4r1x;a*QoUD10D3DJFy1!kh5A2V{mp0Vu0GUgq} z0yE(xL=Sj?UsRzG?*gErOhKrk%%}Pf{)1v+a!6CE3VK`~G|c`7a5qP66nor3{6f-) zKw(KgWKFy6U0vrmLRx zanYBm;YQ7zVlJ*(J-~0|+)kN3o&78QXp+x`9Rt>0{OYM41GrWHn`41l715LP4uoR> zuVw$?SYQ@F^w_)y_<0`+@fQHj0hYX=VCx4QlY3#&A)g1g`VE}&1B0p!_> z%fXGW%I85jA3k##Z3f{E`&D_kO{<_d$C5ErE@JxSaGQ3AUf}>X?pJs{61^GjFy7l3 zujn~#q~JE?3bR?=2c)+O;WindGjPhl2KpZry|%}Ahsk0nblVY1nESdul)ZTKv1II! z>UnH028I%e)@K*r1vj!aEONsQq%~sN-A+4ci;ewDW2Qgk^kI?4jVZ;4ng0gzH;wsk zXiV2OW7j?nw<&SCI94=Ux;89e2e^5?bp$ZYOLwo}4l6#9@vffJZ;il>l=9-MQ>LDG z-oQM~6p02b>;Na`#n+~=17qGgMBZ0i1VOhrGfa{_z)zS^h~XZ5YeS@XaMXfS z50EjsWP}I!IV=Kc9$ad{NDuIfSQH}NgUc<*@BlxGMIlCcfS<%7FdD$LD1H}0e&5e`ql&h(-Y_sbhy#t!6WpCE}!H|!;lqNnJxGc(S)b#9d3umOZwz1x zN-x^MUDpO&?gHjTg8oz?E4)Uh`*4TX9A^AKp3`p(+(2Q_D#H>wRqH~P7SBO{0ucaH ztt}}SfdmJPWqy5q7fQAa7_xM#NvTGFA1#|gsh!@WbVe*|U8?n?oRsBYAb~So)&lcz zY9xA=%NL1fJ2A|6H)7{FW}j5014$3U_P)S_r{YcVFZ94z68iAJ2c`o=qL%=K?Q^LY z!?wT7fxJlHepGXpv%pt6%{@eVl?T0T-Cym2c?OdX6WQezoR}Bs--il!gZC#4=-QjW zjUGe>^r5tGVi(`+wBThVMcq!K&UEd*lAvQM+9CC9^Lx3>jcRDdIpR+1d^WbR2VsaN z4wxQ%ECVNm_ke|IJmB=;30sv9c@Wmt!ybg4x2Xs1ZS^$+2;*z%M6)reacuYq%y^Ig zgJPz8!qc)85yIBMy!)ibSV#ibBHBvOnjw8kP=v+w+gebB1$|o3S|M#CXzh?bBPim< zJl{p!Gu9!P7EfJy6h&4%!Zr5bfkZ9z7yM0Xlm> z9mN84@gNc%ME*qQ4+f$65~5ul$cqfZ1>L+qVUUTTy9Z?mAV?2SB2jeAsPhNmq}bDe zyvPt-(98Q1hL{+7I}n6ZU>^^{Iis%!VbAR6K{zs#JP3Q{^Bz>9p-IUG9^eNi3H0{> zKQBpOfCpi14Di8TZKVC5gDJte;6Qwl5kWe>uNe#HY*(ex8@0A_&GV?J<)D})iA)8frt zWCnh9>ch3j)Qt8a=x5N`l@mRun@%@Uj94w0?{Xc>SVjM%8mZ#3*_9X!g^W9t(B4$@ zpw$={p#VYK@&KekDInI9&(AM?Y& zCNV$ejpvykhB9D&%pm<^{+gIN2EdOR8kSJ8MkN9R8K?;`h=E!FgBhp|Foc0R07Dt5 z3owjhB2^JE1^x8R!f!kAW@#^BG74$YP)?zyb!k z0W4&oJHR3adH^hDAPTUAft~(?0C5CGPZ~wY69|9^i$(Q%z{Kf@dT2^$#-Cr?jxU%4KH>w?`L zm=!DCG4P2l!2)F2aJP5a9Z+l?2VhPc`9wgZ~ z_IVIku-}6L7QExZAPWw7FvNm)JqTAH2R(SvhB)Mb*?!SaWO@*GiT6ARyTtn*gk9nT z55g|-p$B1?_{f8>OML7Bx&-yaPdo@)?o$uKmix?uu;ubR=xF2k+=H;?zVIN?hWOHh zu;sq;AZ)p>JqTOwhzDWI9rYk=xnmxLEqC05u;os85Vl;t2Vu(-`#LiX>k7S&q z815gPs~BFzETekoidQIxh4ht*jUslHV)$jns}&nV>>9=J+ltpJHjdbJis9E4 zuUBjWu?mXejOPZ$aL99`VmRfwNiiJr+^pDCVz($Zjo7VN2TNG~wS7whw#CE)JQ~u%nwXrV<^q!SE<+R~AcmC))$G?B%5QV0u*P zD@pIk^j=C|O?q#p_i=jgRlJ!L`+87lK|c?^v>?fYV*vDO53-g(xbi6x| z%JdOR$1TM)rjJxQ9@|Z4dWO=mFCWG9(Mrd=17nyzR_SwuOD;@6+Okny%rQ_gr z64NIueG2JQm_AkMcrHdbd1ggOkb#UygRUn>5G+)cL$a*eW}v%xaTsaFIPI=9azEil}g9K(kiB}Ryy7t zSi|(SO2@kc>zKY?>Di=bGkt^7F-|u!eUs90JAO0Mw*@^ z5Yuy%4!gLE>A6bBBmTRY{;JeBV*J0x^w*VM^3UVh51!Sm6Lcb5V}9#n?EilXqnDCc z!f&dCVOZW``W~gju)NLmy-J5+*~j$#N{3;2hv^5D4#V;;(+?^ghUE~`4=Wvp7ObchUGJ+=PBL1l*IHeln%r4CDXrBItLQ7Secp$q_j?(i!FU$q%NSqI_&UbdGrpDa zZH(_`{8h%^W_&N>hZsN1_$Q2i%J|oeA7Q+G)mR-T!yVRfCgZa`rxQuIef<@z!&uB> z`cFbH&P8AR8O*dV?Nh6T*Pp~9=fpNFeBvE5ZE|88zI+!^4ExFi#juVlFrHW;qYOho`=t&dJ>~pAD$Nv8(8rlG>#BeZhxnnl-g z-=r8C;bz6~iO5?Vv*|9uLCvj>*>u-n<9(ZCYtbPpO12L5TuHL^*vMCQ%%-t^A+g&X zvuUiywRbpX!)4zFOaPNY%KF~i;>b{|33y9sR7~1VF$#&z=sF7d= z8R(ODD~7(?*fEpmf>Fp{6UR)R3#Q_eo%bk)^4{y1y>>bdm+o`SUOOFq{C>soV%YX?mh z4f5B*F?;P=)cs?Utwa5_R161Bk1K}0`-Eg>%si15 zVFtcE_q1YY^EQg@B=(GA=;LiA8-@0LRxwPH?G!`Vo|9}eJ{j9yvhg^`?4TG99y>}l z1@^gyi@Wx}rYQVjLnTe8^**GIDXsMEfRp`Z3s41F?5vc<4r&r7xxb~jKA_Nu>RE6~>l zIA-f~73yW6W42CLVSEgdEE{SW& zVi?>b6hj(mis5d?NXasg=XAx;!7>!X;29;^D0I%ziecg$qZk@`tYour7hs%XFkIs$ zTYyEz1jkH!6fHoWCn|<|ndF#lk0t2DlO40yE=7l(;+PG$3~e-3vgJs3nq=#7$7#A` z*|@VZ!!esiHWpel9kXd8O__j+r!y)6s5A z6+?W>95d+_PeVN~mux!PV})chF&V6sEE5J~m0~bRt0kKa!@owdxyZ{}#pV%Prx=Xw zdd09w$d+tA`q~D?@F~}gilHqxNtOlsvRSf)$nzG-7NIS-Du%JTO|qraiEUR56ZQ_p zRukJP*-E6FBiX8%#C9o$baN$JjYZmS#juEcRWaC&*A#=jdR?+LxWV;?WE+vjo04ru z-+jw5+yA!1#_n;<_O%_j_HD;(xE(u*?RCtC+lhtrKE+_e_A7=y^p0aTzMbfQ2OJCI z!<_Q2WI5xB9aL-zu|tYsp?cUcn??@u{GMYrja?Y~?<)pd_km;f+FX?5L&Y$*K61>) zmzzbWE+2!rQT!o>N?59dpvnE>Ghai-|0bb zn%hq``_~U9QixusJ^MFsDVdz)kHa#wp<+0fzSHN9zE1+TsR4R|pYa)t&+?qCIoznF zfo14Vh2tq0c5^h$q*UgztLDRv>N5}H9#6?Qo-&$(WU(NBs~{VXr)E%)xEitiodI`v z_Ez0<+5*Fk*i8>OIs(?Ured%_wImyfl}2sJMx+p{BiTq;k-Cb(^3{`U1V&YT#n1)~ z6iXx4P_mJj74K9mo7i27!Ll?`3>Nop#jw0>tQf3F6Uj!v0^Oq+X1jY8Gh1NAGAP{r zieW4NfMS?YA5;vZ`60zH!#u1QX4$5SVT3nR4A!Q(VmPXKM6rp)9#srhu7zT-ERRW+ zhO)I(472CsiedHkgko3;J*gP1bt}cN{d-C=9BZ{!471qNiec7nqZs=5Gm2ql)mAa| z@n;o7A8)4^R>{vPh8eKEV(8Bu6hnXRs2KWlC&kd8J1d6%+(j|myi5c$_KUW@PB-@N z=!mIwO*h4`n(Z!GI{J1G#n88-ilHy|R1E#DmtvUZdMk$GqCSejboP~O1ZJv!lBHv1 zoun96C(lbZ0^tJ1u;S~l7-rl7ilHA5R1E!ikYebIgB3%+8=@Hc*igmL$A&3}KK6oQ z=wmM`hCcR^V(2?BD~1*GE0U#QK1fy!Z9ZHvv~P-J>FBemiXq(*lBLZ!)x_Q)c#9_X z56-2odRpiIX(}-+S4S#_&Xg|MNK8H%ied5@r5HN_*R0W-y)*oG-(nqc{}v3Zy-*okeJW@adc zE;my#Og*z4Gv=dkDw;Xdu^`cAWVQn)(1~qk`J))t8gm^p8O~pfF*46Fb8Y?{*vR>g z1>KMUt%(4_Ma~Jh!}|KcbGkuTlek%g;a$dxSn*I)@tUT9Ml?+YP0%zAw2Y=BLC?@M z9ki^bqd?EpbPVWOnvMlMThsBN=V&?s^ju9Rf|k>C66krFP6j<+(r?zAI=ev9Z&PL> z?1hSsSqxfU(YZOG7b&_d1N34=*G~n#MAGk4R)b!u=(G`_mnk~Wl=yN**DpudD-_+n z3G_-y|CMS=e3hbOO

    8=rmIg*GT%^B2(gPJw+F+_}$FK-({IBU-u8;U$aSwM6ZVs zPSO>8Ak%kocboEhgQ9frndps*(y%9blcX5OLF-Cdv|#~g zJxL3fn3}9FY5r(a4-F(ev2zh(Xeep^B-0=7RCLW!guP4B!r3N#Pq0pBt4O1TIgO$i_%T4->2zD)Tu zJ?L1_pC*h`tU78{58kB^cb212r?u*M$faa*RJaz8j6Dn%&e|=Vo|lj`petqVaStLj zYmom5=C4WqCz-z%`CBo6ZSp_G{B_9Rn)&OJ|7qs0NB%ax&!7<+NlVJ*^_oE zlF{5rI~B=j=A@m9WHfKmPDL`BHEE|J80JjcsYpgMChb%tqxq6{Dw5G`NjnwEXs)E4 zieQ*2X{RC?&6BiKk&I?Z+NpSkcg4S3zwMiiS%hDbcu~%Ga}oMwk1@=@%fvV2UI7aS zRkG9FQh2xr;ZiuogSTzNq`khTzx1>J3A z84lP$H2u;3!7+2BNno@GczU0}7!QV8FxG=17L4;?kOkvC$gp672YoD<=)nLBCOKg8 zRzQ;)-6C_$6tsY*G}=xGh6#;skvV3r#dJnH3c)a$(T+keOl7pAaLlBEiHvp>j@kHV z8lxSBV1>)j0Wu|a}1qGTbSpEnUcAjM8%#K2^f{p0&S%MX3 zVH3DOFw9tVe@w9ak=WfV60BeiP6ZY_7VNVbUgE)i3zmBDjs?pcFm;x{6$f3*C7XbQ zpB0YTdK`;e0V^e2i^G&vlF_73x5Wg*lux(C1jB?+x5Wg*bWgX%1jA%cx5Xq|jKi61 z$MPbz>Yi%)tq~MZ$rqjW^t*v2gxPK*^VcW;Cg#U%w>jpojoEGs^JBK#%KVt^wlP0u zyY0+hoBTVNAG6&~=ErQD!~DqKF6Kx6a+x3b+a2@QLH=HKesd?G1{TY7(@emc7QQZE zEeqceu(pM73RuU&w*;(f;T{3&S@^bq^)1{hU;_*Hd5B$1jp~-}mozNXJCcTlI^bwt zq(^ru`Mchq&@})!=s~3GAo3sb{)FBG5(yl3z>KKlDLBG=Pccls?<sl&=`hnF^sFU8~sZ$oS}WM7*6y4tr(7bR#D65pE$5U32NXnUBxxgf~ z{CLXt<0vR68Pzlh(&Q;2)<0+I+w0AkL z*rX^C%4Djo%=7*!uA$3pKF;@|&ByBFsU)I!7yMJ9D#3`j&?{K>A5U3(-0V!sdu*dx zYbqFpy~ryzdz8WwpM#5)NS9IelWq1c@uE$Nu0$Wb)MH!qz|@eY)LExmnbZt!qfNlM z=bi4sz-2z+i%ii?!l?_;vZ)!ipIz>Qu)L*Gw+Nf#3a{I03Uf`Ry3#B5%1|*eqeZS# zI>kv{fcg~m0@TXYUboduI^~aY29tV?7j3fHP*Tw0u2l-PGBp59_;vqOC^jtlulI^g zYBMr{zK@Ys!Hc#Wo9$pSSwTO(!Rz+ot)?%8Bk@Kr+I;S`7t>`om8ig6+$0w({_lm6` zQc&a?3Qw`=)b!Y<1B>iT4NP7wuiH$LzR2VgWvlH)d+~JCSIXAoDa&l+b-ZpfInBh3 z+|>1oy>ce9pR(J;jN;exx-A6F1z7pi_t-|5X$%t92o01nlX7r871i8ODRd2WObnAd z|EbUb+D6JrC^=a$Sbx!=9-Q`0}SrhAg@g4ooHwle11DX*EwHcsH<;iy2tn|s|}w!ltOk9cg8 z0`>;>(SL}j#?Y>}@S?2}GP)$9_8%)zK_*%%g%%IA&Oxaj_lnI2LF=Zu&AVA$$Cl}7Oj`0VcB{M zS~F~}K9YuI>nmwkwtkX^WlNGYEZg&r<|Xt<>O|cv@F0>1fB%@j(?IeM@cx9(odN;_ zJ&5$f=6_JkpVWo?gJb^0KI9+b{RxSEY7!XAL9J7*25SX1X*JmYv{!?}d`k3d)RgiI z&TqCl`P(-ZWK1OdqQC_+*VrAd5# z$@>#}88A5p`WP@J2D%$CH3kM4FwKE5Zz$n($0#50&xrXG;h!1v_kw>`%-;=NH#6q% z3;%5A57Pjf;~1p@|J<0r3;gq9{$B9U_x^-FW;kTUKoirZ2u2|-P`GQ@aV;R%>6J72pW+Fo|U{^RC)S=->V5I|j3B62z zUKIm<3|Jil-3?e113{-mies$<1L?=`;)sQLSm(KU;N5cMV!ab+3?Z}GF@In9H#mRT zIA9wcqsD=MQ_PSkYiEZ8l+nQyU}wzV z7ycaQ4-)~~xJQ1b7O`Fp@&_o@BInA`@!~n;6bGK z5b}TM{6RyT!bc9|CG?5HDtyd9KY&j>h$Qu(3i%ZNutGlbT0&A1GL+{*Bni{!=P`eO z_`hI&bf+(4{=uD3H96J}UZf0ve%h1cS1uuA0tQj*BD-G;+9{+*JjIH#2An>)(=w1^YqLuw?&{G%VVWl7?mbNzj_rZHa%DG%VXmNyD=JB57E* z|4JH`?N>>|vi&A$Shn9K4a@e2q+!|qlr${cUxL;O%l1D>!?OMDXkJ2hTHMgfIkjm_ zhR>>wTkOUsJ=+U+$lqrCFynVDb>Zoy6u8YXI1RSAZ)OdrxbFcAABwnF>G-POeN4Y! z>3GTM0j58wbbNg4A*Mg9blCK!OmF7&;0ya{#O6$V#EE8-_=esEjzk}2dJCoFF{;Oy z-qPtOZQ=3dt;d=Egww2nchn2`100MOmD4pe0l3>rngZ#zP$Ae)7vT?U*39_ z>Ftz`FK<1^^!7@}*N!?cy`$3cpm-;ycUC&Syw!#2iAu*O{kk%}o6_+~zwS)$q4X7` zN15JJ>G-5yFQ)faIzH*whv~^u&qU`Q&h!+eqjRS+eT34{xzm_FQt9a2=}gaXy6s+ZoY-d^h~9jZ(%Zhj?;r&`vumy9=vMJ%sd}D68#l!v;HBwyDVlKZ-hH$ zJLh0{+{E;om5$+Y3)63Py6qlwFg$K!dPS$(?lA|$qY~3AD;>k*cBbEna^zw5-SU`bx(aEgLYsq0;e1%R8BVm(uY?%SKGU zTj}_sWn-o{k@{RS_c8rmrJK2r>Gvz$%zaFMQ0ZpwWBS8NH*+7;n<*XUp*hnZQM#G_ znBGF^X8L1#OQoCXkLgb+-AsQ>Z>4lI{V~0@(#`b8^fpR2(;w5@D&0(fOmC-jGyO5W zz0%F}$MlX$H`5=}J1gBxe@stQx|#l%-c9Ld`eS+zrJL!G={=Qhraz|lR=Sz~nBLdv z*1pWe`0mH_B&P=>Xf7b}c_t2ZqBTBqcaT1e=`Scf=T!4i-5`xpSaq87Q6%~zOZX*` z@X^hEcJP2A;9z$rJIES(?=-XECiT7Qt4(P!1OUnA4~Zg%k*(h z4^G(WXFL-pI?=YoJTuuceX`QcWXtsFN;i`!(`PE(Or}iFRJxf=nLbD97>0A1K2PZw zhVz-8rF0C#1x#P4bPU5qOkb>Y48tW%U#fHr!(~igu5=8;6-;00^kA4>EUfb2YYSF; zaNL454%ko7ucj`#)}bKZHt{-uaF?~-iRKIJ`|*%VwnXWKHaHX%*km?3V0*@zDHLdv zWb-g7Zw3pK+M;w!%3GPfP3f4Fw=;c*(lIITWO|O$F)8n2dalwjRChD|RjJR%P<@T* zuPYrx^$n)KDfM}HnD{Nnf+AaSdmJzocXSILr+8biZ|36@7<<9Oirc4jd_`lw*Xfhc zaEGU4hgDb%+4or3_kCFUlr!TWGX9b0bVLVtY^6CLL--S>f2wp0;m^DtiRQr_=Iuup zHfTv}e=7J-9<;XLXAgQ?aMA(W&*tMN27UnxtL9gy2T$4h{mp~6wzL24L(>v;xyuaw z`~%!3mPoWA<4qVJ!gw;{dmKO2%u_GOpqb}ly2X4tJE2JQAWJaMB}m0T!g#9{u>y5~ zJ1o#kj3+aGknux|=P~{j<9{NZ^3v=#@jO9j`24b|D5svG9FLq zxN@BdcbM+kj9sdCDz`t zpo4w;p@RdVk;F%WI)a6rH|lk4iuYp?-P6nT(;jfsKctuBgHrl&N5^LodtR{x#1K9< zT#t@lNUXnNctK)-VvC6lR17E4gA`jzY_MX>hz(I}IkBON;X#gJis2E?7Zk&j8!sw` zdF&;{))0GHv9-irQ4G)FBrAp|UxzD($9Pi|+dwQ;v5mw=D7J}MnqqjQeWYSrh@~rr zzLTLC9M5q!`v(ixtCKV~JvT{C}xp(}^upYzDFA zis3bZ6^hLwwo+c48!+A=rs+mi44wwY;mmsop91FtNT+emD1~MNTFDKa&FhnmC ztS}XJ<8sL+U^reOSkXkxM^_3~oQ7_Em1N5>PhTzAi5)zCp13&9LJ)3RbWi!|W!(ie_N0xLL9#Fb%f|Rxk#0)UARQ zrNb8ACRr9tS4GE6d*qw%@_U=D11WyfqAZAP8mE?D6htPk!Gtk^v1Uq!GJxtM>e z3YI?->z8VhjX_;i7p!0k>b{0#t1y?<6s*uZI9N-v*)WB*9SdHuBdv}DreH-gk-55# znMx^|h54bLV>aAYEC}lhRy+s8yMbhD5U!zQTQOknbj+ktxDbnjyBsrV6fVJFYb4ng z%q@2dRx|+(-dM2Wv8bpfjs>G^VefIk7Gf1<@_Pl#UxZ$9pJX|R?0&%tvyqVp1S=Yz zd#b%`gJ3e*pW~-JlRqdDD;$N{^C8I=VJY^oU_~1-teXl}JR9AunPB;gFhrV5mW?zX z5v*W2y4$0YZOtUsLb4o~yT=48+=SlHQnGEx%j1F-&%*NY3BmHmU>WzMU_~hi*GjPb zboADz6hrT7Em+}lgnL@DExE+n2v#%!rt%rVif6$rwiT?%{0_>qf)$KG9kg>S7)R|- z;5i3O*DqRyMB6)Ndgh63*r#-G%!JEdhw7&GYl)7T_zD+c-_upF6S)|M-2}_e#eCUauoK&0pL+;aun`p>m24X3#-4%|ZbC=v zC0PCh>~VTawg5JEz{+ZbWV=zJX@V6lMvILUtav(B73q?#K)4LacA$5Ul58h-mZKdDqPDfiIAB|B zHfF%FlC6P_8YfuME_B)Pg5{e};!F^%U?i3|6D2c0qBTjf$*`f5CCkBXXo_HkY3Kn{ zC7TR3O|oT}3#L0}dT8NRtmbDpX3ASM9KB+uWI5PL&5~>idT6F##mUIuY{|wU-8q8g zXP`0WN;VqT&Xa61map>#D>N^=WeHZa2t99sW5FzIR~I@E_B>R|BFT268!r~DU>t1T z63N!0uuBCiT#p{QOfs`RUM?8DqE6vf2$ny4`zcliwW|knsRYe0q}|wQJ@2#9B^FGx zHL=P8TN7Jg`ljlan`84<$y_`AQLsbN3i0VD8bu;<&Vag*(+GVT#S!>lFi5Y?S98>NjGB} zddD%F?hf>_1A-M!L>li(HVw6OP_hNs10IrW6O8F$!HUhA;62BJuWbdq?|{un1`7Lu zV8yf0B|a1^KN*RBB-tip?qk6UwqnZpM6jY9uulccH(mBK!3xr_oye0c3l{Qo$Aam0 z9Dm_}DMWE5`sSB{n z5Ug+_@|Q2!3`~;+lI_CkwotI5MaXlJVi=#rjs@wqWxsL2R?2K7@U39^V=)lF6Rcnd zjNrcn%b$o-&hG^)Oh*^{w`7xHjD8TTXa?f@k6^`_nA3igEE_HRlVm%v$^2Qcf_Vsc zQnIZuc)ti%l#a&uuVcXrwo-m|z*I`%YV1yblWYT)dcR9HCYjhDl9?Z-_*1Z=HK>5U z1Us=4*ZxniqOq{%ghf|o#R-LVgsG)fGxpJ z*;oT!;h4F$a53hoD9 zOd+>AX5uVP#WORvv1=+zeGwMiw=0IqxkIwW80b|b+k*aERWkEYoobS0Zl!S59W!M) zk&7v?hG6-r*e2GLEDihkT9TPF)!K?-om)q;aX6^2E7^1y*?N+hW5)W9nR?5gh4MC# z%>3?KL&?l+bf;w5$je=h1xa>zHgdpJKtak>3Us$)Ceea4B-+?98*U_~z$TKVV`+Sk zWadl5_c~_dGt=FDj@kG!Q7QLJwh#vE0m(L_(H?Zn#y_dwhPVwtYapDqGU8-JI73XMd>)5cuq3&G1Lx@*=r|ZvhV1ay>>Bbu9IUn zocX=B&XTQ0{<*kmZmy0>OyJNvBTTwk6Fc%h^FM>uT zn~zmiPsy^dS?J}MNuXdjHr>5FD?9kJhC$?dQ z@VsLtWBDTydEl5yFy9R7{(_yzMRyn=SbiE>aG+!(5pIxUHjOb@tqfKStC}H>1skXU zr<&Aj1_vm_)#WMFX>IX`x|D1Qr%j{OhdE|*X?B_~IA+5cbM&HP!D8FCFF9ZXE!;?v zy)4-h>``7(4E8fwvK6o=!zEh{o0=loPAooC6~n%2gk-z0ok^1{7lUe~Ur|+EZAu;ob7-KRG5ra+#JV(92;n^119#ud01)8bIe|t zfw4Q^F&l0)R!3Qm1xsyY3mmW)PQpEzg^t+^r(*NDNHJKW#gfg$a%72O*pDrBELdg} zUFLvI!2C?ka>r~&%;OO&B%6!H?@Gt)wR2%rRyk&`U4(lhs~xl9R-#~Q91C{ajI4FQ z2FgaM)=9P*jkn%0H``@9U@y$U@_2(|!K*g*jSiSVMgP~{eMebQY+=JcbI1rHIR{0| z0m%p|iinCLCR7ZdA~Hs7#2kj4VaOSVoO6z1j#n`QhKmmI8ZKtV^wm>)*K?|h_p-jl zdjEQtOF8TGuj_PI*WO)K-6zaYh9fAeo&989m)buCL(Up!^4i%Ln%0Ik2XR^F zEO|k8y551jZ~=yr4bGAUQfQ+CDP;f3^d@J?i&AJaVYI*&2U5?4=sliumb@f|wmOhP zOAxc?oh2_zp%)xTp-q_Vzv#@?=|E3R3|awUC$nf+1W=CuEaFy z;}GZCEAQ<@bGWGkn|qsrJ3`ws%*-%$!gPj_`rSOoN1%45yL2(-v%KZ(BMs>FlP}F) zdLQ+Gp7wThpV@H%E*I$1CEGwjA5fwYA>I99a~MUitcOw7t+Orn;i?ajZslUcm38?T zagk6V#4Yya6+>M0A-1g5&g$GA&&S6STDqp z7VC#N%3^~MM_X(d;uwpKLL6(*d>ChxBFy6kZX^0ano*Uvsi_JouWU+aOlMR|L z2?KSf=Z6KR+5#7N1zLm!^6X|W3~{=B)kWT`T80H?+E-m1;w<~BR^F>F2@A}zuWB9Q zT#J{6IM3o`AV&P1P(Fn8-0lD+x}2^SxOLc-WLBqZE^85R<*f<}gfDcIPMaNRaB zBt&ScBm4EmooMJhN4EdmiJ;92=o3U}PDtqB76h~tp;Y1BEN{| zdcwXR6y1r**~bBWf&lCY31RvqBsA@3j*@Ni#kJ2J*u(r}@R0`a2FU?4fPZz=1Ng3R zU$~X<$TYm;H`xcy^%Fe;nE2d;6U2xLEo+!cQ>0`ZmHHXorIl+9v!yMl|A& zG2-Pv$B0_~=I|#BOWWtzdj8>1+7~B5>JJm!Hl~P{+rG$PR*VR9I>H@jvH}j1uVs!} z(1F`8rk{mEoM(4ZI7aNGNQ}76R5U`n=VCD;5XED}-j4}!f!%wF7_s+~F=Fq>Mrik5 zDn{)6xEQhb(hemz7TUd+aVV{{&~CGAjM!$m7_rUrAuigE%2$ZcZnI*Di|yVkMQBS_ z4snSsS;e7Leu>>tRfkgfCHCdjLR@KIUOh(Cvqp?)^V)`-w4P?{y-y+dL`6wRZ0(M`%l)65=|Gr-r!RR_U||ZOPL^++a(d5uq)4W`H|- z+LC9*h{HTPMjU3{2<>FGgft{SbTE25AtX-DblWvCT#?Vw;Ua>}`9_CNZK< zY8oRB^V}G5n9U;Gfw@HU7}0y37bEI*P(`=t@uyrjrUzdfSsV#GGDcPK|R$ZoTJjEj#n{b-n+ zX9m`5&EEkzx;F%Fi1&u3x-mj~SU1Iprs@zQ4(n!zwgI*;+p)~xEg>$qc&kHcfPofo z1LBg|{$yvZ9Yc0tX4^5+p;kLZI?U?rkq)OP zY1hSJ@?V*G-0eVLx&srYt`6P&B%5$hUUrWIdD%R>$9rSM9`AFQ{3tKI-+{i=?(qSK z3GR%Umpw@MS)iK(dD#NH$A@CX9utSjA$e(c2l`UG$A=vzze}kegg*oxaUd^SX!rPN zjM(F24wFCSrH?z%m)bo(;V}72NIn2AoFvejaI!!j!YKlM31FCFbbUuvr` z#$j@ylp0I8NMIb{8;SdP!nXnw9M}z;OC$7i6CJv9canpj%yx0Lf{Vz>4wLU>TT=+% z3rr>aATW)fr)Zu7+3-BO;pq;OU*u&o2)_!W~Yi=b!XYzMO81$M)89J;e-E+Hii zHjj`cFrSbXSU@Nsu#iwtU=g8^z+ysSfhB|@0!s-+1(p$t2`ncR7g*sy0=L=*Zl%NI z7%8=iP(olep`^eX!m$Et38e(q5snjBPbed>fl$`Kk%r|)No!ML<53UG8@Z=)vg=KR z@&cO)6$G{rDhfPDs3fqJP+8!4LKT4*2-O8%B-9XiiEx6z%Y@njuMkcYc$J{t0v`|>3VcY=p7kRKKbZol9sO+OK6aQim6vTNoGY-yfgDqRJ2lzqFli>GJ|Q$0 z_>^#gz-I*QWvx39rNs9R?B5pHk+VbQr$59j6VxALmKo|#j^)tT+Utp*W5mS!mk`(6lE21? zlD~zx!InG}BTD`r;!0ccj~G$%&k$GHl7GdBl7EM|*p^KFsZ(w_%*8uUGAqPIwq!a+ zlq?Y95?iuhj3`+s#MQQB;TTb}NQi4}$)Yi$WU&xe*(4k;Dd8}=LK3H> z18Iy^b_#WDh$}6Y3URf?<3e0xv9!aat?Z->;VOZ$gmwbu2v-Y~CtM>?fpD!rMZ$Fg zl?c}hR3@|+s6x0wpeo@;fog=C1gaA{2-G0lY~V;kbK@l2l&D?Slsc-9(ADIgZjoKr zBHSu)JmEHh69^pzY7;sMoJhD`pbp^hu)XyfgV*$KLzunx_w}a5tG0PqAYY$^v z`ns6qUiS47n@c|2foy*`qhq<@aJKhyLN?X2_e(p3yx81$LqB%&;f&inw}iZMyByA~ zG0Qsuw;jf|)Ik?uW76_QQuWqSM2%9HqIJ zZ%aSoSdMbN9{gj6Gb;Fa$Q!iu6NfW)`Q+h@jXV{wc?Up_@)^grf;)QYQ9kR~RuF9K zo#R+a_tEI|bS$O8s7bHG88zu0^CEka^o?06*gs;e;J}d0DPlJ==rFeR9(*{Xf(i0;#;YRyRI-F5@a>#=;Ii?1@eV)lMY-C!<=x@P!hcmW4J!aX+jKdkF zXGW~`o^?2*^z4vLi`bgXi5T6&k)|U}k_XMuGWe*cBXgtunQEYR^Fm%}nh!ibWYc}x zN-qc*{Ulm-VaVv>z>5OjVcvwYyf|WQkR>4x(v2*QSvImPV%^B{kWK$#cex^DbS$Xg z%8-%V;8l*3`(;wGn(%YHWMBa*y2FyYW8h+^IXWLBeT3UVDt@^pAWgG9@z^4o0Ctr z{i5TfyVT(&!hHfS6Ydpw#evikd59K$HDJ7#XW0DGHrRG^>Fjs#TtE4K%RTXNSHE*o-m4-;?oK$w5{)YMPG3hWpOVpjYd zu2^pFP7JVb_WlyCSZ{VMw_1J;R_qvHUeU*H>Nl>?c}yRB+8zSix5SReQJ7ut7+A|4 zOf6FlyWv{ihJNQO@OPC>^Y*EQ2m2b_5cz{UvhA|`lOb4TLhvV6XtSsOGS7FK*P9m{ zhvz7JDC-QfSQ?A=^E&3nbSggwKhRzVrh`=3O!0F~@p5i4c}6~BRo=m&tmDo43YoV(a#k-uXHBj!UJ;@ayN5VVWRx9*A^v3!KJ;79nce=EIrxfO zeHadKXI4kE*w8H|)#Zb`jR-Xa8avpT^`v=0lg#4NX0a(2y#~T=&y5V9#A@bD4;3Gp zY91Nh|2!`;oJHqHhEMBX;4En%)oej%C~%CJR&b|Pk2n=2EwBPHv;Sq9v8TYB{c9I2pagC2~WyPZXrA+a4W!W^l1Y}8vdIm zy-kT9j(YgNjeB}VcHPm{MtkcZm9d6NmI{i)nDt;*IOtZeT zTYo64xmmm`vv|H)?BW)aY6z$Kt8M^|O;@+_P}VJ`Y<6bxM6-BLX0eW0yf?Gh!ffY0 zEb4Z;xm7j`Yncmh^W9AtYH6>^&23d+5*5T>SLqJZ)OUMncba+Vf42^PRKl!!35Cxp{%n_ zEso>*va-H3;VZKlQ=$yv3xTo(G?*z-j!;gvQJzpZ3Su*^sn-qNVrBy)FE6aa1x=tz{!Lg1x_J!5IB`^i@<4w+XPN0bP_m& zaEHK|gw6tI5xNMRP3S66mvE23IfVNJ>Jc6gs88r7(14H#G$cGM(1`GeKx4vV0!;`{ z2s9-;C2%g`8G&X1n~6Ool+6i)12Vj{X&4B9TyQa zJ6aMnJ1!<@cC;dBc3eWx>}XBU?6{Pm*>M>`v*U7tW=9)BCuyE52$~&N5;Qy75;Qxm zB4~EBBWQM9P0;MPhM?JTEkU#6I)Y}$^#sk1_5{t28wi>mHxe{EZX#%QbRcMU+zhbU z;jRZ99Ljpi#Qs*dnCRufZ4M4)J!95)#3CYZr?_9v!I;}AG7P%6J4>`@zk~3sB;B2a z9D&XRd--Ih@DAjnt~b8I)x}wIk_^*#JCH)XFn#PA8Ajyn$S@$^6B#Cg_eO?k-+iI= z#`f-y4BLAkGHma`$S{@Z7TG3a4>?N?$vKt~ei!IY_(R}f!k+>?2!9DYLik(YQ3C#$ zvf1rpge-x_32A{R2n7V5Boq{Qicm=4X+mLvX9z_M9BFhsCs}E-;l*;M)KQI&&vH*i zW!E``Vgfx0#RYm1juGfhC?U{?P*R{T;aGuwgi-?i3C9TxAe0suNGKyPh)`BwFrl2l z5JGu@p@a$o!w3}xh7&3Y|0^jObvjkQVW(%w)%n?{am@BZBFi&6|VZOk6!UBN}goOed35x_a z5f%$s0lLSXT={~O{)F(Nz^8+Dr2na25VVNEo5N3<CJyTdZLIkYDvjO%+H*>2^_Uif>v`(S!F`@{94aR=i-X#H}JH0sq$HkeWG^zvqt zM>XpGC)yeAzkL-MZnb?K8Qx3yCbY46#=Z@096m|(Uzj~$b8{k<#rH2t;JJE9&rkOJ z6wjM^-rV!^J-@*7ww|~1{5H>XJpbMER92>*1@K(!S;X@Oo;UV3JK^+j;(^=Q*BF^?aJ=FM0l& z=O59{H{uJLI<&!6fl1@k!Q5QjKh25}Q|WY!xQALGM%+a$7$Z*LLNVe_YT+1hFSSUF zxSLuuM%+&=79;Mc7LO74RF8=f^NSKO;=XFh7;$Iy*cfqdwN#9_yLw!VxW8IDM%-a7 z6C>`imW>ftPUT|6RY&<4Hyf-FBYpy-VvP9Zl1dSd$T3(sM%?4A5+nM^sxji?s9KD; z(_1}8TzA%p5f`2{W5oU5S~22|@9{C>LnkN1i1#jQ$B6fEPK*)nP1cDKZ%&>RBi@-g zIYzuac?z%*hNg7(R6KY6gXatA=0`~I+&k|^;ip!X$2h^@iWnyvTp8megR5ekY;bjq zQ;sy8)lW8=eqhv54`*xQy-hV$SR3OsgX?0%=(RpZ+!NRkBW4X7W5m2+Q;c|HX>*L2 z7i@_U^M~hR#9e@`F`|QfK1OtqFT{ur^2Hd@LB13tI>?t}LYcZmO zd_6{VkZ;6@4)V| z?gOBnaNF@*PsBewPZi4eDR{2s>w4bV^9SkXt`DAjC+pa8rX~-?h%-2e5od7s7;y$a z93#%)9x>t!ek4ZxF5IIr;zWBaMx1Dm$A}Z{i5RDwW_%K8o5j3Y92da(^>mClzn+N^ z=hw3_;{3{q5$9LW7;%2}iV^2m?-+4@^@$PZSKk=t;g`)%)eC(pZj zobJCL?S|2W1`a=nxp z>p;q&yBrtL>*!;~2lPfCLlZ(mS28gqbR?4;CH?ijr31NKnqvRh>J*}l@Kj6^r_yX= zp<9_ovX@#@Hen{5N3;RMOQ(~x945yz9405qk_xhqrDJlCGBFrKRy^}Lwp#XWE2d1KF;dfwdg^E|)6^Y)(K z;Q2Jq=X$=(^Ie|*;Q5c9|Lpnio>wcDIo_IhuI+HH=NEY1!t)%@*Ll9l^KG8L=Xt^6 znf(^RbKP$d&r5h-&hzq~SMt2F=Z!pX;(0UAFYx>_&)a!^ljog0&+~k%^COKd4U?@V zC-1Cqbhj$aeN%6TU%4HcME=F|)G?WcY=q~U$W1+O@A-|MclZ1;&qsPb!SgAe&-Z+p z=cy8z`do(R+E?V@c^fl~>20r-IKz9!h;zJGj5y1C$B5e>ePYBo(>F$R`u$==58pq= z{ssrch`xDXjJW+VC`NQVgJZ<)k0CMQ_Q%i|ar&%os5dofRV{VzXn!lyOds7`Ereh(UT@j2QFh z$B0Sbf*3L7S{NfHU5jGG)!X72arL$&MohDo#)zx8WijIFZF!8iJF+6i6{d?@3DmA^ zE1v6E@q_1wJU^vmrhHvIcVn98osP};vv{uC&+&YL=LiIO!7kIwR^RGNV==mYfQ)M&9RS?hhxC(h* z((_WDm-f7@=cjspn&;M-v{WW;5+h6DT=boo3 zWXiX~b1mP_^A4VO^89|!b3EVR`Bu;0@H|y9v)`(CuKTU-`5B(q^}My`sY;pcG{XbIh4BVvad0M$9p1$A~%RoEZBZsUK~eykz>(`W27v z+Q3W>;=N(=Ixj{{UgyV%$?Jj`F?n4WBPOqlV#MTiag3O}E{PG7*QGIH^13WWOkS7A zh{@}U7%_QW86zgIt763Db#;uGysn86lh?H|V)D8!MoeDU$B4=6h8Qt<-54V#ubX1T z5=M_D#qvFmY{_@s5${^x65}R=x5kJM$=wzs-plG3<8!7@>jc#EbP}Gs{^7xl zx50Dut2`gz`EbwkJm2N{9?uVY{=Mg^Zkhf5+CQ`3)PRhCG{p0v883$CTF-+^)sHk# zG)-PJ14V&KM|Vk(&i)ZQ(H;Kec4!*)56}Pf{BO@w%Q6+Oy*#s>dU&n@sqc9^&#(3T zde7T?-r4i6o_F*7j}@8yrZ#2vdoP~radq?jY0q;!ALx0m=Mz1j?0FuZ?=+pFX{%XY znbbR(I-G^)T8FxxxAwf9=P!Al+LqbQ&v>reNxhr#lkr^rRJu8J@VpH=YXVmFUdw_+Km0sonX%R-$w3{J&P>R_0Y_i z9Le)osYmh^p1VN4m+?#RTz#wOA9%jY^B+A=y`S064S25G>E!w2bn{X24@{XhCd$bb z=E2lHi=baEP80O2#RUlZ)#8E#{c3R`LVMY0VS;|OxClYNT3nQ%Uo9?1(61I3Cv=jH z9z(c8pah|_KuLmrwfI;7MCIDSBuLM^sB|?2>R9H@`OiZ zw-pHb)#8c-{c3R~f_}BQGC{vuT!o;Kt4h$wRU>HRsuMJFH3%BHngoqpEdnBUgrTQV z-Q*23^xS)tLy!4W~+N`NahXg3fvXg3lxXg3iwXdMU|w3`VUv|9)o zv|9-pwA%<8w2lM~S|@@A?RJ6&?GAzl?M{LQtusM`b{9c|)`g%!yPKdv>q^j|WfL@L z_YgE__YyQ{_YpK`_Y*W|4-oWpdyt@~TQ`D6?jeFkE+J^-x)U^V4-+(UJqQ}PM+h3Z zM+q9a#|Rp^#|av_CkPt3CkYz4rwAIkrwJOlX9ya(X9*g)9D+u!CqX0Ei=dI~P0+~o zAs})`8u!jg-YS?%y#7Kgs#3+KM#At%1#2A96#8`r+#5jVc#CU?H!~}w- z#6*Io#3X{I#AJd^iFEc9fcA}3xl+&LX#^WI^K%AX=^0#U!;{XQ>8+g2l^TdS1RIES z_FS*@e6G|cUqH|%Ur5j0iegVkt^*flFr`bt=!C&dUk9f=-KfcL4&fD zpl8SP1U)-mAn4igBEg0#o&6F(>-REOYLs3f=!x+vK~Id=2pX!_2^y+52pXz42^y-m z2pXz?5j0e96Esxs5HwWV2pXz)2^y;R2pX#Q2{u#(vOgebm-ZpS#;ZW~M+AG$m_ON0 z(4cK6XwY^LG-x{s8njOc8njOd8nn*{dVYOQ(DUox1dZG-f=2EOf=2F3f<`W%ppn~6 z(8%o}Xyo=1G;;e08oB)hjobl(M(#fZjoeoRMD9p~TD|0LGpIGIe6)kw*W8n)#5V*@ ziEjy-68|M=N*p9;N_MKO^Kfgni9VdG$no|XiEG>(3Cht z(3JR{pegYOK~v&Sf~Le@1Wk#*37QhA4^4m427%L*$RcP;qzRf51qhlF1qqrGg$VX! zPG=VeXs=a-D>Z0E2^zFw1Pxkof(=?a`xt<3uOwG$c#b7#cuEm8JjW39f<~q`K_hb_K~JYT1U;QjBIxOKGC|{Y3PIy_Dna9Q8bRZA zIzi)g20`O>CPCwM7C}#^vk7`S)g@@q&LL>f>Jc<(^$8lZ1_TXSLxKja5kXI<#soc` znh-Q{O$mBBoeR)7H{(hTT62O1?L2}8?RiH<8={1>y&&Uo0jquF` zjqoi5jqt4mjqq&*JtI33^o;C8&@=LOf}W9g5cG_^lb~m0XM$$KT?EaBE(Fbny9t^N zT?v{E*#ymodkA_)-b>Ik@;-u|k@picat{zRat{(Ta@`0TxrYcExrCsR>rT+fJxtKZ z^&n{E9wBJt9wlhx9wTVv9w%tzo*-!Co+N1Go+4=Eo+fDIo*`)Do+W7HatIo^o&=3t zFM>v{H$fxUhoF(`OVG&mBWUFM6Et!I2pYM81dZGvf<|sIK_fSWpphF&(8vuVXyk?y zG;+BFjob)=Ms6fQBR7hmksD3W$c-Ur5Jc34UIzb~hgP@U{Nzlm6B534h6Et#j2pYM$1dZH0f<|sWK_j<- zppjch(8w(!Xyg_XG;&J_8o8wejodPVMs7JlBe#N}ky}a7$gLu1_ja%%{P+>r*q z2FZH`Q>kOB9PP#2TJA|xVjV$KVm(1qVgo@_Vk1FQViQ4AVlzQgVhcf2;yHq*#8!f) z#PbAAi5Cc(5-$=oC0-(EO1wnQ{pv(ro`(6O^G)Mni6jkG$r05XiEHx zpegY-K~v%#f~Leaf}YIp5;St}5j1k|6Et!k5HxZh5;Srj5j1ii6Et$$2^zT_1dZHI zf=2EWf=2FBf=2E$f=2Fhf=2G&1dZG-f=2EOf=2F3f<`W%ppn~6(8%o}Xyo=1G;;e0 z8oB)hjobl(M(#fZjoeoRjojA+jodc`joh~cjog0;8o7f6jofzxjokMHjoc3ejogm} zjoeQJjoi-!jodE;johyUjofbpjocxEM(%flM(z)SM($67M(!_yM(%HdMlSV{xt3^y z-cuu&MbOBl2^zTq1dUulf<~?oK_gd~pph#=(8v`fXyl3!G;+lW8o6T#8o3e#ja*5B zM($XGMy?b=BX=A@BUhTBkt;*c$dx5%N_DStw1Zz&?nzUk8bMQ{IzdyS20>GzCP7o87C}?uc!H+H2?R}v+5}CB z6A79UbqJagClNFyP9|tdoI=o)IF+C&aT-BW;&g(h#2Exli8BeB5@!)KCC(;jO4KE2 zN}NN`l&DA0l&DY8lxRTEler;5BiD$ak!wuQ$TcBoa?J=Dx#k3o+<63z z-1!8J+yw-UTnmCm?m~h_?jnLlt|dVucQHXD*NUK#yM&;TYfaF|T}sf%T}IHzT~5%* zwIOKat{`aSt|VyW+7dK!R}nOF?FbsVs|gypYX};-YY7^;>j)aT>j@gU_5_XG4Frwc zjRcL{O$3cx2ZBcKW`aiU7J^3ZR)R+EHiAa3BS9nAiJ+0YouHAsgP@VSlc167Owh>P zMbOA~A!y|8CTQfk5;Stz1dZH11dZIi1dZH%1dZJN1dZGS1dZH-1dUubf=2Ekf<`VO zXym#RG;$9UG;%!%8o5UZ8o5Ua8o9>^8o9>_8o4J38o4J48o8$k8o8$l8o6f(h}@9| zzedSN1yiX{svPa$_bm6MDUn0al;}y&l;}m!l;};+l;}gyl;}&)l;}s$l;}^;lo&wJ zlo&|Rlo&+Nlo(9Vlo&$Llo(3Tlo&?Plo(FXl*lD$N{k?AN{l3EN{k|CN{l9GN{k_B zN{l6FN{l0DN{lDy$vlCek()@+$W0<>F0p-eSmpxbz;6#gHNQ+Ckzx=Kp3RIdPf*6u!vy3 zi-T<}CYUeb0G1Gj2`nWH7g$DkQeZhDS6~HUguqI|UUM#+y{saPloG26qXgCvMhmPZ zj1gEz7%Q-zpf%k<7$+q*62=Q`B1{n2OqeLJg)m9rIl^Rtt%NB8&pY@DzaseM0Q}&< z3(j2dUL2vD!h-V1@fSfmiN6UNxzxw*ZjVMTi=dH96Et!K2-+S62^zUV1dUu_f<~?gK_gd`pph#^ z(8v`hXylF|Xyi%|#!BQ$62=LXB50tFBWR#X6Esj|2pXue1PxR`a2z^enXyh6bG;&P{8o8zfjoi5eja)N=My@$QBX=G_ z+v9wKM(zTFMy>@xBX=P|BXIK%kB^ z_%%sBHD~3*qaOU)a8H^6R}eGdDfAj2iJ+9d3HNN z^Xv|S=GmPD&9lw~&9l1*+8$j9+G2MTw5DAN<0SF237UBK5VVK5m!NUEkD&Q+KSA^3 z0fOeog9Pm%x)C&T4-qtS2|***ouH9>n4ppCLD0xOLeR)PO3?OrjG&QwoS>0=f}oLm zlAw`$ilC8unxK(;hMYCWvdZW`btG7J_ELa|F$Rtpv@0=LwntFAy{XUL;C^izV?^fQ9i^mBsN^xp)n z=`MoS^b3O4^h<))G@qa~-A&M%?jdMR_Y$Zv?IB zA%fQQcY@aR4}#Y8PlDF;FM`(eZ-T9<`Lie6&DqrmXGS`E$WC{rrL!mDxq6=G(>-72 zdFtPp@-^{%p=`5`=cjv~+Lb9^1kbg6QO_%TUe)sxJg@C}9nVkl{B(MO?7Dc~#?&pD zlVy95a|m+<>JjD{IKr6JxNfq`j7d)(^_Wzjdzvr1Za`Qd(2%fDpb=q_Kx4vUfhL3{ z0!;}^1831PE9Yr=B^mlB>AxQy_Ez~zJ-`3qBR2yaM)UPI7ayq17mG%vZ1peb`bK~ttZK~v@if~L%k1WlQn2%0h-2%0iC z6EtORA!vr&O3)0sji3q9k)ZMKM9}!(PSE(@LD2Z$NznLrCTRTcB5aWs>q5|kxSQ~j zl;}#(=w=gUNQrw0vjy%Yyee=X;aSO{`w6e3L^}HcfOc}j@mxFCT+dTqWc*A#*Yb5e zKi~5fo?q^HThH5hp8I8H`%Cd$x4+f%L!STbc`83se%tQMb`IgWZfDoNjPJv9_5GfI z?fEyJ|JU<_p8xH6YJXlG=(!w#~CrgXOh@UJi8Y6zPv{;M_k2DsYlYD8$qWq&Ci;Bm4 z!*8J;6C-{LwM2~g8Nre<;-~YDjS)W^SSm(*BH*|f@mr{+W5jQvmWdI+g<3X7{1$4t z81Y-EHZ=qI+5x<36HAegvYPA^gTd37z#2*Z= z5#j6{gEeEsUo)r`Bi`;kKE~drTRH)#UC|YIuBTKx&pUX2o9CT8f9UJXc2?uLZYS%T zjGvF^*3GH;t$B`9GZ}93*3>SGkSmZTj1nk77z;>e7X;|`3UTFpDP5Q_L7)g>v_Mh9 zRDoiI1p>thvjmPI%oZp?m?KbgBss}s$Q69_gp(%H4W(kF7|JX9*3UB_E_GFRFxFn=}PTX`y1Y66@_ z&;&T0pb2mWK@;Fif+oOO1Wkam37PI{RF2Wizg{5l?3~_f}rSl^T|o-pbZosV#r0xAHQsv@M^` zzTB-m(x6u_*=Hi$ruxy|6l}x2+GwV;uW)-cIe8^lY9QMZG>}&jY#`Iw?Yx&?&6OI% zYX};{YrWFfaixu+`7J+hyp_*V@@gai7G9hRzy92Ze4|AoSk39%_K0ZRw^YKxFM))y+ zZtrof)Nc3*f_B4C60{qBim+Rv_cTDa_Y7C=k(JMSD|5I~$K{>`jdd@Aj?29Xc3d`p zg_B?dZhjPxpo4Qif)39837Q522$}{13ED#p0_Y(P=1T3BhY&Okh7vRlh7mLkh7&Xm zatWFSBM6!XBMCY#k0R)}Jer`nFovMHFqWXXFpi+(@_2%d%M%Ei5EBWS5R(Xc-cJT- zV@>Bujpz)5Msy}YXIitom(S)(4dxtz26HY!gE^0&!JJRfU@ib?{T6bi26GWXgSnWX z!CXSnU@j$SFqaWDn9B(o%oPL;=1PJFa}@!>Jkr2aKRIAZtUT(0X*KtxS+a(pS+bU( zS+b6xS+bs>S+aqkS+bF!S+WUWqma%%i067?@V)1$gBd>q&$WDA&qsTn=lN34mwUd| z^XEO^=J~sx|4cX64d0nM;FkFl>AGi_VLP2!J_pMMGRyU_Trjg-AIpU@%MGwxIJ4Xk z%SAHFjj&uav)mZV#WKrHuv|Q|-1H1H`8)>8wjIr7u3MK}DDM)LCR`*?hR{-=Ea75- za)ed_Rbd}4WvmES9Kl+48kh8I@2~yXsbHCqz4ne=>QjefJ ztWVIdxilc?*IXJB+MBwYN;e|t*IXJC^lL6n2)D>fniBMDF6REAxBd?qAw*QV^}0&MpA3n>D>F zS0-}OmUhs?6i)3~j6dL5CbZ#0jFk;6zc;?eQqEa&mu#%O1N#MvJ+tuV94k1pJJ>%L zcakeQOWu+fR&rnq?cRVp%asG$J3h}?mB9A(!F`dc&XQ@8Mb#Y0Aq~V|*{mMg793Iy zXHwgKC|A>&eeK?{xEot5uss9tS0;}SY~O0!J3PTz@`M~!Z3lK^`&ZyL_KAV*nTZ|L z2`v|QQBMkN?g*?*`vY-9{ak0Z+@7(xA>J&o1AT{@ld3sP zPpTGNUkvAG&gi|97s=3fVZ3Jdx`DFhqQll~7$R$0#%uO0(brrYui4jYy}YJXyk_sf zQL^Tec+I{^<77?ic+H-{Q)JDh@tVD3>}%55mtl<_bvu@_t+xd|$JL_!{$< z%JAHF&*|(go~M4u`1YUOKGNBr;<=Xp#`A-o|LJ+^mrVIb@mzb;Cq3Wk`7Y1D_WYpd z-+7+;HM9K^c&^(&&htw>Z|8Xj&pUZO!1G+smw3L+^A(<_e#_M7x@V6;&~f$Rww!)rSAw|88s>YJ>d(19|-y(r5_3UA*G)P<)w4_ znV=t1`h}n$Qu>vkA5!{_pdV5?1kj^NrP2)lt~utp^SK#6cWuU7;JKztjddBXh3D!s z-p=?kJXinXE9YjS@~e4{*0P=F?sa(UE-Ny;Z?krg>J2=LHj0wH*xs(!t z<&VT)nJ!6_Ll}=e9P2PyB3movK(^KwBl~fYVg6G(GQ100h9-L$jX#53mWW2mABpKh zxxn`H#e41Loh84RR~x9{poeU23}%%TiP+kne(2UKMP{dGf$iRi8C8|Q_Vin1tg5r* zbvgcO4rH(M`%g2asyj@&$|+I9fwat`Be_S zwgcJ0Ks4`(f#r|JWU7v{Z=pA!Nm|T97#kAJPE-4OV&2*) zusy>ui)|T^1G?tS4TMn7RbIJ+8I8{(jv5x=+iC?Z4_ph7lk%D*I3KY#$eujab#%7R-ujU zW308avs+1S+%WMeb&7Wp-yO&ezH+Q_i6>q5)JRo(TWO+`P~KD0bc{%?p3`FCSz zGjKB8M6(G!eH1#x4n&*KGqJ&&BSR;1OK7u@(6>5Eel}Y)aGL{Z0sEn>j-ky)GIgR! zO(r7iZjW#hJ}Pww(N=FRj^obI=1nrzIWmkKcZD{0ys<8!&7WiJ?!fXVEip5|t}r|Q zD3F~UtlzT;mvi?-hEMj~N0XzPi-PwP?Ex&si10vUsMv$fk};A^-5f|;E=8U{M3X%% z!YdP^>;au&_t2L0Gl%prOb@AtTc12A1J@%C?B4RHVs7(jV0)Hh8uOU5q?^3(aR*Y( zl{u!+6QQj@GCxU^s;@=zJw>!tUya6jnx+L2qGyOw5U19&k)dKWSF>Bf3R zhNSErSbiQp=hi2%J!>)e^bKtta<^Y(DAzx<^|+5RAh7)D*zZ7^J>VJr&@++%b$tC zWpZG9wqScxLVFHLIW;nL|I;GFyfiPcy}fY6(*w(&g<12A$S}{H=`2|#EkDbFw&^5H zrDqdyw0rH1$~mF+J>oo|aq^dG(Q9iS?cLwGZf7>Ad;1PCm73=)c}J=~pO7kKvuJ?> z8}_|@(FhBjC9CCCiyTOyei&jFM~2>DNn|(ymxk6K7c9%1C2M2{%LzjSRydG74#31@ zWn>sNR)scjim}z94MN7R32iVUwl=h(*vC4WoXU&PitCA{a;d#T&^K%dZ7@#njiC)i zzp^Q`Vdxq*hc+Bdw}mDG?KI%s&=w*V?*+D}A3E0eBf}-y2Z8OK zjFI!h&?ce-`6#gcy%rn$II!KrQQ_^*lHpR}9fWNHI~_<{PR2<1NoZ4Wf_)kp=J21< zq|JvT6+b7U&GQ$dE&m3NuZ)me{*6wqbd@g&~??BpQb}v)tKxlK2O8*IME+(g6g|+}^?AJ7Dr-^v+ zH$+?Gh3I>}4J>~drgHxcZ0{lj=paotI0IAL?}&DTi*ab*2bRAa&GJKFdl#eY{V}v9 zXsVx_B@?Ates&gaMhRk&A-35cNO}mEN96EIp8!QPoRJUX@S+~?FvSQ z{-jW7YmnQ8X>wSra8?x|+QVA4%2?6R)?vsi7TS7ry~P8|U$yc`w*;CbS!Q(Jc+^vY zW8BV?ccm#xIFP2;h>2WDnjGTB5eAPX+CyB6xl^goHsf%PqsfamqkT$8xCIGZhG@6= z94I?WcGH4q&|4WcdBZ?d^=s|nNVwp!u(0qAj#cb2>_hkk+s zIrM>;nbfAq-o_6wcp}m6Z4gGFI+0T8%{i&f1LkDqM zVEG#`s-GU%zF}y%GXl%sfD`Vl!1j$mHl7_B#?89Uk`JU^&T$~^G7?d!7uqPyB&g1~m?AUj$(OFoneUg$t7IJ-A4HZO`1 zLrlvE`(S=@ag2C*E22HV$><0!i45&BbTo>OM*zP_UT5fWdY>^jsa3C+7kMzGevf;*V zp~(@+W5e4@xMV#)840FrQf$biE z5&tflY;Xm7u`Wcr!Ie1S?hb7Cpgdz;1KYO}{b_b&h~Pb;t-?O;rOA%Bpw{;h?T%OD z#rFrcdkF3xJP_Evwdlki3~e2nt6OO65&nk)+dX8}ktPF8lLBTkP`lRA-WN!?GkcVC z?2ywv!hxv%!$ceHp*ZJz(B##FfsYVv8*RoQ@hD9S4ne>97||Bog0blF(4NDKpKz9J zH3bbk=|E1UIiqkYJr&_-#O7%tcCo)FlHwVf)MYHP;#r~;TxKkXW(&?7ik_+`5e0V- zN2PlOw!atp$ljs#>20h}V7qfMRQ3&Qe;+hVzrgk^z zHz-C7p@SVJf0~UN7~;V87yAcbJQ*6=7Ifjm0^2t<4#c;g;0Q$PnvUG&y`b zo0%QqY6Nmlge#HabBQ+XN2B1p!1j;AO{w{jAwmm68;v1(AxiL6j}x_*MqCe*z|FtDGgdrl5h< z4kS(!5X?1^;o5R-XcJ-UBEz(7eQ1+0E!hy-B;4uS=q%YT71`uKDl!?p+UC%v;Hb8Q zHWlw3JqOcKeQUUW8rt#s(DE?Ey%5;$akxx-F|hs9(cQk}Ea@q4I=t*adhfZm$zCC% z{rAtrt@>9ZL(lVCV7teo!+Slj{WCFUyb)ObNZjCflO{Pg1J|l=MK~LM#lMI)8z!Pt zemk^D7!%(KZ2tlr?>1-24hhV=gq;HK5qe9Dyzf9;WCddP0nxU|3dHWi&{p<5!qlKi z-K3D28Vs&=G*g4NW@jITJ6nb8q>n>ejmzZiG-=jNn2PQQF)t58$xfm@q_u;MeG=Ll z^va)xwibi&XEeK)yqU;`&xv+}8*z>LZ)eFT(%icoNbAlUhx7f57}0@$NyO$3^up%y zL+gzmWOrzNFx2g#+4{|!jO5x&v>WV$Cfpa=09?rJ4{b2A|3GBpjr}LIfoQC+LK}|r z@axcW(Sv_OlL{`yY4R=6R&XpL^54LA&%uii26kX9;{F{?HfWRKdm=WtdoIqV9|Ait z2~(jT1KYC(Q>LE+J1`mJ=g%~|llk`E$}bTP!2Iu5qTTa+wEu6B;R^mxU-!3C(|pEM~r5@Xq44wFw!Ndu`v{vF8!dFbo2X!1(?8SXR@yErft9eaVm zb}zyRS}?E!v#`NJq0Pa-Q#iD_xWp(D8TzuKf$d&8%vdp+RB#c_y5bI#&*adKabQQ8 z1Iu$vp%S63#2lw&V7pgh564D^Q?68C2Ug=Kj-%O{Ea;6FmnPb1ti)+kh9(93;PR<# zgah#EauM3uX?cgqAnAuIIIst|do_Yv(OEKB3RQ9-EwB;oSvj;#s7IB^aGhN>GVGw5 zvt)?upt=L;uNI8YF(Y&hpdF#jFaMx%9`iu?eJVb0K2Sq##33xrjnf|!OV6J z;yKD6Y2-L3DPl&BA8N_pYfR;&4yLclDpB}gDts(dI2mZR)b`YycNTv5@ow1<+?^mc z34)QB4WxD+)3M_tcO~7kAAF!=$DQV?_~D%ex<8yGgHa%DzC4w*$3tg4^uWVYc*w)U z%XoMT4{zh)T|B&xhY#_v9S=M4V19!um6%_%NhRi|Yf|`je=0E_MNcKAOk*as@K6sA zH{;<}Jlu|ld+_iS9&+*UG9LbghrM_>*&Iev4-Ze_p(h^t;$Z+D2H{~O9;V=71|HtR z!$7`=3u%@R#xHMg1Og^Z>j#ic^&LZ!@&+9D-&ZIJ?IxoBp&SV6N~JhOaEA+uZ}vs|*USw1$iT&jp!J}$Fd zx~N$$lUXiX%q*8n6*)HN?w;9wvcD@|ywGt6D`b`{9%Gg(WtJc^Vp8kyyqrOa}z%<}QandK8Q%e70J|$WR_1YXO>UPET3N9 zET55CKC^;ZJ}a|)c15#XH?w?BC9_;Fvs}NjS#FS7Zdk=EH_9wGu4WR{y&Gt1{@ zmYY>K%gr;(=hZOF=Vz8LsA-m4WM$yOtXf7c@}ymB zI^D>Pp4^mmhLH}Q+?;i$ky|{uHR~)Rw|UYr>ue*PJh?rqu8})Dxijk=Bj&9t?)|Q; zdPcfPwvlZWaI%)9?WWNq?;!XWi>I9c+x$qsgZ|0 z>5+A=kw-jvG^?4B$2@sFtGSUUJb5zfJR|0fHy+p1S?3#h#*=5WE-=y}ohfr+xnOf0Cn)_=Jb`I yTRgfo-4=A4M;*<(rG`3rbbGoT=njwWOkZv2y8_o{l}!Jb!edS`{Ab@&{r>=ps)MBf literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/codec.py b/venv/lib/python3.11/site-packages/pip/_vendor/idna/codec.py new file mode 100644 index 0000000..1ca9ba6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/idna/codec.py @@ -0,0 +1,112 @@ +from .core import encode, decode, alabel, ulabel, IDNAError +import codecs +import re +from typing import Tuple, Optional + +_unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]') + +class Codec(codecs.Codec): + + def encode(self, data: str, errors: str = 'strict') -> Tuple[bytes, int]: + if errors != 'strict': + raise IDNAError('Unsupported error handling \"{}\"'.format(errors)) + + if not data: + return b"", 0 + + return encode(data), len(data) + + def decode(self, data: bytes, errors: str = 'strict') -> Tuple[str, int]: + if errors != 'strict': + raise IDNAError('Unsupported error handling \"{}\"'.format(errors)) + + if not data: + return '', 0 + + return decode(data), len(data) + +class IncrementalEncoder(codecs.BufferedIncrementalEncoder): + def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[str, int]: # type: ignore + if errors != 'strict': + raise IDNAError('Unsupported error handling \"{}\"'.format(errors)) + + if not data: + return "", 0 + + labels = _unicode_dots_re.split(data) + trailing_dot = '' + 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_str = '.'.join(result) + trailing_dot # type: ignore + size += len(trailing_dot) + return result_str, size + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, data: str, errors: str, final: bool) -> Tuple[str, int]: # type: ignore + if errors != 'strict': + raise IDNAError('Unsupported error handling \"{}\"'.format(errors)) + + if not data: + return ('', 0) + + labels = _unicode_dots_re.split(data) + trailing_dot = '' + 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(ulabel(label)) + if size: + size += 1 + size += len(label) + + result_str = '.'.join(result) + trailing_dot + size += len(trailing_dot) + return (result_str, size) + + +class StreamWriter(Codec, codecs.StreamWriter): + pass + + +class StreamReader(Codec, codecs.StreamReader): + pass + + +def getregentry() -> codecs.CodecInfo: + # Compatibility as a search_function for codecs.register() + return codecs.CodecInfo( + name='idna', + encode=Codec().encode, # type: ignore + decode=Codec().decode, # type: ignore + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/compat.py b/venv/lib/python3.11/site-packages/pip/_vendor/idna/compat.py new file mode 100644 index 0000000..786e6bd --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/idna/compat.py @@ -0,0 +1,13 @@ +from .core import * +from .codec import * +from typing import Any, Union + +def ToASCII(label: str) -> bytes: + return encode(label) + +def ToUnicode(label: Union[bytes, bytearray]) -> str: + return decode(label) + +def nameprep(s: Any) -> None: + raise NotImplementedError('IDNA 2008 does not utilise nameprep protocol') + diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/core.py b/venv/lib/python3.11/site-packages/pip/_vendor/idna/core.py new file mode 100644 index 0000000..4f30037 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/idna/core.py @@ -0,0 +1,400 @@ +from . import idnadata +import bisect +import unicodedata +import re +from typing import Union, Optional +from .intranges import intranges_contain + +_virama_combining_class = 9 +_alabel_prefix = b'xn--' +_unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]') + +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: int) -> int: + v = unicodedata.combining(chr(cp)) + if v == 0: + if not unicodedata.name(chr(cp)): + raise ValueError('Unknown character in unicodedata') + return v + +def _is_script(cp: str, script: str) -> bool: + return intranges_contain(ord(cp), idnadata.scripts[script]) + +def _punycode(s: str) -> bytes: + return s.encode('punycode') + +def _unot(s: int) -> str: + return 'U+{:04X}'.format(s) + + +def valid_label_length(label: Union[bytes, str]) -> bool: + if len(label) > 63: + return False + return True + + +def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool: + if len(label) > (254 if trailing_dot else 253): + return False + return True + + +def check_bidi(label: str, check_ltr: bool = False) -> bool: + # 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 {} at position {}'.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 {} must be directionality L, R or AL'.format(repr(label))) + + valid_ending = False + number_type = None # type: Optional[str] + 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 {} 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 {} 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: str) -> bool: + if unicodedata.category(label[0])[0] == 'M': + raise IDNAError('Label begins with an illegal combining character') + return True + + +def check_hyphen_ok(label: str) -> bool: + 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: str) -> None: + if unicodedata.normalize('NFC', label) != label: + raise IDNAError('Label must be in Normalization Form C') + + +def valid_contextj(label: str, pos: int) -> bool: + 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: str, pos: int, exception: bool = False) -> bool: + 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 == '\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 + + return False + + +def check_label(label: Union[str, bytes, bytearray]) -> None: + 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 {} not allowed at position {} in {}'.format( + _unot(cp_value), pos+1, repr(label))) + except ValueError: + raise IDNAError('Unknown codepoint adjacent to joiner {} at position {} in {}'.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 {} not allowed at position {} in {}'.format(_unot(cp_value), pos+1, repr(label))) + else: + raise InvalidCodepoint('Codepoint {} at position {} of {} not allowed'.format(_unot(cp_value), pos+1, repr(label))) + + check_bidi(label) + + +def alabel(label: str) -> bytes: + try: + label_bytes = label.encode('ascii') + ulabel(label_bytes) + if not valid_label_length(label_bytes): + raise IDNAError('Label too long') + return label_bytes + except UnicodeEncodeError: + pass + + if not label: + raise IDNAError('No Input') + + label = str(label) + check_label(label) + label_bytes = _punycode(label) + label_bytes = _alabel_prefix + label_bytes + + if not valid_label_length(label_bytes): + raise IDNAError('Label too long') + + return label_bytes + + +def ulabel(label: Union[str, bytes, bytearray]) -> str: + if not isinstance(label, (bytes, bytearray)): + try: + label_bytes = label.encode('ascii') + except UnicodeEncodeError: + check_label(label) + return label + else: + label_bytes = label + + label_bytes = label_bytes.lower() + if label_bytes.startswith(_alabel_prefix): + label_bytes = label_bytes[len(_alabel_prefix):] + if not label_bytes: + raise IDNAError('Malformed A-label, no Punycode eligible content found') + if label_bytes.decode('ascii')[-1] == '-': + raise IDNAError('A-label must not end with a hyphen') + else: + check_label(label_bytes) + return label_bytes.decode('ascii') + + try: + label = label_bytes.decode('punycode') + except UnicodeError: + raise IDNAError('Invalid A-label') + check_label(label) + return label + + +def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str: + """Re-map the characters in the string according to UTS46 processing.""" + from .uts46data import uts46data + output = '' + + for pos, char in enumerate(domain): + code_point = ord(char) + try: + uts46row = uts46data[code_point if code_point < 256 else + bisect.bisect_left(uts46data, (code_point, 'Z')) - 1] + status = uts46row[1] + replacement = None # type: Optional[str] + if len(uts46row) == 3: + replacement = uts46row[2] # type: ignore + 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() + except IndexError: + raise InvalidCodepoint( + 'Codepoint {} not allowed at position {} in {}'.format( + _unot(code_point), pos + 1, repr(domain))) + + return unicodedata.normalize('NFC', output) + + +def encode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False, transitional: bool = False) -> bytes: + if isinstance(s, (bytes, bytearray)): + try: + s = s.decode('ascii') + except UnicodeDecodeError: + raise IDNAError('should pass a unicode string to the function rather than a byte string.') + 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: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False) -> str: + try: + if isinstance(s, (bytes, bytearray)): + s = s.decode('ascii') + except UnicodeDecodeError: + raise IDNAError('Invalid ASCII in A-label') + 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('.') + 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('') + return '.'.join(result) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py b/venv/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py new file mode 100644 index 0000000..67db462 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py @@ -0,0 +1,2151 @@ +# This file is automatically generated by tools/idna-data + +__version__ = '15.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, + 0x340000004dc0, + 0x4e000000a000, + 0xf9000000fa6e, + 0xfa700000fada, + 0x16fe200016fe4, + 0x16ff000016ff2, + 0x200000002a6e0, + 0x2a7000002b73a, + 0x2b7400002b81e, + 0x2b8200002cea2, + 0x2ceb00002ebe1, + 0x2f8000002fa1e, + 0x300000003134b, + 0x31350000323b0, + ), + 'Hebrew': ( + 0x591000005c8, + 0x5d0000005eb, + 0x5ef000005f5, + 0xfb1d0000fb37, + 0xfb380000fb3d, + 0xfb3e0000fb3f, + 0xfb400000fb42, + 0xfb430000fb45, + 0xfb460000fb50, + ), + 'Hiragana': ( + 0x304100003097, + 0x309d000030a0, + 0x1b0010001b120, + 0x1b1320001b133, + 0x1b1500001b153, + 0x1f2000001f201, + ), + 'Katakana': ( + 0x30a1000030fb, + 0x30fd00003100, + 0x31f000003200, + 0x32d0000032ff, + 0x330000003358, + 0xff660000ff70, + 0xff710000ff9e, + 0x1aff00001aff4, + 0x1aff50001affc, + 0x1affd0001afff, + 0x1b0000001b001, + 0x1b1200001b123, + 0x1b1550001b156, + 0x1b1640001b168, + ), +} +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, + 0x70f: 84, + 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: 82, + 0x857: 82, + 0x858: 82, + 0x860: 68, + 0x861: 85, + 0x862: 68, + 0x863: 68, + 0x864: 68, + 0x865: 68, + 0x866: 85, + 0x867: 82, + 0x868: 68, + 0x869: 82, + 0x86a: 82, + 0x870: 82, + 0x871: 82, + 0x872: 82, + 0x873: 82, + 0x874: 82, + 0x875: 82, + 0x876: 82, + 0x877: 82, + 0x878: 82, + 0x879: 82, + 0x87a: 82, + 0x87b: 82, + 0x87c: 82, + 0x87d: 82, + 0x87e: 82, + 0x87f: 82, + 0x880: 82, + 0x881: 82, + 0x882: 82, + 0x883: 67, + 0x884: 67, + 0x885: 67, + 0x886: 68, + 0x887: 85, + 0x888: 85, + 0x889: 68, + 0x88a: 68, + 0x88b: 68, + 0x88c: 68, + 0x88d: 68, + 0x88e: 82, + 0x890: 85, + 0x891: 85, + 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, + 0x8b5: 68, + 0x8b6: 68, + 0x8b7: 68, + 0x8b8: 68, + 0x8b9: 82, + 0x8ba: 68, + 0x8bb: 68, + 0x8bc: 68, + 0x8bd: 68, + 0x8be: 68, + 0x8bf: 68, + 0x8c0: 68, + 0x8c1: 68, + 0x8c2: 68, + 0x8c3: 68, + 0x8c4: 68, + 0x8c5: 68, + 0x8c6: 68, + 0x8c7: 68, + 0x8c8: 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, + 0x1878: 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, + 0x10d00: 76, + 0x10d01: 68, + 0x10d02: 68, + 0x10d03: 68, + 0x10d04: 68, + 0x10d05: 68, + 0x10d06: 68, + 0x10d07: 68, + 0x10d08: 68, + 0x10d09: 68, + 0x10d0a: 68, + 0x10d0b: 68, + 0x10d0c: 68, + 0x10d0d: 68, + 0x10d0e: 68, + 0x10d0f: 68, + 0x10d10: 68, + 0x10d11: 68, + 0x10d12: 68, + 0x10d13: 68, + 0x10d14: 68, + 0x10d15: 68, + 0x10d16: 68, + 0x10d17: 68, + 0x10d18: 68, + 0x10d19: 68, + 0x10d1a: 68, + 0x10d1b: 68, + 0x10d1c: 68, + 0x10d1d: 68, + 0x10d1e: 68, + 0x10d1f: 68, + 0x10d20: 68, + 0x10d21: 68, + 0x10d22: 82, + 0x10d23: 68, + 0x10f30: 68, + 0x10f31: 68, + 0x10f32: 68, + 0x10f33: 82, + 0x10f34: 68, + 0x10f35: 68, + 0x10f36: 68, + 0x10f37: 68, + 0x10f38: 68, + 0x10f39: 68, + 0x10f3a: 68, + 0x10f3b: 68, + 0x10f3c: 68, + 0x10f3d: 68, + 0x10f3e: 68, + 0x10f3f: 68, + 0x10f40: 68, + 0x10f41: 68, + 0x10f42: 68, + 0x10f43: 68, + 0x10f44: 68, + 0x10f45: 85, + 0x10f51: 68, + 0x10f52: 68, + 0x10f53: 68, + 0x10f54: 82, + 0x10f70: 68, + 0x10f71: 68, + 0x10f72: 68, + 0x10f73: 68, + 0x10f74: 82, + 0x10f75: 82, + 0x10f76: 68, + 0x10f77: 68, + 0x10f78: 68, + 0x10f79: 68, + 0x10f7a: 68, + 0x10f7b: 68, + 0x10f7c: 68, + 0x10f7d: 68, + 0x10f7e: 68, + 0x10f7f: 68, + 0x10f80: 68, + 0x10f81: 68, + 0x10fb0: 68, + 0x10fb1: 85, + 0x10fb2: 68, + 0x10fb3: 68, + 0x10fb4: 82, + 0x10fb5: 82, + 0x10fb6: 82, + 0x10fb7: 85, + 0x10fb8: 68, + 0x10fb9: 82, + 0x10fba: 82, + 0x10fbb: 68, + 0x10fbc: 68, + 0x10fbd: 82, + 0x10fbe: 68, + 0x10fbf: 68, + 0x10fc0: 85, + 0x10fc1: 68, + 0x10fc2: 82, + 0x10fc3: 82, + 0x10fc4: 68, + 0x10fc5: 85, + 0x10fc6: 85, + 0x10fc7: 85, + 0x10fc8: 85, + 0x10fc9: 82, + 0x10fca: 68, + 0x10fcb: 76, + 0x110bd: 85, + 0x110cd: 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, + 0x1e94b: 84, +} +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, + 0x56000000587, + 0x58800000589, + 0x591000005be, + 0x5bf000005c0, + 0x5c1000005c3, + 0x5c4000005c6, + 0x5c7000005c8, + 0x5d0000005eb, + 0x5ef000005f3, + 0x6100000061b, + 0x62000000640, + 0x64100000660, + 0x66e00000675, + 0x679000006d4, + 0x6d5000006dd, + 0x6df000006e9, + 0x6ea000006f0, + 0x6fa00000700, + 0x7100000074b, + 0x74d000007b2, + 0x7c0000007f6, + 0x7fd000007fe, + 0x8000000082e, + 0x8400000085c, + 0x8600000086b, + 0x87000000888, + 0x8890000088f, + 0x898000008e2, + 0x8e300000958, + 0x96000000964, + 0x96600000970, + 0x97100000984, + 0x9850000098d, + 0x98f00000991, + 0x993000009a9, + 0x9aa000009b1, + 0x9b2000009b3, + 0x9b6000009ba, + 0x9bc000009c5, + 0x9c7000009c9, + 0x9cb000009cf, + 0x9d7000009d8, + 0x9e0000009e4, + 0x9e6000009f2, + 0x9fc000009fd, + 0x9fe000009ff, + 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, + 0xb5500000b58, + 0xb5f00000b64, + 0xb6600000b70, + 0xb7100000b72, + 0xb8200000b84, + 0xb8500000b8b, + 0xb8e00000b91, + 0xb9200000b96, + 0xb9900000b9b, + 0xb9c00000b9d, + 0xb9e00000ba0, + 0xba300000ba5, + 0xba800000bab, + 0xbae00000bba, + 0xbbe00000bc3, + 0xbc600000bc9, + 0xbca00000bce, + 0xbd000000bd1, + 0xbd700000bd8, + 0xbe600000bf0, + 0xc0000000c0d, + 0xc0e00000c11, + 0xc1200000c29, + 0xc2a00000c3a, + 0xc3c00000c45, + 0xc4600000c49, + 0xc4a00000c4e, + 0xc5500000c57, + 0xc5800000c5b, + 0xc5d00000c5e, + 0xc6000000c64, + 0xc6600000c70, + 0xc8000000c84, + 0xc8500000c8d, + 0xc8e00000c91, + 0xc9200000ca9, + 0xcaa00000cb4, + 0xcb500000cba, + 0xcbc00000cc5, + 0xcc600000cc9, + 0xcca00000cce, + 0xcd500000cd7, + 0xcdd00000cdf, + 0xce000000ce4, + 0xce600000cf0, + 0xcf100000cf4, + 0xd0000000d0d, + 0xd0e00000d11, + 0xd1200000d45, + 0xd4600000d49, + 0xd4a00000d4f, + 0xd5400000d58, + 0xd5f00000d64, + 0xd6600000d70, + 0xd7a00000d80, + 0xd8100000d84, + 0xd8500000d97, + 0xd9a00000db2, + 0xdb300000dbc, + 0xdbd00000dbe, + 0xdc000000dc7, + 0xdca00000dcb, + 0xdcf00000dd5, + 0xdd600000dd7, + 0xdd800000de0, + 0xde600000df0, + 0xdf200000df4, + 0xe0100000e33, + 0xe3400000e3b, + 0xe4000000e4f, + 0xe5000000e5a, + 0xe8100000e83, + 0xe8400000e85, + 0xe8600000e8b, + 0xe8c00000ea4, + 0xea500000ea6, + 0xea700000eb3, + 0xeb400000ebe, + 0xec000000ec5, + 0xec600000ec7, + 0xec800000ecf, + 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, + 0x170000001716, + 0x171f00001735, + 0x174000001754, + 0x17600000176d, + 0x176e00001771, + 0x177200001774, + 0x1780000017b4, + 0x17b6000017d4, + 0x17d7000017d8, + 0x17dc000017de, + 0x17e0000017ea, + 0x18100000181a, + 0x182000001879, + 0x1880000018ab, + 0x18b0000018f6, + 0x19000000191f, + 0x19200000192c, + 0x19300000193c, + 0x19460000196e, + 0x197000001975, + 0x1980000019ac, + 0x19b0000019ca, + 0x19d0000019da, + 0x1a0000001a1c, + 0x1a2000001a5f, + 0x1a6000001a7d, + 0x1a7f00001a8a, + 0x1a9000001a9a, + 0x1aa700001aa8, + 0x1ab000001abe, + 0x1abf00001acf, + 0x1b0000001b4d, + 0x1b5000001b5a, + 0x1b6b00001b74, + 0x1b8000001bf4, + 0x1c0000001c38, + 0x1c4000001c4a, + 0x1c4d00001c7e, + 0x1cd000001cd3, + 0x1cd400001cfb, + 0x1d0000001d2c, + 0x1d2f00001d30, + 0x1d3b00001d3c, + 0x1d4e00001d4f, + 0x1d6b00001d78, + 0x1d7900001d9b, + 0x1dc000001e00, + 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, + 0x2c3000002c60, + 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, + 0x310500003130, + 0x31a0000031c0, + 0x31f000003200, + 0x340000004dc0, + 0x4e000000a48d, + 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, + 0xa7af0000a7b0, + 0xa7b50000a7b6, + 0xa7b70000a7b8, + 0xa7b90000a7ba, + 0xa7bb0000a7bc, + 0xa7bd0000a7be, + 0xa7bf0000a7c0, + 0xa7c10000a7c2, + 0xa7c30000a7c4, + 0xa7c80000a7c9, + 0xa7ca0000a7cb, + 0xa7d10000a7d2, + 0xa7d30000a7d4, + 0xa7d50000a7d6, + 0xa7d70000a7d8, + 0xa7d90000a7da, + 0xa7f20000a7f5, + 0xa7f60000a7f8, + 0xa7fa0000a828, + 0xa82c0000a82d, + 0xa8400000a874, + 0xa8800000a8c6, + 0xa8d00000a8da, + 0xa8e00000a8f8, + 0xa8fb0000a8fc, + 0xa8fd0000a92e, + 0xa9300000a954, + 0xa9800000a9c1, + 0xa9cf0000a9da, + 0xa9e00000a9ff, + 0xaa000000aa37, + 0xaa400000aa4e, + 0xaa500000aa5a, + 0xaa600000aa77, + 0xaa7a0000aac3, + 0xaadb0000aade, + 0xaae00000aaf0, + 0xaaf20000aaf7, + 0xab010000ab07, + 0xab090000ab0f, + 0xab110000ab17, + 0xab200000ab27, + 0xab280000ab2f, + 0xab300000ab5b, + 0xab600000ab69, + 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, + 0x10597000105a2, + 0x105a3000105b2, + 0x105b3000105ba, + 0x105bb000105bd, + 0x1060000010737, + 0x1074000010756, + 0x1076000010768, + 0x1078000010786, + 0x10787000107b1, + 0x107b2000107bb, + 0x1080000010806, + 0x1080800010809, + 0x1080a00010836, + 0x1083700010839, + 0x1083c0001083d, + 0x1083f00010856, + 0x1086000010877, + 0x108800001089f, + 0x108e0000108f3, + 0x108f4000108f6, + 0x1090000010916, + 0x109200001093a, + 0x10980000109b8, + 0x109be000109c0, + 0x10a0000010a04, + 0x10a0500010a07, + 0x10a0c00010a14, + 0x10a1500010a18, + 0x10a1900010a36, + 0x10a3800010a3b, + 0x10a3f00010a40, + 0x10a6000010a7d, + 0x10a8000010a9d, + 0x10ac000010ac8, + 0x10ac900010ae7, + 0x10b0000010b36, + 0x10b4000010b56, + 0x10b6000010b73, + 0x10b8000010b92, + 0x10c0000010c49, + 0x10cc000010cf3, + 0x10d0000010d28, + 0x10d3000010d3a, + 0x10e8000010eaa, + 0x10eab00010ead, + 0x10eb000010eb2, + 0x10efd00010f1d, + 0x10f2700010f28, + 0x10f3000010f51, + 0x10f7000010f86, + 0x10fb000010fc5, + 0x10fe000010ff7, + 0x1100000011047, + 0x1106600011076, + 0x1107f000110bb, + 0x110c2000110c3, + 0x110d0000110e9, + 0x110f0000110fa, + 0x1110000011135, + 0x1113600011140, + 0x1114400011148, + 0x1115000011174, + 0x1117600011177, + 0x11180000111c5, + 0x111c9000111cd, + 0x111ce000111db, + 0x111dc000111dd, + 0x1120000011212, + 0x1121300011238, + 0x1123e00011242, + 0x1128000011287, + 0x1128800011289, + 0x1128a0001128e, + 0x1128f0001129e, + 0x1129f000112a9, + 0x112b0000112eb, + 0x112f0000112fa, + 0x1130000011304, + 0x113050001130d, + 0x1130f00011311, + 0x1131300011329, + 0x1132a00011331, + 0x1133200011334, + 0x113350001133a, + 0x1133b00011345, + 0x1134700011349, + 0x1134b0001134e, + 0x1135000011351, + 0x1135700011358, + 0x1135d00011364, + 0x113660001136d, + 0x1137000011375, + 0x114000001144b, + 0x114500001145a, + 0x1145e00011462, + 0x11480000114c6, + 0x114c7000114c8, + 0x114d0000114da, + 0x11580000115b6, + 0x115b8000115c1, + 0x115d8000115de, + 0x1160000011641, + 0x1164400011645, + 0x116500001165a, + 0x11680000116b9, + 0x116c0000116ca, + 0x117000001171b, + 0x1171d0001172c, + 0x117300001173a, + 0x1174000011747, + 0x118000001183b, + 0x118c0000118ea, + 0x118ff00011907, + 0x119090001190a, + 0x1190c00011914, + 0x1191500011917, + 0x1191800011936, + 0x1193700011939, + 0x1193b00011944, + 0x119500001195a, + 0x119a0000119a8, + 0x119aa000119d8, + 0x119da000119e2, + 0x119e3000119e5, + 0x11a0000011a3f, + 0x11a4700011a48, + 0x11a5000011a9a, + 0x11a9d00011a9e, + 0x11ab000011af9, + 0x11c0000011c09, + 0x11c0a00011c37, + 0x11c3800011c41, + 0x11c5000011c5a, + 0x11c7200011c90, + 0x11c9200011ca8, + 0x11ca900011cb7, + 0x11d0000011d07, + 0x11d0800011d0a, + 0x11d0b00011d37, + 0x11d3a00011d3b, + 0x11d3c00011d3e, + 0x11d3f00011d48, + 0x11d5000011d5a, + 0x11d6000011d66, + 0x11d6700011d69, + 0x11d6a00011d8f, + 0x11d9000011d92, + 0x11d9300011d99, + 0x11da000011daa, + 0x11ee000011ef7, + 0x11f0000011f11, + 0x11f1200011f3b, + 0x11f3e00011f43, + 0x11f5000011f5a, + 0x11fb000011fb1, + 0x120000001239a, + 0x1248000012544, + 0x12f9000012ff1, + 0x1300000013430, + 0x1344000013456, + 0x1440000014647, + 0x1680000016a39, + 0x16a4000016a5f, + 0x16a6000016a6a, + 0x16a7000016abf, + 0x16ac000016aca, + 0x16ad000016aee, + 0x16af000016af5, + 0x16b0000016b37, + 0x16b4000016b44, + 0x16b5000016b5a, + 0x16b6300016b78, + 0x16b7d00016b90, + 0x16e6000016e80, + 0x16f0000016f4b, + 0x16f4f00016f88, + 0x16f8f00016fa0, + 0x16fe000016fe2, + 0x16fe300016fe5, + 0x16ff000016ff2, + 0x17000000187f8, + 0x1880000018cd6, + 0x18d0000018d09, + 0x1aff00001aff4, + 0x1aff50001affc, + 0x1affd0001afff, + 0x1b0000001b123, + 0x1b1320001b133, + 0x1b1500001b153, + 0x1b1550001b156, + 0x1b1640001b168, + 0x1b1700001b2fc, + 0x1bc000001bc6b, + 0x1bc700001bc7d, + 0x1bc800001bc89, + 0x1bc900001bc9a, + 0x1bc9d0001bc9f, + 0x1cf000001cf2e, + 0x1cf300001cf47, + 0x1da000001da37, + 0x1da3b0001da6d, + 0x1da750001da76, + 0x1da840001da85, + 0x1da9b0001daa0, + 0x1daa10001dab0, + 0x1df000001df1f, + 0x1df250001df2b, + 0x1e0000001e007, + 0x1e0080001e019, + 0x1e01b0001e022, + 0x1e0230001e025, + 0x1e0260001e02b, + 0x1e0300001e06e, + 0x1e08f0001e090, + 0x1e1000001e12d, + 0x1e1300001e13e, + 0x1e1400001e14a, + 0x1e14e0001e14f, + 0x1e2900001e2af, + 0x1e2c00001e2fa, + 0x1e4d00001e4fa, + 0x1e7e00001e7e7, + 0x1e7e80001e7ec, + 0x1e7ed0001e7ef, + 0x1e7f00001e7ff, + 0x1e8000001e8c5, + 0x1e8d00001e8d7, + 0x1e9220001e94c, + 0x1e9500001e95a, + 0x200000002a6e0, + 0x2a7000002b73a, + 0x2b7400002b81e, + 0x2b8200002cea2, + 0x2ceb00002ebe1, + 0x300000003134b, + 0x31350000323b0, + ), + 'CONTEXTJ': ( + 0x200c0000200e, + ), + 'CONTEXTO': ( + 0xb7000000b8, + 0x37500000376, + 0x5f3000005f5, + 0x6600000066a, + 0x6f0000006fa, + 0x30fb000030fc, + ), +} diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py b/venv/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py new file mode 100644 index 0000000..6a43b04 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py @@ -0,0 +1,54 @@ +""" +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 +from typing import List, Tuple + +def intranges_from_list(list_: List[int]) -> Tuple[int, ...]: + """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: int, end: int) -> int: + return (start << 32) | end + +def _decode_range(r: int) -> Tuple[int, int]: + return (r >> 32), (r & ((1 << 32) - 1)) + + +def intranges_contain(int_: int, ranges: Tuple[int, ...]) -> bool: + """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.11/site-packages/pip/_vendor/idna/package_data.py b/venv/lib/python3.11/site-packages/pip/_vendor/idna/package_data.py new file mode 100644 index 0000000..8501893 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/idna/package_data.py @@ -0,0 +1,2 @@ +__version__ = '3.4' + diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py b/venv/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py new file mode 100644 index 0000000..186796c --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py @@ -0,0 +1,8600 @@ +# This file is automatically generated by tools/idna-data +# vim: set fileencoding=utf-8 : + +from typing import List, Tuple, Union + + +"""IDNA Mapping Table from UTS46.""" + + +__version__ = '15.0.0' +def _seg_0() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + 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', 'a'), + (0x42, 'M', 'b'), + (0x43, 'M', 'c'), + (0x44, 'M', 'd'), + (0x45, 'M', 'e'), + (0x46, 'M', 'f'), + (0x47, 'M', 'g'), + (0x48, 'M', 'h'), + (0x49, 'M', 'i'), + (0x4A, 'M', 'j'), + (0x4B, 'M', 'k'), + (0x4C, 'M', 'l'), + (0x4D, 'M', 'm'), + (0x4E, 'M', 'n'), + (0x4F, 'M', 'o'), + (0x50, 'M', 'p'), + (0x51, 'M', 'q'), + (0x52, 'M', 'r'), + (0x53, 'M', 's'), + (0x54, 'M', 't'), + (0x55, 'M', 'u'), + (0x56, 'M', 'v'), + (0x57, 'M', 'w'), + (0x58, 'M', 'x'), + (0x59, 'M', 'y'), + (0x5A, 'M', 'z'), + (0x5B, '3'), + (0x5C, '3'), + (0x5D, '3'), + (0x5E, '3'), + (0x5F, '3'), + (0x60, '3'), + (0x61, 'V'), + (0x62, 'V'), + (0x63, 'V'), + ] + +def _seg_1() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + 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', ' '), + (0xA1, 'V'), + (0xA2, 'V'), + (0xA3, 'V'), + (0xA4, 'V'), + (0xA5, 'V'), + (0xA6, 'V'), + (0xA7, 'V'), + (0xA8, '3', ' ̈'), + (0xA9, 'V'), + (0xAA, 'M', 'a'), + (0xAB, 'V'), + (0xAC, 'V'), + (0xAD, 'I'), + (0xAE, 'V'), + (0xAF, '3', ' ̄'), + (0xB0, 'V'), + (0xB1, 'V'), + (0xB2, 'M', '2'), + (0xB3, 'M', '3'), + (0xB4, '3', ' ́'), + (0xB5, 'M', 'μ'), + (0xB6, 'V'), + (0xB7, 'V'), + (0xB8, '3', ' ̧'), + (0xB9, 'M', '1'), + (0xBA, 'M', 'o'), + (0xBB, 'V'), + (0xBC, 'M', '1⁄4'), + (0xBD, 'M', '1⁄2'), + (0xBE, 'M', '3⁄4'), + (0xBF, 'V'), + (0xC0, 'M', 'à'), + (0xC1, 'M', 'á'), + (0xC2, 'M', 'â'), + (0xC3, 'M', 'ã'), + (0xC4, 'M', 'ä'), + (0xC5, 'M', 'å'), + (0xC6, 'M', 'æ'), + (0xC7, 'M', 'ç'), + ] + +def _seg_2() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xC8, 'M', 'è'), + (0xC9, 'M', 'é'), + (0xCA, 'M', 'ê'), + (0xCB, 'M', 'ë'), + (0xCC, 'M', 'ì'), + (0xCD, 'M', 'í'), + (0xCE, 'M', 'î'), + (0xCF, 'M', 'ï'), + (0xD0, 'M', 'ð'), + (0xD1, 'M', 'ñ'), + (0xD2, 'M', 'ò'), + (0xD3, 'M', 'ó'), + (0xD4, 'M', 'ô'), + (0xD5, 'M', 'õ'), + (0xD6, 'M', 'ö'), + (0xD7, 'V'), + (0xD8, 'M', 'ø'), + (0xD9, 'M', 'ù'), + (0xDA, 'M', 'ú'), + (0xDB, 'M', 'û'), + (0xDC, 'M', 'ü'), + (0xDD, 'M', 'ý'), + (0xDE, 'M', 'þ'), + (0xDF, 'D', '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', 'ā'), + (0x101, 'V'), + (0x102, 'M', 'ă'), + (0x103, 'V'), + (0x104, 'M', 'ą'), + (0x105, 'V'), + (0x106, 'M', 'ć'), + (0x107, 'V'), + (0x108, 'M', 'ĉ'), + (0x109, 'V'), + (0x10A, 'M', 'ċ'), + (0x10B, 'V'), + (0x10C, 'M', 'č'), + (0x10D, 'V'), + (0x10E, 'M', 'ď'), + (0x10F, 'V'), + (0x110, 'M', 'đ'), + (0x111, 'V'), + (0x112, 'M', 'ē'), + (0x113, 'V'), + (0x114, 'M', 'ĕ'), + (0x115, 'V'), + (0x116, 'M', 'ė'), + (0x117, 'V'), + (0x118, 'M', 'ę'), + (0x119, 'V'), + (0x11A, 'M', 'ě'), + (0x11B, 'V'), + (0x11C, 'M', 'ĝ'), + (0x11D, 'V'), + (0x11E, 'M', 'ğ'), + (0x11F, 'V'), + (0x120, 'M', 'ġ'), + (0x121, 'V'), + (0x122, 'M', 'ģ'), + (0x123, 'V'), + (0x124, 'M', 'ĥ'), + (0x125, 'V'), + (0x126, 'M', 'ħ'), + (0x127, 'V'), + (0x128, 'M', 'ĩ'), + (0x129, 'V'), + (0x12A, 'M', 'ī'), + (0x12B, 'V'), + ] + +def _seg_3() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x12C, 'M', 'ĭ'), + (0x12D, 'V'), + (0x12E, 'M', 'į'), + (0x12F, 'V'), + (0x130, 'M', 'i̇'), + (0x131, 'V'), + (0x132, 'M', 'ij'), + (0x134, 'M', 'ĵ'), + (0x135, 'V'), + (0x136, 'M', 'ķ'), + (0x137, 'V'), + (0x139, 'M', 'ĺ'), + (0x13A, 'V'), + (0x13B, 'M', 'ļ'), + (0x13C, 'V'), + (0x13D, 'M', 'ľ'), + (0x13E, 'V'), + (0x13F, 'M', 'l·'), + (0x141, 'M', 'ł'), + (0x142, 'V'), + (0x143, 'M', 'ń'), + (0x144, 'V'), + (0x145, 'M', 'ņ'), + (0x146, 'V'), + (0x147, 'M', 'ň'), + (0x148, 'V'), + (0x149, 'M', 'ʼn'), + (0x14A, 'M', 'ŋ'), + (0x14B, 'V'), + (0x14C, 'M', 'ō'), + (0x14D, 'V'), + (0x14E, 'M', 'ŏ'), + (0x14F, 'V'), + (0x150, 'M', 'ő'), + (0x151, 'V'), + (0x152, 'M', 'œ'), + (0x153, 'V'), + (0x154, 'M', 'ŕ'), + (0x155, 'V'), + (0x156, 'M', 'ŗ'), + (0x157, 'V'), + (0x158, 'M', 'ř'), + (0x159, 'V'), + (0x15A, 'M', 'ś'), + (0x15B, 'V'), + (0x15C, 'M', 'ŝ'), + (0x15D, 'V'), + (0x15E, 'M', 'ş'), + (0x15F, 'V'), + (0x160, 'M', 'š'), + (0x161, 'V'), + (0x162, 'M', 'ţ'), + (0x163, 'V'), + (0x164, 'M', 'ť'), + (0x165, 'V'), + (0x166, 'M', 'ŧ'), + (0x167, 'V'), + (0x168, 'M', 'ũ'), + (0x169, 'V'), + (0x16A, 'M', 'ū'), + (0x16B, 'V'), + (0x16C, 'M', 'ŭ'), + (0x16D, 'V'), + (0x16E, 'M', 'ů'), + (0x16F, 'V'), + (0x170, 'M', 'ű'), + (0x171, 'V'), + (0x172, 'M', 'ų'), + (0x173, 'V'), + (0x174, 'M', 'ŵ'), + (0x175, 'V'), + (0x176, 'M', 'ŷ'), + (0x177, 'V'), + (0x178, 'M', 'ÿ'), + (0x179, 'M', 'ź'), + (0x17A, 'V'), + (0x17B, 'M', 'ż'), + (0x17C, 'V'), + (0x17D, 'M', 'ž'), + (0x17E, 'V'), + (0x17F, 'M', 's'), + (0x180, 'V'), + (0x181, 'M', 'ɓ'), + (0x182, 'M', 'ƃ'), + (0x183, 'V'), + (0x184, 'M', 'ƅ'), + (0x185, 'V'), + (0x186, 'M', 'ɔ'), + (0x187, 'M', 'ƈ'), + (0x188, 'V'), + (0x189, 'M', 'ɖ'), + (0x18A, 'M', 'ɗ'), + (0x18B, 'M', 'ƌ'), + (0x18C, 'V'), + (0x18E, 'M', 'ǝ'), + (0x18F, 'M', 'ə'), + (0x190, 'M', 'ɛ'), + (0x191, 'M', 'ƒ'), + (0x192, 'V'), + (0x193, 'M', 'ɠ'), + ] + +def _seg_4() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x194, 'M', 'ɣ'), + (0x195, 'V'), + (0x196, 'M', 'ɩ'), + (0x197, 'M', 'ɨ'), + (0x198, 'M', 'ƙ'), + (0x199, 'V'), + (0x19C, 'M', 'ɯ'), + (0x19D, 'M', 'ɲ'), + (0x19E, 'V'), + (0x19F, 'M', 'ɵ'), + (0x1A0, 'M', 'ơ'), + (0x1A1, 'V'), + (0x1A2, 'M', 'ƣ'), + (0x1A3, 'V'), + (0x1A4, 'M', 'ƥ'), + (0x1A5, 'V'), + (0x1A6, 'M', 'ʀ'), + (0x1A7, 'M', 'ƨ'), + (0x1A8, 'V'), + (0x1A9, 'M', 'ʃ'), + (0x1AA, 'V'), + (0x1AC, 'M', 'ƭ'), + (0x1AD, 'V'), + (0x1AE, 'M', 'ʈ'), + (0x1AF, 'M', 'ư'), + (0x1B0, 'V'), + (0x1B1, 'M', 'ʊ'), + (0x1B2, 'M', 'ʋ'), + (0x1B3, 'M', 'ƴ'), + (0x1B4, 'V'), + (0x1B5, 'M', 'ƶ'), + (0x1B6, 'V'), + (0x1B7, 'M', 'ʒ'), + (0x1B8, 'M', 'ƹ'), + (0x1B9, 'V'), + (0x1BC, 'M', 'ƽ'), + (0x1BD, 'V'), + (0x1C4, 'M', 'dž'), + (0x1C7, 'M', 'lj'), + (0x1CA, 'M', 'nj'), + (0x1CD, 'M', 'ǎ'), + (0x1CE, 'V'), + (0x1CF, 'M', 'ǐ'), + (0x1D0, 'V'), + (0x1D1, 'M', 'ǒ'), + (0x1D2, 'V'), + (0x1D3, 'M', 'ǔ'), + (0x1D4, 'V'), + (0x1D5, 'M', 'ǖ'), + (0x1D6, 'V'), + (0x1D7, 'M', 'ǘ'), + (0x1D8, 'V'), + (0x1D9, 'M', 'ǚ'), + (0x1DA, 'V'), + (0x1DB, 'M', 'ǜ'), + (0x1DC, 'V'), + (0x1DE, 'M', 'ǟ'), + (0x1DF, 'V'), + (0x1E0, 'M', 'ǡ'), + (0x1E1, 'V'), + (0x1E2, 'M', 'ǣ'), + (0x1E3, 'V'), + (0x1E4, 'M', 'ǥ'), + (0x1E5, 'V'), + (0x1E6, 'M', 'ǧ'), + (0x1E7, 'V'), + (0x1E8, 'M', 'ǩ'), + (0x1E9, 'V'), + (0x1EA, 'M', 'ǫ'), + (0x1EB, 'V'), + (0x1EC, 'M', 'ǭ'), + (0x1ED, 'V'), + (0x1EE, 'M', 'ǯ'), + (0x1EF, 'V'), + (0x1F1, 'M', 'dz'), + (0x1F4, 'M', 'ǵ'), + (0x1F5, 'V'), + (0x1F6, 'M', 'ƕ'), + (0x1F7, 'M', 'ƿ'), + (0x1F8, 'M', 'ǹ'), + (0x1F9, 'V'), + (0x1FA, 'M', 'ǻ'), + (0x1FB, 'V'), + (0x1FC, 'M', 'ǽ'), + (0x1FD, 'V'), + (0x1FE, 'M', 'ǿ'), + (0x1FF, 'V'), + (0x200, 'M', 'ȁ'), + (0x201, 'V'), + (0x202, 'M', 'ȃ'), + (0x203, 'V'), + (0x204, 'M', 'ȅ'), + (0x205, 'V'), + (0x206, 'M', 'ȇ'), + (0x207, 'V'), + (0x208, 'M', 'ȉ'), + (0x209, 'V'), + (0x20A, 'M', 'ȋ'), + (0x20B, 'V'), + (0x20C, 'M', 'ȍ'), + ] + +def _seg_5() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x20D, 'V'), + (0x20E, 'M', 'ȏ'), + (0x20F, 'V'), + (0x210, 'M', 'ȑ'), + (0x211, 'V'), + (0x212, 'M', 'ȓ'), + (0x213, 'V'), + (0x214, 'M', 'ȕ'), + (0x215, 'V'), + (0x216, 'M', 'ȗ'), + (0x217, 'V'), + (0x218, 'M', 'ș'), + (0x219, 'V'), + (0x21A, 'M', 'ț'), + (0x21B, 'V'), + (0x21C, 'M', 'ȝ'), + (0x21D, 'V'), + (0x21E, 'M', 'ȟ'), + (0x21F, 'V'), + (0x220, 'M', 'ƞ'), + (0x221, 'V'), + (0x222, 'M', 'ȣ'), + (0x223, 'V'), + (0x224, 'M', 'ȥ'), + (0x225, 'V'), + (0x226, 'M', 'ȧ'), + (0x227, 'V'), + (0x228, 'M', 'ȩ'), + (0x229, 'V'), + (0x22A, 'M', 'ȫ'), + (0x22B, 'V'), + (0x22C, 'M', 'ȭ'), + (0x22D, 'V'), + (0x22E, 'M', 'ȯ'), + (0x22F, 'V'), + (0x230, 'M', 'ȱ'), + (0x231, 'V'), + (0x232, 'M', 'ȳ'), + (0x233, 'V'), + (0x23A, 'M', 'ⱥ'), + (0x23B, 'M', 'ȼ'), + (0x23C, 'V'), + (0x23D, 'M', 'ƚ'), + (0x23E, 'M', 'ⱦ'), + (0x23F, 'V'), + (0x241, 'M', 'ɂ'), + (0x242, 'V'), + (0x243, 'M', 'ƀ'), + (0x244, 'M', 'ʉ'), + (0x245, 'M', 'ʌ'), + (0x246, 'M', 'ɇ'), + (0x247, 'V'), + (0x248, 'M', 'ɉ'), + (0x249, 'V'), + (0x24A, 'M', 'ɋ'), + (0x24B, 'V'), + (0x24C, 'M', 'ɍ'), + (0x24D, 'V'), + (0x24E, 'M', 'ɏ'), + (0x24F, 'V'), + (0x2B0, 'M', 'h'), + (0x2B1, 'M', 'ɦ'), + (0x2B2, 'M', 'j'), + (0x2B3, 'M', 'r'), + (0x2B4, 'M', 'ɹ'), + (0x2B5, 'M', 'ɻ'), + (0x2B6, 'M', 'ʁ'), + (0x2B7, 'M', 'w'), + (0x2B8, 'M', 'y'), + (0x2B9, 'V'), + (0x2D8, '3', ' ̆'), + (0x2D9, '3', ' ̇'), + (0x2DA, '3', ' ̊'), + (0x2DB, '3', ' ̨'), + (0x2DC, '3', ' ̃'), + (0x2DD, '3', ' ̋'), + (0x2DE, 'V'), + (0x2E0, 'M', 'ɣ'), + (0x2E1, 'M', 'l'), + (0x2E2, 'M', 's'), + (0x2E3, 'M', 'x'), + (0x2E4, 'M', 'ʕ'), + (0x2E5, 'V'), + (0x340, 'M', '̀'), + (0x341, 'M', '́'), + (0x342, 'V'), + (0x343, 'M', '̓'), + (0x344, 'M', '̈́'), + (0x345, 'M', 'ι'), + (0x346, 'V'), + (0x34F, 'I'), + (0x350, 'V'), + (0x370, 'M', 'ͱ'), + (0x371, 'V'), + (0x372, 'M', 'ͳ'), + (0x373, 'V'), + (0x374, 'M', 'ʹ'), + (0x375, 'V'), + (0x376, 'M', 'ͷ'), + (0x377, 'V'), + ] + +def _seg_6() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x378, 'X'), + (0x37A, '3', ' ι'), + (0x37B, 'V'), + (0x37E, '3', ';'), + (0x37F, 'M', 'ϳ'), + (0x380, 'X'), + (0x384, '3', ' ́'), + (0x385, '3', ' ̈́'), + (0x386, 'M', 'ά'), + (0x387, 'M', '·'), + (0x388, 'M', 'έ'), + (0x389, 'M', 'ή'), + (0x38A, 'M', 'ί'), + (0x38B, 'X'), + (0x38C, 'M', 'ό'), + (0x38D, 'X'), + (0x38E, 'M', 'ύ'), + (0x38F, 'M', 'ώ'), + (0x390, 'V'), + (0x391, 'M', 'α'), + (0x392, 'M', 'β'), + (0x393, 'M', 'γ'), + (0x394, 'M', 'δ'), + (0x395, 'M', 'ε'), + (0x396, 'M', 'ζ'), + (0x397, 'M', 'η'), + (0x398, 'M', 'θ'), + (0x399, 'M', 'ι'), + (0x39A, 'M', 'κ'), + (0x39B, 'M', 'λ'), + (0x39C, 'M', 'μ'), + (0x39D, 'M', 'ν'), + (0x39E, 'M', 'ξ'), + (0x39F, 'M', 'ο'), + (0x3A0, 'M', 'π'), + (0x3A1, 'M', 'ρ'), + (0x3A2, 'X'), + (0x3A3, 'M', 'σ'), + (0x3A4, 'M', 'τ'), + (0x3A5, 'M', 'υ'), + (0x3A6, 'M', 'φ'), + (0x3A7, 'M', 'χ'), + (0x3A8, 'M', 'ψ'), + (0x3A9, 'M', 'ω'), + (0x3AA, 'M', 'ϊ'), + (0x3AB, 'M', 'ϋ'), + (0x3AC, 'V'), + (0x3C2, 'D', 'σ'), + (0x3C3, 'V'), + (0x3CF, 'M', 'ϗ'), + (0x3D0, 'M', 'β'), + (0x3D1, 'M', 'θ'), + (0x3D2, 'M', 'υ'), + (0x3D3, 'M', 'ύ'), + (0x3D4, 'M', 'ϋ'), + (0x3D5, 'M', 'φ'), + (0x3D6, 'M', 'π'), + (0x3D7, 'V'), + (0x3D8, 'M', 'ϙ'), + (0x3D9, 'V'), + (0x3DA, 'M', 'ϛ'), + (0x3DB, 'V'), + (0x3DC, 'M', 'ϝ'), + (0x3DD, 'V'), + (0x3DE, 'M', 'ϟ'), + (0x3DF, 'V'), + (0x3E0, 'M', 'ϡ'), + (0x3E1, 'V'), + (0x3E2, 'M', 'ϣ'), + (0x3E3, 'V'), + (0x3E4, 'M', 'ϥ'), + (0x3E5, 'V'), + (0x3E6, 'M', 'ϧ'), + (0x3E7, 'V'), + (0x3E8, 'M', 'ϩ'), + (0x3E9, 'V'), + (0x3EA, 'M', 'ϫ'), + (0x3EB, 'V'), + (0x3EC, 'M', 'ϭ'), + (0x3ED, 'V'), + (0x3EE, 'M', 'ϯ'), + (0x3EF, 'V'), + (0x3F0, 'M', 'κ'), + (0x3F1, 'M', 'ρ'), + (0x3F2, 'M', 'σ'), + (0x3F3, 'V'), + (0x3F4, 'M', 'θ'), + (0x3F5, 'M', 'ε'), + (0x3F6, 'V'), + (0x3F7, 'M', 'ϸ'), + (0x3F8, 'V'), + (0x3F9, 'M', 'σ'), + (0x3FA, 'M', 'ϻ'), + (0x3FB, 'V'), + (0x3FD, 'M', 'ͻ'), + (0x3FE, 'M', 'ͼ'), + (0x3FF, 'M', 'ͽ'), + (0x400, 'M', 'ѐ'), + (0x401, 'M', 'ё'), + (0x402, 'M', 'ђ'), + ] + +def _seg_7() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x403, 'M', 'ѓ'), + (0x404, 'M', 'є'), + (0x405, 'M', 'ѕ'), + (0x406, 'M', 'і'), + (0x407, 'M', 'ї'), + (0x408, 'M', 'ј'), + (0x409, 'M', 'љ'), + (0x40A, 'M', 'њ'), + (0x40B, 'M', 'ћ'), + (0x40C, 'M', 'ќ'), + (0x40D, 'M', 'ѝ'), + (0x40E, 'M', 'ў'), + (0x40F, 'M', 'џ'), + (0x410, 'M', 'а'), + (0x411, 'M', 'б'), + (0x412, 'M', 'в'), + (0x413, 'M', 'г'), + (0x414, 'M', 'д'), + (0x415, 'M', 'е'), + (0x416, 'M', 'ж'), + (0x417, 'M', 'з'), + (0x418, 'M', 'и'), + (0x419, 'M', 'й'), + (0x41A, 'M', 'к'), + (0x41B, 'M', 'л'), + (0x41C, 'M', 'м'), + (0x41D, 'M', 'н'), + (0x41E, 'M', 'о'), + (0x41F, 'M', 'п'), + (0x420, 'M', 'р'), + (0x421, 'M', 'с'), + (0x422, 'M', 'т'), + (0x423, 'M', 'у'), + (0x424, 'M', 'ф'), + (0x425, 'M', 'х'), + (0x426, 'M', 'ц'), + (0x427, 'M', 'ч'), + (0x428, 'M', 'ш'), + (0x429, 'M', 'щ'), + (0x42A, 'M', 'ъ'), + (0x42B, 'M', 'ы'), + (0x42C, 'M', 'ь'), + (0x42D, 'M', 'э'), + (0x42E, 'M', 'ю'), + (0x42F, 'M', 'я'), + (0x430, 'V'), + (0x460, 'M', 'ѡ'), + (0x461, 'V'), + (0x462, 'M', 'ѣ'), + (0x463, 'V'), + (0x464, 'M', 'ѥ'), + (0x465, 'V'), + (0x466, 'M', 'ѧ'), + (0x467, 'V'), + (0x468, 'M', 'ѩ'), + (0x469, 'V'), + (0x46A, 'M', 'ѫ'), + (0x46B, 'V'), + (0x46C, 'M', 'ѭ'), + (0x46D, 'V'), + (0x46E, 'M', 'ѯ'), + (0x46F, 'V'), + (0x470, 'M', 'ѱ'), + (0x471, 'V'), + (0x472, 'M', 'ѳ'), + (0x473, 'V'), + (0x474, 'M', 'ѵ'), + (0x475, 'V'), + (0x476, 'M', 'ѷ'), + (0x477, 'V'), + (0x478, 'M', 'ѹ'), + (0x479, 'V'), + (0x47A, 'M', 'ѻ'), + (0x47B, 'V'), + (0x47C, 'M', 'ѽ'), + (0x47D, 'V'), + (0x47E, 'M', 'ѿ'), + (0x47F, 'V'), + (0x480, 'M', 'ҁ'), + (0x481, 'V'), + (0x48A, 'M', 'ҋ'), + (0x48B, 'V'), + (0x48C, 'M', 'ҍ'), + (0x48D, 'V'), + (0x48E, 'M', 'ҏ'), + (0x48F, 'V'), + (0x490, 'M', 'ґ'), + (0x491, 'V'), + (0x492, 'M', 'ғ'), + (0x493, 'V'), + (0x494, 'M', 'ҕ'), + (0x495, 'V'), + (0x496, 'M', 'җ'), + (0x497, 'V'), + (0x498, 'M', 'ҙ'), + (0x499, 'V'), + (0x49A, 'M', 'қ'), + (0x49B, 'V'), + (0x49C, 'M', 'ҝ'), + (0x49D, 'V'), + ] + +def _seg_8() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x49E, 'M', 'ҟ'), + (0x49F, 'V'), + (0x4A0, 'M', 'ҡ'), + (0x4A1, 'V'), + (0x4A2, 'M', 'ң'), + (0x4A3, 'V'), + (0x4A4, 'M', 'ҥ'), + (0x4A5, 'V'), + (0x4A6, 'M', 'ҧ'), + (0x4A7, 'V'), + (0x4A8, 'M', 'ҩ'), + (0x4A9, 'V'), + (0x4AA, 'M', 'ҫ'), + (0x4AB, 'V'), + (0x4AC, 'M', 'ҭ'), + (0x4AD, 'V'), + (0x4AE, 'M', 'ү'), + (0x4AF, 'V'), + (0x4B0, 'M', 'ұ'), + (0x4B1, 'V'), + (0x4B2, 'M', 'ҳ'), + (0x4B3, 'V'), + (0x4B4, 'M', 'ҵ'), + (0x4B5, 'V'), + (0x4B6, 'M', 'ҷ'), + (0x4B7, 'V'), + (0x4B8, 'M', 'ҹ'), + (0x4B9, 'V'), + (0x4BA, 'M', 'һ'), + (0x4BB, 'V'), + (0x4BC, 'M', 'ҽ'), + (0x4BD, 'V'), + (0x4BE, 'M', 'ҿ'), + (0x4BF, 'V'), + (0x4C0, 'X'), + (0x4C1, 'M', 'ӂ'), + (0x4C2, 'V'), + (0x4C3, 'M', 'ӄ'), + (0x4C4, 'V'), + (0x4C5, 'M', 'ӆ'), + (0x4C6, 'V'), + (0x4C7, 'M', 'ӈ'), + (0x4C8, 'V'), + (0x4C9, 'M', 'ӊ'), + (0x4CA, 'V'), + (0x4CB, 'M', 'ӌ'), + (0x4CC, 'V'), + (0x4CD, 'M', 'ӎ'), + (0x4CE, 'V'), + (0x4D0, 'M', 'ӑ'), + (0x4D1, 'V'), + (0x4D2, 'M', 'ӓ'), + (0x4D3, 'V'), + (0x4D4, 'M', 'ӕ'), + (0x4D5, 'V'), + (0x4D6, 'M', 'ӗ'), + (0x4D7, 'V'), + (0x4D8, 'M', 'ә'), + (0x4D9, 'V'), + (0x4DA, 'M', 'ӛ'), + (0x4DB, 'V'), + (0x4DC, 'M', 'ӝ'), + (0x4DD, 'V'), + (0x4DE, 'M', 'ӟ'), + (0x4DF, 'V'), + (0x4E0, 'M', 'ӡ'), + (0x4E1, 'V'), + (0x4E2, 'M', 'ӣ'), + (0x4E3, 'V'), + (0x4E4, 'M', 'ӥ'), + (0x4E5, 'V'), + (0x4E6, 'M', 'ӧ'), + (0x4E7, 'V'), + (0x4E8, 'M', 'ө'), + (0x4E9, 'V'), + (0x4EA, 'M', 'ӫ'), + (0x4EB, 'V'), + (0x4EC, 'M', 'ӭ'), + (0x4ED, 'V'), + (0x4EE, 'M', 'ӯ'), + (0x4EF, 'V'), + (0x4F0, 'M', 'ӱ'), + (0x4F1, 'V'), + (0x4F2, 'M', 'ӳ'), + (0x4F3, 'V'), + (0x4F4, 'M', 'ӵ'), + (0x4F5, 'V'), + (0x4F6, 'M', 'ӷ'), + (0x4F7, 'V'), + (0x4F8, 'M', 'ӹ'), + (0x4F9, 'V'), + (0x4FA, 'M', 'ӻ'), + (0x4FB, 'V'), + (0x4FC, 'M', 'ӽ'), + (0x4FD, 'V'), + (0x4FE, 'M', 'ӿ'), + (0x4FF, 'V'), + (0x500, 'M', 'ԁ'), + (0x501, 'V'), + (0x502, 'M', 'ԃ'), + ] + +def _seg_9() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x503, 'V'), + (0x504, 'M', 'ԅ'), + (0x505, 'V'), + (0x506, 'M', 'ԇ'), + (0x507, 'V'), + (0x508, 'M', 'ԉ'), + (0x509, 'V'), + (0x50A, 'M', 'ԋ'), + (0x50B, 'V'), + (0x50C, 'M', 'ԍ'), + (0x50D, 'V'), + (0x50E, 'M', 'ԏ'), + (0x50F, 'V'), + (0x510, 'M', 'ԑ'), + (0x511, 'V'), + (0x512, 'M', 'ԓ'), + (0x513, 'V'), + (0x514, 'M', 'ԕ'), + (0x515, 'V'), + (0x516, 'M', 'ԗ'), + (0x517, 'V'), + (0x518, 'M', 'ԙ'), + (0x519, 'V'), + (0x51A, 'M', 'ԛ'), + (0x51B, 'V'), + (0x51C, 'M', 'ԝ'), + (0x51D, 'V'), + (0x51E, 'M', 'ԟ'), + (0x51F, 'V'), + (0x520, 'M', 'ԡ'), + (0x521, 'V'), + (0x522, 'M', 'ԣ'), + (0x523, 'V'), + (0x524, 'M', 'ԥ'), + (0x525, 'V'), + (0x526, 'M', 'ԧ'), + (0x527, 'V'), + (0x528, 'M', 'ԩ'), + (0x529, 'V'), + (0x52A, 'M', 'ԫ'), + (0x52B, 'V'), + (0x52C, 'M', 'ԭ'), + (0x52D, 'V'), + (0x52E, 'M', 'ԯ'), + (0x52F, 'V'), + (0x530, 'X'), + (0x531, 'M', 'ա'), + (0x532, 'M', 'բ'), + (0x533, 'M', 'գ'), + (0x534, 'M', 'դ'), + (0x535, 'M', 'ե'), + (0x536, 'M', 'զ'), + (0x537, 'M', 'է'), + (0x538, 'M', 'ը'), + (0x539, 'M', 'թ'), + (0x53A, 'M', 'ժ'), + (0x53B, 'M', 'ի'), + (0x53C, 'M', 'լ'), + (0x53D, 'M', 'խ'), + (0x53E, 'M', 'ծ'), + (0x53F, 'M', 'կ'), + (0x540, 'M', 'հ'), + (0x541, 'M', 'ձ'), + (0x542, 'M', 'ղ'), + (0x543, 'M', 'ճ'), + (0x544, 'M', 'մ'), + (0x545, 'M', 'յ'), + (0x546, 'M', 'ն'), + (0x547, 'M', 'շ'), + (0x548, 'M', 'ո'), + (0x549, 'M', 'չ'), + (0x54A, 'M', 'պ'), + (0x54B, 'M', 'ջ'), + (0x54C, 'M', 'ռ'), + (0x54D, 'M', 'ս'), + (0x54E, 'M', 'վ'), + (0x54F, 'M', 'տ'), + (0x550, 'M', 'ր'), + (0x551, 'M', 'ց'), + (0x552, 'M', 'ւ'), + (0x553, 'M', 'փ'), + (0x554, 'M', 'ք'), + (0x555, 'M', 'օ'), + (0x556, 'M', 'ֆ'), + (0x557, 'X'), + (0x559, 'V'), + (0x587, 'M', 'եւ'), + (0x588, 'V'), + (0x58B, 'X'), + (0x58D, 'V'), + (0x590, 'X'), + (0x591, 'V'), + (0x5C8, 'X'), + (0x5D0, 'V'), + (0x5EB, 'X'), + (0x5EF, 'V'), + (0x5F5, 'X'), + (0x606, 'V'), + (0x61C, 'X'), + (0x61D, 'V'), + ] + +def _seg_10() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x675, 'M', 'اٴ'), + (0x676, 'M', 'وٴ'), + (0x677, 'M', 'ۇٴ'), + (0x678, 'M', 'يٴ'), + (0x679, 'V'), + (0x6DD, 'X'), + (0x6DE, 'V'), + (0x70E, 'X'), + (0x710, 'V'), + (0x74B, 'X'), + (0x74D, 'V'), + (0x7B2, 'X'), + (0x7C0, 'V'), + (0x7FB, 'X'), + (0x7FD, 'V'), + (0x82E, 'X'), + (0x830, 'V'), + (0x83F, 'X'), + (0x840, 'V'), + (0x85C, 'X'), + (0x85E, 'V'), + (0x85F, 'X'), + (0x860, 'V'), + (0x86B, 'X'), + (0x870, 'V'), + (0x88F, 'X'), + (0x898, 'V'), + (0x8E2, 'X'), + (0x8E3, 'V'), + (0x958, 'M', 'क़'), + (0x959, 'M', 'ख़'), + (0x95A, 'M', 'ग़'), + (0x95B, 'M', 'ज़'), + (0x95C, 'M', 'ड़'), + (0x95D, 'M', 'ढ़'), + (0x95E, 'M', 'फ़'), + (0x95F, 'M', 'य़'), + (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', 'ড়'), + (0x9DD, 'M', 'ঢ়'), + (0x9DE, 'X'), + (0x9DF, 'M', 'য়'), + (0x9E0, 'V'), + (0x9E4, 'X'), + (0x9E6, 'V'), + (0x9FF, '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', 'ਲ਼'), + (0xA34, 'X'), + (0xA35, 'V'), + (0xA36, 'M', 'ਸ਼'), + (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', 'ਖ਼'), + (0xA5A, 'M', 'ਗ਼'), + (0xA5B, 'M', 'ਜ਼'), + (0xA5C, 'V'), + (0xA5D, 'X'), + ] + +def _seg_11() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA5E, 'M', 'ਫ਼'), + (0xA5F, 'X'), + (0xA66, 'V'), + (0xA77, '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'), + (0xB55, 'V'), + (0xB58, 'X'), + (0xB5C, 'M', 'ଡ଼'), + (0xB5D, 'M', 'ଢ଼'), + (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'), + (0xC0D, 'X'), + (0xC0E, 'V'), + (0xC11, 'X'), + (0xC12, 'V'), + (0xC29, 'X'), + (0xC2A, 'V'), + ] + +def _seg_12() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xC3A, 'X'), + (0xC3C, 'V'), + (0xC45, 'X'), + (0xC46, 'V'), + (0xC49, 'X'), + (0xC4A, 'V'), + (0xC4E, 'X'), + (0xC55, 'V'), + (0xC57, 'X'), + (0xC58, 'V'), + (0xC5B, 'X'), + (0xC5D, 'V'), + (0xC5E, 'X'), + (0xC60, 'V'), + (0xC64, 'X'), + (0xC66, 'V'), + (0xC70, 'X'), + (0xC77, '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'), + (0xCDD, 'V'), + (0xCDF, 'X'), + (0xCE0, 'V'), + (0xCE4, 'X'), + (0xCE6, 'V'), + (0xCF0, 'X'), + (0xCF1, 'V'), + (0xCF4, 'X'), + (0xD00, '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'), + (0xD81, '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', 'ํา'), + (0xE34, 'V'), + (0xE3B, 'X'), + (0xE3F, 'V'), + (0xE5C, 'X'), + (0xE81, 'V'), + (0xE83, 'X'), + (0xE84, 'V'), + (0xE85, 'X'), + (0xE86, 'V'), + (0xE8B, 'X'), + (0xE8C, 'V'), + (0xEA4, 'X'), + (0xEA5, 'V'), + (0xEA6, 'X'), + (0xEA7, 'V'), + (0xEB3, 'M', 'ໍາ'), + (0xEB4, 'V'), + ] + +def _seg_13() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xEBE, 'X'), + (0xEC0, 'V'), + (0xEC5, 'X'), + (0xEC6, 'V'), + (0xEC7, 'X'), + (0xEC8, 'V'), + (0xECF, 'X'), + (0xED0, 'V'), + (0xEDA, 'X'), + (0xEDC, 'M', 'ຫນ'), + (0xEDD, 'M', 'ຫມ'), + (0xEDE, 'V'), + (0xEE0, 'X'), + (0xF00, 'V'), + (0xF0C, 'M', '་'), + (0xF0D, 'V'), + (0xF43, 'M', 'གྷ'), + (0xF44, 'V'), + (0xF48, 'X'), + (0xF49, 'V'), + (0xF4D, 'M', 'ཌྷ'), + (0xF4E, 'V'), + (0xF52, 'M', 'དྷ'), + (0xF53, 'V'), + (0xF57, 'M', 'བྷ'), + (0xF58, 'V'), + (0xF5C, 'M', 'ཛྷ'), + (0xF5D, 'V'), + (0xF69, 'M', 'ཀྵ'), + (0xF6A, 'V'), + (0xF6D, 'X'), + (0xF71, 'V'), + (0xF73, 'M', 'ཱི'), + (0xF74, 'V'), + (0xF75, 'M', 'ཱུ'), + (0xF76, 'M', 'ྲྀ'), + (0xF77, 'M', 'ྲཱྀ'), + (0xF78, 'M', 'ླྀ'), + (0xF79, 'M', 'ླཱྀ'), + (0xF7A, 'V'), + (0xF81, 'M', 'ཱྀ'), + (0xF82, 'V'), + (0xF93, 'M', 'ྒྷ'), + (0xF94, 'V'), + (0xF98, 'X'), + (0xF99, 'V'), + (0xF9D, 'M', 'ྜྷ'), + (0xF9E, 'V'), + (0xFA2, 'M', 'ྡྷ'), + (0xFA3, 'V'), + (0xFA7, 'M', 'ྦྷ'), + (0xFA8, 'V'), + (0xFAC, 'M', 'ྫྷ'), + (0xFAD, 'V'), + (0xFB9, 'M', 'ྐྵ'), + (0xFBA, 'V'), + (0xFBD, 'X'), + (0xFBE, 'V'), + (0xFCD, 'X'), + (0xFCE, 'V'), + (0xFDB, 'X'), + (0x1000, 'V'), + (0x10A0, 'X'), + (0x10C7, 'M', 'ⴧ'), + (0x10C8, 'X'), + (0x10CD, 'M', 'ⴭ'), + (0x10CE, 'X'), + (0x10D0, 'V'), + (0x10FC, 'M', 'ნ'), + (0x10FD, 'V'), + (0x115F, 'X'), + (0x1161, 'V'), + (0x1249, 'X'), + (0x124A, 'V'), + (0x124E, 'X'), + (0x1250, 'V'), + (0x1257, 'X'), + (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'), + ] + +def _seg_14() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1316, 'X'), + (0x1318, 'V'), + (0x135B, 'X'), + (0x135D, 'V'), + (0x137D, 'X'), + (0x1380, 'V'), + (0x139A, 'X'), + (0x13A0, 'V'), + (0x13F6, 'X'), + (0x13F8, 'M', 'Ᏸ'), + (0x13F9, 'M', 'Ᏹ'), + (0x13FA, 'M', 'Ᏺ'), + (0x13FB, 'M', 'Ᏻ'), + (0x13FC, 'M', 'Ᏼ'), + (0x13FD, 'M', 'Ᏽ'), + (0x13FE, 'X'), + (0x1400, 'V'), + (0x1680, 'X'), + (0x1681, 'V'), + (0x169D, 'X'), + (0x16A0, 'V'), + (0x16F9, 'X'), + (0x1700, 'V'), + (0x1716, 'X'), + (0x171F, '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'), + (0x180F, 'I'), + (0x1810, 'V'), + (0x181A, 'X'), + (0x1820, 'V'), + (0x1879, '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'), + (0x1A1E, 'V'), + (0x1A5F, 'X'), + (0x1A60, 'V'), + (0x1A7D, 'X'), + (0x1A7F, 'V'), + (0x1A8A, 'X'), + (0x1A90, 'V'), + (0x1A9A, 'X'), + (0x1AA0, 'V'), + (0x1AAE, 'X'), + (0x1AB0, 'V'), + (0x1ACF, 'X'), + (0x1B00, 'V'), + (0x1B4D, 'X'), + (0x1B50, 'V'), + (0x1B7F, 'X'), + (0x1B80, 'V'), + (0x1BF4, 'X'), + (0x1BFC, 'V'), + (0x1C38, 'X'), + (0x1C3B, 'V'), + (0x1C4A, 'X'), + (0x1C4D, 'V'), + (0x1C80, 'M', 'в'), + ] + +def _seg_15() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1C81, 'M', 'д'), + (0x1C82, 'M', 'о'), + (0x1C83, 'M', 'с'), + (0x1C84, 'M', 'т'), + (0x1C86, 'M', 'ъ'), + (0x1C87, 'M', 'ѣ'), + (0x1C88, 'M', 'ꙋ'), + (0x1C89, 'X'), + (0x1C90, 'M', 'ა'), + (0x1C91, 'M', 'ბ'), + (0x1C92, 'M', 'გ'), + (0x1C93, 'M', 'დ'), + (0x1C94, 'M', 'ე'), + (0x1C95, 'M', 'ვ'), + (0x1C96, 'M', 'ზ'), + (0x1C97, 'M', 'თ'), + (0x1C98, 'M', 'ი'), + (0x1C99, 'M', 'კ'), + (0x1C9A, 'M', 'ლ'), + (0x1C9B, 'M', 'მ'), + (0x1C9C, 'M', 'ნ'), + (0x1C9D, 'M', 'ო'), + (0x1C9E, 'M', 'პ'), + (0x1C9F, 'M', 'ჟ'), + (0x1CA0, 'M', 'რ'), + (0x1CA1, 'M', 'ს'), + (0x1CA2, 'M', 'ტ'), + (0x1CA3, 'M', 'უ'), + (0x1CA4, 'M', 'ფ'), + (0x1CA5, 'M', 'ქ'), + (0x1CA6, 'M', 'ღ'), + (0x1CA7, 'M', 'ყ'), + (0x1CA8, 'M', 'შ'), + (0x1CA9, 'M', 'ჩ'), + (0x1CAA, 'M', 'ც'), + (0x1CAB, 'M', 'ძ'), + (0x1CAC, 'M', 'წ'), + (0x1CAD, 'M', 'ჭ'), + (0x1CAE, 'M', 'ხ'), + (0x1CAF, 'M', 'ჯ'), + (0x1CB0, 'M', 'ჰ'), + (0x1CB1, 'M', 'ჱ'), + (0x1CB2, 'M', 'ჲ'), + (0x1CB3, 'M', 'ჳ'), + (0x1CB4, 'M', 'ჴ'), + (0x1CB5, 'M', 'ჵ'), + (0x1CB6, 'M', 'ჶ'), + (0x1CB7, 'M', 'ჷ'), + (0x1CB8, 'M', 'ჸ'), + (0x1CB9, 'M', 'ჹ'), + (0x1CBA, 'M', 'ჺ'), + (0x1CBB, 'X'), + (0x1CBD, 'M', 'ჽ'), + (0x1CBE, 'M', 'ჾ'), + (0x1CBF, 'M', 'ჿ'), + (0x1CC0, 'V'), + (0x1CC8, 'X'), + (0x1CD0, 'V'), + (0x1CFB, 'X'), + (0x1D00, 'V'), + (0x1D2C, 'M', 'a'), + (0x1D2D, 'M', 'æ'), + (0x1D2E, 'M', 'b'), + (0x1D2F, 'V'), + (0x1D30, 'M', 'd'), + (0x1D31, 'M', 'e'), + (0x1D32, 'M', 'ǝ'), + (0x1D33, 'M', 'g'), + (0x1D34, 'M', 'h'), + (0x1D35, 'M', 'i'), + (0x1D36, 'M', 'j'), + (0x1D37, 'M', 'k'), + (0x1D38, 'M', 'l'), + (0x1D39, 'M', 'm'), + (0x1D3A, 'M', 'n'), + (0x1D3B, 'V'), + (0x1D3C, 'M', 'o'), + (0x1D3D, 'M', 'ȣ'), + (0x1D3E, 'M', 'p'), + (0x1D3F, 'M', 'r'), + (0x1D40, 'M', 't'), + (0x1D41, 'M', 'u'), + (0x1D42, 'M', 'w'), + (0x1D43, 'M', 'a'), + (0x1D44, 'M', 'ɐ'), + (0x1D45, 'M', 'ɑ'), + (0x1D46, 'M', 'ᴂ'), + (0x1D47, 'M', 'b'), + (0x1D48, 'M', 'd'), + (0x1D49, 'M', 'e'), + (0x1D4A, 'M', 'ə'), + (0x1D4B, 'M', 'ɛ'), + (0x1D4C, 'M', 'ɜ'), + (0x1D4D, 'M', 'g'), + (0x1D4E, 'V'), + (0x1D4F, 'M', 'k'), + (0x1D50, 'M', 'm'), + (0x1D51, 'M', 'ŋ'), + (0x1D52, 'M', 'o'), + (0x1D53, 'M', 'ɔ'), + ] + +def _seg_16() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D54, 'M', 'ᴖ'), + (0x1D55, 'M', 'ᴗ'), + (0x1D56, 'M', 'p'), + (0x1D57, 'M', 't'), + (0x1D58, 'M', 'u'), + (0x1D59, 'M', 'ᴝ'), + (0x1D5A, 'M', 'ɯ'), + (0x1D5B, 'M', 'v'), + (0x1D5C, 'M', 'ᴥ'), + (0x1D5D, 'M', 'β'), + (0x1D5E, 'M', 'γ'), + (0x1D5F, 'M', 'δ'), + (0x1D60, 'M', 'φ'), + (0x1D61, 'M', 'χ'), + (0x1D62, 'M', 'i'), + (0x1D63, 'M', 'r'), + (0x1D64, 'M', 'u'), + (0x1D65, 'M', 'v'), + (0x1D66, 'M', 'β'), + (0x1D67, 'M', 'γ'), + (0x1D68, 'M', 'ρ'), + (0x1D69, 'M', 'φ'), + (0x1D6A, 'M', 'χ'), + (0x1D6B, 'V'), + (0x1D78, 'M', 'н'), + (0x1D79, 'V'), + (0x1D9B, 'M', 'ɒ'), + (0x1D9C, 'M', 'c'), + (0x1D9D, 'M', 'ɕ'), + (0x1D9E, 'M', 'ð'), + (0x1D9F, 'M', 'ɜ'), + (0x1DA0, 'M', 'f'), + (0x1DA1, 'M', 'ɟ'), + (0x1DA2, 'M', 'ɡ'), + (0x1DA3, 'M', 'ɥ'), + (0x1DA4, 'M', 'ɨ'), + (0x1DA5, 'M', 'ɩ'), + (0x1DA6, 'M', 'ɪ'), + (0x1DA7, 'M', 'ᵻ'), + (0x1DA8, 'M', 'ʝ'), + (0x1DA9, 'M', 'ɭ'), + (0x1DAA, 'M', 'ᶅ'), + (0x1DAB, 'M', 'ʟ'), + (0x1DAC, 'M', 'ɱ'), + (0x1DAD, 'M', 'ɰ'), + (0x1DAE, 'M', 'ɲ'), + (0x1DAF, 'M', 'ɳ'), + (0x1DB0, 'M', 'ɴ'), + (0x1DB1, 'M', 'ɵ'), + (0x1DB2, 'M', 'ɸ'), + (0x1DB3, 'M', 'ʂ'), + (0x1DB4, 'M', 'ʃ'), + (0x1DB5, 'M', 'ƫ'), + (0x1DB6, 'M', 'ʉ'), + (0x1DB7, 'M', 'ʊ'), + (0x1DB8, 'M', 'ᴜ'), + (0x1DB9, 'M', 'ʋ'), + (0x1DBA, 'M', 'ʌ'), + (0x1DBB, 'M', 'z'), + (0x1DBC, 'M', 'ʐ'), + (0x1DBD, 'M', 'ʑ'), + (0x1DBE, 'M', 'ʒ'), + (0x1DBF, 'M', 'θ'), + (0x1DC0, 'V'), + (0x1E00, 'M', 'ḁ'), + (0x1E01, 'V'), + (0x1E02, 'M', 'ḃ'), + (0x1E03, 'V'), + (0x1E04, 'M', 'ḅ'), + (0x1E05, 'V'), + (0x1E06, 'M', 'ḇ'), + (0x1E07, 'V'), + (0x1E08, 'M', 'ḉ'), + (0x1E09, 'V'), + (0x1E0A, 'M', 'ḋ'), + (0x1E0B, 'V'), + (0x1E0C, 'M', 'ḍ'), + (0x1E0D, 'V'), + (0x1E0E, 'M', 'ḏ'), + (0x1E0F, 'V'), + (0x1E10, 'M', 'ḑ'), + (0x1E11, 'V'), + (0x1E12, 'M', 'ḓ'), + (0x1E13, 'V'), + (0x1E14, 'M', 'ḕ'), + (0x1E15, 'V'), + (0x1E16, 'M', 'ḗ'), + (0x1E17, 'V'), + (0x1E18, 'M', 'ḙ'), + (0x1E19, 'V'), + (0x1E1A, 'M', 'ḛ'), + (0x1E1B, 'V'), + (0x1E1C, 'M', 'ḝ'), + (0x1E1D, 'V'), + (0x1E1E, 'M', 'ḟ'), + (0x1E1F, 'V'), + (0x1E20, 'M', 'ḡ'), + (0x1E21, 'V'), + (0x1E22, 'M', 'ḣ'), + (0x1E23, 'V'), + ] + +def _seg_17() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E24, 'M', 'ḥ'), + (0x1E25, 'V'), + (0x1E26, 'M', 'ḧ'), + (0x1E27, 'V'), + (0x1E28, 'M', 'ḩ'), + (0x1E29, 'V'), + (0x1E2A, 'M', 'ḫ'), + (0x1E2B, 'V'), + (0x1E2C, 'M', 'ḭ'), + (0x1E2D, 'V'), + (0x1E2E, 'M', 'ḯ'), + (0x1E2F, 'V'), + (0x1E30, 'M', 'ḱ'), + (0x1E31, 'V'), + (0x1E32, 'M', 'ḳ'), + (0x1E33, 'V'), + (0x1E34, 'M', 'ḵ'), + (0x1E35, 'V'), + (0x1E36, 'M', 'ḷ'), + (0x1E37, 'V'), + (0x1E38, 'M', 'ḹ'), + (0x1E39, 'V'), + (0x1E3A, 'M', 'ḻ'), + (0x1E3B, 'V'), + (0x1E3C, 'M', 'ḽ'), + (0x1E3D, 'V'), + (0x1E3E, 'M', 'ḿ'), + (0x1E3F, 'V'), + (0x1E40, 'M', 'ṁ'), + (0x1E41, 'V'), + (0x1E42, 'M', 'ṃ'), + (0x1E43, 'V'), + (0x1E44, 'M', 'ṅ'), + (0x1E45, 'V'), + (0x1E46, 'M', 'ṇ'), + (0x1E47, 'V'), + (0x1E48, 'M', 'ṉ'), + (0x1E49, 'V'), + (0x1E4A, 'M', 'ṋ'), + (0x1E4B, 'V'), + (0x1E4C, 'M', 'ṍ'), + (0x1E4D, 'V'), + (0x1E4E, 'M', 'ṏ'), + (0x1E4F, 'V'), + (0x1E50, 'M', 'ṑ'), + (0x1E51, 'V'), + (0x1E52, 'M', 'ṓ'), + (0x1E53, 'V'), + (0x1E54, 'M', 'ṕ'), + (0x1E55, 'V'), + (0x1E56, 'M', 'ṗ'), + (0x1E57, 'V'), + (0x1E58, 'M', 'ṙ'), + (0x1E59, 'V'), + (0x1E5A, 'M', 'ṛ'), + (0x1E5B, 'V'), + (0x1E5C, 'M', 'ṝ'), + (0x1E5D, 'V'), + (0x1E5E, 'M', 'ṟ'), + (0x1E5F, 'V'), + (0x1E60, 'M', 'ṡ'), + (0x1E61, 'V'), + (0x1E62, 'M', 'ṣ'), + (0x1E63, 'V'), + (0x1E64, 'M', 'ṥ'), + (0x1E65, 'V'), + (0x1E66, 'M', 'ṧ'), + (0x1E67, 'V'), + (0x1E68, 'M', 'ṩ'), + (0x1E69, 'V'), + (0x1E6A, 'M', 'ṫ'), + (0x1E6B, 'V'), + (0x1E6C, 'M', 'ṭ'), + (0x1E6D, 'V'), + (0x1E6E, 'M', 'ṯ'), + (0x1E6F, 'V'), + (0x1E70, 'M', 'ṱ'), + (0x1E71, 'V'), + (0x1E72, 'M', 'ṳ'), + (0x1E73, 'V'), + (0x1E74, 'M', 'ṵ'), + (0x1E75, 'V'), + (0x1E76, 'M', 'ṷ'), + (0x1E77, 'V'), + (0x1E78, 'M', 'ṹ'), + (0x1E79, 'V'), + (0x1E7A, 'M', 'ṻ'), + (0x1E7B, 'V'), + (0x1E7C, 'M', 'ṽ'), + (0x1E7D, 'V'), + (0x1E7E, 'M', 'ṿ'), + (0x1E7F, 'V'), + (0x1E80, 'M', 'ẁ'), + (0x1E81, 'V'), + (0x1E82, 'M', 'ẃ'), + (0x1E83, 'V'), + (0x1E84, 'M', 'ẅ'), + (0x1E85, 'V'), + (0x1E86, 'M', 'ẇ'), + (0x1E87, 'V'), + ] + +def _seg_18() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E88, 'M', 'ẉ'), + (0x1E89, 'V'), + (0x1E8A, 'M', 'ẋ'), + (0x1E8B, 'V'), + (0x1E8C, 'M', 'ẍ'), + (0x1E8D, 'V'), + (0x1E8E, 'M', 'ẏ'), + (0x1E8F, 'V'), + (0x1E90, 'M', 'ẑ'), + (0x1E91, 'V'), + (0x1E92, 'M', 'ẓ'), + (0x1E93, 'V'), + (0x1E94, 'M', 'ẕ'), + (0x1E95, 'V'), + (0x1E9A, 'M', 'aʾ'), + (0x1E9B, 'M', 'ṡ'), + (0x1E9C, 'V'), + (0x1E9E, 'M', 'ss'), + (0x1E9F, 'V'), + (0x1EA0, 'M', 'ạ'), + (0x1EA1, 'V'), + (0x1EA2, 'M', 'ả'), + (0x1EA3, 'V'), + (0x1EA4, 'M', 'ấ'), + (0x1EA5, 'V'), + (0x1EA6, 'M', 'ầ'), + (0x1EA7, 'V'), + (0x1EA8, 'M', 'ẩ'), + (0x1EA9, 'V'), + (0x1EAA, 'M', 'ẫ'), + (0x1EAB, 'V'), + (0x1EAC, 'M', 'ậ'), + (0x1EAD, 'V'), + (0x1EAE, 'M', 'ắ'), + (0x1EAF, 'V'), + (0x1EB0, 'M', 'ằ'), + (0x1EB1, 'V'), + (0x1EB2, 'M', 'ẳ'), + (0x1EB3, 'V'), + (0x1EB4, 'M', 'ẵ'), + (0x1EB5, 'V'), + (0x1EB6, 'M', 'ặ'), + (0x1EB7, 'V'), + (0x1EB8, 'M', 'ẹ'), + (0x1EB9, 'V'), + (0x1EBA, 'M', 'ẻ'), + (0x1EBB, 'V'), + (0x1EBC, 'M', 'ẽ'), + (0x1EBD, 'V'), + (0x1EBE, 'M', 'ế'), + (0x1EBF, 'V'), + (0x1EC0, 'M', 'ề'), + (0x1EC1, 'V'), + (0x1EC2, 'M', 'ể'), + (0x1EC3, 'V'), + (0x1EC4, 'M', 'ễ'), + (0x1EC5, 'V'), + (0x1EC6, 'M', 'ệ'), + (0x1EC7, 'V'), + (0x1EC8, 'M', 'ỉ'), + (0x1EC9, 'V'), + (0x1ECA, 'M', 'ị'), + (0x1ECB, 'V'), + (0x1ECC, 'M', 'ọ'), + (0x1ECD, 'V'), + (0x1ECE, 'M', 'ỏ'), + (0x1ECF, 'V'), + (0x1ED0, 'M', 'ố'), + (0x1ED1, 'V'), + (0x1ED2, 'M', 'ồ'), + (0x1ED3, 'V'), + (0x1ED4, 'M', 'ổ'), + (0x1ED5, 'V'), + (0x1ED6, 'M', 'ỗ'), + (0x1ED7, 'V'), + (0x1ED8, 'M', 'ộ'), + (0x1ED9, 'V'), + (0x1EDA, 'M', 'ớ'), + (0x1EDB, 'V'), + (0x1EDC, 'M', 'ờ'), + (0x1EDD, 'V'), + (0x1EDE, 'M', 'ở'), + (0x1EDF, 'V'), + (0x1EE0, 'M', 'ỡ'), + (0x1EE1, 'V'), + (0x1EE2, 'M', 'ợ'), + (0x1EE3, 'V'), + (0x1EE4, 'M', 'ụ'), + (0x1EE5, 'V'), + (0x1EE6, 'M', 'ủ'), + (0x1EE7, 'V'), + (0x1EE8, 'M', 'ứ'), + (0x1EE9, 'V'), + (0x1EEA, 'M', 'ừ'), + (0x1EEB, 'V'), + (0x1EEC, 'M', 'ử'), + (0x1EED, 'V'), + (0x1EEE, 'M', 'ữ'), + (0x1EEF, 'V'), + (0x1EF0, 'M', 'ự'), + ] + +def _seg_19() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1EF1, 'V'), + (0x1EF2, 'M', 'ỳ'), + (0x1EF3, 'V'), + (0x1EF4, 'M', 'ỵ'), + (0x1EF5, 'V'), + (0x1EF6, 'M', 'ỷ'), + (0x1EF7, 'V'), + (0x1EF8, 'M', 'ỹ'), + (0x1EF9, 'V'), + (0x1EFA, 'M', 'ỻ'), + (0x1EFB, 'V'), + (0x1EFC, 'M', 'ỽ'), + (0x1EFD, 'V'), + (0x1EFE, 'M', 'ỿ'), + (0x1EFF, 'V'), + (0x1F08, 'M', 'ἀ'), + (0x1F09, 'M', 'ἁ'), + (0x1F0A, 'M', 'ἂ'), + (0x1F0B, 'M', 'ἃ'), + (0x1F0C, 'M', 'ἄ'), + (0x1F0D, 'M', 'ἅ'), + (0x1F0E, 'M', 'ἆ'), + (0x1F0F, 'M', 'ἇ'), + (0x1F10, 'V'), + (0x1F16, 'X'), + (0x1F18, 'M', 'ἐ'), + (0x1F19, 'M', 'ἑ'), + (0x1F1A, 'M', 'ἒ'), + (0x1F1B, 'M', 'ἓ'), + (0x1F1C, 'M', 'ἔ'), + (0x1F1D, 'M', 'ἕ'), + (0x1F1E, 'X'), + (0x1F20, 'V'), + (0x1F28, 'M', 'ἠ'), + (0x1F29, 'M', 'ἡ'), + (0x1F2A, 'M', 'ἢ'), + (0x1F2B, 'M', 'ἣ'), + (0x1F2C, 'M', 'ἤ'), + (0x1F2D, 'M', 'ἥ'), + (0x1F2E, 'M', 'ἦ'), + (0x1F2F, 'M', 'ἧ'), + (0x1F30, 'V'), + (0x1F38, 'M', 'ἰ'), + (0x1F39, 'M', 'ἱ'), + (0x1F3A, 'M', 'ἲ'), + (0x1F3B, 'M', 'ἳ'), + (0x1F3C, 'M', 'ἴ'), + (0x1F3D, 'M', 'ἵ'), + (0x1F3E, 'M', 'ἶ'), + (0x1F3F, 'M', 'ἷ'), + (0x1F40, 'V'), + (0x1F46, 'X'), + (0x1F48, 'M', 'ὀ'), + (0x1F49, 'M', 'ὁ'), + (0x1F4A, 'M', 'ὂ'), + (0x1F4B, 'M', 'ὃ'), + (0x1F4C, 'M', 'ὄ'), + (0x1F4D, 'M', 'ὅ'), + (0x1F4E, 'X'), + (0x1F50, 'V'), + (0x1F58, 'X'), + (0x1F59, 'M', 'ὑ'), + (0x1F5A, 'X'), + (0x1F5B, 'M', 'ὓ'), + (0x1F5C, 'X'), + (0x1F5D, 'M', 'ὕ'), + (0x1F5E, 'X'), + (0x1F5F, 'M', 'ὗ'), + (0x1F60, 'V'), + (0x1F68, 'M', 'ὠ'), + (0x1F69, 'M', 'ὡ'), + (0x1F6A, 'M', 'ὢ'), + (0x1F6B, 'M', 'ὣ'), + (0x1F6C, 'M', 'ὤ'), + (0x1F6D, 'M', 'ὥ'), + (0x1F6E, 'M', 'ὦ'), + (0x1F6F, 'M', 'ὧ'), + (0x1F70, 'V'), + (0x1F71, 'M', 'ά'), + (0x1F72, 'V'), + (0x1F73, 'M', 'έ'), + (0x1F74, 'V'), + (0x1F75, 'M', 'ή'), + (0x1F76, 'V'), + (0x1F77, 'M', 'ί'), + (0x1F78, 'V'), + (0x1F79, 'M', 'ό'), + (0x1F7A, 'V'), + (0x1F7B, 'M', 'ύ'), + (0x1F7C, 'V'), + (0x1F7D, 'M', 'ώ'), + (0x1F7E, 'X'), + (0x1F80, 'M', 'ἀι'), + (0x1F81, 'M', 'ἁι'), + (0x1F82, 'M', 'ἂι'), + (0x1F83, 'M', 'ἃι'), + (0x1F84, 'M', 'ἄι'), + (0x1F85, 'M', 'ἅι'), + (0x1F86, 'M', 'ἆι'), + (0x1F87, 'M', 'ἇι'), + ] + +def _seg_20() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1F88, 'M', 'ἀι'), + (0x1F89, 'M', 'ἁι'), + (0x1F8A, 'M', 'ἂι'), + (0x1F8B, 'M', 'ἃι'), + (0x1F8C, 'M', 'ἄι'), + (0x1F8D, 'M', 'ἅι'), + (0x1F8E, 'M', 'ἆι'), + (0x1F8F, 'M', 'ἇι'), + (0x1F90, 'M', 'ἠι'), + (0x1F91, 'M', 'ἡι'), + (0x1F92, 'M', 'ἢι'), + (0x1F93, 'M', 'ἣι'), + (0x1F94, 'M', 'ἤι'), + (0x1F95, 'M', 'ἥι'), + (0x1F96, 'M', 'ἦι'), + (0x1F97, 'M', 'ἧι'), + (0x1F98, 'M', 'ἠι'), + (0x1F99, 'M', 'ἡι'), + (0x1F9A, 'M', 'ἢι'), + (0x1F9B, 'M', 'ἣι'), + (0x1F9C, 'M', 'ἤι'), + (0x1F9D, 'M', 'ἥι'), + (0x1F9E, 'M', 'ἦι'), + (0x1F9F, 'M', 'ἧι'), + (0x1FA0, 'M', 'ὠι'), + (0x1FA1, 'M', 'ὡι'), + (0x1FA2, 'M', 'ὢι'), + (0x1FA3, 'M', 'ὣι'), + (0x1FA4, 'M', 'ὤι'), + (0x1FA5, 'M', 'ὥι'), + (0x1FA6, 'M', 'ὦι'), + (0x1FA7, 'M', 'ὧι'), + (0x1FA8, 'M', 'ὠι'), + (0x1FA9, 'M', 'ὡι'), + (0x1FAA, 'M', 'ὢι'), + (0x1FAB, 'M', 'ὣι'), + (0x1FAC, 'M', 'ὤι'), + (0x1FAD, 'M', 'ὥι'), + (0x1FAE, 'M', 'ὦι'), + (0x1FAF, 'M', 'ὧι'), + (0x1FB0, 'V'), + (0x1FB2, 'M', 'ὰι'), + (0x1FB3, 'M', 'αι'), + (0x1FB4, 'M', 'άι'), + (0x1FB5, 'X'), + (0x1FB6, 'V'), + (0x1FB7, 'M', 'ᾶι'), + (0x1FB8, 'M', 'ᾰ'), + (0x1FB9, 'M', 'ᾱ'), + (0x1FBA, 'M', 'ὰ'), + (0x1FBB, 'M', 'ά'), + (0x1FBC, 'M', 'αι'), + (0x1FBD, '3', ' ̓'), + (0x1FBE, 'M', 'ι'), + (0x1FBF, '3', ' ̓'), + (0x1FC0, '3', ' ͂'), + (0x1FC1, '3', ' ̈͂'), + (0x1FC2, 'M', 'ὴι'), + (0x1FC3, 'M', 'ηι'), + (0x1FC4, 'M', 'ήι'), + (0x1FC5, 'X'), + (0x1FC6, 'V'), + (0x1FC7, 'M', 'ῆι'), + (0x1FC8, 'M', 'ὲ'), + (0x1FC9, 'M', 'έ'), + (0x1FCA, 'M', 'ὴ'), + (0x1FCB, 'M', 'ή'), + (0x1FCC, 'M', 'ηι'), + (0x1FCD, '3', ' ̓̀'), + (0x1FCE, '3', ' ̓́'), + (0x1FCF, '3', ' ̓͂'), + (0x1FD0, 'V'), + (0x1FD3, 'M', 'ΐ'), + (0x1FD4, 'X'), + (0x1FD6, 'V'), + (0x1FD8, 'M', 'ῐ'), + (0x1FD9, 'M', 'ῑ'), + (0x1FDA, 'M', 'ὶ'), + (0x1FDB, 'M', 'ί'), + (0x1FDC, 'X'), + (0x1FDD, '3', ' ̔̀'), + (0x1FDE, '3', ' ̔́'), + (0x1FDF, '3', ' ̔͂'), + (0x1FE0, 'V'), + (0x1FE3, 'M', 'ΰ'), + (0x1FE4, 'V'), + (0x1FE8, 'M', 'ῠ'), + (0x1FE9, 'M', 'ῡ'), + (0x1FEA, 'M', 'ὺ'), + (0x1FEB, 'M', 'ύ'), + (0x1FEC, 'M', 'ῥ'), + (0x1FED, '3', ' ̈̀'), + (0x1FEE, '3', ' ̈́'), + (0x1FEF, '3', '`'), + (0x1FF0, 'X'), + (0x1FF2, 'M', 'ὼι'), + (0x1FF3, 'M', 'ωι'), + (0x1FF4, 'M', 'ώι'), + (0x1FF5, 'X'), + (0x1FF6, 'V'), + ] + +def _seg_21() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1FF7, 'M', 'ῶι'), + (0x1FF8, 'M', 'ὸ'), + (0x1FF9, 'M', 'ό'), + (0x1FFA, 'M', 'ὼ'), + (0x1FFB, 'M', 'ώ'), + (0x1FFC, 'M', 'ωι'), + (0x1FFD, '3', ' ́'), + (0x1FFE, '3', ' ̔'), + (0x1FFF, 'X'), + (0x2000, '3', ' '), + (0x200B, 'I'), + (0x200C, 'D', ''), + (0x200E, 'X'), + (0x2010, 'V'), + (0x2011, 'M', '‐'), + (0x2012, 'V'), + (0x2017, '3', ' ̳'), + (0x2018, 'V'), + (0x2024, 'X'), + (0x2027, 'V'), + (0x2028, 'X'), + (0x202F, '3', ' '), + (0x2030, 'V'), + (0x2033, 'M', '′′'), + (0x2034, 'M', '′′′'), + (0x2035, 'V'), + (0x2036, 'M', '‵‵'), + (0x2037, 'M', '‵‵‵'), + (0x2038, 'V'), + (0x203C, '3', '!!'), + (0x203D, 'V'), + (0x203E, '3', ' ̅'), + (0x203F, 'V'), + (0x2047, '3', '??'), + (0x2048, '3', '?!'), + (0x2049, '3', '!?'), + (0x204A, 'V'), + (0x2057, 'M', '′′′′'), + (0x2058, 'V'), + (0x205F, '3', ' '), + (0x2060, 'I'), + (0x2061, 'X'), + (0x2064, 'I'), + (0x2065, 'X'), + (0x2070, 'M', '0'), + (0x2071, 'M', 'i'), + (0x2072, 'X'), + (0x2074, 'M', '4'), + (0x2075, 'M', '5'), + (0x2076, 'M', '6'), + (0x2077, 'M', '7'), + (0x2078, 'M', '8'), + (0x2079, 'M', '9'), + (0x207A, '3', '+'), + (0x207B, 'M', '−'), + (0x207C, '3', '='), + (0x207D, '3', '('), + (0x207E, '3', ')'), + (0x207F, 'M', 'n'), + (0x2080, 'M', '0'), + (0x2081, 'M', '1'), + (0x2082, 'M', '2'), + (0x2083, 'M', '3'), + (0x2084, 'M', '4'), + (0x2085, 'M', '5'), + (0x2086, 'M', '6'), + (0x2087, 'M', '7'), + (0x2088, 'M', '8'), + (0x2089, 'M', '9'), + (0x208A, '3', '+'), + (0x208B, 'M', '−'), + (0x208C, '3', '='), + (0x208D, '3', '('), + (0x208E, '3', ')'), + (0x208F, 'X'), + (0x2090, 'M', 'a'), + (0x2091, 'M', 'e'), + (0x2092, 'M', 'o'), + (0x2093, 'M', 'x'), + (0x2094, 'M', 'ə'), + (0x2095, 'M', 'h'), + (0x2096, 'M', 'k'), + (0x2097, 'M', 'l'), + (0x2098, 'M', 'm'), + (0x2099, 'M', 'n'), + (0x209A, 'M', 'p'), + (0x209B, 'M', 's'), + (0x209C, 'M', 't'), + (0x209D, 'X'), + (0x20A0, 'V'), + (0x20A8, 'M', 'rs'), + (0x20A9, 'V'), + (0x20C1, 'X'), + (0x20D0, 'V'), + (0x20F1, 'X'), + (0x2100, '3', 'a/c'), + (0x2101, '3', 'a/s'), + (0x2102, 'M', 'c'), + (0x2103, 'M', '°c'), + (0x2104, 'V'), + ] + +def _seg_22() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2105, '3', 'c/o'), + (0x2106, '3', 'c/u'), + (0x2107, 'M', 'ɛ'), + (0x2108, 'V'), + (0x2109, 'M', '°f'), + (0x210A, 'M', 'g'), + (0x210B, 'M', 'h'), + (0x210F, 'M', 'ħ'), + (0x2110, 'M', 'i'), + (0x2112, 'M', 'l'), + (0x2114, 'V'), + (0x2115, 'M', 'n'), + (0x2116, 'M', 'no'), + (0x2117, 'V'), + (0x2119, 'M', 'p'), + (0x211A, 'M', 'q'), + (0x211B, 'M', 'r'), + (0x211E, 'V'), + (0x2120, 'M', 'sm'), + (0x2121, 'M', 'tel'), + (0x2122, 'M', 'tm'), + (0x2123, 'V'), + (0x2124, 'M', 'z'), + (0x2125, 'V'), + (0x2126, 'M', 'ω'), + (0x2127, 'V'), + (0x2128, 'M', 'z'), + (0x2129, 'V'), + (0x212A, 'M', 'k'), + (0x212B, 'M', 'å'), + (0x212C, 'M', 'b'), + (0x212D, 'M', 'c'), + (0x212E, 'V'), + (0x212F, 'M', 'e'), + (0x2131, 'M', 'f'), + (0x2132, 'X'), + (0x2133, 'M', 'm'), + (0x2134, 'M', 'o'), + (0x2135, 'M', 'א'), + (0x2136, 'M', 'ב'), + (0x2137, 'M', 'ג'), + (0x2138, 'M', 'ד'), + (0x2139, 'M', 'i'), + (0x213A, 'V'), + (0x213B, 'M', 'fax'), + (0x213C, 'M', 'π'), + (0x213D, 'M', 'γ'), + (0x213F, 'M', 'π'), + (0x2140, 'M', '∑'), + (0x2141, 'V'), + (0x2145, 'M', 'd'), + (0x2147, 'M', 'e'), + (0x2148, 'M', 'i'), + (0x2149, 'M', 'j'), + (0x214A, 'V'), + (0x2150, 'M', '1⁄7'), + (0x2151, 'M', '1⁄9'), + (0x2152, 'M', '1⁄10'), + (0x2153, 'M', '1⁄3'), + (0x2154, 'M', '2⁄3'), + (0x2155, 'M', '1⁄5'), + (0x2156, 'M', '2⁄5'), + (0x2157, 'M', '3⁄5'), + (0x2158, 'M', '4⁄5'), + (0x2159, 'M', '1⁄6'), + (0x215A, 'M', '5⁄6'), + (0x215B, 'M', '1⁄8'), + (0x215C, 'M', '3⁄8'), + (0x215D, 'M', '5⁄8'), + (0x215E, 'M', '7⁄8'), + (0x215F, 'M', '1⁄'), + (0x2160, 'M', 'i'), + (0x2161, 'M', 'ii'), + (0x2162, 'M', 'iii'), + (0x2163, 'M', 'iv'), + (0x2164, 'M', 'v'), + (0x2165, 'M', 'vi'), + (0x2166, 'M', 'vii'), + (0x2167, 'M', 'viii'), + (0x2168, 'M', 'ix'), + (0x2169, 'M', 'x'), + (0x216A, 'M', 'xi'), + (0x216B, 'M', 'xii'), + (0x216C, 'M', 'l'), + (0x216D, 'M', 'c'), + (0x216E, 'M', 'd'), + (0x216F, 'M', 'm'), + (0x2170, 'M', 'i'), + (0x2171, 'M', 'ii'), + (0x2172, 'M', 'iii'), + (0x2173, 'M', 'iv'), + (0x2174, 'M', 'v'), + (0x2175, 'M', 'vi'), + (0x2176, 'M', 'vii'), + (0x2177, 'M', 'viii'), + (0x2178, 'M', 'ix'), + (0x2179, 'M', 'x'), + (0x217A, 'M', 'xi'), + (0x217B, 'M', 'xii'), + (0x217C, 'M', 'l'), + ] + +def _seg_23() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x217D, 'M', 'c'), + (0x217E, 'M', 'd'), + (0x217F, 'M', 'm'), + (0x2180, 'V'), + (0x2183, 'X'), + (0x2184, 'V'), + (0x2189, 'M', '0⁄3'), + (0x218A, 'V'), + (0x218C, 'X'), + (0x2190, 'V'), + (0x222C, 'M', '∫∫'), + (0x222D, 'M', '∫∫∫'), + (0x222E, 'V'), + (0x222F, 'M', '∮∮'), + (0x2230, 'M', '∮∮∮'), + (0x2231, 'V'), + (0x2260, '3'), + (0x2261, 'V'), + (0x226E, '3'), + (0x2270, 'V'), + (0x2329, 'M', '〈'), + (0x232A, 'M', '〉'), + (0x232B, 'V'), + (0x2427, 'X'), + (0x2440, 'V'), + (0x244B, 'X'), + (0x2460, 'M', '1'), + (0x2461, 'M', '2'), + (0x2462, 'M', '3'), + (0x2463, 'M', '4'), + (0x2464, 'M', '5'), + (0x2465, 'M', '6'), + (0x2466, 'M', '7'), + (0x2467, 'M', '8'), + (0x2468, 'M', '9'), + (0x2469, 'M', '10'), + (0x246A, 'M', '11'), + (0x246B, 'M', '12'), + (0x246C, 'M', '13'), + (0x246D, 'M', '14'), + (0x246E, 'M', '15'), + (0x246F, 'M', '16'), + (0x2470, 'M', '17'), + (0x2471, 'M', '18'), + (0x2472, 'M', '19'), + (0x2473, 'M', '20'), + (0x2474, '3', '(1)'), + (0x2475, '3', '(2)'), + (0x2476, '3', '(3)'), + (0x2477, '3', '(4)'), + (0x2478, '3', '(5)'), + (0x2479, '3', '(6)'), + (0x247A, '3', '(7)'), + (0x247B, '3', '(8)'), + (0x247C, '3', '(9)'), + (0x247D, '3', '(10)'), + (0x247E, '3', '(11)'), + (0x247F, '3', '(12)'), + (0x2480, '3', '(13)'), + (0x2481, '3', '(14)'), + (0x2482, '3', '(15)'), + (0x2483, '3', '(16)'), + (0x2484, '3', '(17)'), + (0x2485, '3', '(18)'), + (0x2486, '3', '(19)'), + (0x2487, '3', '(20)'), + (0x2488, 'X'), + (0x249C, '3', '(a)'), + (0x249D, '3', '(b)'), + (0x249E, '3', '(c)'), + (0x249F, '3', '(d)'), + (0x24A0, '3', '(e)'), + (0x24A1, '3', '(f)'), + (0x24A2, '3', '(g)'), + (0x24A3, '3', '(h)'), + (0x24A4, '3', '(i)'), + (0x24A5, '3', '(j)'), + (0x24A6, '3', '(k)'), + (0x24A7, '3', '(l)'), + (0x24A8, '3', '(m)'), + (0x24A9, '3', '(n)'), + (0x24AA, '3', '(o)'), + (0x24AB, '3', '(p)'), + (0x24AC, '3', '(q)'), + (0x24AD, '3', '(r)'), + (0x24AE, '3', '(s)'), + (0x24AF, '3', '(t)'), + (0x24B0, '3', '(u)'), + (0x24B1, '3', '(v)'), + (0x24B2, '3', '(w)'), + (0x24B3, '3', '(x)'), + (0x24B4, '3', '(y)'), + (0x24B5, '3', '(z)'), + (0x24B6, 'M', 'a'), + (0x24B7, 'M', 'b'), + (0x24B8, 'M', 'c'), + (0x24B9, 'M', 'd'), + (0x24BA, 'M', 'e'), + (0x24BB, 'M', 'f'), + (0x24BC, 'M', 'g'), + ] + +def _seg_24() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x24BD, 'M', 'h'), + (0x24BE, 'M', 'i'), + (0x24BF, 'M', 'j'), + (0x24C0, 'M', 'k'), + (0x24C1, 'M', 'l'), + (0x24C2, 'M', 'm'), + (0x24C3, 'M', 'n'), + (0x24C4, 'M', 'o'), + (0x24C5, 'M', 'p'), + (0x24C6, 'M', 'q'), + (0x24C7, 'M', 'r'), + (0x24C8, 'M', 's'), + (0x24C9, 'M', 't'), + (0x24CA, 'M', 'u'), + (0x24CB, 'M', 'v'), + (0x24CC, 'M', 'w'), + (0x24CD, 'M', 'x'), + (0x24CE, 'M', 'y'), + (0x24CF, 'M', 'z'), + (0x24D0, 'M', 'a'), + (0x24D1, 'M', 'b'), + (0x24D2, 'M', 'c'), + (0x24D3, 'M', 'd'), + (0x24D4, 'M', 'e'), + (0x24D5, 'M', 'f'), + (0x24D6, 'M', 'g'), + (0x24D7, 'M', 'h'), + (0x24D8, 'M', 'i'), + (0x24D9, 'M', 'j'), + (0x24DA, 'M', 'k'), + (0x24DB, 'M', 'l'), + (0x24DC, 'M', 'm'), + (0x24DD, 'M', 'n'), + (0x24DE, 'M', 'o'), + (0x24DF, 'M', 'p'), + (0x24E0, 'M', 'q'), + (0x24E1, 'M', 'r'), + (0x24E2, 'M', 's'), + (0x24E3, 'M', 't'), + (0x24E4, 'M', 'u'), + (0x24E5, 'M', 'v'), + (0x24E6, 'M', 'w'), + (0x24E7, 'M', 'x'), + (0x24E8, 'M', 'y'), + (0x24E9, 'M', 'z'), + (0x24EA, 'M', '0'), + (0x24EB, 'V'), + (0x2A0C, 'M', '∫∫∫∫'), + (0x2A0D, 'V'), + (0x2A74, '3', '::='), + (0x2A75, '3', '=='), + (0x2A76, '3', '==='), + (0x2A77, 'V'), + (0x2ADC, 'M', '⫝̸'), + (0x2ADD, 'V'), + (0x2B74, 'X'), + (0x2B76, 'V'), + (0x2B96, 'X'), + (0x2B97, 'V'), + (0x2C00, 'M', 'ⰰ'), + (0x2C01, 'M', 'ⰱ'), + (0x2C02, 'M', 'ⰲ'), + (0x2C03, 'M', 'ⰳ'), + (0x2C04, 'M', 'ⰴ'), + (0x2C05, 'M', 'ⰵ'), + (0x2C06, 'M', 'ⰶ'), + (0x2C07, 'M', 'ⰷ'), + (0x2C08, 'M', 'ⰸ'), + (0x2C09, 'M', 'ⰹ'), + (0x2C0A, 'M', 'ⰺ'), + (0x2C0B, 'M', 'ⰻ'), + (0x2C0C, 'M', 'ⰼ'), + (0x2C0D, 'M', 'ⰽ'), + (0x2C0E, 'M', 'ⰾ'), + (0x2C0F, 'M', 'ⰿ'), + (0x2C10, 'M', 'ⱀ'), + (0x2C11, 'M', 'ⱁ'), + (0x2C12, 'M', 'ⱂ'), + (0x2C13, 'M', 'ⱃ'), + (0x2C14, 'M', 'ⱄ'), + (0x2C15, 'M', 'ⱅ'), + (0x2C16, 'M', 'ⱆ'), + (0x2C17, 'M', 'ⱇ'), + (0x2C18, 'M', 'ⱈ'), + (0x2C19, 'M', 'ⱉ'), + (0x2C1A, 'M', 'ⱊ'), + (0x2C1B, 'M', 'ⱋ'), + (0x2C1C, 'M', 'ⱌ'), + (0x2C1D, 'M', 'ⱍ'), + (0x2C1E, 'M', 'ⱎ'), + (0x2C1F, 'M', 'ⱏ'), + (0x2C20, 'M', 'ⱐ'), + (0x2C21, 'M', 'ⱑ'), + (0x2C22, 'M', 'ⱒ'), + (0x2C23, 'M', 'ⱓ'), + (0x2C24, 'M', 'ⱔ'), + (0x2C25, 'M', 'ⱕ'), + (0x2C26, 'M', 'ⱖ'), + (0x2C27, 'M', 'ⱗ'), + (0x2C28, 'M', 'ⱘ'), + ] + +def _seg_25() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2C29, 'M', 'ⱙ'), + (0x2C2A, 'M', 'ⱚ'), + (0x2C2B, 'M', 'ⱛ'), + (0x2C2C, 'M', 'ⱜ'), + (0x2C2D, 'M', 'ⱝ'), + (0x2C2E, 'M', 'ⱞ'), + (0x2C2F, 'M', 'ⱟ'), + (0x2C30, 'V'), + (0x2C60, 'M', 'ⱡ'), + (0x2C61, 'V'), + (0x2C62, 'M', 'ɫ'), + (0x2C63, 'M', 'ᵽ'), + (0x2C64, 'M', 'ɽ'), + (0x2C65, 'V'), + (0x2C67, 'M', 'ⱨ'), + (0x2C68, 'V'), + (0x2C69, 'M', 'ⱪ'), + (0x2C6A, 'V'), + (0x2C6B, 'M', 'ⱬ'), + (0x2C6C, 'V'), + (0x2C6D, 'M', 'ɑ'), + (0x2C6E, 'M', 'ɱ'), + (0x2C6F, 'M', 'ɐ'), + (0x2C70, 'M', 'ɒ'), + (0x2C71, 'V'), + (0x2C72, 'M', 'ⱳ'), + (0x2C73, 'V'), + (0x2C75, 'M', 'ⱶ'), + (0x2C76, 'V'), + (0x2C7C, 'M', 'j'), + (0x2C7D, 'M', 'v'), + (0x2C7E, 'M', 'ȿ'), + (0x2C7F, 'M', 'ɀ'), + (0x2C80, 'M', 'ⲁ'), + (0x2C81, 'V'), + (0x2C82, 'M', 'ⲃ'), + (0x2C83, 'V'), + (0x2C84, 'M', 'ⲅ'), + (0x2C85, 'V'), + (0x2C86, 'M', 'ⲇ'), + (0x2C87, 'V'), + (0x2C88, 'M', 'ⲉ'), + (0x2C89, 'V'), + (0x2C8A, 'M', 'ⲋ'), + (0x2C8B, 'V'), + (0x2C8C, 'M', 'ⲍ'), + (0x2C8D, 'V'), + (0x2C8E, 'M', 'ⲏ'), + (0x2C8F, 'V'), + (0x2C90, 'M', 'ⲑ'), + (0x2C91, 'V'), + (0x2C92, 'M', 'ⲓ'), + (0x2C93, 'V'), + (0x2C94, 'M', 'ⲕ'), + (0x2C95, 'V'), + (0x2C96, 'M', 'ⲗ'), + (0x2C97, 'V'), + (0x2C98, 'M', 'ⲙ'), + (0x2C99, 'V'), + (0x2C9A, 'M', 'ⲛ'), + (0x2C9B, 'V'), + (0x2C9C, 'M', 'ⲝ'), + (0x2C9D, 'V'), + (0x2C9E, 'M', 'ⲟ'), + (0x2C9F, 'V'), + (0x2CA0, 'M', 'ⲡ'), + (0x2CA1, 'V'), + (0x2CA2, 'M', 'ⲣ'), + (0x2CA3, 'V'), + (0x2CA4, 'M', 'ⲥ'), + (0x2CA5, 'V'), + (0x2CA6, 'M', 'ⲧ'), + (0x2CA7, 'V'), + (0x2CA8, 'M', 'ⲩ'), + (0x2CA9, 'V'), + (0x2CAA, 'M', 'ⲫ'), + (0x2CAB, 'V'), + (0x2CAC, 'M', 'ⲭ'), + (0x2CAD, 'V'), + (0x2CAE, 'M', 'ⲯ'), + (0x2CAF, 'V'), + (0x2CB0, 'M', 'ⲱ'), + (0x2CB1, 'V'), + (0x2CB2, 'M', 'ⲳ'), + (0x2CB3, 'V'), + (0x2CB4, 'M', 'ⲵ'), + (0x2CB5, 'V'), + (0x2CB6, 'M', 'ⲷ'), + (0x2CB7, 'V'), + (0x2CB8, 'M', 'ⲹ'), + (0x2CB9, 'V'), + (0x2CBA, 'M', 'ⲻ'), + (0x2CBB, 'V'), + (0x2CBC, 'M', 'ⲽ'), + (0x2CBD, 'V'), + (0x2CBE, 'M', 'ⲿ'), + (0x2CBF, 'V'), + (0x2CC0, 'M', 'ⳁ'), + (0x2CC1, 'V'), + (0x2CC2, 'M', 'ⳃ'), + ] + +def _seg_26() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2CC3, 'V'), + (0x2CC4, 'M', 'ⳅ'), + (0x2CC5, 'V'), + (0x2CC6, 'M', 'ⳇ'), + (0x2CC7, 'V'), + (0x2CC8, 'M', 'ⳉ'), + (0x2CC9, 'V'), + (0x2CCA, 'M', 'ⳋ'), + (0x2CCB, 'V'), + (0x2CCC, 'M', 'ⳍ'), + (0x2CCD, 'V'), + (0x2CCE, 'M', 'ⳏ'), + (0x2CCF, 'V'), + (0x2CD0, 'M', 'ⳑ'), + (0x2CD1, 'V'), + (0x2CD2, 'M', 'ⳓ'), + (0x2CD3, 'V'), + (0x2CD4, 'M', 'ⳕ'), + (0x2CD5, 'V'), + (0x2CD6, 'M', 'ⳗ'), + (0x2CD7, 'V'), + (0x2CD8, 'M', 'ⳙ'), + (0x2CD9, 'V'), + (0x2CDA, 'M', 'ⳛ'), + (0x2CDB, 'V'), + (0x2CDC, 'M', 'ⳝ'), + (0x2CDD, 'V'), + (0x2CDE, 'M', 'ⳟ'), + (0x2CDF, 'V'), + (0x2CE0, 'M', 'ⳡ'), + (0x2CE1, 'V'), + (0x2CE2, 'M', 'ⳣ'), + (0x2CE3, 'V'), + (0x2CEB, 'M', 'ⳬ'), + (0x2CEC, 'V'), + (0x2CED, 'M', 'ⳮ'), + (0x2CEE, 'V'), + (0x2CF2, 'M', 'ⳳ'), + (0x2CF3, 'V'), + (0x2CF4, 'X'), + (0x2CF9, 'V'), + (0x2D26, 'X'), + (0x2D27, 'V'), + (0x2D28, 'X'), + (0x2D2D, 'V'), + (0x2D2E, 'X'), + (0x2D30, 'V'), + (0x2D68, 'X'), + (0x2D6F, 'M', 'ⵡ'), + (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'), + (0x2E5E, 'X'), + (0x2E80, 'V'), + (0x2E9A, 'X'), + (0x2E9B, 'V'), + (0x2E9F, 'M', '母'), + (0x2EA0, 'V'), + (0x2EF3, 'M', '龟'), + (0x2EF4, 'X'), + (0x2F00, 'M', '一'), + (0x2F01, 'M', '丨'), + (0x2F02, 'M', '丶'), + (0x2F03, 'M', '丿'), + (0x2F04, 'M', '乙'), + (0x2F05, 'M', '亅'), + (0x2F06, 'M', '二'), + (0x2F07, 'M', '亠'), + (0x2F08, 'M', '人'), + (0x2F09, 'M', '儿'), + (0x2F0A, 'M', '入'), + (0x2F0B, 'M', '八'), + (0x2F0C, 'M', '冂'), + (0x2F0D, 'M', '冖'), + (0x2F0E, 'M', '冫'), + (0x2F0F, 'M', '几'), + (0x2F10, 'M', '凵'), + (0x2F11, 'M', '刀'), + (0x2F12, 'M', '力'), + (0x2F13, 'M', '勹'), + (0x2F14, 'M', '匕'), + (0x2F15, 'M', '匚'), + ] + +def _seg_27() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F16, 'M', '匸'), + (0x2F17, 'M', '十'), + (0x2F18, 'M', '卜'), + (0x2F19, 'M', '卩'), + (0x2F1A, 'M', '厂'), + (0x2F1B, 'M', '厶'), + (0x2F1C, 'M', '又'), + (0x2F1D, 'M', '口'), + (0x2F1E, 'M', '囗'), + (0x2F1F, 'M', '土'), + (0x2F20, 'M', '士'), + (0x2F21, 'M', '夂'), + (0x2F22, 'M', '夊'), + (0x2F23, 'M', '夕'), + (0x2F24, 'M', '大'), + (0x2F25, 'M', '女'), + (0x2F26, 'M', '子'), + (0x2F27, 'M', '宀'), + (0x2F28, 'M', '寸'), + (0x2F29, 'M', '小'), + (0x2F2A, 'M', '尢'), + (0x2F2B, 'M', '尸'), + (0x2F2C, 'M', '屮'), + (0x2F2D, 'M', '山'), + (0x2F2E, 'M', '巛'), + (0x2F2F, 'M', '工'), + (0x2F30, 'M', '己'), + (0x2F31, 'M', '巾'), + (0x2F32, 'M', '干'), + (0x2F33, 'M', '幺'), + (0x2F34, 'M', '广'), + (0x2F35, 'M', '廴'), + (0x2F36, 'M', '廾'), + (0x2F37, 'M', '弋'), + (0x2F38, 'M', '弓'), + (0x2F39, 'M', '彐'), + (0x2F3A, 'M', '彡'), + (0x2F3B, 'M', '彳'), + (0x2F3C, 'M', '心'), + (0x2F3D, 'M', '戈'), + (0x2F3E, 'M', '戶'), + (0x2F3F, 'M', '手'), + (0x2F40, 'M', '支'), + (0x2F41, 'M', '攴'), + (0x2F42, 'M', '文'), + (0x2F43, 'M', '斗'), + (0x2F44, 'M', '斤'), + (0x2F45, 'M', '方'), + (0x2F46, 'M', '无'), + (0x2F47, 'M', '日'), + (0x2F48, 'M', '曰'), + (0x2F49, 'M', '月'), + (0x2F4A, 'M', '木'), + (0x2F4B, 'M', '欠'), + (0x2F4C, 'M', '止'), + (0x2F4D, 'M', '歹'), + (0x2F4E, 'M', '殳'), + (0x2F4F, 'M', '毋'), + (0x2F50, 'M', '比'), + (0x2F51, 'M', '毛'), + (0x2F52, 'M', '氏'), + (0x2F53, 'M', '气'), + (0x2F54, 'M', '水'), + (0x2F55, 'M', '火'), + (0x2F56, 'M', '爪'), + (0x2F57, 'M', '父'), + (0x2F58, 'M', '爻'), + (0x2F59, 'M', '爿'), + (0x2F5A, 'M', '片'), + (0x2F5B, 'M', '牙'), + (0x2F5C, 'M', '牛'), + (0x2F5D, 'M', '犬'), + (0x2F5E, 'M', '玄'), + (0x2F5F, 'M', '玉'), + (0x2F60, 'M', '瓜'), + (0x2F61, 'M', '瓦'), + (0x2F62, 'M', '甘'), + (0x2F63, 'M', '生'), + (0x2F64, 'M', '用'), + (0x2F65, 'M', '田'), + (0x2F66, 'M', '疋'), + (0x2F67, 'M', '疒'), + (0x2F68, 'M', '癶'), + (0x2F69, 'M', '白'), + (0x2F6A, 'M', '皮'), + (0x2F6B, 'M', '皿'), + (0x2F6C, 'M', '目'), + (0x2F6D, 'M', '矛'), + (0x2F6E, 'M', '矢'), + (0x2F6F, 'M', '石'), + (0x2F70, 'M', '示'), + (0x2F71, 'M', '禸'), + (0x2F72, 'M', '禾'), + (0x2F73, 'M', '穴'), + (0x2F74, 'M', '立'), + (0x2F75, 'M', '竹'), + (0x2F76, 'M', '米'), + (0x2F77, 'M', '糸'), + (0x2F78, 'M', '缶'), + (0x2F79, 'M', '网'), + ] + +def _seg_28() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F7A, 'M', '羊'), + (0x2F7B, 'M', '羽'), + (0x2F7C, 'M', '老'), + (0x2F7D, 'M', '而'), + (0x2F7E, 'M', '耒'), + (0x2F7F, 'M', '耳'), + (0x2F80, 'M', '聿'), + (0x2F81, 'M', '肉'), + (0x2F82, 'M', '臣'), + (0x2F83, 'M', '自'), + (0x2F84, 'M', '至'), + (0x2F85, 'M', '臼'), + (0x2F86, 'M', '舌'), + (0x2F87, 'M', '舛'), + (0x2F88, 'M', '舟'), + (0x2F89, 'M', '艮'), + (0x2F8A, 'M', '色'), + (0x2F8B, 'M', '艸'), + (0x2F8C, 'M', '虍'), + (0x2F8D, 'M', '虫'), + (0x2F8E, 'M', '血'), + (0x2F8F, 'M', '行'), + (0x2F90, 'M', '衣'), + (0x2F91, 'M', '襾'), + (0x2F92, 'M', '見'), + (0x2F93, 'M', '角'), + (0x2F94, 'M', '言'), + (0x2F95, 'M', '谷'), + (0x2F96, 'M', '豆'), + (0x2F97, 'M', '豕'), + (0x2F98, 'M', '豸'), + (0x2F99, 'M', '貝'), + (0x2F9A, 'M', '赤'), + (0x2F9B, 'M', '走'), + (0x2F9C, 'M', '足'), + (0x2F9D, 'M', '身'), + (0x2F9E, 'M', '車'), + (0x2F9F, 'M', '辛'), + (0x2FA0, 'M', '辰'), + (0x2FA1, 'M', '辵'), + (0x2FA2, 'M', '邑'), + (0x2FA3, 'M', '酉'), + (0x2FA4, 'M', '釆'), + (0x2FA5, 'M', '里'), + (0x2FA6, 'M', '金'), + (0x2FA7, 'M', '長'), + (0x2FA8, 'M', '門'), + (0x2FA9, 'M', '阜'), + (0x2FAA, 'M', '隶'), + (0x2FAB, 'M', '隹'), + (0x2FAC, 'M', '雨'), + (0x2FAD, 'M', '靑'), + (0x2FAE, 'M', '非'), + (0x2FAF, 'M', '面'), + (0x2FB0, 'M', '革'), + (0x2FB1, 'M', '韋'), + (0x2FB2, 'M', '韭'), + (0x2FB3, 'M', '音'), + (0x2FB4, 'M', '頁'), + (0x2FB5, 'M', '風'), + (0x2FB6, 'M', '飛'), + (0x2FB7, 'M', '食'), + (0x2FB8, 'M', '首'), + (0x2FB9, 'M', '香'), + (0x2FBA, 'M', '馬'), + (0x2FBB, 'M', '骨'), + (0x2FBC, 'M', '高'), + (0x2FBD, 'M', '髟'), + (0x2FBE, 'M', '鬥'), + (0x2FBF, 'M', '鬯'), + (0x2FC0, 'M', '鬲'), + (0x2FC1, 'M', '鬼'), + (0x2FC2, 'M', '魚'), + (0x2FC3, 'M', '鳥'), + (0x2FC4, 'M', '鹵'), + (0x2FC5, 'M', '鹿'), + (0x2FC6, 'M', '麥'), + (0x2FC7, 'M', '麻'), + (0x2FC8, 'M', '黃'), + (0x2FC9, 'M', '黍'), + (0x2FCA, 'M', '黑'), + (0x2FCB, 'M', '黹'), + (0x2FCC, 'M', '黽'), + (0x2FCD, 'M', '鼎'), + (0x2FCE, 'M', '鼓'), + (0x2FCF, 'M', '鼠'), + (0x2FD0, 'M', '鼻'), + (0x2FD1, 'M', '齊'), + (0x2FD2, 'M', '齒'), + (0x2FD3, 'M', '龍'), + (0x2FD4, 'M', '龜'), + (0x2FD5, 'M', '龠'), + (0x2FD6, 'X'), + (0x3000, '3', ' '), + (0x3001, 'V'), + (0x3002, 'M', '.'), + (0x3003, 'V'), + (0x3036, 'M', '〒'), + (0x3037, 'V'), + (0x3038, 'M', '十'), + ] + +def _seg_29() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3039, 'M', '卄'), + (0x303A, 'M', '卅'), + (0x303B, 'V'), + (0x3040, 'X'), + (0x3041, 'V'), + (0x3097, 'X'), + (0x3099, 'V'), + (0x309B, '3', ' ゙'), + (0x309C, '3', ' ゚'), + (0x309D, 'V'), + (0x309F, 'M', 'より'), + (0x30A0, 'V'), + (0x30FF, 'M', 'コト'), + (0x3100, 'X'), + (0x3105, 'V'), + (0x3130, 'X'), + (0x3131, 'M', 'ᄀ'), + (0x3132, 'M', 'ᄁ'), + (0x3133, 'M', 'ᆪ'), + (0x3134, 'M', 'ᄂ'), + (0x3135, 'M', 'ᆬ'), + (0x3136, 'M', 'ᆭ'), + (0x3137, 'M', 'ᄃ'), + (0x3138, 'M', 'ᄄ'), + (0x3139, 'M', 'ᄅ'), + (0x313A, 'M', 'ᆰ'), + (0x313B, 'M', 'ᆱ'), + (0x313C, 'M', 'ᆲ'), + (0x313D, 'M', 'ᆳ'), + (0x313E, 'M', 'ᆴ'), + (0x313F, 'M', 'ᆵ'), + (0x3140, 'M', 'ᄚ'), + (0x3141, 'M', 'ᄆ'), + (0x3142, 'M', 'ᄇ'), + (0x3143, 'M', 'ᄈ'), + (0x3144, 'M', 'ᄡ'), + (0x3145, 'M', 'ᄉ'), + (0x3146, 'M', 'ᄊ'), + (0x3147, 'M', 'ᄋ'), + (0x3148, 'M', 'ᄌ'), + (0x3149, 'M', 'ᄍ'), + (0x314A, 'M', 'ᄎ'), + (0x314B, 'M', 'ᄏ'), + (0x314C, 'M', 'ᄐ'), + (0x314D, 'M', 'ᄑ'), + (0x314E, 'M', 'ᄒ'), + (0x314F, 'M', 'ᅡ'), + (0x3150, 'M', 'ᅢ'), + (0x3151, 'M', 'ᅣ'), + (0x3152, 'M', 'ᅤ'), + (0x3153, 'M', 'ᅥ'), + (0x3154, 'M', 'ᅦ'), + (0x3155, 'M', 'ᅧ'), + (0x3156, 'M', 'ᅨ'), + (0x3157, 'M', 'ᅩ'), + (0x3158, 'M', 'ᅪ'), + (0x3159, 'M', 'ᅫ'), + (0x315A, 'M', 'ᅬ'), + (0x315B, 'M', 'ᅭ'), + (0x315C, 'M', 'ᅮ'), + (0x315D, 'M', 'ᅯ'), + (0x315E, 'M', 'ᅰ'), + (0x315F, 'M', 'ᅱ'), + (0x3160, 'M', 'ᅲ'), + (0x3161, 'M', 'ᅳ'), + (0x3162, 'M', 'ᅴ'), + (0x3163, 'M', 'ᅵ'), + (0x3164, 'X'), + (0x3165, 'M', 'ᄔ'), + (0x3166, 'M', 'ᄕ'), + (0x3167, 'M', 'ᇇ'), + (0x3168, 'M', 'ᇈ'), + (0x3169, 'M', 'ᇌ'), + (0x316A, 'M', 'ᇎ'), + (0x316B, 'M', 'ᇓ'), + (0x316C, 'M', 'ᇗ'), + (0x316D, 'M', 'ᇙ'), + (0x316E, 'M', 'ᄜ'), + (0x316F, 'M', 'ᇝ'), + (0x3170, 'M', 'ᇟ'), + (0x3171, 'M', 'ᄝ'), + (0x3172, 'M', 'ᄞ'), + (0x3173, 'M', 'ᄠ'), + (0x3174, 'M', 'ᄢ'), + (0x3175, 'M', 'ᄣ'), + (0x3176, 'M', 'ᄧ'), + (0x3177, 'M', 'ᄩ'), + (0x3178, 'M', 'ᄫ'), + (0x3179, 'M', 'ᄬ'), + (0x317A, 'M', 'ᄭ'), + (0x317B, 'M', 'ᄮ'), + (0x317C, 'M', 'ᄯ'), + (0x317D, 'M', 'ᄲ'), + (0x317E, 'M', 'ᄶ'), + (0x317F, 'M', 'ᅀ'), + (0x3180, 'M', 'ᅇ'), + (0x3181, 'M', 'ᅌ'), + (0x3182, 'M', 'ᇱ'), + (0x3183, 'M', 'ᇲ'), + (0x3184, 'M', 'ᅗ'), + ] + +def _seg_30() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3185, 'M', 'ᅘ'), + (0x3186, 'M', 'ᅙ'), + (0x3187, 'M', 'ᆄ'), + (0x3188, 'M', 'ᆅ'), + (0x3189, 'M', 'ᆈ'), + (0x318A, 'M', 'ᆑ'), + (0x318B, 'M', 'ᆒ'), + (0x318C, 'M', 'ᆔ'), + (0x318D, 'M', 'ᆞ'), + (0x318E, 'M', 'ᆡ'), + (0x318F, 'X'), + (0x3190, 'V'), + (0x3192, 'M', '一'), + (0x3193, 'M', '二'), + (0x3194, 'M', '三'), + (0x3195, 'M', '四'), + (0x3196, 'M', '上'), + (0x3197, 'M', '中'), + (0x3198, 'M', '下'), + (0x3199, 'M', '甲'), + (0x319A, 'M', '乙'), + (0x319B, 'M', '丙'), + (0x319C, 'M', '丁'), + (0x319D, 'M', '天'), + (0x319E, 'M', '地'), + (0x319F, 'M', '人'), + (0x31A0, 'V'), + (0x31E4, 'X'), + (0x31F0, 'V'), + (0x3200, '3', '(ᄀ)'), + (0x3201, '3', '(ᄂ)'), + (0x3202, '3', '(ᄃ)'), + (0x3203, '3', '(ᄅ)'), + (0x3204, '3', '(ᄆ)'), + (0x3205, '3', '(ᄇ)'), + (0x3206, '3', '(ᄉ)'), + (0x3207, '3', '(ᄋ)'), + (0x3208, '3', '(ᄌ)'), + (0x3209, '3', '(ᄎ)'), + (0x320A, '3', '(ᄏ)'), + (0x320B, '3', '(ᄐ)'), + (0x320C, '3', '(ᄑ)'), + (0x320D, '3', '(ᄒ)'), + (0x320E, '3', '(가)'), + (0x320F, '3', '(나)'), + (0x3210, '3', '(다)'), + (0x3211, '3', '(라)'), + (0x3212, '3', '(마)'), + (0x3213, '3', '(바)'), + (0x3214, '3', '(사)'), + (0x3215, '3', '(아)'), + (0x3216, '3', '(자)'), + (0x3217, '3', '(차)'), + (0x3218, '3', '(카)'), + (0x3219, '3', '(타)'), + (0x321A, '3', '(파)'), + (0x321B, '3', '(하)'), + (0x321C, '3', '(주)'), + (0x321D, '3', '(오전)'), + (0x321E, '3', '(오후)'), + (0x321F, 'X'), + (0x3220, '3', '(一)'), + (0x3221, '3', '(二)'), + (0x3222, '3', '(三)'), + (0x3223, '3', '(四)'), + (0x3224, '3', '(五)'), + (0x3225, '3', '(六)'), + (0x3226, '3', '(七)'), + (0x3227, '3', '(八)'), + (0x3228, '3', '(九)'), + (0x3229, '3', '(十)'), + (0x322A, '3', '(月)'), + (0x322B, '3', '(火)'), + (0x322C, '3', '(水)'), + (0x322D, '3', '(木)'), + (0x322E, '3', '(金)'), + (0x322F, '3', '(土)'), + (0x3230, '3', '(日)'), + (0x3231, '3', '(株)'), + (0x3232, '3', '(有)'), + (0x3233, '3', '(社)'), + (0x3234, '3', '(名)'), + (0x3235, '3', '(特)'), + (0x3236, '3', '(財)'), + (0x3237, '3', '(祝)'), + (0x3238, '3', '(労)'), + (0x3239, '3', '(代)'), + (0x323A, '3', '(呼)'), + (0x323B, '3', '(学)'), + (0x323C, '3', '(監)'), + (0x323D, '3', '(企)'), + (0x323E, '3', '(資)'), + (0x323F, '3', '(協)'), + (0x3240, '3', '(祭)'), + (0x3241, '3', '(休)'), + (0x3242, '3', '(自)'), + (0x3243, '3', '(至)'), + (0x3244, 'M', '問'), + (0x3245, 'M', '幼'), + (0x3246, 'M', '文'), + ] + +def _seg_31() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3247, 'M', '箏'), + (0x3248, 'V'), + (0x3250, 'M', 'pte'), + (0x3251, 'M', '21'), + (0x3252, 'M', '22'), + (0x3253, 'M', '23'), + (0x3254, 'M', '24'), + (0x3255, 'M', '25'), + (0x3256, 'M', '26'), + (0x3257, 'M', '27'), + (0x3258, 'M', '28'), + (0x3259, 'M', '29'), + (0x325A, 'M', '30'), + (0x325B, 'M', '31'), + (0x325C, 'M', '32'), + (0x325D, 'M', '33'), + (0x325E, 'M', '34'), + (0x325F, 'M', '35'), + (0x3260, 'M', 'ᄀ'), + (0x3261, 'M', 'ᄂ'), + (0x3262, 'M', 'ᄃ'), + (0x3263, 'M', 'ᄅ'), + (0x3264, 'M', 'ᄆ'), + (0x3265, 'M', 'ᄇ'), + (0x3266, 'M', 'ᄉ'), + (0x3267, 'M', 'ᄋ'), + (0x3268, 'M', 'ᄌ'), + (0x3269, 'M', 'ᄎ'), + (0x326A, 'M', 'ᄏ'), + (0x326B, 'M', 'ᄐ'), + (0x326C, 'M', 'ᄑ'), + (0x326D, 'M', 'ᄒ'), + (0x326E, 'M', '가'), + (0x326F, 'M', '나'), + (0x3270, 'M', '다'), + (0x3271, 'M', '라'), + (0x3272, 'M', '마'), + (0x3273, 'M', '바'), + (0x3274, 'M', '사'), + (0x3275, 'M', '아'), + (0x3276, 'M', '자'), + (0x3277, 'M', '차'), + (0x3278, 'M', '카'), + (0x3279, 'M', '타'), + (0x327A, 'M', '파'), + (0x327B, 'M', '하'), + (0x327C, 'M', '참고'), + (0x327D, 'M', '주의'), + (0x327E, 'M', '우'), + (0x327F, 'V'), + (0x3280, 'M', '一'), + (0x3281, 'M', '二'), + (0x3282, 'M', '三'), + (0x3283, 'M', '四'), + (0x3284, 'M', '五'), + (0x3285, 'M', '六'), + (0x3286, 'M', '七'), + (0x3287, 'M', '八'), + (0x3288, 'M', '九'), + (0x3289, 'M', '十'), + (0x328A, 'M', '月'), + (0x328B, 'M', '火'), + (0x328C, 'M', '水'), + (0x328D, 'M', '木'), + (0x328E, 'M', '金'), + (0x328F, 'M', '土'), + (0x3290, 'M', '日'), + (0x3291, 'M', '株'), + (0x3292, 'M', '有'), + (0x3293, 'M', '社'), + (0x3294, 'M', '名'), + (0x3295, 'M', '特'), + (0x3296, 'M', '財'), + (0x3297, 'M', '祝'), + (0x3298, 'M', '労'), + (0x3299, 'M', '秘'), + (0x329A, 'M', '男'), + (0x329B, 'M', '女'), + (0x329C, 'M', '適'), + (0x329D, 'M', '優'), + (0x329E, 'M', '印'), + (0x329F, 'M', '注'), + (0x32A0, 'M', '項'), + (0x32A1, 'M', '休'), + (0x32A2, 'M', '写'), + (0x32A3, 'M', '正'), + (0x32A4, 'M', '上'), + (0x32A5, 'M', '中'), + (0x32A6, 'M', '下'), + (0x32A7, 'M', '左'), + (0x32A8, 'M', '右'), + (0x32A9, 'M', '医'), + (0x32AA, 'M', '宗'), + (0x32AB, 'M', '学'), + (0x32AC, 'M', '監'), + (0x32AD, 'M', '企'), + (0x32AE, 'M', '資'), + (0x32AF, 'M', '協'), + (0x32B0, 'M', '夜'), + (0x32B1, 'M', '36'), + ] + +def _seg_32() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x32B2, 'M', '37'), + (0x32B3, 'M', '38'), + (0x32B4, 'M', '39'), + (0x32B5, 'M', '40'), + (0x32B6, 'M', '41'), + (0x32B7, 'M', '42'), + (0x32B8, 'M', '43'), + (0x32B9, 'M', '44'), + (0x32BA, 'M', '45'), + (0x32BB, 'M', '46'), + (0x32BC, 'M', '47'), + (0x32BD, 'M', '48'), + (0x32BE, 'M', '49'), + (0x32BF, 'M', '50'), + (0x32C0, 'M', '1月'), + (0x32C1, 'M', '2月'), + (0x32C2, 'M', '3月'), + (0x32C3, 'M', '4月'), + (0x32C4, 'M', '5月'), + (0x32C5, 'M', '6月'), + (0x32C6, 'M', '7月'), + (0x32C7, 'M', '8月'), + (0x32C8, 'M', '9月'), + (0x32C9, 'M', '10月'), + (0x32CA, 'M', '11月'), + (0x32CB, 'M', '12月'), + (0x32CC, 'M', 'hg'), + (0x32CD, 'M', 'erg'), + (0x32CE, 'M', 'ev'), + (0x32CF, 'M', 'ltd'), + (0x32D0, 'M', 'ア'), + (0x32D1, 'M', 'イ'), + (0x32D2, 'M', 'ウ'), + (0x32D3, 'M', 'エ'), + (0x32D4, 'M', 'オ'), + (0x32D5, 'M', 'カ'), + (0x32D6, 'M', 'キ'), + (0x32D7, 'M', 'ク'), + (0x32D8, 'M', 'ケ'), + (0x32D9, 'M', 'コ'), + (0x32DA, 'M', 'サ'), + (0x32DB, 'M', 'シ'), + (0x32DC, 'M', 'ス'), + (0x32DD, 'M', 'セ'), + (0x32DE, 'M', 'ソ'), + (0x32DF, 'M', 'タ'), + (0x32E0, 'M', 'チ'), + (0x32E1, 'M', 'ツ'), + (0x32E2, 'M', 'テ'), + (0x32E3, 'M', 'ト'), + (0x32E4, 'M', 'ナ'), + (0x32E5, 'M', 'ニ'), + (0x32E6, 'M', 'ヌ'), + (0x32E7, 'M', 'ネ'), + (0x32E8, 'M', 'ノ'), + (0x32E9, 'M', 'ハ'), + (0x32EA, 'M', 'ヒ'), + (0x32EB, 'M', 'フ'), + (0x32EC, 'M', 'ヘ'), + (0x32ED, 'M', 'ホ'), + (0x32EE, 'M', 'マ'), + (0x32EF, 'M', 'ミ'), + (0x32F0, 'M', 'ム'), + (0x32F1, 'M', 'メ'), + (0x32F2, 'M', 'モ'), + (0x32F3, 'M', 'ヤ'), + (0x32F4, 'M', 'ユ'), + (0x32F5, 'M', 'ヨ'), + (0x32F6, 'M', 'ラ'), + (0x32F7, 'M', 'リ'), + (0x32F8, 'M', 'ル'), + (0x32F9, 'M', 'レ'), + (0x32FA, 'M', 'ロ'), + (0x32FB, 'M', 'ワ'), + (0x32FC, 'M', 'ヰ'), + (0x32FD, 'M', 'ヱ'), + (0x32FE, 'M', 'ヲ'), + (0x32FF, 'M', '令和'), + (0x3300, 'M', 'アパート'), + (0x3301, 'M', 'アルファ'), + (0x3302, 'M', 'アンペア'), + (0x3303, 'M', 'アール'), + (0x3304, 'M', 'イニング'), + (0x3305, 'M', 'インチ'), + (0x3306, 'M', 'ウォン'), + (0x3307, 'M', 'エスクード'), + (0x3308, 'M', 'エーカー'), + (0x3309, 'M', 'オンス'), + (0x330A, 'M', 'オーム'), + (0x330B, 'M', 'カイリ'), + (0x330C, 'M', 'カラット'), + (0x330D, 'M', 'カロリー'), + (0x330E, 'M', 'ガロン'), + (0x330F, 'M', 'ガンマ'), + (0x3310, 'M', 'ギガ'), + (0x3311, 'M', 'ギニー'), + (0x3312, 'M', 'キュリー'), + (0x3313, 'M', 'ギルダー'), + (0x3314, 'M', 'キロ'), + (0x3315, 'M', 'キログラム'), + ] + +def _seg_33() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3316, 'M', 'キロメートル'), + (0x3317, 'M', 'キロワット'), + (0x3318, 'M', 'グラム'), + (0x3319, 'M', 'グラムトン'), + (0x331A, 'M', 'クルゼイロ'), + (0x331B, 'M', 'クローネ'), + (0x331C, 'M', 'ケース'), + (0x331D, 'M', 'コルナ'), + (0x331E, 'M', 'コーポ'), + (0x331F, 'M', 'サイクル'), + (0x3320, 'M', 'サンチーム'), + (0x3321, 'M', 'シリング'), + (0x3322, 'M', 'センチ'), + (0x3323, 'M', 'セント'), + (0x3324, 'M', 'ダース'), + (0x3325, 'M', 'デシ'), + (0x3326, 'M', 'ドル'), + (0x3327, 'M', 'トン'), + (0x3328, 'M', 'ナノ'), + (0x3329, 'M', 'ノット'), + (0x332A, 'M', 'ハイツ'), + (0x332B, 'M', 'パーセント'), + (0x332C, 'M', 'パーツ'), + (0x332D, 'M', 'バーレル'), + (0x332E, 'M', 'ピアストル'), + (0x332F, 'M', 'ピクル'), + (0x3330, 'M', 'ピコ'), + (0x3331, 'M', 'ビル'), + (0x3332, 'M', 'ファラッド'), + (0x3333, 'M', 'フィート'), + (0x3334, 'M', 'ブッシェル'), + (0x3335, 'M', 'フラン'), + (0x3336, 'M', 'ヘクタール'), + (0x3337, 'M', 'ペソ'), + (0x3338, 'M', 'ペニヒ'), + (0x3339, 'M', 'ヘルツ'), + (0x333A, 'M', 'ペンス'), + (0x333B, 'M', 'ページ'), + (0x333C, 'M', 'ベータ'), + (0x333D, 'M', 'ポイント'), + (0x333E, 'M', 'ボルト'), + (0x333F, 'M', 'ホン'), + (0x3340, 'M', 'ポンド'), + (0x3341, 'M', 'ホール'), + (0x3342, 'M', 'ホーン'), + (0x3343, 'M', 'マイクロ'), + (0x3344, 'M', 'マイル'), + (0x3345, 'M', 'マッハ'), + (0x3346, 'M', 'マルク'), + (0x3347, 'M', 'マンション'), + (0x3348, 'M', 'ミクロン'), + (0x3349, 'M', 'ミリ'), + (0x334A, 'M', 'ミリバール'), + (0x334B, 'M', 'メガ'), + (0x334C, 'M', 'メガトン'), + (0x334D, 'M', 'メートル'), + (0x334E, 'M', 'ヤード'), + (0x334F, 'M', 'ヤール'), + (0x3350, 'M', 'ユアン'), + (0x3351, 'M', 'リットル'), + (0x3352, 'M', 'リラ'), + (0x3353, 'M', 'ルピー'), + (0x3354, 'M', 'ルーブル'), + (0x3355, 'M', 'レム'), + (0x3356, 'M', 'レントゲン'), + (0x3357, 'M', 'ワット'), + (0x3358, 'M', '0点'), + (0x3359, 'M', '1点'), + (0x335A, 'M', '2点'), + (0x335B, 'M', '3点'), + (0x335C, 'M', '4点'), + (0x335D, 'M', '5点'), + (0x335E, 'M', '6点'), + (0x335F, 'M', '7点'), + (0x3360, 'M', '8点'), + (0x3361, 'M', '9点'), + (0x3362, 'M', '10点'), + (0x3363, 'M', '11点'), + (0x3364, 'M', '12点'), + (0x3365, 'M', '13点'), + (0x3366, 'M', '14点'), + (0x3367, 'M', '15点'), + (0x3368, 'M', '16点'), + (0x3369, 'M', '17点'), + (0x336A, 'M', '18点'), + (0x336B, 'M', '19点'), + (0x336C, 'M', '20点'), + (0x336D, 'M', '21点'), + (0x336E, 'M', '22点'), + (0x336F, 'M', '23点'), + (0x3370, 'M', '24点'), + (0x3371, 'M', 'hpa'), + (0x3372, 'M', 'da'), + (0x3373, 'M', 'au'), + (0x3374, 'M', 'bar'), + (0x3375, 'M', 'ov'), + (0x3376, 'M', 'pc'), + (0x3377, 'M', 'dm'), + (0x3378, 'M', 'dm2'), + (0x3379, 'M', 'dm3'), + ] + +def _seg_34() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x337A, 'M', 'iu'), + (0x337B, 'M', '平成'), + (0x337C, 'M', '昭和'), + (0x337D, 'M', '大正'), + (0x337E, 'M', '明治'), + (0x337F, 'M', '株式会社'), + (0x3380, 'M', 'pa'), + (0x3381, 'M', 'na'), + (0x3382, 'M', 'μa'), + (0x3383, 'M', 'ma'), + (0x3384, 'M', 'ka'), + (0x3385, 'M', 'kb'), + (0x3386, 'M', 'mb'), + (0x3387, 'M', 'gb'), + (0x3388, 'M', 'cal'), + (0x3389, 'M', 'kcal'), + (0x338A, 'M', 'pf'), + (0x338B, 'M', 'nf'), + (0x338C, 'M', 'μf'), + (0x338D, 'M', 'μg'), + (0x338E, 'M', 'mg'), + (0x338F, 'M', 'kg'), + (0x3390, 'M', 'hz'), + (0x3391, 'M', 'khz'), + (0x3392, 'M', 'mhz'), + (0x3393, 'M', 'ghz'), + (0x3394, 'M', 'thz'), + (0x3395, 'M', 'μl'), + (0x3396, 'M', 'ml'), + (0x3397, 'M', 'dl'), + (0x3398, 'M', 'kl'), + (0x3399, 'M', 'fm'), + (0x339A, 'M', 'nm'), + (0x339B, 'M', 'μm'), + (0x339C, 'M', 'mm'), + (0x339D, 'M', 'cm'), + (0x339E, 'M', 'km'), + (0x339F, 'M', 'mm2'), + (0x33A0, 'M', 'cm2'), + (0x33A1, 'M', 'm2'), + (0x33A2, 'M', 'km2'), + (0x33A3, 'M', 'mm3'), + (0x33A4, 'M', 'cm3'), + (0x33A5, 'M', 'm3'), + (0x33A6, 'M', 'km3'), + (0x33A7, 'M', 'm∕s'), + (0x33A8, 'M', 'm∕s2'), + (0x33A9, 'M', 'pa'), + (0x33AA, 'M', 'kpa'), + (0x33AB, 'M', 'mpa'), + (0x33AC, 'M', 'gpa'), + (0x33AD, 'M', 'rad'), + (0x33AE, 'M', 'rad∕s'), + (0x33AF, 'M', 'rad∕s2'), + (0x33B0, 'M', 'ps'), + (0x33B1, 'M', 'ns'), + (0x33B2, 'M', 'μs'), + (0x33B3, 'M', 'ms'), + (0x33B4, 'M', 'pv'), + (0x33B5, 'M', 'nv'), + (0x33B6, 'M', 'μv'), + (0x33B7, 'M', 'mv'), + (0x33B8, 'M', 'kv'), + (0x33B9, 'M', 'mv'), + (0x33BA, 'M', 'pw'), + (0x33BB, 'M', 'nw'), + (0x33BC, 'M', 'μw'), + (0x33BD, 'M', 'mw'), + (0x33BE, 'M', 'kw'), + (0x33BF, 'M', 'mw'), + (0x33C0, 'M', 'kω'), + (0x33C1, 'M', 'mω'), + (0x33C2, 'X'), + (0x33C3, 'M', 'bq'), + (0x33C4, 'M', 'cc'), + (0x33C5, 'M', 'cd'), + (0x33C6, 'M', 'c∕kg'), + (0x33C7, 'X'), + (0x33C8, 'M', 'db'), + (0x33C9, 'M', 'gy'), + (0x33CA, 'M', 'ha'), + (0x33CB, 'M', 'hp'), + (0x33CC, 'M', 'in'), + (0x33CD, 'M', 'kk'), + (0x33CE, 'M', 'km'), + (0x33CF, 'M', 'kt'), + (0x33D0, 'M', 'lm'), + (0x33D1, 'M', 'ln'), + (0x33D2, 'M', 'log'), + (0x33D3, 'M', 'lx'), + (0x33D4, 'M', 'mb'), + (0x33D5, 'M', 'mil'), + (0x33D6, 'M', 'mol'), + (0x33D7, 'M', 'ph'), + (0x33D8, 'X'), + (0x33D9, 'M', 'ppm'), + (0x33DA, 'M', 'pr'), + (0x33DB, 'M', 'sr'), + (0x33DC, 'M', 'sv'), + (0x33DD, 'M', 'wb'), + ] + +def _seg_35() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x33DE, 'M', 'v∕m'), + (0x33DF, 'M', 'a∕m'), + (0x33E0, 'M', '1日'), + (0x33E1, 'M', '2日'), + (0x33E2, 'M', '3日'), + (0x33E3, 'M', '4日'), + (0x33E4, 'M', '5日'), + (0x33E5, 'M', '6日'), + (0x33E6, 'M', '7日'), + (0x33E7, 'M', '8日'), + (0x33E8, 'M', '9日'), + (0x33E9, 'M', '10日'), + (0x33EA, 'M', '11日'), + (0x33EB, 'M', '12日'), + (0x33EC, 'M', '13日'), + (0x33ED, 'M', '14日'), + (0x33EE, 'M', '15日'), + (0x33EF, 'M', '16日'), + (0x33F0, 'M', '17日'), + (0x33F1, 'M', '18日'), + (0x33F2, 'M', '19日'), + (0x33F3, 'M', '20日'), + (0x33F4, 'M', '21日'), + (0x33F5, 'M', '22日'), + (0x33F6, 'M', '23日'), + (0x33F7, 'M', '24日'), + (0x33F8, 'M', '25日'), + (0x33F9, 'M', '26日'), + (0x33FA, 'M', '27日'), + (0x33FB, 'M', '28日'), + (0x33FC, 'M', '29日'), + (0x33FD, 'M', '30日'), + (0x33FE, 'M', '31日'), + (0x33FF, 'M', 'gal'), + (0x3400, 'V'), + (0xA48D, 'X'), + (0xA490, 'V'), + (0xA4C7, 'X'), + (0xA4D0, 'V'), + (0xA62C, 'X'), + (0xA640, 'M', 'ꙁ'), + (0xA641, 'V'), + (0xA642, 'M', 'ꙃ'), + (0xA643, 'V'), + (0xA644, 'M', 'ꙅ'), + (0xA645, 'V'), + (0xA646, 'M', 'ꙇ'), + (0xA647, 'V'), + (0xA648, 'M', 'ꙉ'), + (0xA649, 'V'), + (0xA64A, 'M', 'ꙋ'), + (0xA64B, 'V'), + (0xA64C, 'M', 'ꙍ'), + (0xA64D, 'V'), + (0xA64E, 'M', 'ꙏ'), + (0xA64F, 'V'), + (0xA650, 'M', 'ꙑ'), + (0xA651, 'V'), + (0xA652, 'M', 'ꙓ'), + (0xA653, 'V'), + (0xA654, 'M', 'ꙕ'), + (0xA655, 'V'), + (0xA656, 'M', 'ꙗ'), + (0xA657, 'V'), + (0xA658, 'M', 'ꙙ'), + (0xA659, 'V'), + (0xA65A, 'M', 'ꙛ'), + (0xA65B, 'V'), + (0xA65C, 'M', 'ꙝ'), + (0xA65D, 'V'), + (0xA65E, 'M', 'ꙟ'), + (0xA65F, 'V'), + (0xA660, 'M', 'ꙡ'), + (0xA661, 'V'), + (0xA662, 'M', 'ꙣ'), + (0xA663, 'V'), + (0xA664, 'M', 'ꙥ'), + (0xA665, 'V'), + (0xA666, 'M', 'ꙧ'), + (0xA667, 'V'), + (0xA668, 'M', 'ꙩ'), + (0xA669, 'V'), + (0xA66A, 'M', 'ꙫ'), + (0xA66B, 'V'), + (0xA66C, 'M', 'ꙭ'), + (0xA66D, 'V'), + (0xA680, 'M', 'ꚁ'), + (0xA681, 'V'), + (0xA682, 'M', 'ꚃ'), + (0xA683, 'V'), + (0xA684, 'M', 'ꚅ'), + (0xA685, 'V'), + (0xA686, 'M', 'ꚇ'), + (0xA687, 'V'), + (0xA688, 'M', 'ꚉ'), + (0xA689, 'V'), + (0xA68A, 'M', 'ꚋ'), + (0xA68B, 'V'), + (0xA68C, 'M', 'ꚍ'), + (0xA68D, 'V'), + ] + +def _seg_36() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA68E, 'M', 'ꚏ'), + (0xA68F, 'V'), + (0xA690, 'M', 'ꚑ'), + (0xA691, 'V'), + (0xA692, 'M', 'ꚓ'), + (0xA693, 'V'), + (0xA694, 'M', 'ꚕ'), + (0xA695, 'V'), + (0xA696, 'M', 'ꚗ'), + (0xA697, 'V'), + (0xA698, 'M', 'ꚙ'), + (0xA699, 'V'), + (0xA69A, 'M', 'ꚛ'), + (0xA69B, 'V'), + (0xA69C, 'M', 'ъ'), + (0xA69D, 'M', 'ь'), + (0xA69E, 'V'), + (0xA6F8, 'X'), + (0xA700, 'V'), + (0xA722, 'M', 'ꜣ'), + (0xA723, 'V'), + (0xA724, 'M', 'ꜥ'), + (0xA725, 'V'), + (0xA726, 'M', 'ꜧ'), + (0xA727, 'V'), + (0xA728, 'M', 'ꜩ'), + (0xA729, 'V'), + (0xA72A, 'M', 'ꜫ'), + (0xA72B, 'V'), + (0xA72C, 'M', 'ꜭ'), + (0xA72D, 'V'), + (0xA72E, 'M', 'ꜯ'), + (0xA72F, 'V'), + (0xA732, 'M', 'ꜳ'), + (0xA733, 'V'), + (0xA734, 'M', 'ꜵ'), + (0xA735, 'V'), + (0xA736, 'M', 'ꜷ'), + (0xA737, 'V'), + (0xA738, 'M', 'ꜹ'), + (0xA739, 'V'), + (0xA73A, 'M', 'ꜻ'), + (0xA73B, 'V'), + (0xA73C, 'M', 'ꜽ'), + (0xA73D, 'V'), + (0xA73E, 'M', 'ꜿ'), + (0xA73F, 'V'), + (0xA740, 'M', 'ꝁ'), + (0xA741, 'V'), + (0xA742, 'M', 'ꝃ'), + (0xA743, 'V'), + (0xA744, 'M', 'ꝅ'), + (0xA745, 'V'), + (0xA746, 'M', 'ꝇ'), + (0xA747, 'V'), + (0xA748, 'M', 'ꝉ'), + (0xA749, 'V'), + (0xA74A, 'M', 'ꝋ'), + (0xA74B, 'V'), + (0xA74C, 'M', 'ꝍ'), + (0xA74D, 'V'), + (0xA74E, 'M', 'ꝏ'), + (0xA74F, 'V'), + (0xA750, 'M', 'ꝑ'), + (0xA751, 'V'), + (0xA752, 'M', 'ꝓ'), + (0xA753, 'V'), + (0xA754, 'M', 'ꝕ'), + (0xA755, 'V'), + (0xA756, 'M', 'ꝗ'), + (0xA757, 'V'), + (0xA758, 'M', 'ꝙ'), + (0xA759, 'V'), + (0xA75A, 'M', 'ꝛ'), + (0xA75B, 'V'), + (0xA75C, 'M', 'ꝝ'), + (0xA75D, 'V'), + (0xA75E, 'M', 'ꝟ'), + (0xA75F, 'V'), + (0xA760, 'M', 'ꝡ'), + (0xA761, 'V'), + (0xA762, 'M', 'ꝣ'), + (0xA763, 'V'), + (0xA764, 'M', 'ꝥ'), + (0xA765, 'V'), + (0xA766, 'M', 'ꝧ'), + (0xA767, 'V'), + (0xA768, 'M', 'ꝩ'), + (0xA769, 'V'), + (0xA76A, 'M', 'ꝫ'), + (0xA76B, 'V'), + (0xA76C, 'M', 'ꝭ'), + (0xA76D, 'V'), + (0xA76E, 'M', 'ꝯ'), + (0xA76F, 'V'), + (0xA770, 'M', 'ꝯ'), + (0xA771, 'V'), + (0xA779, 'M', 'ꝺ'), + (0xA77A, 'V'), + (0xA77B, 'M', 'ꝼ'), + ] + +def _seg_37() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA77C, 'V'), + (0xA77D, 'M', 'ᵹ'), + (0xA77E, 'M', 'ꝿ'), + (0xA77F, 'V'), + (0xA780, 'M', 'ꞁ'), + (0xA781, 'V'), + (0xA782, 'M', 'ꞃ'), + (0xA783, 'V'), + (0xA784, 'M', 'ꞅ'), + (0xA785, 'V'), + (0xA786, 'M', 'ꞇ'), + (0xA787, 'V'), + (0xA78B, 'M', 'ꞌ'), + (0xA78C, 'V'), + (0xA78D, 'M', 'ɥ'), + (0xA78E, 'V'), + (0xA790, 'M', 'ꞑ'), + (0xA791, 'V'), + (0xA792, 'M', 'ꞓ'), + (0xA793, 'V'), + (0xA796, 'M', 'ꞗ'), + (0xA797, 'V'), + (0xA798, 'M', 'ꞙ'), + (0xA799, 'V'), + (0xA79A, 'M', 'ꞛ'), + (0xA79B, 'V'), + (0xA79C, 'M', 'ꞝ'), + (0xA79D, 'V'), + (0xA79E, 'M', 'ꞟ'), + (0xA79F, 'V'), + (0xA7A0, 'M', 'ꞡ'), + (0xA7A1, 'V'), + (0xA7A2, 'M', 'ꞣ'), + (0xA7A3, 'V'), + (0xA7A4, 'M', 'ꞥ'), + (0xA7A5, 'V'), + (0xA7A6, 'M', 'ꞧ'), + (0xA7A7, 'V'), + (0xA7A8, 'M', 'ꞩ'), + (0xA7A9, 'V'), + (0xA7AA, 'M', 'ɦ'), + (0xA7AB, 'M', 'ɜ'), + (0xA7AC, 'M', 'ɡ'), + (0xA7AD, 'M', 'ɬ'), + (0xA7AE, 'M', 'ɪ'), + (0xA7AF, 'V'), + (0xA7B0, 'M', 'ʞ'), + (0xA7B1, 'M', 'ʇ'), + (0xA7B2, 'M', 'ʝ'), + (0xA7B3, 'M', 'ꭓ'), + (0xA7B4, 'M', 'ꞵ'), + (0xA7B5, 'V'), + (0xA7B6, 'M', 'ꞷ'), + (0xA7B7, 'V'), + (0xA7B8, 'M', 'ꞹ'), + (0xA7B9, 'V'), + (0xA7BA, 'M', 'ꞻ'), + (0xA7BB, 'V'), + (0xA7BC, 'M', 'ꞽ'), + (0xA7BD, 'V'), + (0xA7BE, 'M', 'ꞿ'), + (0xA7BF, 'V'), + (0xA7C0, 'M', 'ꟁ'), + (0xA7C1, 'V'), + (0xA7C2, 'M', 'ꟃ'), + (0xA7C3, 'V'), + (0xA7C4, 'M', 'ꞔ'), + (0xA7C5, 'M', 'ʂ'), + (0xA7C6, 'M', 'ᶎ'), + (0xA7C7, 'M', 'ꟈ'), + (0xA7C8, 'V'), + (0xA7C9, 'M', 'ꟊ'), + (0xA7CA, 'V'), + (0xA7CB, 'X'), + (0xA7D0, 'M', 'ꟑ'), + (0xA7D1, 'V'), + (0xA7D2, 'X'), + (0xA7D3, 'V'), + (0xA7D4, 'X'), + (0xA7D5, 'V'), + (0xA7D6, 'M', 'ꟗ'), + (0xA7D7, 'V'), + (0xA7D8, 'M', 'ꟙ'), + (0xA7D9, 'V'), + (0xA7DA, 'X'), + (0xA7F2, 'M', 'c'), + (0xA7F3, 'M', 'f'), + (0xA7F4, 'M', 'q'), + (0xA7F5, 'M', 'ꟶ'), + (0xA7F6, 'V'), + (0xA7F8, 'M', 'ħ'), + (0xA7F9, 'M', 'œ'), + (0xA7FA, 'V'), + (0xA82D, 'X'), + (0xA830, 'V'), + (0xA83A, 'X'), + (0xA840, 'V'), + (0xA878, 'X'), + (0xA880, 'V'), + (0xA8C6, 'X'), + ] + +def _seg_38() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA8CE, 'V'), + (0xA8DA, 'X'), + (0xA8E0, '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', 'ꜧ'), + (0xAB5D, 'M', 'ꬷ'), + (0xAB5E, 'M', 'ɫ'), + (0xAB5F, 'M', 'ꭒ'), + (0xAB60, 'V'), + (0xAB69, 'M', 'ʍ'), + (0xAB6A, 'V'), + (0xAB6C, 'X'), + (0xAB70, 'M', 'Ꭰ'), + (0xAB71, 'M', 'Ꭱ'), + (0xAB72, 'M', 'Ꭲ'), + (0xAB73, 'M', 'Ꭳ'), + (0xAB74, 'M', 'Ꭴ'), + (0xAB75, 'M', 'Ꭵ'), + (0xAB76, 'M', 'Ꭶ'), + (0xAB77, 'M', 'Ꭷ'), + (0xAB78, 'M', 'Ꭸ'), + (0xAB79, 'M', 'Ꭹ'), + (0xAB7A, 'M', 'Ꭺ'), + (0xAB7B, 'M', 'Ꭻ'), + (0xAB7C, 'M', 'Ꭼ'), + (0xAB7D, 'M', 'Ꭽ'), + (0xAB7E, 'M', 'Ꭾ'), + (0xAB7F, 'M', 'Ꭿ'), + (0xAB80, 'M', 'Ꮀ'), + (0xAB81, 'M', 'Ꮁ'), + (0xAB82, 'M', 'Ꮂ'), + (0xAB83, 'M', 'Ꮃ'), + (0xAB84, 'M', 'Ꮄ'), + (0xAB85, 'M', 'Ꮅ'), + (0xAB86, 'M', 'Ꮆ'), + (0xAB87, 'M', 'Ꮇ'), + (0xAB88, 'M', 'Ꮈ'), + (0xAB89, 'M', 'Ꮉ'), + (0xAB8A, 'M', 'Ꮊ'), + (0xAB8B, 'M', 'Ꮋ'), + (0xAB8C, 'M', 'Ꮌ'), + (0xAB8D, 'M', 'Ꮍ'), + (0xAB8E, 'M', 'Ꮎ'), + (0xAB8F, 'M', 'Ꮏ'), + (0xAB90, 'M', 'Ꮐ'), + (0xAB91, 'M', 'Ꮑ'), + (0xAB92, 'M', 'Ꮒ'), + (0xAB93, 'M', 'Ꮓ'), + (0xAB94, 'M', 'Ꮔ'), + (0xAB95, 'M', 'Ꮕ'), + (0xAB96, 'M', 'Ꮖ'), + (0xAB97, 'M', 'Ꮗ'), + (0xAB98, 'M', 'Ꮘ'), + (0xAB99, 'M', 'Ꮙ'), + (0xAB9A, 'M', 'Ꮚ'), + (0xAB9B, 'M', 'Ꮛ'), + (0xAB9C, 'M', 'Ꮜ'), + (0xAB9D, 'M', 'Ꮝ'), + (0xAB9E, 'M', 'Ꮞ'), + (0xAB9F, 'M', 'Ꮟ'), + (0xABA0, 'M', 'Ꮠ'), + (0xABA1, 'M', 'Ꮡ'), + (0xABA2, 'M', 'Ꮢ'), + (0xABA3, 'M', 'Ꮣ'), + (0xABA4, 'M', 'Ꮤ'), + (0xABA5, 'M', 'Ꮥ'), + (0xABA6, 'M', 'Ꮦ'), + (0xABA7, 'M', 'Ꮧ'), + (0xABA8, 'M', 'Ꮨ'), + (0xABA9, 'M', 'Ꮩ'), + (0xABAA, 'M', 'Ꮪ'), + ] + +def _seg_39() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xABAB, 'M', 'Ꮫ'), + (0xABAC, 'M', 'Ꮬ'), + (0xABAD, 'M', 'Ꮭ'), + (0xABAE, 'M', 'Ꮮ'), + (0xABAF, 'M', 'Ꮯ'), + (0xABB0, 'M', 'Ꮰ'), + (0xABB1, 'M', 'Ꮱ'), + (0xABB2, 'M', 'Ꮲ'), + (0xABB3, 'M', 'Ꮳ'), + (0xABB4, 'M', 'Ꮴ'), + (0xABB5, 'M', 'Ꮵ'), + (0xABB6, 'M', 'Ꮶ'), + (0xABB7, 'M', 'Ꮷ'), + (0xABB8, 'M', 'Ꮸ'), + (0xABB9, 'M', 'Ꮹ'), + (0xABBA, 'M', 'Ꮺ'), + (0xABBB, 'M', 'Ꮻ'), + (0xABBC, 'M', 'Ꮼ'), + (0xABBD, 'M', 'Ꮽ'), + (0xABBE, 'M', 'Ꮾ'), + (0xABBF, 'M', 'Ꮿ'), + (0xABC0, 'V'), + (0xABEE, 'X'), + (0xABF0, 'V'), + (0xABFA, 'X'), + (0xAC00, 'V'), + (0xD7A4, 'X'), + (0xD7B0, 'V'), + (0xD7C7, 'X'), + (0xD7CB, 'V'), + (0xD7FC, 'X'), + (0xF900, 'M', '豈'), + (0xF901, 'M', '更'), + (0xF902, 'M', '車'), + (0xF903, 'M', '賈'), + (0xF904, 'M', '滑'), + (0xF905, 'M', '串'), + (0xF906, 'M', '句'), + (0xF907, 'M', '龜'), + (0xF909, 'M', '契'), + (0xF90A, 'M', '金'), + (0xF90B, 'M', '喇'), + (0xF90C, 'M', '奈'), + (0xF90D, 'M', '懶'), + (0xF90E, 'M', '癩'), + (0xF90F, 'M', '羅'), + (0xF910, 'M', '蘿'), + (0xF911, 'M', '螺'), + (0xF912, 'M', '裸'), + (0xF913, 'M', '邏'), + (0xF914, 'M', '樂'), + (0xF915, 'M', '洛'), + (0xF916, 'M', '烙'), + (0xF917, 'M', '珞'), + (0xF918, 'M', '落'), + (0xF919, 'M', '酪'), + (0xF91A, 'M', '駱'), + (0xF91B, 'M', '亂'), + (0xF91C, 'M', '卵'), + (0xF91D, 'M', '欄'), + (0xF91E, 'M', '爛'), + (0xF91F, 'M', '蘭'), + (0xF920, 'M', '鸞'), + (0xF921, 'M', '嵐'), + (0xF922, 'M', '濫'), + (0xF923, 'M', '藍'), + (0xF924, 'M', '襤'), + (0xF925, 'M', '拉'), + (0xF926, 'M', '臘'), + (0xF927, 'M', '蠟'), + (0xF928, 'M', '廊'), + (0xF929, 'M', '朗'), + (0xF92A, 'M', '浪'), + (0xF92B, 'M', '狼'), + (0xF92C, 'M', '郎'), + (0xF92D, 'M', '來'), + (0xF92E, 'M', '冷'), + (0xF92F, 'M', '勞'), + (0xF930, 'M', '擄'), + (0xF931, 'M', '櫓'), + (0xF932, 'M', '爐'), + (0xF933, 'M', '盧'), + (0xF934, 'M', '老'), + (0xF935, 'M', '蘆'), + (0xF936, 'M', '虜'), + (0xF937, 'M', '路'), + (0xF938, 'M', '露'), + (0xF939, 'M', '魯'), + (0xF93A, 'M', '鷺'), + (0xF93B, 'M', '碌'), + (0xF93C, 'M', '祿'), + (0xF93D, 'M', '綠'), + (0xF93E, 'M', '菉'), + (0xF93F, 'M', '錄'), + (0xF940, 'M', '鹿'), + (0xF941, 'M', '論'), + (0xF942, 'M', '壟'), + (0xF943, 'M', '弄'), + (0xF944, 'M', '籠'), + (0xF945, 'M', '聾'), + ] + +def _seg_40() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xF946, 'M', '牢'), + (0xF947, 'M', '磊'), + (0xF948, 'M', '賂'), + (0xF949, 'M', '雷'), + (0xF94A, 'M', '壘'), + (0xF94B, 'M', '屢'), + (0xF94C, 'M', '樓'), + (0xF94D, 'M', '淚'), + (0xF94E, 'M', '漏'), + (0xF94F, 'M', '累'), + (0xF950, 'M', '縷'), + (0xF951, 'M', '陋'), + (0xF952, 'M', '勒'), + (0xF953, 'M', '肋'), + (0xF954, 'M', '凜'), + (0xF955, 'M', '凌'), + (0xF956, 'M', '稜'), + (0xF957, 'M', '綾'), + (0xF958, 'M', '菱'), + (0xF959, 'M', '陵'), + (0xF95A, 'M', '讀'), + (0xF95B, 'M', '拏'), + (0xF95C, 'M', '樂'), + (0xF95D, 'M', '諾'), + (0xF95E, 'M', '丹'), + (0xF95F, 'M', '寧'), + (0xF960, 'M', '怒'), + (0xF961, 'M', '率'), + (0xF962, 'M', '異'), + (0xF963, 'M', '北'), + (0xF964, 'M', '磻'), + (0xF965, 'M', '便'), + (0xF966, 'M', '復'), + (0xF967, 'M', '不'), + (0xF968, 'M', '泌'), + (0xF969, 'M', '數'), + (0xF96A, 'M', '索'), + (0xF96B, 'M', '參'), + (0xF96C, 'M', '塞'), + (0xF96D, 'M', '省'), + (0xF96E, 'M', '葉'), + (0xF96F, 'M', '說'), + (0xF970, 'M', '殺'), + (0xF971, 'M', '辰'), + (0xF972, 'M', '沈'), + (0xF973, 'M', '拾'), + (0xF974, 'M', '若'), + (0xF975, 'M', '掠'), + (0xF976, 'M', '略'), + (0xF977, 'M', '亮'), + (0xF978, 'M', '兩'), + (0xF979, 'M', '凉'), + (0xF97A, 'M', '梁'), + (0xF97B, 'M', '糧'), + (0xF97C, 'M', '良'), + (0xF97D, 'M', '諒'), + (0xF97E, 'M', '量'), + (0xF97F, 'M', '勵'), + (0xF980, 'M', '呂'), + (0xF981, 'M', '女'), + (0xF982, 'M', '廬'), + (0xF983, 'M', '旅'), + (0xF984, 'M', '濾'), + (0xF985, 'M', '礪'), + (0xF986, 'M', '閭'), + (0xF987, 'M', '驪'), + (0xF988, 'M', '麗'), + (0xF989, 'M', '黎'), + (0xF98A, 'M', '力'), + (0xF98B, 'M', '曆'), + (0xF98C, 'M', '歷'), + (0xF98D, 'M', '轢'), + (0xF98E, 'M', '年'), + (0xF98F, 'M', '憐'), + (0xF990, 'M', '戀'), + (0xF991, 'M', '撚'), + (0xF992, 'M', '漣'), + (0xF993, 'M', '煉'), + (0xF994, 'M', '璉'), + (0xF995, 'M', '秊'), + (0xF996, 'M', '練'), + (0xF997, 'M', '聯'), + (0xF998, 'M', '輦'), + (0xF999, 'M', '蓮'), + (0xF99A, 'M', '連'), + (0xF99B, 'M', '鍊'), + (0xF99C, 'M', '列'), + (0xF99D, 'M', '劣'), + (0xF99E, 'M', '咽'), + (0xF99F, 'M', '烈'), + (0xF9A0, 'M', '裂'), + (0xF9A1, 'M', '說'), + (0xF9A2, 'M', '廉'), + (0xF9A3, 'M', '念'), + (0xF9A4, 'M', '捻'), + (0xF9A5, 'M', '殮'), + (0xF9A6, 'M', '簾'), + (0xF9A7, 'M', '獵'), + (0xF9A8, 'M', '令'), + (0xF9A9, 'M', '囹'), + ] + +def _seg_41() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xF9AA, 'M', '寧'), + (0xF9AB, 'M', '嶺'), + (0xF9AC, 'M', '怜'), + (0xF9AD, 'M', '玲'), + (0xF9AE, 'M', '瑩'), + (0xF9AF, 'M', '羚'), + (0xF9B0, 'M', '聆'), + (0xF9B1, 'M', '鈴'), + (0xF9B2, 'M', '零'), + (0xF9B3, 'M', '靈'), + (0xF9B4, 'M', '領'), + (0xF9B5, 'M', '例'), + (0xF9B6, 'M', '禮'), + (0xF9B7, 'M', '醴'), + (0xF9B8, 'M', '隸'), + (0xF9B9, 'M', '惡'), + (0xF9BA, 'M', '了'), + (0xF9BB, 'M', '僚'), + (0xF9BC, 'M', '寮'), + (0xF9BD, 'M', '尿'), + (0xF9BE, 'M', '料'), + (0xF9BF, 'M', '樂'), + (0xF9C0, 'M', '燎'), + (0xF9C1, 'M', '療'), + (0xF9C2, 'M', '蓼'), + (0xF9C3, 'M', '遼'), + (0xF9C4, 'M', '龍'), + (0xF9C5, 'M', '暈'), + (0xF9C6, 'M', '阮'), + (0xF9C7, 'M', '劉'), + (0xF9C8, 'M', '杻'), + (0xF9C9, 'M', '柳'), + (0xF9CA, 'M', '流'), + (0xF9CB, 'M', '溜'), + (0xF9CC, 'M', '琉'), + (0xF9CD, 'M', '留'), + (0xF9CE, 'M', '硫'), + (0xF9CF, 'M', '紐'), + (0xF9D0, 'M', '類'), + (0xF9D1, 'M', '六'), + (0xF9D2, 'M', '戮'), + (0xF9D3, 'M', '陸'), + (0xF9D4, 'M', '倫'), + (0xF9D5, 'M', '崙'), + (0xF9D6, 'M', '淪'), + (0xF9D7, 'M', '輪'), + (0xF9D8, 'M', '律'), + (0xF9D9, 'M', '慄'), + (0xF9DA, 'M', '栗'), + (0xF9DB, 'M', '率'), + (0xF9DC, 'M', '隆'), + (0xF9DD, 'M', '利'), + (0xF9DE, 'M', '吏'), + (0xF9DF, 'M', '履'), + (0xF9E0, 'M', '易'), + (0xF9E1, 'M', '李'), + (0xF9E2, 'M', '梨'), + (0xF9E3, 'M', '泥'), + (0xF9E4, 'M', '理'), + (0xF9E5, 'M', '痢'), + (0xF9E6, 'M', '罹'), + (0xF9E7, 'M', '裏'), + (0xF9E8, 'M', '裡'), + (0xF9E9, 'M', '里'), + (0xF9EA, 'M', '離'), + (0xF9EB, 'M', '匿'), + (0xF9EC, 'M', '溺'), + (0xF9ED, 'M', '吝'), + (0xF9EE, 'M', '燐'), + (0xF9EF, 'M', '璘'), + (0xF9F0, 'M', '藺'), + (0xF9F1, 'M', '隣'), + (0xF9F2, 'M', '鱗'), + (0xF9F3, 'M', '麟'), + (0xF9F4, 'M', '林'), + (0xF9F5, 'M', '淋'), + (0xF9F6, 'M', '臨'), + (0xF9F7, 'M', '立'), + (0xF9F8, 'M', '笠'), + (0xF9F9, 'M', '粒'), + (0xF9FA, 'M', '狀'), + (0xF9FB, 'M', '炙'), + (0xF9FC, 'M', '識'), + (0xF9FD, 'M', '什'), + (0xF9FE, 'M', '茶'), + (0xF9FF, 'M', '刺'), + (0xFA00, 'M', '切'), + (0xFA01, 'M', '度'), + (0xFA02, 'M', '拓'), + (0xFA03, 'M', '糖'), + (0xFA04, 'M', '宅'), + (0xFA05, 'M', '洞'), + (0xFA06, 'M', '暴'), + (0xFA07, 'M', '輻'), + (0xFA08, 'M', '行'), + (0xFA09, 'M', '降'), + (0xFA0A, 'M', '見'), + (0xFA0B, 'M', '廓'), + (0xFA0C, 'M', '兀'), + (0xFA0D, 'M', '嗀'), + ] + +def _seg_42() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFA0E, 'V'), + (0xFA10, 'M', '塚'), + (0xFA11, 'V'), + (0xFA12, 'M', '晴'), + (0xFA13, 'V'), + (0xFA15, 'M', '凞'), + (0xFA16, 'M', '猪'), + (0xFA17, 'M', '益'), + (0xFA18, 'M', '礼'), + (0xFA19, 'M', '神'), + (0xFA1A, 'M', '祥'), + (0xFA1B, 'M', '福'), + (0xFA1C, 'M', '靖'), + (0xFA1D, 'M', '精'), + (0xFA1E, 'M', '羽'), + (0xFA1F, 'V'), + (0xFA20, 'M', '蘒'), + (0xFA21, 'V'), + (0xFA22, 'M', '諸'), + (0xFA23, 'V'), + (0xFA25, 'M', '逸'), + (0xFA26, 'M', '都'), + (0xFA27, 'V'), + (0xFA2A, 'M', '飯'), + (0xFA2B, 'M', '飼'), + (0xFA2C, 'M', '館'), + (0xFA2D, 'M', '鶴'), + (0xFA2E, 'M', '郞'), + (0xFA2F, 'M', '隷'), + (0xFA30, 'M', '侮'), + (0xFA31, 'M', '僧'), + (0xFA32, 'M', '免'), + (0xFA33, 'M', '勉'), + (0xFA34, 'M', '勤'), + (0xFA35, 'M', '卑'), + (0xFA36, 'M', '喝'), + (0xFA37, 'M', '嘆'), + (0xFA38, 'M', '器'), + (0xFA39, 'M', '塀'), + (0xFA3A, 'M', '墨'), + (0xFA3B, 'M', '層'), + (0xFA3C, 'M', '屮'), + (0xFA3D, 'M', '悔'), + (0xFA3E, 'M', '慨'), + (0xFA3F, 'M', '憎'), + (0xFA40, 'M', '懲'), + (0xFA41, 'M', '敏'), + (0xFA42, 'M', '既'), + (0xFA43, 'M', '暑'), + (0xFA44, 'M', '梅'), + (0xFA45, 'M', '海'), + (0xFA46, 'M', '渚'), + (0xFA47, 'M', '漢'), + (0xFA48, 'M', '煮'), + (0xFA49, 'M', '爫'), + (0xFA4A, 'M', '琢'), + (0xFA4B, 'M', '碑'), + (0xFA4C, 'M', '社'), + (0xFA4D, 'M', '祉'), + (0xFA4E, 'M', '祈'), + (0xFA4F, 'M', '祐'), + (0xFA50, 'M', '祖'), + (0xFA51, 'M', '祝'), + (0xFA52, 'M', '禍'), + (0xFA53, 'M', '禎'), + (0xFA54, 'M', '穀'), + (0xFA55, 'M', '突'), + (0xFA56, 'M', '節'), + (0xFA57, 'M', '練'), + (0xFA58, 'M', '縉'), + (0xFA59, 'M', '繁'), + (0xFA5A, 'M', '署'), + (0xFA5B, 'M', '者'), + (0xFA5C, 'M', '臭'), + (0xFA5D, 'M', '艹'), + (0xFA5F, 'M', '著'), + (0xFA60, 'M', '褐'), + (0xFA61, 'M', '視'), + (0xFA62, 'M', '謁'), + (0xFA63, 'M', '謹'), + (0xFA64, 'M', '賓'), + (0xFA65, 'M', '贈'), + (0xFA66, 'M', '辶'), + (0xFA67, 'M', '逸'), + (0xFA68, 'M', '難'), + (0xFA69, 'M', '響'), + (0xFA6A, 'M', '頻'), + (0xFA6B, 'M', '恵'), + (0xFA6C, 'M', '𤋮'), + (0xFA6D, 'M', '舘'), + (0xFA6E, 'X'), + (0xFA70, 'M', '並'), + (0xFA71, 'M', '况'), + (0xFA72, 'M', '全'), + (0xFA73, 'M', '侀'), + (0xFA74, 'M', '充'), + (0xFA75, 'M', '冀'), + (0xFA76, 'M', '勇'), + (0xFA77, 'M', '勺'), + (0xFA78, 'M', '喝'), + ] + +def _seg_43() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFA79, 'M', '啕'), + (0xFA7A, 'M', '喙'), + (0xFA7B, 'M', '嗢'), + (0xFA7C, 'M', '塚'), + (0xFA7D, 'M', '墳'), + (0xFA7E, 'M', '奄'), + (0xFA7F, 'M', '奔'), + (0xFA80, 'M', '婢'), + (0xFA81, 'M', '嬨'), + (0xFA82, 'M', '廒'), + (0xFA83, 'M', '廙'), + (0xFA84, 'M', '彩'), + (0xFA85, 'M', '徭'), + (0xFA86, 'M', '惘'), + (0xFA87, 'M', '慎'), + (0xFA88, 'M', '愈'), + (0xFA89, 'M', '憎'), + (0xFA8A, 'M', '慠'), + (0xFA8B, 'M', '懲'), + (0xFA8C, 'M', '戴'), + (0xFA8D, 'M', '揄'), + (0xFA8E, 'M', '搜'), + (0xFA8F, 'M', '摒'), + (0xFA90, 'M', '敖'), + (0xFA91, 'M', '晴'), + (0xFA92, 'M', '朗'), + (0xFA93, 'M', '望'), + (0xFA94, 'M', '杖'), + (0xFA95, 'M', '歹'), + (0xFA96, 'M', '殺'), + (0xFA97, 'M', '流'), + (0xFA98, 'M', '滛'), + (0xFA99, 'M', '滋'), + (0xFA9A, 'M', '漢'), + (0xFA9B, 'M', '瀞'), + (0xFA9C, 'M', '煮'), + (0xFA9D, 'M', '瞧'), + (0xFA9E, 'M', '爵'), + (0xFA9F, 'M', '犯'), + (0xFAA0, 'M', '猪'), + (0xFAA1, 'M', '瑱'), + (0xFAA2, 'M', '甆'), + (0xFAA3, 'M', '画'), + (0xFAA4, 'M', '瘝'), + (0xFAA5, 'M', '瘟'), + (0xFAA6, 'M', '益'), + (0xFAA7, 'M', '盛'), + (0xFAA8, 'M', '直'), + (0xFAA9, 'M', '睊'), + (0xFAAA, 'M', '着'), + (0xFAAB, 'M', '磌'), + (0xFAAC, 'M', '窱'), + (0xFAAD, 'M', '節'), + (0xFAAE, 'M', '类'), + (0xFAAF, 'M', '絛'), + (0xFAB0, 'M', '練'), + (0xFAB1, 'M', '缾'), + (0xFAB2, 'M', '者'), + (0xFAB3, 'M', '荒'), + (0xFAB4, 'M', '華'), + (0xFAB5, 'M', '蝹'), + (0xFAB6, 'M', '襁'), + (0xFAB7, 'M', '覆'), + (0xFAB8, 'M', '視'), + (0xFAB9, 'M', '調'), + (0xFABA, 'M', '諸'), + (0xFABB, 'M', '請'), + (0xFABC, 'M', '謁'), + (0xFABD, 'M', '諾'), + (0xFABE, 'M', '諭'), + (0xFABF, 'M', '謹'), + (0xFAC0, 'M', '變'), + (0xFAC1, 'M', '贈'), + (0xFAC2, 'M', '輸'), + (0xFAC3, 'M', '遲'), + (0xFAC4, 'M', '醙'), + (0xFAC5, 'M', '鉶'), + (0xFAC6, 'M', '陼'), + (0xFAC7, 'M', '難'), + (0xFAC8, 'M', '靖'), + (0xFAC9, 'M', '韛'), + (0xFACA, 'M', '響'), + (0xFACB, 'M', '頋'), + (0xFACC, 'M', '頻'), + (0xFACD, 'M', '鬒'), + (0xFACE, 'M', '龜'), + (0xFACF, 'M', '𢡊'), + (0xFAD0, 'M', '𢡄'), + (0xFAD1, 'M', '𣏕'), + (0xFAD2, 'M', '㮝'), + (0xFAD3, 'M', '䀘'), + (0xFAD4, 'M', '䀹'), + (0xFAD5, 'M', '𥉉'), + (0xFAD6, 'M', '𥳐'), + (0xFAD7, 'M', '𧻓'), + (0xFAD8, 'M', '齃'), + (0xFAD9, 'M', '龎'), + (0xFADA, 'X'), + (0xFB00, 'M', 'ff'), + (0xFB01, 'M', 'fi'), + ] + +def _seg_44() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFB02, 'M', 'fl'), + (0xFB03, 'M', 'ffi'), + (0xFB04, 'M', 'ffl'), + (0xFB05, 'M', 'st'), + (0xFB07, 'X'), + (0xFB13, 'M', 'մն'), + (0xFB14, 'M', 'մե'), + (0xFB15, 'M', 'մի'), + (0xFB16, 'M', 'վն'), + (0xFB17, 'M', 'մխ'), + (0xFB18, 'X'), + (0xFB1D, 'M', 'יִ'), + (0xFB1E, 'V'), + (0xFB1F, 'M', 'ײַ'), + (0xFB20, 'M', 'ע'), + (0xFB21, 'M', 'א'), + (0xFB22, 'M', 'ד'), + (0xFB23, 'M', 'ה'), + (0xFB24, 'M', 'כ'), + (0xFB25, 'M', 'ל'), + (0xFB26, 'M', 'ם'), + (0xFB27, 'M', 'ר'), + (0xFB28, 'M', 'ת'), + (0xFB29, '3', '+'), + (0xFB2A, 'M', 'שׁ'), + (0xFB2B, 'M', 'שׂ'), + (0xFB2C, 'M', 'שּׁ'), + (0xFB2D, 'M', 'שּׂ'), + (0xFB2E, 'M', 'אַ'), + (0xFB2F, 'M', 'אָ'), + (0xFB30, 'M', 'אּ'), + (0xFB31, 'M', 'בּ'), + (0xFB32, 'M', 'גּ'), + (0xFB33, 'M', 'דּ'), + (0xFB34, 'M', 'הּ'), + (0xFB35, 'M', 'וּ'), + (0xFB36, 'M', 'זּ'), + (0xFB37, 'X'), + (0xFB38, 'M', 'טּ'), + (0xFB39, 'M', 'יּ'), + (0xFB3A, 'M', 'ךּ'), + (0xFB3B, 'M', 'כּ'), + (0xFB3C, 'M', 'לּ'), + (0xFB3D, 'X'), + (0xFB3E, 'M', 'מּ'), + (0xFB3F, 'X'), + (0xFB40, 'M', 'נּ'), + (0xFB41, 'M', 'סּ'), + (0xFB42, 'X'), + (0xFB43, 'M', 'ףּ'), + (0xFB44, 'M', 'פּ'), + (0xFB45, 'X'), + (0xFB46, 'M', 'צּ'), + (0xFB47, 'M', 'קּ'), + (0xFB48, 'M', 'רּ'), + (0xFB49, 'M', 'שּ'), + (0xFB4A, 'M', 'תּ'), + (0xFB4B, 'M', 'וֹ'), + (0xFB4C, 'M', 'בֿ'), + (0xFB4D, 'M', 'כֿ'), + (0xFB4E, 'M', 'פֿ'), + (0xFB4F, 'M', 'אל'), + (0xFB50, 'M', 'ٱ'), + (0xFB52, 'M', 'ٻ'), + (0xFB56, 'M', 'پ'), + (0xFB5A, 'M', 'ڀ'), + (0xFB5E, 'M', 'ٺ'), + (0xFB62, 'M', 'ٿ'), + (0xFB66, 'M', 'ٹ'), + (0xFB6A, 'M', 'ڤ'), + (0xFB6E, 'M', 'ڦ'), + (0xFB72, 'M', 'ڄ'), + (0xFB76, 'M', 'ڃ'), + (0xFB7A, 'M', 'چ'), + (0xFB7E, 'M', 'ڇ'), + (0xFB82, 'M', 'ڍ'), + (0xFB84, 'M', 'ڌ'), + (0xFB86, 'M', 'ڎ'), + (0xFB88, 'M', 'ڈ'), + (0xFB8A, 'M', 'ژ'), + (0xFB8C, 'M', 'ڑ'), + (0xFB8E, 'M', 'ک'), + (0xFB92, 'M', 'گ'), + (0xFB96, 'M', 'ڳ'), + (0xFB9A, 'M', 'ڱ'), + (0xFB9E, 'M', 'ں'), + (0xFBA0, 'M', 'ڻ'), + (0xFBA4, 'M', 'ۀ'), + (0xFBA6, 'M', 'ہ'), + (0xFBAA, 'M', 'ھ'), + (0xFBAE, 'M', 'ے'), + (0xFBB0, 'M', 'ۓ'), + (0xFBB2, 'V'), + (0xFBC3, 'X'), + (0xFBD3, 'M', 'ڭ'), + (0xFBD7, 'M', 'ۇ'), + (0xFBD9, 'M', 'ۆ'), + (0xFBDB, 'M', 'ۈ'), + (0xFBDD, 'M', 'ۇٴ'), + (0xFBDE, 'M', 'ۋ'), + ] + +def _seg_45() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFBE0, 'M', 'ۅ'), + (0xFBE2, 'M', 'ۉ'), + (0xFBE4, 'M', 'ې'), + (0xFBE8, 'M', 'ى'), + (0xFBEA, 'M', 'ئا'), + (0xFBEC, 'M', 'ئە'), + (0xFBEE, 'M', 'ئو'), + (0xFBF0, 'M', 'ئۇ'), + (0xFBF2, 'M', 'ئۆ'), + (0xFBF4, 'M', 'ئۈ'), + (0xFBF6, 'M', 'ئې'), + (0xFBF9, 'M', 'ئى'), + (0xFBFC, 'M', 'ی'), + (0xFC00, 'M', 'ئج'), + (0xFC01, 'M', 'ئح'), + (0xFC02, 'M', 'ئم'), + (0xFC03, 'M', 'ئى'), + (0xFC04, 'M', 'ئي'), + (0xFC05, 'M', 'بج'), + (0xFC06, 'M', 'بح'), + (0xFC07, 'M', 'بخ'), + (0xFC08, 'M', 'بم'), + (0xFC09, 'M', 'بى'), + (0xFC0A, 'M', 'بي'), + (0xFC0B, 'M', 'تج'), + (0xFC0C, 'M', 'تح'), + (0xFC0D, 'M', 'تخ'), + (0xFC0E, 'M', 'تم'), + (0xFC0F, 'M', 'تى'), + (0xFC10, 'M', 'تي'), + (0xFC11, 'M', 'ثج'), + (0xFC12, 'M', 'ثم'), + (0xFC13, 'M', 'ثى'), + (0xFC14, 'M', 'ثي'), + (0xFC15, 'M', 'جح'), + (0xFC16, 'M', 'جم'), + (0xFC17, 'M', 'حج'), + (0xFC18, 'M', 'حم'), + (0xFC19, 'M', 'خج'), + (0xFC1A, 'M', 'خح'), + (0xFC1B, 'M', 'خم'), + (0xFC1C, 'M', 'سج'), + (0xFC1D, 'M', 'سح'), + (0xFC1E, 'M', 'سخ'), + (0xFC1F, 'M', 'سم'), + (0xFC20, 'M', 'صح'), + (0xFC21, 'M', 'صم'), + (0xFC22, 'M', 'ضج'), + (0xFC23, 'M', 'ضح'), + (0xFC24, 'M', 'ضخ'), + (0xFC25, 'M', 'ضم'), + (0xFC26, 'M', 'طح'), + (0xFC27, 'M', 'طم'), + (0xFC28, 'M', 'ظم'), + (0xFC29, 'M', 'عج'), + (0xFC2A, 'M', 'عم'), + (0xFC2B, 'M', 'غج'), + (0xFC2C, 'M', 'غم'), + (0xFC2D, 'M', 'فج'), + (0xFC2E, 'M', 'فح'), + (0xFC2F, 'M', 'فخ'), + (0xFC30, 'M', 'فم'), + (0xFC31, 'M', 'فى'), + (0xFC32, 'M', 'في'), + (0xFC33, 'M', 'قح'), + (0xFC34, 'M', 'قم'), + (0xFC35, 'M', 'قى'), + (0xFC36, 'M', 'قي'), + (0xFC37, 'M', 'كا'), + (0xFC38, 'M', 'كج'), + (0xFC39, 'M', 'كح'), + (0xFC3A, 'M', 'كخ'), + (0xFC3B, 'M', 'كل'), + (0xFC3C, 'M', 'كم'), + (0xFC3D, 'M', 'كى'), + (0xFC3E, 'M', 'كي'), + (0xFC3F, 'M', 'لج'), + (0xFC40, 'M', 'لح'), + (0xFC41, 'M', 'لخ'), + (0xFC42, 'M', 'لم'), + (0xFC43, 'M', 'لى'), + (0xFC44, 'M', 'لي'), + (0xFC45, 'M', 'مج'), + (0xFC46, 'M', 'مح'), + (0xFC47, 'M', 'مخ'), + (0xFC48, 'M', 'مم'), + (0xFC49, 'M', 'مى'), + (0xFC4A, 'M', 'مي'), + (0xFC4B, 'M', 'نج'), + (0xFC4C, 'M', 'نح'), + (0xFC4D, 'M', 'نخ'), + (0xFC4E, 'M', 'نم'), + (0xFC4F, 'M', 'نى'), + (0xFC50, 'M', 'ني'), + (0xFC51, 'M', 'هج'), + (0xFC52, 'M', 'هم'), + (0xFC53, 'M', 'هى'), + (0xFC54, 'M', 'هي'), + (0xFC55, 'M', 'يج'), + (0xFC56, 'M', 'يح'), + ] + +def _seg_46() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFC57, 'M', 'يخ'), + (0xFC58, 'M', 'يم'), + (0xFC59, 'M', 'يى'), + (0xFC5A, 'M', 'يي'), + (0xFC5B, 'M', 'ذٰ'), + (0xFC5C, 'M', 'رٰ'), + (0xFC5D, 'M', 'ىٰ'), + (0xFC5E, '3', ' ٌّ'), + (0xFC5F, '3', ' ٍّ'), + (0xFC60, '3', ' َّ'), + (0xFC61, '3', ' ُّ'), + (0xFC62, '3', ' ِّ'), + (0xFC63, '3', ' ّٰ'), + (0xFC64, 'M', 'ئر'), + (0xFC65, 'M', 'ئز'), + (0xFC66, 'M', 'ئم'), + (0xFC67, 'M', 'ئن'), + (0xFC68, 'M', 'ئى'), + (0xFC69, 'M', 'ئي'), + (0xFC6A, 'M', 'بر'), + (0xFC6B, 'M', 'بز'), + (0xFC6C, 'M', 'بم'), + (0xFC6D, 'M', 'بن'), + (0xFC6E, 'M', 'بى'), + (0xFC6F, 'M', 'بي'), + (0xFC70, 'M', 'تر'), + (0xFC71, 'M', 'تز'), + (0xFC72, 'M', 'تم'), + (0xFC73, 'M', 'تن'), + (0xFC74, 'M', 'تى'), + (0xFC75, 'M', 'تي'), + (0xFC76, 'M', 'ثر'), + (0xFC77, 'M', 'ثز'), + (0xFC78, 'M', 'ثم'), + (0xFC79, 'M', 'ثن'), + (0xFC7A, 'M', 'ثى'), + (0xFC7B, 'M', 'ثي'), + (0xFC7C, 'M', 'فى'), + (0xFC7D, 'M', 'في'), + (0xFC7E, 'M', 'قى'), + (0xFC7F, 'M', 'قي'), + (0xFC80, 'M', 'كا'), + (0xFC81, 'M', 'كل'), + (0xFC82, 'M', 'كم'), + (0xFC83, 'M', 'كى'), + (0xFC84, 'M', 'كي'), + (0xFC85, 'M', 'لم'), + (0xFC86, 'M', 'لى'), + (0xFC87, 'M', 'لي'), + (0xFC88, 'M', 'ما'), + (0xFC89, 'M', 'مم'), + (0xFC8A, 'M', 'نر'), + (0xFC8B, 'M', 'نز'), + (0xFC8C, 'M', 'نم'), + (0xFC8D, 'M', 'نن'), + (0xFC8E, 'M', 'نى'), + (0xFC8F, 'M', 'ني'), + (0xFC90, 'M', 'ىٰ'), + (0xFC91, 'M', 'ير'), + (0xFC92, 'M', 'يز'), + (0xFC93, 'M', 'يم'), + (0xFC94, 'M', 'ين'), + (0xFC95, 'M', 'يى'), + (0xFC96, 'M', 'يي'), + (0xFC97, 'M', 'ئج'), + (0xFC98, 'M', 'ئح'), + (0xFC99, 'M', 'ئخ'), + (0xFC9A, 'M', 'ئم'), + (0xFC9B, 'M', 'ئه'), + (0xFC9C, 'M', 'بج'), + (0xFC9D, 'M', 'بح'), + (0xFC9E, 'M', 'بخ'), + (0xFC9F, 'M', 'بم'), + (0xFCA0, 'M', 'به'), + (0xFCA1, 'M', 'تج'), + (0xFCA2, 'M', 'تح'), + (0xFCA3, 'M', 'تخ'), + (0xFCA4, 'M', 'تم'), + (0xFCA5, 'M', 'ته'), + (0xFCA6, 'M', 'ثم'), + (0xFCA7, 'M', 'جح'), + (0xFCA8, 'M', 'جم'), + (0xFCA9, 'M', 'حج'), + (0xFCAA, 'M', 'حم'), + (0xFCAB, 'M', 'خج'), + (0xFCAC, 'M', 'خم'), + (0xFCAD, 'M', 'سج'), + (0xFCAE, 'M', 'سح'), + (0xFCAF, 'M', 'سخ'), + (0xFCB0, 'M', 'سم'), + (0xFCB1, 'M', 'صح'), + (0xFCB2, 'M', 'صخ'), + (0xFCB3, 'M', 'صم'), + (0xFCB4, 'M', 'ضج'), + (0xFCB5, 'M', 'ضح'), + (0xFCB6, 'M', 'ضخ'), + (0xFCB7, 'M', 'ضم'), + (0xFCB8, 'M', 'طح'), + (0xFCB9, 'M', 'ظم'), + (0xFCBA, 'M', 'عج'), + ] + +def _seg_47() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFCBB, 'M', 'عم'), + (0xFCBC, 'M', 'غج'), + (0xFCBD, 'M', 'غم'), + (0xFCBE, 'M', 'فج'), + (0xFCBF, 'M', 'فح'), + (0xFCC0, 'M', 'فخ'), + (0xFCC1, 'M', 'فم'), + (0xFCC2, 'M', 'قح'), + (0xFCC3, 'M', 'قم'), + (0xFCC4, 'M', 'كج'), + (0xFCC5, 'M', 'كح'), + (0xFCC6, 'M', 'كخ'), + (0xFCC7, 'M', 'كل'), + (0xFCC8, 'M', 'كم'), + (0xFCC9, 'M', 'لج'), + (0xFCCA, 'M', 'لح'), + (0xFCCB, 'M', 'لخ'), + (0xFCCC, 'M', 'لم'), + (0xFCCD, 'M', 'له'), + (0xFCCE, 'M', 'مج'), + (0xFCCF, 'M', 'مح'), + (0xFCD0, 'M', 'مخ'), + (0xFCD1, 'M', 'مم'), + (0xFCD2, 'M', 'نج'), + (0xFCD3, 'M', 'نح'), + (0xFCD4, 'M', 'نخ'), + (0xFCD5, 'M', 'نم'), + (0xFCD6, 'M', 'نه'), + (0xFCD7, 'M', 'هج'), + (0xFCD8, 'M', 'هم'), + (0xFCD9, 'M', 'هٰ'), + (0xFCDA, 'M', 'يج'), + (0xFCDB, 'M', 'يح'), + (0xFCDC, 'M', 'يخ'), + (0xFCDD, 'M', 'يم'), + (0xFCDE, 'M', 'يه'), + (0xFCDF, 'M', 'ئم'), + (0xFCE0, 'M', 'ئه'), + (0xFCE1, 'M', 'بم'), + (0xFCE2, 'M', 'به'), + (0xFCE3, 'M', 'تم'), + (0xFCE4, 'M', 'ته'), + (0xFCE5, 'M', 'ثم'), + (0xFCE6, 'M', 'ثه'), + (0xFCE7, 'M', 'سم'), + (0xFCE8, 'M', 'سه'), + (0xFCE9, 'M', 'شم'), + (0xFCEA, 'M', 'شه'), + (0xFCEB, 'M', 'كل'), + (0xFCEC, 'M', 'كم'), + (0xFCED, 'M', 'لم'), + (0xFCEE, 'M', 'نم'), + (0xFCEF, 'M', 'نه'), + (0xFCF0, 'M', 'يم'), + (0xFCF1, 'M', 'يه'), + (0xFCF2, 'M', 'ـَّ'), + (0xFCF3, 'M', 'ـُّ'), + (0xFCF4, 'M', 'ـِّ'), + (0xFCF5, 'M', 'طى'), + (0xFCF6, 'M', 'طي'), + (0xFCF7, 'M', 'عى'), + (0xFCF8, 'M', 'عي'), + (0xFCF9, 'M', 'غى'), + (0xFCFA, 'M', 'غي'), + (0xFCFB, 'M', 'سى'), + (0xFCFC, 'M', 'سي'), + (0xFCFD, 'M', 'شى'), + (0xFCFE, 'M', 'شي'), + (0xFCFF, 'M', 'حى'), + (0xFD00, 'M', 'حي'), + (0xFD01, 'M', 'جى'), + (0xFD02, 'M', 'جي'), + (0xFD03, 'M', 'خى'), + (0xFD04, 'M', 'خي'), + (0xFD05, 'M', 'صى'), + (0xFD06, 'M', 'صي'), + (0xFD07, 'M', 'ضى'), + (0xFD08, 'M', 'ضي'), + (0xFD09, 'M', 'شج'), + (0xFD0A, 'M', 'شح'), + (0xFD0B, 'M', 'شخ'), + (0xFD0C, 'M', 'شم'), + (0xFD0D, 'M', 'شر'), + (0xFD0E, 'M', 'سر'), + (0xFD0F, 'M', 'صر'), + (0xFD10, 'M', 'ضر'), + (0xFD11, 'M', 'طى'), + (0xFD12, 'M', 'طي'), + (0xFD13, 'M', 'عى'), + (0xFD14, 'M', 'عي'), + (0xFD15, 'M', 'غى'), + (0xFD16, 'M', 'غي'), + (0xFD17, 'M', 'سى'), + (0xFD18, 'M', 'سي'), + (0xFD19, 'M', 'شى'), + (0xFD1A, 'M', 'شي'), + (0xFD1B, 'M', 'حى'), + (0xFD1C, 'M', 'حي'), + (0xFD1D, 'M', 'جى'), + (0xFD1E, 'M', 'جي'), + ] + +def _seg_48() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFD1F, 'M', 'خى'), + (0xFD20, 'M', 'خي'), + (0xFD21, 'M', 'صى'), + (0xFD22, 'M', 'صي'), + (0xFD23, 'M', 'ضى'), + (0xFD24, 'M', 'ضي'), + (0xFD25, 'M', 'شج'), + (0xFD26, 'M', 'شح'), + (0xFD27, 'M', 'شخ'), + (0xFD28, 'M', 'شم'), + (0xFD29, 'M', 'شر'), + (0xFD2A, 'M', 'سر'), + (0xFD2B, 'M', 'صر'), + (0xFD2C, 'M', 'ضر'), + (0xFD2D, 'M', 'شج'), + (0xFD2E, 'M', 'شح'), + (0xFD2F, 'M', 'شخ'), + (0xFD30, 'M', 'شم'), + (0xFD31, 'M', 'سه'), + (0xFD32, 'M', 'شه'), + (0xFD33, 'M', 'طم'), + (0xFD34, 'M', 'سج'), + (0xFD35, 'M', 'سح'), + (0xFD36, 'M', 'سخ'), + (0xFD37, 'M', 'شج'), + (0xFD38, 'M', 'شح'), + (0xFD39, 'M', 'شخ'), + (0xFD3A, 'M', 'طم'), + (0xFD3B, 'M', 'ظم'), + (0xFD3C, 'M', 'اً'), + (0xFD3E, 'V'), + (0xFD50, 'M', 'تجم'), + (0xFD51, 'M', 'تحج'), + (0xFD53, 'M', 'تحم'), + (0xFD54, 'M', 'تخم'), + (0xFD55, 'M', 'تمج'), + (0xFD56, 'M', 'تمح'), + (0xFD57, 'M', 'تمخ'), + (0xFD58, 'M', 'جمح'), + (0xFD5A, 'M', 'حمي'), + (0xFD5B, 'M', 'حمى'), + (0xFD5C, 'M', 'سحج'), + (0xFD5D, 'M', 'سجح'), + (0xFD5E, 'M', 'سجى'), + (0xFD5F, 'M', 'سمح'), + (0xFD61, 'M', 'سمج'), + (0xFD62, 'M', 'سمم'), + (0xFD64, 'M', 'صحح'), + (0xFD66, 'M', 'صمم'), + (0xFD67, 'M', 'شحم'), + (0xFD69, 'M', 'شجي'), + (0xFD6A, 'M', 'شمخ'), + (0xFD6C, 'M', 'شمم'), + (0xFD6E, 'M', 'ضحى'), + (0xFD6F, 'M', 'ضخم'), + (0xFD71, 'M', 'طمح'), + (0xFD73, 'M', 'طمم'), + (0xFD74, 'M', 'طمي'), + (0xFD75, 'M', 'عجم'), + (0xFD76, 'M', 'عمم'), + (0xFD78, 'M', 'عمى'), + (0xFD79, 'M', 'غمم'), + (0xFD7A, 'M', 'غمي'), + (0xFD7B, 'M', 'غمى'), + (0xFD7C, 'M', 'فخم'), + (0xFD7E, 'M', 'قمح'), + (0xFD7F, 'M', 'قمم'), + (0xFD80, 'M', 'لحم'), + (0xFD81, 'M', 'لحي'), + (0xFD82, 'M', 'لحى'), + (0xFD83, 'M', 'لجج'), + (0xFD85, 'M', 'لخم'), + (0xFD87, 'M', 'لمح'), + (0xFD89, 'M', 'محج'), + (0xFD8A, 'M', 'محم'), + (0xFD8B, 'M', 'محي'), + (0xFD8C, 'M', 'مجح'), + (0xFD8D, 'M', 'مجم'), + (0xFD8E, 'M', 'مخج'), + (0xFD8F, 'M', 'مخم'), + (0xFD90, 'X'), + (0xFD92, 'M', 'مجخ'), + (0xFD93, 'M', 'همج'), + (0xFD94, 'M', 'همم'), + (0xFD95, 'M', 'نحم'), + (0xFD96, 'M', 'نحى'), + (0xFD97, 'M', 'نجم'), + (0xFD99, 'M', 'نجى'), + (0xFD9A, 'M', 'نمي'), + (0xFD9B, 'M', 'نمى'), + (0xFD9C, 'M', 'يمم'), + (0xFD9E, 'M', 'بخي'), + (0xFD9F, 'M', 'تجي'), + (0xFDA0, 'M', 'تجى'), + (0xFDA1, 'M', 'تخي'), + (0xFDA2, 'M', 'تخى'), + (0xFDA3, 'M', 'تمي'), + (0xFDA4, 'M', 'تمى'), + (0xFDA5, 'M', 'جمي'), + (0xFDA6, 'M', 'جحى'), + ] + +def _seg_49() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFDA7, 'M', 'جمى'), + (0xFDA8, 'M', 'سخى'), + (0xFDA9, 'M', 'صحي'), + (0xFDAA, 'M', 'شحي'), + (0xFDAB, 'M', 'ضحي'), + (0xFDAC, 'M', 'لجي'), + (0xFDAD, 'M', 'لمي'), + (0xFDAE, 'M', 'يحي'), + (0xFDAF, 'M', 'يجي'), + (0xFDB0, 'M', 'يمي'), + (0xFDB1, 'M', 'ممي'), + (0xFDB2, 'M', 'قمي'), + (0xFDB3, 'M', 'نحي'), + (0xFDB4, 'M', 'قمح'), + (0xFDB5, 'M', 'لحم'), + (0xFDB6, 'M', 'عمي'), + (0xFDB7, 'M', 'كمي'), + (0xFDB8, 'M', 'نجح'), + (0xFDB9, 'M', 'مخي'), + (0xFDBA, 'M', 'لجم'), + (0xFDBB, 'M', 'كمم'), + (0xFDBC, 'M', 'لجم'), + (0xFDBD, 'M', 'نجح'), + (0xFDBE, 'M', 'جحي'), + (0xFDBF, 'M', 'حجي'), + (0xFDC0, 'M', 'مجي'), + (0xFDC1, 'M', 'فمي'), + (0xFDC2, 'M', 'بحي'), + (0xFDC3, 'M', 'كمم'), + (0xFDC4, 'M', 'عجم'), + (0xFDC5, 'M', 'صمم'), + (0xFDC6, 'M', 'سخي'), + (0xFDC7, 'M', 'نجي'), + (0xFDC8, 'X'), + (0xFDCF, 'V'), + (0xFDD0, 'X'), + (0xFDF0, 'M', 'صلے'), + (0xFDF1, 'M', 'قلے'), + (0xFDF2, 'M', 'الله'), + (0xFDF3, 'M', 'اكبر'), + (0xFDF4, 'M', 'محمد'), + (0xFDF5, 'M', 'صلعم'), + (0xFDF6, 'M', 'رسول'), + (0xFDF7, 'M', 'عليه'), + (0xFDF8, 'M', 'وسلم'), + (0xFDF9, 'M', 'صلى'), + (0xFDFA, '3', 'صلى الله عليه وسلم'), + (0xFDFB, '3', 'جل جلاله'), + (0xFDFC, 'M', 'ریال'), + (0xFDFD, 'V'), + (0xFE00, 'I'), + (0xFE10, '3', ','), + (0xFE11, 'M', '、'), + (0xFE12, 'X'), + (0xFE13, '3', ':'), + (0xFE14, '3', ';'), + (0xFE15, '3', '!'), + (0xFE16, '3', '?'), + (0xFE17, 'M', '〖'), + (0xFE18, 'M', '〗'), + (0xFE19, 'X'), + (0xFE20, 'V'), + (0xFE30, 'X'), + (0xFE31, 'M', '—'), + (0xFE32, 'M', '–'), + (0xFE33, '3', '_'), + (0xFE35, '3', '('), + (0xFE36, '3', ')'), + (0xFE37, '3', '{'), + (0xFE38, '3', '}'), + (0xFE39, 'M', '〔'), + (0xFE3A, 'M', '〕'), + (0xFE3B, 'M', '【'), + (0xFE3C, 'M', '】'), + (0xFE3D, 'M', '《'), + (0xFE3E, 'M', '》'), + (0xFE3F, 'M', '〈'), + (0xFE40, 'M', '〉'), + (0xFE41, 'M', '「'), + (0xFE42, 'M', '」'), + (0xFE43, 'M', '『'), + (0xFE44, 'M', '』'), + (0xFE45, 'V'), + (0xFE47, '3', '['), + (0xFE48, '3', ']'), + (0xFE49, '3', ' ̅'), + (0xFE4D, '3', '_'), + (0xFE50, '3', ','), + (0xFE51, 'M', '、'), + (0xFE52, 'X'), + (0xFE54, '3', ';'), + (0xFE55, '3', ':'), + (0xFE56, '3', '?'), + (0xFE57, '3', '!'), + (0xFE58, 'M', '—'), + (0xFE59, '3', '('), + (0xFE5A, '3', ')'), + (0xFE5B, '3', '{'), + (0xFE5C, '3', '}'), + (0xFE5D, 'M', '〔'), + ] + +def _seg_50() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFE5E, 'M', '〕'), + (0xFE5F, '3', '#'), + (0xFE60, '3', '&'), + (0xFE61, '3', '*'), + (0xFE62, '3', '+'), + (0xFE63, 'M', '-'), + (0xFE64, '3', '<'), + (0xFE65, '3', '>'), + (0xFE66, '3', '='), + (0xFE67, 'X'), + (0xFE68, '3', '\\'), + (0xFE69, '3', '$'), + (0xFE6A, '3', '%'), + (0xFE6B, '3', '@'), + (0xFE6C, 'X'), + (0xFE70, '3', ' ً'), + (0xFE71, 'M', 'ـً'), + (0xFE72, '3', ' ٌ'), + (0xFE73, 'V'), + (0xFE74, '3', ' ٍ'), + (0xFE75, 'X'), + (0xFE76, '3', ' َ'), + (0xFE77, 'M', 'ـَ'), + (0xFE78, '3', ' ُ'), + (0xFE79, 'M', 'ـُ'), + (0xFE7A, '3', ' ِ'), + (0xFE7B, 'M', 'ـِ'), + (0xFE7C, '3', ' ّ'), + (0xFE7D, 'M', 'ـّ'), + (0xFE7E, '3', ' ْ'), + (0xFE7F, 'M', 'ـْ'), + (0xFE80, 'M', 'ء'), + (0xFE81, 'M', 'آ'), + (0xFE83, 'M', 'أ'), + (0xFE85, 'M', 'ؤ'), + (0xFE87, 'M', 'إ'), + (0xFE89, 'M', 'ئ'), + (0xFE8D, 'M', 'ا'), + (0xFE8F, 'M', 'ب'), + (0xFE93, 'M', 'ة'), + (0xFE95, 'M', 'ت'), + (0xFE99, 'M', 'ث'), + (0xFE9D, 'M', 'ج'), + (0xFEA1, 'M', 'ح'), + (0xFEA5, 'M', 'خ'), + (0xFEA9, 'M', 'د'), + (0xFEAB, 'M', 'ذ'), + (0xFEAD, 'M', 'ر'), + (0xFEAF, 'M', 'ز'), + (0xFEB1, 'M', 'س'), + (0xFEB5, 'M', 'ش'), + (0xFEB9, 'M', 'ص'), + (0xFEBD, 'M', 'ض'), + (0xFEC1, 'M', 'ط'), + (0xFEC5, 'M', 'ظ'), + (0xFEC9, 'M', 'ع'), + (0xFECD, 'M', 'غ'), + (0xFED1, 'M', 'ف'), + (0xFED5, 'M', 'ق'), + (0xFED9, 'M', 'ك'), + (0xFEDD, 'M', 'ل'), + (0xFEE1, 'M', 'م'), + (0xFEE5, 'M', 'ن'), + (0xFEE9, 'M', 'ه'), + (0xFEED, 'M', 'و'), + (0xFEEF, 'M', 'ى'), + (0xFEF1, 'M', 'ي'), + (0xFEF5, 'M', 'لآ'), + (0xFEF7, 'M', 'لأ'), + (0xFEF9, 'M', 'لإ'), + (0xFEFB, 'M', 'لا'), + (0xFEFD, 'X'), + (0xFEFF, 'I'), + (0xFF00, 'X'), + (0xFF01, '3', '!'), + (0xFF02, '3', '"'), + (0xFF03, '3', '#'), + (0xFF04, '3', '$'), + (0xFF05, '3', '%'), + (0xFF06, '3', '&'), + (0xFF07, '3', '\''), + (0xFF08, '3', '('), + (0xFF09, '3', ')'), + (0xFF0A, '3', '*'), + (0xFF0B, '3', '+'), + (0xFF0C, '3', ','), + (0xFF0D, 'M', '-'), + (0xFF0E, 'M', '.'), + (0xFF0F, '3', '/'), + (0xFF10, 'M', '0'), + (0xFF11, 'M', '1'), + (0xFF12, 'M', '2'), + (0xFF13, 'M', '3'), + (0xFF14, 'M', '4'), + (0xFF15, 'M', '5'), + (0xFF16, 'M', '6'), + (0xFF17, 'M', '7'), + (0xFF18, 'M', '8'), + (0xFF19, 'M', '9'), + (0xFF1A, '3', ':'), + ] + +def _seg_51() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFF1B, '3', ';'), + (0xFF1C, '3', '<'), + (0xFF1D, '3', '='), + (0xFF1E, '3', '>'), + (0xFF1F, '3', '?'), + (0xFF20, '3', '@'), + (0xFF21, 'M', 'a'), + (0xFF22, 'M', 'b'), + (0xFF23, 'M', 'c'), + (0xFF24, 'M', 'd'), + (0xFF25, 'M', 'e'), + (0xFF26, 'M', 'f'), + (0xFF27, 'M', 'g'), + (0xFF28, 'M', 'h'), + (0xFF29, 'M', 'i'), + (0xFF2A, 'M', 'j'), + (0xFF2B, 'M', 'k'), + (0xFF2C, 'M', 'l'), + (0xFF2D, 'M', 'm'), + (0xFF2E, 'M', 'n'), + (0xFF2F, 'M', 'o'), + (0xFF30, 'M', 'p'), + (0xFF31, 'M', 'q'), + (0xFF32, 'M', 'r'), + (0xFF33, 'M', 's'), + (0xFF34, 'M', 't'), + (0xFF35, 'M', 'u'), + (0xFF36, 'M', 'v'), + (0xFF37, 'M', 'w'), + (0xFF38, 'M', 'x'), + (0xFF39, 'M', 'y'), + (0xFF3A, 'M', 'z'), + (0xFF3B, '3', '['), + (0xFF3C, '3', '\\'), + (0xFF3D, '3', ']'), + (0xFF3E, '3', '^'), + (0xFF3F, '3', '_'), + (0xFF40, '3', '`'), + (0xFF41, 'M', 'a'), + (0xFF42, 'M', 'b'), + (0xFF43, 'M', 'c'), + (0xFF44, 'M', 'd'), + (0xFF45, 'M', 'e'), + (0xFF46, 'M', 'f'), + (0xFF47, 'M', 'g'), + (0xFF48, 'M', 'h'), + (0xFF49, 'M', 'i'), + (0xFF4A, 'M', 'j'), + (0xFF4B, 'M', 'k'), + (0xFF4C, 'M', 'l'), + (0xFF4D, 'M', 'm'), + (0xFF4E, 'M', 'n'), + (0xFF4F, 'M', 'o'), + (0xFF50, 'M', 'p'), + (0xFF51, 'M', 'q'), + (0xFF52, 'M', 'r'), + (0xFF53, 'M', 's'), + (0xFF54, 'M', 't'), + (0xFF55, 'M', 'u'), + (0xFF56, 'M', 'v'), + (0xFF57, 'M', 'w'), + (0xFF58, 'M', 'x'), + (0xFF59, 'M', 'y'), + (0xFF5A, 'M', 'z'), + (0xFF5B, '3', '{'), + (0xFF5C, '3', '|'), + (0xFF5D, '3', '}'), + (0xFF5E, '3', '~'), + (0xFF5F, 'M', '⦅'), + (0xFF60, 'M', '⦆'), + (0xFF61, 'M', '.'), + (0xFF62, 'M', '「'), + (0xFF63, 'M', '」'), + (0xFF64, 'M', '、'), + (0xFF65, 'M', '・'), + (0xFF66, 'M', 'ヲ'), + (0xFF67, 'M', 'ァ'), + (0xFF68, 'M', 'ィ'), + (0xFF69, 'M', 'ゥ'), + (0xFF6A, 'M', 'ェ'), + (0xFF6B, 'M', 'ォ'), + (0xFF6C, 'M', 'ャ'), + (0xFF6D, 'M', 'ュ'), + (0xFF6E, 'M', 'ョ'), + (0xFF6F, 'M', 'ッ'), + (0xFF70, 'M', 'ー'), + (0xFF71, 'M', 'ア'), + (0xFF72, 'M', 'イ'), + (0xFF73, 'M', 'ウ'), + (0xFF74, 'M', 'エ'), + (0xFF75, 'M', 'オ'), + (0xFF76, 'M', 'カ'), + (0xFF77, 'M', 'キ'), + (0xFF78, 'M', 'ク'), + (0xFF79, 'M', 'ケ'), + (0xFF7A, 'M', 'コ'), + (0xFF7B, 'M', 'サ'), + (0xFF7C, 'M', 'シ'), + (0xFF7D, 'M', 'ス'), + (0xFF7E, 'M', 'セ'), + ] + +def _seg_52() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFF7F, 'M', 'ソ'), + (0xFF80, 'M', 'タ'), + (0xFF81, 'M', 'チ'), + (0xFF82, 'M', 'ツ'), + (0xFF83, 'M', 'テ'), + (0xFF84, 'M', 'ト'), + (0xFF85, 'M', 'ナ'), + (0xFF86, 'M', 'ニ'), + (0xFF87, 'M', 'ヌ'), + (0xFF88, 'M', 'ネ'), + (0xFF89, 'M', 'ノ'), + (0xFF8A, 'M', 'ハ'), + (0xFF8B, 'M', 'ヒ'), + (0xFF8C, 'M', 'フ'), + (0xFF8D, 'M', 'ヘ'), + (0xFF8E, 'M', 'ホ'), + (0xFF8F, 'M', 'マ'), + (0xFF90, 'M', 'ミ'), + (0xFF91, 'M', 'ム'), + (0xFF92, 'M', 'メ'), + (0xFF93, 'M', 'モ'), + (0xFF94, 'M', 'ヤ'), + (0xFF95, 'M', 'ユ'), + (0xFF96, 'M', 'ヨ'), + (0xFF97, 'M', 'ラ'), + (0xFF98, 'M', 'リ'), + (0xFF99, 'M', 'ル'), + (0xFF9A, 'M', 'レ'), + (0xFF9B, 'M', 'ロ'), + (0xFF9C, 'M', 'ワ'), + (0xFF9D, 'M', 'ン'), + (0xFF9E, 'M', '゙'), + (0xFF9F, 'M', '゚'), + (0xFFA0, 'X'), + (0xFFA1, 'M', 'ᄀ'), + (0xFFA2, 'M', 'ᄁ'), + (0xFFA3, 'M', 'ᆪ'), + (0xFFA4, 'M', 'ᄂ'), + (0xFFA5, 'M', 'ᆬ'), + (0xFFA6, 'M', 'ᆭ'), + (0xFFA7, 'M', 'ᄃ'), + (0xFFA8, 'M', 'ᄄ'), + (0xFFA9, 'M', 'ᄅ'), + (0xFFAA, 'M', 'ᆰ'), + (0xFFAB, 'M', 'ᆱ'), + (0xFFAC, 'M', 'ᆲ'), + (0xFFAD, 'M', 'ᆳ'), + (0xFFAE, 'M', 'ᆴ'), + (0xFFAF, 'M', 'ᆵ'), + (0xFFB0, 'M', 'ᄚ'), + (0xFFB1, 'M', 'ᄆ'), + (0xFFB2, 'M', 'ᄇ'), + (0xFFB3, 'M', 'ᄈ'), + (0xFFB4, 'M', 'ᄡ'), + (0xFFB5, 'M', 'ᄉ'), + (0xFFB6, 'M', 'ᄊ'), + (0xFFB7, 'M', 'ᄋ'), + (0xFFB8, 'M', 'ᄌ'), + (0xFFB9, 'M', 'ᄍ'), + (0xFFBA, 'M', 'ᄎ'), + (0xFFBB, 'M', 'ᄏ'), + (0xFFBC, 'M', 'ᄐ'), + (0xFFBD, 'M', 'ᄑ'), + (0xFFBE, 'M', 'ᄒ'), + (0xFFBF, 'X'), + (0xFFC2, 'M', 'ᅡ'), + (0xFFC3, 'M', 'ᅢ'), + (0xFFC4, 'M', 'ᅣ'), + (0xFFC5, 'M', 'ᅤ'), + (0xFFC6, 'M', 'ᅥ'), + (0xFFC7, 'M', 'ᅦ'), + (0xFFC8, 'X'), + (0xFFCA, 'M', 'ᅧ'), + (0xFFCB, 'M', 'ᅨ'), + (0xFFCC, 'M', 'ᅩ'), + (0xFFCD, 'M', 'ᅪ'), + (0xFFCE, 'M', 'ᅫ'), + (0xFFCF, 'M', 'ᅬ'), + (0xFFD0, 'X'), + (0xFFD2, 'M', 'ᅭ'), + (0xFFD3, 'M', 'ᅮ'), + (0xFFD4, 'M', 'ᅯ'), + (0xFFD5, 'M', 'ᅰ'), + (0xFFD6, 'M', 'ᅱ'), + (0xFFD7, 'M', 'ᅲ'), + (0xFFD8, 'X'), + (0xFFDA, 'M', 'ᅳ'), + (0xFFDB, 'M', 'ᅴ'), + (0xFFDC, 'M', 'ᅵ'), + (0xFFDD, 'X'), + (0xFFE0, 'M', '¢'), + (0xFFE1, 'M', '£'), + (0xFFE2, 'M', '¬'), + (0xFFE3, '3', ' ̄'), + (0xFFE4, 'M', '¦'), + (0xFFE5, 'M', '¥'), + (0xFFE6, 'M', '₩'), + (0xFFE7, 'X'), + (0xFFE8, 'M', '│'), + (0xFFE9, 'M', '←'), + ] + +def _seg_53() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFFEA, 'M', '↑'), + (0xFFEB, 'M', '→'), + (0xFFEC, 'M', '↓'), + (0xFFED, 'M', '■'), + (0xFFEE, 'M', '○'), + (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'), + (0x1019D, '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'), + (0x1034B, 'X'), + (0x10350, 'V'), + (0x1037B, 'X'), + (0x10380, 'V'), + (0x1039E, 'X'), + (0x1039F, 'V'), + (0x103C4, 'X'), + (0x103C8, 'V'), + (0x103D6, 'X'), + (0x10400, 'M', '𐐨'), + (0x10401, 'M', '𐐩'), + (0x10402, 'M', '𐐪'), + (0x10403, 'M', '𐐫'), + (0x10404, 'M', '𐐬'), + (0x10405, 'M', '𐐭'), + (0x10406, 'M', '𐐮'), + (0x10407, 'M', '𐐯'), + (0x10408, 'M', '𐐰'), + (0x10409, 'M', '𐐱'), + (0x1040A, 'M', '𐐲'), + (0x1040B, 'M', '𐐳'), + (0x1040C, 'M', '𐐴'), + (0x1040D, 'M', '𐐵'), + (0x1040E, 'M', '𐐶'), + (0x1040F, 'M', '𐐷'), + (0x10410, 'M', '𐐸'), + (0x10411, 'M', '𐐹'), + (0x10412, 'M', '𐐺'), + (0x10413, 'M', '𐐻'), + (0x10414, 'M', '𐐼'), + (0x10415, 'M', '𐐽'), + (0x10416, 'M', '𐐾'), + (0x10417, 'M', '𐐿'), + (0x10418, 'M', '𐑀'), + (0x10419, 'M', '𐑁'), + (0x1041A, 'M', '𐑂'), + (0x1041B, 'M', '𐑃'), + (0x1041C, 'M', '𐑄'), + (0x1041D, 'M', '𐑅'), + (0x1041E, 'M', '𐑆'), + (0x1041F, 'M', '𐑇'), + (0x10420, 'M', '𐑈'), + (0x10421, 'M', '𐑉'), + (0x10422, 'M', '𐑊'), + (0x10423, 'M', '𐑋'), + (0x10424, 'M', '𐑌'), + (0x10425, 'M', '𐑍'), + (0x10426, 'M', '𐑎'), + (0x10427, 'M', '𐑏'), + (0x10428, 'V'), + (0x1049E, 'X'), + (0x104A0, 'V'), + (0x104AA, 'X'), + (0x104B0, 'M', '𐓘'), + (0x104B1, 'M', '𐓙'), + (0x104B2, 'M', '𐓚'), + (0x104B3, 'M', '𐓛'), + (0x104B4, 'M', '𐓜'), + (0x104B5, 'M', '𐓝'), + ] + +def _seg_54() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x104B6, 'M', '𐓞'), + (0x104B7, 'M', '𐓟'), + (0x104B8, 'M', '𐓠'), + (0x104B9, 'M', '𐓡'), + (0x104BA, 'M', '𐓢'), + (0x104BB, 'M', '𐓣'), + (0x104BC, 'M', '𐓤'), + (0x104BD, 'M', '𐓥'), + (0x104BE, 'M', '𐓦'), + (0x104BF, 'M', '𐓧'), + (0x104C0, 'M', '𐓨'), + (0x104C1, 'M', '𐓩'), + (0x104C2, 'M', '𐓪'), + (0x104C3, 'M', '𐓫'), + (0x104C4, 'M', '𐓬'), + (0x104C5, 'M', '𐓭'), + (0x104C6, 'M', '𐓮'), + (0x104C7, 'M', '𐓯'), + (0x104C8, 'M', '𐓰'), + (0x104C9, 'M', '𐓱'), + (0x104CA, 'M', '𐓲'), + (0x104CB, 'M', '𐓳'), + (0x104CC, 'M', '𐓴'), + (0x104CD, 'M', '𐓵'), + (0x104CE, 'M', '𐓶'), + (0x104CF, 'M', '𐓷'), + (0x104D0, 'M', '𐓸'), + (0x104D1, 'M', '𐓹'), + (0x104D2, 'M', '𐓺'), + (0x104D3, 'M', '𐓻'), + (0x104D4, 'X'), + (0x104D8, 'V'), + (0x104FC, 'X'), + (0x10500, 'V'), + (0x10528, 'X'), + (0x10530, 'V'), + (0x10564, 'X'), + (0x1056F, 'V'), + (0x10570, 'M', '𐖗'), + (0x10571, 'M', '𐖘'), + (0x10572, 'M', '𐖙'), + (0x10573, 'M', '𐖚'), + (0x10574, 'M', '𐖛'), + (0x10575, 'M', '𐖜'), + (0x10576, 'M', '𐖝'), + (0x10577, 'M', '𐖞'), + (0x10578, 'M', '𐖟'), + (0x10579, 'M', '𐖠'), + (0x1057A, 'M', '𐖡'), + (0x1057B, 'X'), + (0x1057C, 'M', '𐖣'), + (0x1057D, 'M', '𐖤'), + (0x1057E, 'M', '𐖥'), + (0x1057F, 'M', '𐖦'), + (0x10580, 'M', '𐖧'), + (0x10581, 'M', '𐖨'), + (0x10582, 'M', '𐖩'), + (0x10583, 'M', '𐖪'), + (0x10584, 'M', '𐖫'), + (0x10585, 'M', '𐖬'), + (0x10586, 'M', '𐖭'), + (0x10587, 'M', '𐖮'), + (0x10588, 'M', '𐖯'), + (0x10589, 'M', '𐖰'), + (0x1058A, 'M', '𐖱'), + (0x1058B, 'X'), + (0x1058C, 'M', '𐖳'), + (0x1058D, 'M', '𐖴'), + (0x1058E, 'M', '𐖵'), + (0x1058F, 'M', '𐖶'), + (0x10590, 'M', '𐖷'), + (0x10591, 'M', '𐖸'), + (0x10592, 'M', '𐖹'), + (0x10593, 'X'), + (0x10594, 'M', '𐖻'), + (0x10595, 'M', '𐖼'), + (0x10596, 'X'), + (0x10597, 'V'), + (0x105A2, 'X'), + (0x105A3, 'V'), + (0x105B2, 'X'), + (0x105B3, 'V'), + (0x105BA, 'X'), + (0x105BB, 'V'), + (0x105BD, 'X'), + (0x10600, 'V'), + (0x10737, 'X'), + (0x10740, 'V'), + (0x10756, 'X'), + (0x10760, 'V'), + (0x10768, 'X'), + (0x10780, 'V'), + (0x10781, 'M', 'ː'), + (0x10782, 'M', 'ˑ'), + (0x10783, 'M', 'æ'), + (0x10784, 'M', 'ʙ'), + (0x10785, 'M', 'ɓ'), + (0x10786, 'X'), + (0x10787, 'M', 'ʣ'), + (0x10788, 'M', 'ꭦ'), + ] + +def _seg_55() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x10789, 'M', 'ʥ'), + (0x1078A, 'M', 'ʤ'), + (0x1078B, 'M', 'ɖ'), + (0x1078C, 'M', 'ɗ'), + (0x1078D, 'M', 'ᶑ'), + (0x1078E, 'M', 'ɘ'), + (0x1078F, 'M', 'ɞ'), + (0x10790, 'M', 'ʩ'), + (0x10791, 'M', 'ɤ'), + (0x10792, 'M', 'ɢ'), + (0x10793, 'M', 'ɠ'), + (0x10794, 'M', 'ʛ'), + (0x10795, 'M', 'ħ'), + (0x10796, 'M', 'ʜ'), + (0x10797, 'M', 'ɧ'), + (0x10798, 'M', 'ʄ'), + (0x10799, 'M', 'ʪ'), + (0x1079A, 'M', 'ʫ'), + (0x1079B, 'M', 'ɬ'), + (0x1079C, 'M', '𝼄'), + (0x1079D, 'M', 'ꞎ'), + (0x1079E, 'M', 'ɮ'), + (0x1079F, 'M', '𝼅'), + (0x107A0, 'M', 'ʎ'), + (0x107A1, 'M', '𝼆'), + (0x107A2, 'M', 'ø'), + (0x107A3, 'M', 'ɶ'), + (0x107A4, 'M', 'ɷ'), + (0x107A5, 'M', 'q'), + (0x107A6, 'M', 'ɺ'), + (0x107A7, 'M', '𝼈'), + (0x107A8, 'M', 'ɽ'), + (0x107A9, 'M', 'ɾ'), + (0x107AA, 'M', 'ʀ'), + (0x107AB, 'M', 'ʨ'), + (0x107AC, 'M', 'ʦ'), + (0x107AD, 'M', 'ꭧ'), + (0x107AE, 'M', 'ʧ'), + (0x107AF, 'M', 'ʈ'), + (0x107B0, 'M', 'ⱱ'), + (0x107B1, 'X'), + (0x107B2, 'M', 'ʏ'), + (0x107B3, 'M', 'ʡ'), + (0x107B4, 'M', 'ʢ'), + (0x107B5, 'M', 'ʘ'), + (0x107B6, 'M', 'ǀ'), + (0x107B7, 'M', 'ǁ'), + (0x107B8, 'M', 'ǂ'), + (0x107B9, 'M', '𝼊'), + (0x107BA, 'M', '𝼞'), + (0x107BB, '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'), + (0x10A36, 'X'), + (0x10A38, 'V'), + (0x10A3B, 'X'), + (0x10A3F, 'V'), + (0x10A49, 'X'), + (0x10A50, 'V'), + (0x10A59, 'X'), + (0x10A60, 'V'), + (0x10AA0, 'X'), + (0x10AC0, 'V'), + ] + +def _seg_56() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (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', '𐳀'), + (0x10C81, 'M', '𐳁'), + (0x10C82, 'M', '𐳂'), + (0x10C83, 'M', '𐳃'), + (0x10C84, 'M', '𐳄'), + (0x10C85, 'M', '𐳅'), + (0x10C86, 'M', '𐳆'), + (0x10C87, 'M', '𐳇'), + (0x10C88, 'M', '𐳈'), + (0x10C89, 'M', '𐳉'), + (0x10C8A, 'M', '𐳊'), + (0x10C8B, 'M', '𐳋'), + (0x10C8C, 'M', '𐳌'), + (0x10C8D, 'M', '𐳍'), + (0x10C8E, 'M', '𐳎'), + (0x10C8F, 'M', '𐳏'), + (0x10C90, 'M', '𐳐'), + (0x10C91, 'M', '𐳑'), + (0x10C92, 'M', '𐳒'), + (0x10C93, 'M', '𐳓'), + (0x10C94, 'M', '𐳔'), + (0x10C95, 'M', '𐳕'), + (0x10C96, 'M', '𐳖'), + (0x10C97, 'M', '𐳗'), + (0x10C98, 'M', '𐳘'), + (0x10C99, 'M', '𐳙'), + (0x10C9A, 'M', '𐳚'), + (0x10C9B, 'M', '𐳛'), + (0x10C9C, 'M', '𐳜'), + (0x10C9D, 'M', '𐳝'), + (0x10C9E, 'M', '𐳞'), + (0x10C9F, 'M', '𐳟'), + (0x10CA0, 'M', '𐳠'), + (0x10CA1, 'M', '𐳡'), + (0x10CA2, 'M', '𐳢'), + (0x10CA3, 'M', '𐳣'), + (0x10CA4, 'M', '𐳤'), + (0x10CA5, 'M', '𐳥'), + (0x10CA6, 'M', '𐳦'), + (0x10CA7, 'M', '𐳧'), + (0x10CA8, 'M', '𐳨'), + (0x10CA9, 'M', '𐳩'), + (0x10CAA, 'M', '𐳪'), + (0x10CAB, 'M', '𐳫'), + (0x10CAC, 'M', '𐳬'), + (0x10CAD, 'M', '𐳭'), + (0x10CAE, 'M', '𐳮'), + (0x10CAF, 'M', '𐳯'), + (0x10CB0, 'M', '𐳰'), + (0x10CB1, 'M', '𐳱'), + (0x10CB2, 'M', '𐳲'), + (0x10CB3, 'X'), + (0x10CC0, 'V'), + (0x10CF3, 'X'), + (0x10CFA, 'V'), + (0x10D28, 'X'), + (0x10D30, 'V'), + (0x10D3A, 'X'), + (0x10E60, 'V'), + (0x10E7F, 'X'), + (0x10E80, 'V'), + (0x10EAA, 'X'), + (0x10EAB, 'V'), + (0x10EAE, 'X'), + (0x10EB0, 'V'), + (0x10EB2, 'X'), + (0x10EFD, 'V'), + (0x10F28, 'X'), + (0x10F30, 'V'), + (0x10F5A, 'X'), + (0x10F70, 'V'), + (0x10F8A, 'X'), + (0x10FB0, 'V'), + (0x10FCC, 'X'), + (0x10FE0, 'V'), + (0x10FF7, 'X'), + (0x11000, 'V'), + (0x1104E, 'X'), + (0x11052, 'V'), + (0x11076, 'X'), + (0x1107F, 'V'), + (0x110BD, 'X'), + (0x110BE, 'V'), + ] + +def _seg_57() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x110C3, 'X'), + (0x110D0, 'V'), + (0x110E9, 'X'), + (0x110F0, 'V'), + (0x110FA, 'X'), + (0x11100, 'V'), + (0x11135, 'X'), + (0x11136, 'V'), + (0x11148, 'X'), + (0x11150, 'V'), + (0x11177, 'X'), + (0x11180, 'V'), + (0x111E0, 'X'), + (0x111E1, 'V'), + (0x111F5, 'X'), + (0x11200, 'V'), + (0x11212, 'X'), + (0x11213, 'V'), + (0x11242, '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'), + (0x1133B, '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'), + (0x11400, 'V'), + (0x1145C, 'X'), + (0x1145D, 'V'), + (0x11462, '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'), + (0x116BA, 'X'), + (0x116C0, 'V'), + (0x116CA, 'X'), + (0x11700, 'V'), + (0x1171B, 'X'), + (0x1171D, 'V'), + (0x1172C, 'X'), + (0x11730, 'V'), + (0x11747, 'X'), + (0x11800, 'V'), + (0x1183C, 'X'), + (0x118A0, 'M', '𑣀'), + (0x118A1, 'M', '𑣁'), + (0x118A2, 'M', '𑣂'), + (0x118A3, 'M', '𑣃'), + (0x118A4, 'M', '𑣄'), + (0x118A5, 'M', '𑣅'), + (0x118A6, 'M', '𑣆'), + ] + +def _seg_58() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x118A7, 'M', '𑣇'), + (0x118A8, 'M', '𑣈'), + (0x118A9, 'M', '𑣉'), + (0x118AA, 'M', '𑣊'), + (0x118AB, 'M', '𑣋'), + (0x118AC, 'M', '𑣌'), + (0x118AD, 'M', '𑣍'), + (0x118AE, 'M', '𑣎'), + (0x118AF, 'M', '𑣏'), + (0x118B0, 'M', '𑣐'), + (0x118B1, 'M', '𑣑'), + (0x118B2, 'M', '𑣒'), + (0x118B3, 'M', '𑣓'), + (0x118B4, 'M', '𑣔'), + (0x118B5, 'M', '𑣕'), + (0x118B6, 'M', '𑣖'), + (0x118B7, 'M', '𑣗'), + (0x118B8, 'M', '𑣘'), + (0x118B9, 'M', '𑣙'), + (0x118BA, 'M', '𑣚'), + (0x118BB, 'M', '𑣛'), + (0x118BC, 'M', '𑣜'), + (0x118BD, 'M', '𑣝'), + (0x118BE, 'M', '𑣞'), + (0x118BF, 'M', '𑣟'), + (0x118C0, 'V'), + (0x118F3, 'X'), + (0x118FF, 'V'), + (0x11907, 'X'), + (0x11909, 'V'), + (0x1190A, 'X'), + (0x1190C, 'V'), + (0x11914, 'X'), + (0x11915, 'V'), + (0x11917, 'X'), + (0x11918, 'V'), + (0x11936, 'X'), + (0x11937, 'V'), + (0x11939, 'X'), + (0x1193B, 'V'), + (0x11947, 'X'), + (0x11950, 'V'), + (0x1195A, 'X'), + (0x119A0, 'V'), + (0x119A8, 'X'), + (0x119AA, 'V'), + (0x119D8, 'X'), + (0x119DA, 'V'), + (0x119E5, 'X'), + (0x11A00, 'V'), + (0x11A48, 'X'), + (0x11A50, 'V'), + (0x11AA3, 'X'), + (0x11AB0, 'V'), + (0x11AF9, 'X'), + (0x11B00, 'V'), + (0x11B0A, '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'), + (0x11D3F, 'V'), + (0x11D48, 'X'), + (0x11D50, 'V'), + (0x11D5A, 'X'), + (0x11D60, 'V'), + (0x11D66, 'X'), + (0x11D67, 'V'), + (0x11D69, 'X'), + (0x11D6A, 'V'), + (0x11D8F, 'X'), + (0x11D90, 'V'), + (0x11D92, 'X'), + (0x11D93, 'V'), + (0x11D99, 'X'), + (0x11DA0, 'V'), + (0x11DAA, 'X'), + (0x11EE0, 'V'), + (0x11EF9, 'X'), + (0x11F00, 'V'), + ] + +def _seg_59() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x11F11, 'X'), + (0x11F12, 'V'), + (0x11F3B, 'X'), + (0x11F3E, 'V'), + (0x11F5A, 'X'), + (0x11FB0, 'V'), + (0x11FB1, 'X'), + (0x11FC0, 'V'), + (0x11FF2, 'X'), + (0x11FFF, 'V'), + (0x1239A, 'X'), + (0x12400, 'V'), + (0x1246F, 'X'), + (0x12470, 'V'), + (0x12475, 'X'), + (0x12480, 'V'), + (0x12544, 'X'), + (0x12F90, 'V'), + (0x12FF3, 'X'), + (0x13000, 'V'), + (0x13430, 'X'), + (0x13440, 'V'), + (0x13456, 'X'), + (0x14400, 'V'), + (0x14647, 'X'), + (0x16800, 'V'), + (0x16A39, 'X'), + (0x16A40, 'V'), + (0x16A5F, 'X'), + (0x16A60, 'V'), + (0x16A6A, 'X'), + (0x16A6E, 'V'), + (0x16ABF, 'X'), + (0x16AC0, 'V'), + (0x16ACA, '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'), + (0x16E40, 'M', '𖹠'), + (0x16E41, 'M', '𖹡'), + (0x16E42, 'M', '𖹢'), + (0x16E43, 'M', '𖹣'), + (0x16E44, 'M', '𖹤'), + (0x16E45, 'M', '𖹥'), + (0x16E46, 'M', '𖹦'), + (0x16E47, 'M', '𖹧'), + (0x16E48, 'M', '𖹨'), + (0x16E49, 'M', '𖹩'), + (0x16E4A, 'M', '𖹪'), + (0x16E4B, 'M', '𖹫'), + (0x16E4C, 'M', '𖹬'), + (0x16E4D, 'M', '𖹭'), + (0x16E4E, 'M', '𖹮'), + (0x16E4F, 'M', '𖹯'), + (0x16E50, 'M', '𖹰'), + (0x16E51, 'M', '𖹱'), + (0x16E52, 'M', '𖹲'), + (0x16E53, 'M', '𖹳'), + (0x16E54, 'M', '𖹴'), + (0x16E55, 'M', '𖹵'), + (0x16E56, 'M', '𖹶'), + (0x16E57, 'M', '𖹷'), + (0x16E58, 'M', '𖹸'), + (0x16E59, 'M', '𖹹'), + (0x16E5A, 'M', '𖹺'), + (0x16E5B, 'M', '𖹻'), + (0x16E5C, 'M', '𖹼'), + (0x16E5D, 'M', '𖹽'), + (0x16E5E, 'M', '𖹾'), + (0x16E5F, 'M', '𖹿'), + (0x16E60, 'V'), + (0x16E9B, 'X'), + (0x16F00, 'V'), + (0x16F4B, 'X'), + (0x16F4F, 'V'), + (0x16F88, 'X'), + (0x16F8F, 'V'), + (0x16FA0, 'X'), + (0x16FE0, 'V'), + (0x16FE5, 'X'), + (0x16FF0, 'V'), + (0x16FF2, 'X'), + (0x17000, 'V'), + (0x187F8, 'X'), + (0x18800, 'V'), + (0x18CD6, 'X'), + (0x18D00, 'V'), + (0x18D09, 'X'), + (0x1AFF0, 'V'), + ] + +def _seg_60() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1AFF4, 'X'), + (0x1AFF5, 'V'), + (0x1AFFC, 'X'), + (0x1AFFD, 'V'), + (0x1AFFF, 'X'), + (0x1B000, 'V'), + (0x1B123, 'X'), + (0x1B132, 'V'), + (0x1B133, 'X'), + (0x1B150, 'V'), + (0x1B153, 'X'), + (0x1B155, 'V'), + (0x1B156, 'X'), + (0x1B164, 'V'), + (0x1B168, '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'), + (0x1CF00, 'V'), + (0x1CF2E, 'X'), + (0x1CF30, 'V'), + (0x1CF47, 'X'), + (0x1CF50, 'V'), + (0x1CFC4, 'X'), + (0x1D000, 'V'), + (0x1D0F6, 'X'), + (0x1D100, 'V'), + (0x1D127, 'X'), + (0x1D129, 'V'), + (0x1D15E, 'M', '𝅗𝅥'), + (0x1D15F, 'M', '𝅘𝅥'), + (0x1D160, 'M', '𝅘𝅥𝅮'), + (0x1D161, 'M', '𝅘𝅥𝅯'), + (0x1D162, 'M', '𝅘𝅥𝅰'), + (0x1D163, 'M', '𝅘𝅥𝅱'), + (0x1D164, 'M', '𝅘𝅥𝅲'), + (0x1D165, 'V'), + (0x1D173, 'X'), + (0x1D17B, 'V'), + (0x1D1BB, 'M', '𝆹𝅥'), + (0x1D1BC, 'M', '𝆺𝅥'), + (0x1D1BD, 'M', '𝆹𝅥𝅮'), + (0x1D1BE, 'M', '𝆺𝅥𝅮'), + (0x1D1BF, 'M', '𝆹𝅥𝅯'), + (0x1D1C0, 'M', '𝆺𝅥𝅯'), + (0x1D1C1, 'V'), + (0x1D1EB, 'X'), + (0x1D200, 'V'), + (0x1D246, 'X'), + (0x1D2C0, 'V'), + (0x1D2D4, 'X'), + (0x1D2E0, 'V'), + (0x1D2F4, 'X'), + (0x1D300, 'V'), + (0x1D357, 'X'), + (0x1D360, 'V'), + (0x1D379, 'X'), + (0x1D400, 'M', 'a'), + (0x1D401, 'M', 'b'), + (0x1D402, 'M', 'c'), + (0x1D403, 'M', 'd'), + (0x1D404, 'M', 'e'), + (0x1D405, 'M', 'f'), + (0x1D406, 'M', 'g'), + (0x1D407, 'M', 'h'), + (0x1D408, 'M', 'i'), + (0x1D409, 'M', 'j'), + (0x1D40A, 'M', 'k'), + (0x1D40B, 'M', 'l'), + (0x1D40C, 'M', 'm'), + (0x1D40D, 'M', 'n'), + (0x1D40E, 'M', 'o'), + (0x1D40F, 'M', 'p'), + (0x1D410, 'M', 'q'), + (0x1D411, 'M', 'r'), + (0x1D412, 'M', 's'), + (0x1D413, 'M', 't'), + (0x1D414, 'M', 'u'), + (0x1D415, 'M', 'v'), + (0x1D416, 'M', 'w'), + (0x1D417, 'M', 'x'), + (0x1D418, 'M', 'y'), + (0x1D419, 'M', 'z'), + (0x1D41A, 'M', 'a'), + (0x1D41B, 'M', 'b'), + (0x1D41C, 'M', 'c'), + (0x1D41D, 'M', 'd'), + (0x1D41E, 'M', 'e'), + (0x1D41F, 'M', 'f'), + (0x1D420, 'M', 'g'), + ] + +def _seg_61() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D421, 'M', 'h'), + (0x1D422, 'M', 'i'), + (0x1D423, 'M', 'j'), + (0x1D424, 'M', 'k'), + (0x1D425, 'M', 'l'), + (0x1D426, 'M', 'm'), + (0x1D427, 'M', 'n'), + (0x1D428, 'M', 'o'), + (0x1D429, 'M', 'p'), + (0x1D42A, 'M', 'q'), + (0x1D42B, 'M', 'r'), + (0x1D42C, 'M', 's'), + (0x1D42D, 'M', 't'), + (0x1D42E, 'M', 'u'), + (0x1D42F, 'M', 'v'), + (0x1D430, 'M', 'w'), + (0x1D431, 'M', 'x'), + (0x1D432, 'M', 'y'), + (0x1D433, 'M', 'z'), + (0x1D434, 'M', 'a'), + (0x1D435, 'M', 'b'), + (0x1D436, 'M', 'c'), + (0x1D437, 'M', 'd'), + (0x1D438, 'M', 'e'), + (0x1D439, 'M', 'f'), + (0x1D43A, 'M', 'g'), + (0x1D43B, 'M', 'h'), + (0x1D43C, 'M', 'i'), + (0x1D43D, 'M', 'j'), + (0x1D43E, 'M', 'k'), + (0x1D43F, 'M', 'l'), + (0x1D440, 'M', 'm'), + (0x1D441, 'M', 'n'), + (0x1D442, 'M', 'o'), + (0x1D443, 'M', 'p'), + (0x1D444, 'M', 'q'), + (0x1D445, 'M', 'r'), + (0x1D446, 'M', 's'), + (0x1D447, 'M', 't'), + (0x1D448, 'M', 'u'), + (0x1D449, 'M', 'v'), + (0x1D44A, 'M', 'w'), + (0x1D44B, 'M', 'x'), + (0x1D44C, 'M', 'y'), + (0x1D44D, 'M', 'z'), + (0x1D44E, 'M', 'a'), + (0x1D44F, 'M', 'b'), + (0x1D450, 'M', 'c'), + (0x1D451, 'M', 'd'), + (0x1D452, 'M', 'e'), + (0x1D453, 'M', 'f'), + (0x1D454, 'M', 'g'), + (0x1D455, 'X'), + (0x1D456, 'M', 'i'), + (0x1D457, 'M', 'j'), + (0x1D458, 'M', 'k'), + (0x1D459, 'M', 'l'), + (0x1D45A, 'M', 'm'), + (0x1D45B, 'M', 'n'), + (0x1D45C, 'M', 'o'), + (0x1D45D, 'M', 'p'), + (0x1D45E, 'M', 'q'), + (0x1D45F, 'M', 'r'), + (0x1D460, 'M', 's'), + (0x1D461, 'M', 't'), + (0x1D462, 'M', 'u'), + (0x1D463, 'M', 'v'), + (0x1D464, 'M', 'w'), + (0x1D465, 'M', 'x'), + (0x1D466, 'M', 'y'), + (0x1D467, 'M', 'z'), + (0x1D468, 'M', 'a'), + (0x1D469, 'M', 'b'), + (0x1D46A, 'M', 'c'), + (0x1D46B, 'M', 'd'), + (0x1D46C, 'M', 'e'), + (0x1D46D, 'M', 'f'), + (0x1D46E, 'M', 'g'), + (0x1D46F, 'M', 'h'), + (0x1D470, 'M', 'i'), + (0x1D471, 'M', 'j'), + (0x1D472, 'M', 'k'), + (0x1D473, 'M', 'l'), + (0x1D474, 'M', 'm'), + (0x1D475, 'M', 'n'), + (0x1D476, 'M', 'o'), + (0x1D477, 'M', 'p'), + (0x1D478, 'M', 'q'), + (0x1D479, 'M', 'r'), + (0x1D47A, 'M', 's'), + (0x1D47B, 'M', 't'), + (0x1D47C, 'M', 'u'), + (0x1D47D, 'M', 'v'), + (0x1D47E, 'M', 'w'), + (0x1D47F, 'M', 'x'), + (0x1D480, 'M', 'y'), + (0x1D481, 'M', 'z'), + (0x1D482, 'M', 'a'), + (0x1D483, 'M', 'b'), + (0x1D484, 'M', 'c'), + ] + +def _seg_62() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D485, 'M', 'd'), + (0x1D486, 'M', 'e'), + (0x1D487, 'M', 'f'), + (0x1D488, 'M', 'g'), + (0x1D489, 'M', 'h'), + (0x1D48A, 'M', 'i'), + (0x1D48B, 'M', 'j'), + (0x1D48C, 'M', 'k'), + (0x1D48D, 'M', 'l'), + (0x1D48E, 'M', 'm'), + (0x1D48F, 'M', 'n'), + (0x1D490, 'M', 'o'), + (0x1D491, 'M', 'p'), + (0x1D492, 'M', 'q'), + (0x1D493, 'M', 'r'), + (0x1D494, 'M', 's'), + (0x1D495, 'M', 't'), + (0x1D496, 'M', 'u'), + (0x1D497, 'M', 'v'), + (0x1D498, 'M', 'w'), + (0x1D499, 'M', 'x'), + (0x1D49A, 'M', 'y'), + (0x1D49B, 'M', 'z'), + (0x1D49C, 'M', 'a'), + (0x1D49D, 'X'), + (0x1D49E, 'M', 'c'), + (0x1D49F, 'M', 'd'), + (0x1D4A0, 'X'), + (0x1D4A2, 'M', 'g'), + (0x1D4A3, 'X'), + (0x1D4A5, 'M', 'j'), + (0x1D4A6, 'M', 'k'), + (0x1D4A7, 'X'), + (0x1D4A9, 'M', 'n'), + (0x1D4AA, 'M', 'o'), + (0x1D4AB, 'M', 'p'), + (0x1D4AC, 'M', 'q'), + (0x1D4AD, 'X'), + (0x1D4AE, 'M', 's'), + (0x1D4AF, 'M', 't'), + (0x1D4B0, 'M', 'u'), + (0x1D4B1, 'M', 'v'), + (0x1D4B2, 'M', 'w'), + (0x1D4B3, 'M', 'x'), + (0x1D4B4, 'M', 'y'), + (0x1D4B5, 'M', 'z'), + (0x1D4B6, 'M', 'a'), + (0x1D4B7, 'M', 'b'), + (0x1D4B8, 'M', 'c'), + (0x1D4B9, 'M', 'd'), + (0x1D4BA, 'X'), + (0x1D4BB, 'M', 'f'), + (0x1D4BC, 'X'), + (0x1D4BD, 'M', 'h'), + (0x1D4BE, 'M', 'i'), + (0x1D4BF, 'M', 'j'), + (0x1D4C0, 'M', 'k'), + (0x1D4C1, 'M', 'l'), + (0x1D4C2, 'M', 'm'), + (0x1D4C3, 'M', 'n'), + (0x1D4C4, 'X'), + (0x1D4C5, 'M', 'p'), + (0x1D4C6, 'M', 'q'), + (0x1D4C7, 'M', 'r'), + (0x1D4C8, 'M', 's'), + (0x1D4C9, 'M', 't'), + (0x1D4CA, 'M', 'u'), + (0x1D4CB, 'M', 'v'), + (0x1D4CC, 'M', 'w'), + (0x1D4CD, 'M', 'x'), + (0x1D4CE, 'M', 'y'), + (0x1D4CF, 'M', 'z'), + (0x1D4D0, 'M', 'a'), + (0x1D4D1, 'M', 'b'), + (0x1D4D2, 'M', 'c'), + (0x1D4D3, 'M', 'd'), + (0x1D4D4, 'M', 'e'), + (0x1D4D5, 'M', 'f'), + (0x1D4D6, 'M', 'g'), + (0x1D4D7, 'M', 'h'), + (0x1D4D8, 'M', 'i'), + (0x1D4D9, 'M', 'j'), + (0x1D4DA, 'M', 'k'), + (0x1D4DB, 'M', 'l'), + (0x1D4DC, 'M', 'm'), + (0x1D4DD, 'M', 'n'), + (0x1D4DE, 'M', 'o'), + (0x1D4DF, 'M', 'p'), + (0x1D4E0, 'M', 'q'), + (0x1D4E1, 'M', 'r'), + (0x1D4E2, 'M', 's'), + (0x1D4E3, 'M', 't'), + (0x1D4E4, 'M', 'u'), + (0x1D4E5, 'M', 'v'), + (0x1D4E6, 'M', 'w'), + (0x1D4E7, 'M', 'x'), + (0x1D4E8, 'M', 'y'), + (0x1D4E9, 'M', 'z'), + (0x1D4EA, 'M', 'a'), + (0x1D4EB, 'M', 'b'), + ] + +def _seg_63() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D4EC, 'M', 'c'), + (0x1D4ED, 'M', 'd'), + (0x1D4EE, 'M', 'e'), + (0x1D4EF, 'M', 'f'), + (0x1D4F0, 'M', 'g'), + (0x1D4F1, 'M', 'h'), + (0x1D4F2, 'M', 'i'), + (0x1D4F3, 'M', 'j'), + (0x1D4F4, 'M', 'k'), + (0x1D4F5, 'M', 'l'), + (0x1D4F6, 'M', 'm'), + (0x1D4F7, 'M', 'n'), + (0x1D4F8, 'M', 'o'), + (0x1D4F9, 'M', 'p'), + (0x1D4FA, 'M', 'q'), + (0x1D4FB, 'M', 'r'), + (0x1D4FC, 'M', 's'), + (0x1D4FD, 'M', 't'), + (0x1D4FE, 'M', 'u'), + (0x1D4FF, 'M', 'v'), + (0x1D500, 'M', 'w'), + (0x1D501, 'M', 'x'), + (0x1D502, 'M', 'y'), + (0x1D503, 'M', 'z'), + (0x1D504, 'M', 'a'), + (0x1D505, 'M', 'b'), + (0x1D506, 'X'), + (0x1D507, 'M', 'd'), + (0x1D508, 'M', 'e'), + (0x1D509, 'M', 'f'), + (0x1D50A, 'M', 'g'), + (0x1D50B, 'X'), + (0x1D50D, 'M', 'j'), + (0x1D50E, 'M', 'k'), + (0x1D50F, 'M', 'l'), + (0x1D510, 'M', 'm'), + (0x1D511, 'M', 'n'), + (0x1D512, 'M', 'o'), + (0x1D513, 'M', 'p'), + (0x1D514, 'M', 'q'), + (0x1D515, 'X'), + (0x1D516, 'M', 's'), + (0x1D517, 'M', 't'), + (0x1D518, 'M', 'u'), + (0x1D519, 'M', 'v'), + (0x1D51A, 'M', 'w'), + (0x1D51B, 'M', 'x'), + (0x1D51C, 'M', 'y'), + (0x1D51D, 'X'), + (0x1D51E, 'M', 'a'), + (0x1D51F, 'M', 'b'), + (0x1D520, 'M', 'c'), + (0x1D521, 'M', 'd'), + (0x1D522, 'M', 'e'), + (0x1D523, 'M', 'f'), + (0x1D524, 'M', 'g'), + (0x1D525, 'M', 'h'), + (0x1D526, 'M', 'i'), + (0x1D527, 'M', 'j'), + (0x1D528, 'M', 'k'), + (0x1D529, 'M', 'l'), + (0x1D52A, 'M', 'm'), + (0x1D52B, 'M', 'n'), + (0x1D52C, 'M', 'o'), + (0x1D52D, 'M', 'p'), + (0x1D52E, 'M', 'q'), + (0x1D52F, 'M', 'r'), + (0x1D530, 'M', 's'), + (0x1D531, 'M', 't'), + (0x1D532, 'M', 'u'), + (0x1D533, 'M', 'v'), + (0x1D534, 'M', 'w'), + (0x1D535, 'M', 'x'), + (0x1D536, 'M', 'y'), + (0x1D537, 'M', 'z'), + (0x1D538, 'M', 'a'), + (0x1D539, 'M', 'b'), + (0x1D53A, 'X'), + (0x1D53B, 'M', 'd'), + (0x1D53C, 'M', 'e'), + (0x1D53D, 'M', 'f'), + (0x1D53E, 'M', 'g'), + (0x1D53F, 'X'), + (0x1D540, 'M', 'i'), + (0x1D541, 'M', 'j'), + (0x1D542, 'M', 'k'), + (0x1D543, 'M', 'l'), + (0x1D544, 'M', 'm'), + (0x1D545, 'X'), + (0x1D546, 'M', 'o'), + (0x1D547, 'X'), + (0x1D54A, 'M', 's'), + (0x1D54B, 'M', 't'), + (0x1D54C, 'M', 'u'), + (0x1D54D, 'M', 'v'), + (0x1D54E, 'M', 'w'), + (0x1D54F, 'M', 'x'), + (0x1D550, 'M', 'y'), + (0x1D551, 'X'), + (0x1D552, 'M', 'a'), + ] + +def _seg_64() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D553, 'M', 'b'), + (0x1D554, 'M', 'c'), + (0x1D555, 'M', 'd'), + (0x1D556, 'M', 'e'), + (0x1D557, 'M', 'f'), + (0x1D558, 'M', 'g'), + (0x1D559, 'M', 'h'), + (0x1D55A, 'M', 'i'), + (0x1D55B, 'M', 'j'), + (0x1D55C, 'M', 'k'), + (0x1D55D, 'M', 'l'), + (0x1D55E, 'M', 'm'), + (0x1D55F, 'M', 'n'), + (0x1D560, 'M', 'o'), + (0x1D561, 'M', 'p'), + (0x1D562, 'M', 'q'), + (0x1D563, 'M', 'r'), + (0x1D564, 'M', 's'), + (0x1D565, 'M', 't'), + (0x1D566, 'M', 'u'), + (0x1D567, 'M', 'v'), + (0x1D568, 'M', 'w'), + (0x1D569, 'M', 'x'), + (0x1D56A, 'M', 'y'), + (0x1D56B, 'M', 'z'), + (0x1D56C, 'M', 'a'), + (0x1D56D, 'M', 'b'), + (0x1D56E, 'M', 'c'), + (0x1D56F, 'M', 'd'), + (0x1D570, 'M', 'e'), + (0x1D571, 'M', 'f'), + (0x1D572, 'M', 'g'), + (0x1D573, 'M', 'h'), + (0x1D574, 'M', 'i'), + (0x1D575, 'M', 'j'), + (0x1D576, 'M', 'k'), + (0x1D577, 'M', 'l'), + (0x1D578, 'M', 'm'), + (0x1D579, 'M', 'n'), + (0x1D57A, 'M', 'o'), + (0x1D57B, 'M', 'p'), + (0x1D57C, 'M', 'q'), + (0x1D57D, 'M', 'r'), + (0x1D57E, 'M', 's'), + (0x1D57F, 'M', 't'), + (0x1D580, 'M', 'u'), + (0x1D581, 'M', 'v'), + (0x1D582, 'M', 'w'), + (0x1D583, 'M', 'x'), + (0x1D584, 'M', 'y'), + (0x1D585, 'M', 'z'), + (0x1D586, 'M', 'a'), + (0x1D587, 'M', 'b'), + (0x1D588, 'M', 'c'), + (0x1D589, 'M', 'd'), + (0x1D58A, 'M', 'e'), + (0x1D58B, 'M', 'f'), + (0x1D58C, 'M', 'g'), + (0x1D58D, 'M', 'h'), + (0x1D58E, 'M', 'i'), + (0x1D58F, 'M', 'j'), + (0x1D590, 'M', 'k'), + (0x1D591, 'M', 'l'), + (0x1D592, 'M', 'm'), + (0x1D593, 'M', 'n'), + (0x1D594, 'M', 'o'), + (0x1D595, 'M', 'p'), + (0x1D596, 'M', 'q'), + (0x1D597, 'M', 'r'), + (0x1D598, 'M', 's'), + (0x1D599, 'M', 't'), + (0x1D59A, 'M', 'u'), + (0x1D59B, 'M', 'v'), + (0x1D59C, 'M', 'w'), + (0x1D59D, 'M', 'x'), + (0x1D59E, 'M', 'y'), + (0x1D59F, 'M', 'z'), + (0x1D5A0, 'M', 'a'), + (0x1D5A1, 'M', 'b'), + (0x1D5A2, 'M', 'c'), + (0x1D5A3, 'M', 'd'), + (0x1D5A4, 'M', 'e'), + (0x1D5A5, 'M', 'f'), + (0x1D5A6, 'M', 'g'), + (0x1D5A7, 'M', 'h'), + (0x1D5A8, 'M', 'i'), + (0x1D5A9, 'M', 'j'), + (0x1D5AA, 'M', 'k'), + (0x1D5AB, 'M', 'l'), + (0x1D5AC, 'M', 'm'), + (0x1D5AD, 'M', 'n'), + (0x1D5AE, 'M', 'o'), + (0x1D5AF, 'M', 'p'), + (0x1D5B0, 'M', 'q'), + (0x1D5B1, 'M', 'r'), + (0x1D5B2, 'M', 's'), + (0x1D5B3, 'M', 't'), + (0x1D5B4, 'M', 'u'), + (0x1D5B5, 'M', 'v'), + (0x1D5B6, 'M', 'w'), + ] + +def _seg_65() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D5B7, 'M', 'x'), + (0x1D5B8, 'M', 'y'), + (0x1D5B9, 'M', 'z'), + (0x1D5BA, 'M', 'a'), + (0x1D5BB, 'M', 'b'), + (0x1D5BC, 'M', 'c'), + (0x1D5BD, 'M', 'd'), + (0x1D5BE, 'M', 'e'), + (0x1D5BF, 'M', 'f'), + (0x1D5C0, 'M', 'g'), + (0x1D5C1, 'M', 'h'), + (0x1D5C2, 'M', 'i'), + (0x1D5C3, 'M', 'j'), + (0x1D5C4, 'M', 'k'), + (0x1D5C5, 'M', 'l'), + (0x1D5C6, 'M', 'm'), + (0x1D5C7, 'M', 'n'), + (0x1D5C8, 'M', 'o'), + (0x1D5C9, 'M', 'p'), + (0x1D5CA, 'M', 'q'), + (0x1D5CB, 'M', 'r'), + (0x1D5CC, 'M', 's'), + (0x1D5CD, 'M', 't'), + (0x1D5CE, 'M', 'u'), + (0x1D5CF, 'M', 'v'), + (0x1D5D0, 'M', 'w'), + (0x1D5D1, 'M', 'x'), + (0x1D5D2, 'M', 'y'), + (0x1D5D3, 'M', 'z'), + (0x1D5D4, 'M', 'a'), + (0x1D5D5, 'M', 'b'), + (0x1D5D6, 'M', 'c'), + (0x1D5D7, 'M', 'd'), + (0x1D5D8, 'M', 'e'), + (0x1D5D9, 'M', 'f'), + (0x1D5DA, 'M', 'g'), + (0x1D5DB, 'M', 'h'), + (0x1D5DC, 'M', 'i'), + (0x1D5DD, 'M', 'j'), + (0x1D5DE, 'M', 'k'), + (0x1D5DF, 'M', 'l'), + (0x1D5E0, 'M', 'm'), + (0x1D5E1, 'M', 'n'), + (0x1D5E2, 'M', 'o'), + (0x1D5E3, 'M', 'p'), + (0x1D5E4, 'M', 'q'), + (0x1D5E5, 'M', 'r'), + (0x1D5E6, 'M', 's'), + (0x1D5E7, 'M', 't'), + (0x1D5E8, 'M', 'u'), + (0x1D5E9, 'M', 'v'), + (0x1D5EA, 'M', 'w'), + (0x1D5EB, 'M', 'x'), + (0x1D5EC, 'M', 'y'), + (0x1D5ED, 'M', 'z'), + (0x1D5EE, 'M', 'a'), + (0x1D5EF, 'M', 'b'), + (0x1D5F0, 'M', 'c'), + (0x1D5F1, 'M', 'd'), + (0x1D5F2, 'M', 'e'), + (0x1D5F3, 'M', 'f'), + (0x1D5F4, 'M', 'g'), + (0x1D5F5, 'M', 'h'), + (0x1D5F6, 'M', 'i'), + (0x1D5F7, 'M', 'j'), + (0x1D5F8, 'M', 'k'), + (0x1D5F9, 'M', 'l'), + (0x1D5FA, 'M', 'm'), + (0x1D5FB, 'M', 'n'), + (0x1D5FC, 'M', 'o'), + (0x1D5FD, 'M', 'p'), + (0x1D5FE, 'M', 'q'), + (0x1D5FF, 'M', 'r'), + (0x1D600, 'M', 's'), + (0x1D601, 'M', 't'), + (0x1D602, 'M', 'u'), + (0x1D603, 'M', 'v'), + (0x1D604, 'M', 'w'), + (0x1D605, 'M', 'x'), + (0x1D606, 'M', 'y'), + (0x1D607, 'M', 'z'), + (0x1D608, 'M', 'a'), + (0x1D609, 'M', 'b'), + (0x1D60A, 'M', 'c'), + (0x1D60B, 'M', 'd'), + (0x1D60C, 'M', 'e'), + (0x1D60D, 'M', 'f'), + (0x1D60E, 'M', 'g'), + (0x1D60F, 'M', 'h'), + (0x1D610, 'M', 'i'), + (0x1D611, 'M', 'j'), + (0x1D612, 'M', 'k'), + (0x1D613, 'M', 'l'), + (0x1D614, 'M', 'm'), + (0x1D615, 'M', 'n'), + (0x1D616, 'M', 'o'), + (0x1D617, 'M', 'p'), + (0x1D618, 'M', 'q'), + (0x1D619, 'M', 'r'), + (0x1D61A, 'M', 's'), + ] + +def _seg_66() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D61B, 'M', 't'), + (0x1D61C, 'M', 'u'), + (0x1D61D, 'M', 'v'), + (0x1D61E, 'M', 'w'), + (0x1D61F, 'M', 'x'), + (0x1D620, 'M', 'y'), + (0x1D621, 'M', 'z'), + (0x1D622, 'M', 'a'), + (0x1D623, 'M', 'b'), + (0x1D624, 'M', 'c'), + (0x1D625, 'M', 'd'), + (0x1D626, 'M', 'e'), + (0x1D627, 'M', 'f'), + (0x1D628, 'M', 'g'), + (0x1D629, 'M', 'h'), + (0x1D62A, 'M', 'i'), + (0x1D62B, 'M', 'j'), + (0x1D62C, 'M', 'k'), + (0x1D62D, 'M', 'l'), + (0x1D62E, 'M', 'm'), + (0x1D62F, 'M', 'n'), + (0x1D630, 'M', 'o'), + (0x1D631, 'M', 'p'), + (0x1D632, 'M', 'q'), + (0x1D633, 'M', 'r'), + (0x1D634, 'M', 's'), + (0x1D635, 'M', 't'), + (0x1D636, 'M', 'u'), + (0x1D637, 'M', 'v'), + (0x1D638, 'M', 'w'), + (0x1D639, 'M', 'x'), + (0x1D63A, 'M', 'y'), + (0x1D63B, 'M', 'z'), + (0x1D63C, 'M', 'a'), + (0x1D63D, 'M', 'b'), + (0x1D63E, 'M', 'c'), + (0x1D63F, 'M', 'd'), + (0x1D640, 'M', 'e'), + (0x1D641, 'M', 'f'), + (0x1D642, 'M', 'g'), + (0x1D643, 'M', 'h'), + (0x1D644, 'M', 'i'), + (0x1D645, 'M', 'j'), + (0x1D646, 'M', 'k'), + (0x1D647, 'M', 'l'), + (0x1D648, 'M', 'm'), + (0x1D649, 'M', 'n'), + (0x1D64A, 'M', 'o'), + (0x1D64B, 'M', 'p'), + (0x1D64C, 'M', 'q'), + (0x1D64D, 'M', 'r'), + (0x1D64E, 'M', 's'), + (0x1D64F, 'M', 't'), + (0x1D650, 'M', 'u'), + (0x1D651, 'M', 'v'), + (0x1D652, 'M', 'w'), + (0x1D653, 'M', 'x'), + (0x1D654, 'M', 'y'), + (0x1D655, 'M', 'z'), + (0x1D656, 'M', 'a'), + (0x1D657, 'M', 'b'), + (0x1D658, 'M', 'c'), + (0x1D659, 'M', 'd'), + (0x1D65A, 'M', 'e'), + (0x1D65B, 'M', 'f'), + (0x1D65C, 'M', 'g'), + (0x1D65D, 'M', 'h'), + (0x1D65E, 'M', 'i'), + (0x1D65F, 'M', 'j'), + (0x1D660, 'M', 'k'), + (0x1D661, 'M', 'l'), + (0x1D662, 'M', 'm'), + (0x1D663, 'M', 'n'), + (0x1D664, 'M', 'o'), + (0x1D665, 'M', 'p'), + (0x1D666, 'M', 'q'), + (0x1D667, 'M', 'r'), + (0x1D668, 'M', 's'), + (0x1D669, 'M', 't'), + (0x1D66A, 'M', 'u'), + (0x1D66B, 'M', 'v'), + (0x1D66C, 'M', 'w'), + (0x1D66D, 'M', 'x'), + (0x1D66E, 'M', 'y'), + (0x1D66F, 'M', 'z'), + (0x1D670, 'M', 'a'), + (0x1D671, 'M', 'b'), + (0x1D672, 'M', 'c'), + (0x1D673, 'M', 'd'), + (0x1D674, 'M', 'e'), + (0x1D675, 'M', 'f'), + (0x1D676, 'M', 'g'), + (0x1D677, 'M', 'h'), + (0x1D678, 'M', 'i'), + (0x1D679, 'M', 'j'), + (0x1D67A, 'M', 'k'), + (0x1D67B, 'M', 'l'), + (0x1D67C, 'M', 'm'), + (0x1D67D, 'M', 'n'), + (0x1D67E, 'M', 'o'), + ] + +def _seg_67() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D67F, 'M', 'p'), + (0x1D680, 'M', 'q'), + (0x1D681, 'M', 'r'), + (0x1D682, 'M', 's'), + (0x1D683, 'M', 't'), + (0x1D684, 'M', 'u'), + (0x1D685, 'M', 'v'), + (0x1D686, 'M', 'w'), + (0x1D687, 'M', 'x'), + (0x1D688, 'M', 'y'), + (0x1D689, 'M', 'z'), + (0x1D68A, 'M', 'a'), + (0x1D68B, 'M', 'b'), + (0x1D68C, 'M', 'c'), + (0x1D68D, 'M', 'd'), + (0x1D68E, 'M', 'e'), + (0x1D68F, 'M', 'f'), + (0x1D690, 'M', 'g'), + (0x1D691, 'M', 'h'), + (0x1D692, 'M', 'i'), + (0x1D693, 'M', 'j'), + (0x1D694, 'M', 'k'), + (0x1D695, 'M', 'l'), + (0x1D696, 'M', 'm'), + (0x1D697, 'M', 'n'), + (0x1D698, 'M', 'o'), + (0x1D699, 'M', 'p'), + (0x1D69A, 'M', 'q'), + (0x1D69B, 'M', 'r'), + (0x1D69C, 'M', 's'), + (0x1D69D, 'M', 't'), + (0x1D69E, 'M', 'u'), + (0x1D69F, 'M', 'v'), + (0x1D6A0, 'M', 'w'), + (0x1D6A1, 'M', 'x'), + (0x1D6A2, 'M', 'y'), + (0x1D6A3, 'M', 'z'), + (0x1D6A4, 'M', 'ı'), + (0x1D6A5, 'M', 'ȷ'), + (0x1D6A6, 'X'), + (0x1D6A8, 'M', 'α'), + (0x1D6A9, 'M', 'β'), + (0x1D6AA, 'M', 'γ'), + (0x1D6AB, 'M', 'δ'), + (0x1D6AC, 'M', 'ε'), + (0x1D6AD, 'M', 'ζ'), + (0x1D6AE, 'M', 'η'), + (0x1D6AF, 'M', 'θ'), + (0x1D6B0, 'M', 'ι'), + (0x1D6B1, 'M', 'κ'), + (0x1D6B2, 'M', 'λ'), + (0x1D6B3, 'M', 'μ'), + (0x1D6B4, 'M', 'ν'), + (0x1D6B5, 'M', 'ξ'), + (0x1D6B6, 'M', 'ο'), + (0x1D6B7, 'M', 'π'), + (0x1D6B8, 'M', 'ρ'), + (0x1D6B9, 'M', 'θ'), + (0x1D6BA, 'M', 'σ'), + (0x1D6BB, 'M', 'τ'), + (0x1D6BC, 'M', 'υ'), + (0x1D6BD, 'M', 'φ'), + (0x1D6BE, 'M', 'χ'), + (0x1D6BF, 'M', 'ψ'), + (0x1D6C0, 'M', 'ω'), + (0x1D6C1, 'M', '∇'), + (0x1D6C2, 'M', 'α'), + (0x1D6C3, 'M', 'β'), + (0x1D6C4, 'M', 'γ'), + (0x1D6C5, 'M', 'δ'), + (0x1D6C6, 'M', 'ε'), + (0x1D6C7, 'M', 'ζ'), + (0x1D6C8, 'M', 'η'), + (0x1D6C9, 'M', 'θ'), + (0x1D6CA, 'M', 'ι'), + (0x1D6CB, 'M', 'κ'), + (0x1D6CC, 'M', 'λ'), + (0x1D6CD, 'M', 'μ'), + (0x1D6CE, 'M', 'ν'), + (0x1D6CF, 'M', 'ξ'), + (0x1D6D0, 'M', 'ο'), + (0x1D6D1, 'M', 'π'), + (0x1D6D2, 'M', 'ρ'), + (0x1D6D3, 'M', 'σ'), + (0x1D6D5, 'M', 'τ'), + (0x1D6D6, 'M', 'υ'), + (0x1D6D7, 'M', 'φ'), + (0x1D6D8, 'M', 'χ'), + (0x1D6D9, 'M', 'ψ'), + (0x1D6DA, 'M', 'ω'), + (0x1D6DB, 'M', '∂'), + (0x1D6DC, 'M', 'ε'), + (0x1D6DD, 'M', 'θ'), + (0x1D6DE, 'M', 'κ'), + (0x1D6DF, 'M', 'φ'), + (0x1D6E0, 'M', 'ρ'), + (0x1D6E1, 'M', 'π'), + (0x1D6E2, 'M', 'α'), + (0x1D6E3, 'M', 'β'), + (0x1D6E4, 'M', 'γ'), + ] + +def _seg_68() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D6E5, 'M', 'δ'), + (0x1D6E6, 'M', 'ε'), + (0x1D6E7, 'M', 'ζ'), + (0x1D6E8, 'M', 'η'), + (0x1D6E9, 'M', 'θ'), + (0x1D6EA, 'M', 'ι'), + (0x1D6EB, 'M', 'κ'), + (0x1D6EC, 'M', 'λ'), + (0x1D6ED, 'M', 'μ'), + (0x1D6EE, 'M', 'ν'), + (0x1D6EF, 'M', 'ξ'), + (0x1D6F0, 'M', 'ο'), + (0x1D6F1, 'M', 'π'), + (0x1D6F2, 'M', 'ρ'), + (0x1D6F3, 'M', 'θ'), + (0x1D6F4, 'M', 'σ'), + (0x1D6F5, 'M', 'τ'), + (0x1D6F6, 'M', 'υ'), + (0x1D6F7, 'M', 'φ'), + (0x1D6F8, 'M', 'χ'), + (0x1D6F9, 'M', 'ψ'), + (0x1D6FA, 'M', 'ω'), + (0x1D6FB, 'M', '∇'), + (0x1D6FC, 'M', 'α'), + (0x1D6FD, 'M', 'β'), + (0x1D6FE, 'M', 'γ'), + (0x1D6FF, 'M', 'δ'), + (0x1D700, 'M', 'ε'), + (0x1D701, 'M', 'ζ'), + (0x1D702, 'M', 'η'), + (0x1D703, 'M', 'θ'), + (0x1D704, 'M', 'ι'), + (0x1D705, 'M', 'κ'), + (0x1D706, 'M', 'λ'), + (0x1D707, 'M', 'μ'), + (0x1D708, 'M', 'ν'), + (0x1D709, 'M', 'ξ'), + (0x1D70A, 'M', 'ο'), + (0x1D70B, 'M', 'π'), + (0x1D70C, 'M', 'ρ'), + (0x1D70D, 'M', 'σ'), + (0x1D70F, 'M', 'τ'), + (0x1D710, 'M', 'υ'), + (0x1D711, 'M', 'φ'), + (0x1D712, 'M', 'χ'), + (0x1D713, 'M', 'ψ'), + (0x1D714, 'M', 'ω'), + (0x1D715, 'M', '∂'), + (0x1D716, 'M', 'ε'), + (0x1D717, 'M', 'θ'), + (0x1D718, 'M', 'κ'), + (0x1D719, 'M', 'φ'), + (0x1D71A, 'M', 'ρ'), + (0x1D71B, 'M', 'π'), + (0x1D71C, 'M', 'α'), + (0x1D71D, 'M', 'β'), + (0x1D71E, 'M', 'γ'), + (0x1D71F, 'M', 'δ'), + (0x1D720, 'M', 'ε'), + (0x1D721, 'M', 'ζ'), + (0x1D722, 'M', 'η'), + (0x1D723, 'M', 'θ'), + (0x1D724, 'M', 'ι'), + (0x1D725, 'M', 'κ'), + (0x1D726, 'M', 'λ'), + (0x1D727, 'M', 'μ'), + (0x1D728, 'M', 'ν'), + (0x1D729, 'M', 'ξ'), + (0x1D72A, 'M', 'ο'), + (0x1D72B, 'M', 'π'), + (0x1D72C, 'M', 'ρ'), + (0x1D72D, 'M', 'θ'), + (0x1D72E, 'M', 'σ'), + (0x1D72F, 'M', 'τ'), + (0x1D730, 'M', 'υ'), + (0x1D731, 'M', 'φ'), + (0x1D732, 'M', 'χ'), + (0x1D733, 'M', 'ψ'), + (0x1D734, 'M', 'ω'), + (0x1D735, 'M', '∇'), + (0x1D736, 'M', 'α'), + (0x1D737, 'M', 'β'), + (0x1D738, 'M', 'γ'), + (0x1D739, 'M', 'δ'), + (0x1D73A, 'M', 'ε'), + (0x1D73B, 'M', 'ζ'), + (0x1D73C, 'M', 'η'), + (0x1D73D, 'M', 'θ'), + (0x1D73E, 'M', 'ι'), + (0x1D73F, 'M', 'κ'), + (0x1D740, 'M', 'λ'), + (0x1D741, 'M', 'μ'), + (0x1D742, 'M', 'ν'), + (0x1D743, 'M', 'ξ'), + (0x1D744, 'M', 'ο'), + (0x1D745, 'M', 'π'), + (0x1D746, 'M', 'ρ'), + (0x1D747, 'M', 'σ'), + (0x1D749, 'M', 'τ'), + (0x1D74A, 'M', 'υ'), + ] + +def _seg_69() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D74B, 'M', 'φ'), + (0x1D74C, 'M', 'χ'), + (0x1D74D, 'M', 'ψ'), + (0x1D74E, 'M', 'ω'), + (0x1D74F, 'M', '∂'), + (0x1D750, 'M', 'ε'), + (0x1D751, 'M', 'θ'), + (0x1D752, 'M', 'κ'), + (0x1D753, 'M', 'φ'), + (0x1D754, 'M', 'ρ'), + (0x1D755, 'M', 'π'), + (0x1D756, 'M', 'α'), + (0x1D757, 'M', 'β'), + (0x1D758, 'M', 'γ'), + (0x1D759, 'M', 'δ'), + (0x1D75A, 'M', 'ε'), + (0x1D75B, 'M', 'ζ'), + (0x1D75C, 'M', 'η'), + (0x1D75D, 'M', 'θ'), + (0x1D75E, 'M', 'ι'), + (0x1D75F, 'M', 'κ'), + (0x1D760, 'M', 'λ'), + (0x1D761, 'M', 'μ'), + (0x1D762, 'M', 'ν'), + (0x1D763, 'M', 'ξ'), + (0x1D764, 'M', 'ο'), + (0x1D765, 'M', 'π'), + (0x1D766, 'M', 'ρ'), + (0x1D767, 'M', 'θ'), + (0x1D768, 'M', 'σ'), + (0x1D769, 'M', 'τ'), + (0x1D76A, 'M', 'υ'), + (0x1D76B, 'M', 'φ'), + (0x1D76C, 'M', 'χ'), + (0x1D76D, 'M', 'ψ'), + (0x1D76E, 'M', 'ω'), + (0x1D76F, 'M', '∇'), + (0x1D770, 'M', 'α'), + (0x1D771, 'M', 'β'), + (0x1D772, 'M', 'γ'), + (0x1D773, 'M', 'δ'), + (0x1D774, 'M', 'ε'), + (0x1D775, 'M', 'ζ'), + (0x1D776, 'M', 'η'), + (0x1D777, 'M', 'θ'), + (0x1D778, 'M', 'ι'), + (0x1D779, 'M', 'κ'), + (0x1D77A, 'M', 'λ'), + (0x1D77B, 'M', 'μ'), + (0x1D77C, 'M', 'ν'), + (0x1D77D, 'M', 'ξ'), + (0x1D77E, 'M', 'ο'), + (0x1D77F, 'M', 'π'), + (0x1D780, 'M', 'ρ'), + (0x1D781, 'M', 'σ'), + (0x1D783, 'M', 'τ'), + (0x1D784, 'M', 'υ'), + (0x1D785, 'M', 'φ'), + (0x1D786, 'M', 'χ'), + (0x1D787, 'M', 'ψ'), + (0x1D788, 'M', 'ω'), + (0x1D789, 'M', '∂'), + (0x1D78A, 'M', 'ε'), + (0x1D78B, 'M', 'θ'), + (0x1D78C, 'M', 'κ'), + (0x1D78D, 'M', 'φ'), + (0x1D78E, 'M', 'ρ'), + (0x1D78F, 'M', 'π'), + (0x1D790, 'M', 'α'), + (0x1D791, 'M', 'β'), + (0x1D792, 'M', 'γ'), + (0x1D793, 'M', 'δ'), + (0x1D794, 'M', 'ε'), + (0x1D795, 'M', 'ζ'), + (0x1D796, 'M', 'η'), + (0x1D797, 'M', 'θ'), + (0x1D798, 'M', 'ι'), + (0x1D799, 'M', 'κ'), + (0x1D79A, 'M', 'λ'), + (0x1D79B, 'M', 'μ'), + (0x1D79C, 'M', 'ν'), + (0x1D79D, 'M', 'ξ'), + (0x1D79E, 'M', 'ο'), + (0x1D79F, 'M', 'π'), + (0x1D7A0, 'M', 'ρ'), + (0x1D7A1, 'M', 'θ'), + (0x1D7A2, 'M', 'σ'), + (0x1D7A3, 'M', 'τ'), + (0x1D7A4, 'M', 'υ'), + (0x1D7A5, 'M', 'φ'), + (0x1D7A6, 'M', 'χ'), + (0x1D7A7, 'M', 'ψ'), + (0x1D7A8, 'M', 'ω'), + (0x1D7A9, 'M', '∇'), + (0x1D7AA, 'M', 'α'), + (0x1D7AB, 'M', 'β'), + (0x1D7AC, 'M', 'γ'), + (0x1D7AD, 'M', 'δ'), + (0x1D7AE, 'M', 'ε'), + (0x1D7AF, 'M', 'ζ'), + ] + +def _seg_70() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D7B0, 'M', 'η'), + (0x1D7B1, 'M', 'θ'), + (0x1D7B2, 'M', 'ι'), + (0x1D7B3, 'M', 'κ'), + (0x1D7B4, 'M', 'λ'), + (0x1D7B5, 'M', 'μ'), + (0x1D7B6, 'M', 'ν'), + (0x1D7B7, 'M', 'ξ'), + (0x1D7B8, 'M', 'ο'), + (0x1D7B9, 'M', 'π'), + (0x1D7BA, 'M', 'ρ'), + (0x1D7BB, 'M', 'σ'), + (0x1D7BD, 'M', 'τ'), + (0x1D7BE, 'M', 'υ'), + (0x1D7BF, 'M', 'φ'), + (0x1D7C0, 'M', 'χ'), + (0x1D7C1, 'M', 'ψ'), + (0x1D7C2, 'M', 'ω'), + (0x1D7C3, 'M', '∂'), + (0x1D7C4, 'M', 'ε'), + (0x1D7C5, 'M', 'θ'), + (0x1D7C6, 'M', 'κ'), + (0x1D7C7, 'M', 'φ'), + (0x1D7C8, 'M', 'ρ'), + (0x1D7C9, 'M', 'π'), + (0x1D7CA, 'M', 'ϝ'), + (0x1D7CC, 'X'), + (0x1D7CE, 'M', '0'), + (0x1D7CF, 'M', '1'), + (0x1D7D0, 'M', '2'), + (0x1D7D1, 'M', '3'), + (0x1D7D2, 'M', '4'), + (0x1D7D3, 'M', '5'), + (0x1D7D4, 'M', '6'), + (0x1D7D5, 'M', '7'), + (0x1D7D6, 'M', '8'), + (0x1D7D7, 'M', '9'), + (0x1D7D8, 'M', '0'), + (0x1D7D9, 'M', '1'), + (0x1D7DA, 'M', '2'), + (0x1D7DB, 'M', '3'), + (0x1D7DC, 'M', '4'), + (0x1D7DD, 'M', '5'), + (0x1D7DE, 'M', '6'), + (0x1D7DF, 'M', '7'), + (0x1D7E0, 'M', '8'), + (0x1D7E1, 'M', '9'), + (0x1D7E2, 'M', '0'), + (0x1D7E3, 'M', '1'), + (0x1D7E4, 'M', '2'), + (0x1D7E5, 'M', '3'), + (0x1D7E6, 'M', '4'), + (0x1D7E7, 'M', '5'), + (0x1D7E8, 'M', '6'), + (0x1D7E9, 'M', '7'), + (0x1D7EA, 'M', '8'), + (0x1D7EB, 'M', '9'), + (0x1D7EC, 'M', '0'), + (0x1D7ED, 'M', '1'), + (0x1D7EE, 'M', '2'), + (0x1D7EF, 'M', '3'), + (0x1D7F0, 'M', '4'), + (0x1D7F1, 'M', '5'), + (0x1D7F2, 'M', '6'), + (0x1D7F3, 'M', '7'), + (0x1D7F4, 'M', '8'), + (0x1D7F5, 'M', '9'), + (0x1D7F6, 'M', '0'), + (0x1D7F7, 'M', '1'), + (0x1D7F8, 'M', '2'), + (0x1D7F9, 'M', '3'), + (0x1D7FA, 'M', '4'), + (0x1D7FB, 'M', '5'), + (0x1D7FC, 'M', '6'), + (0x1D7FD, 'M', '7'), + (0x1D7FE, 'M', '8'), + (0x1D7FF, 'M', '9'), + (0x1D800, 'V'), + (0x1DA8C, 'X'), + (0x1DA9B, 'V'), + (0x1DAA0, 'X'), + (0x1DAA1, 'V'), + (0x1DAB0, 'X'), + (0x1DF00, 'V'), + (0x1DF1F, 'X'), + (0x1DF25, 'V'), + (0x1DF2B, 'X'), + (0x1E000, 'V'), + (0x1E007, 'X'), + (0x1E008, 'V'), + (0x1E019, 'X'), + (0x1E01B, 'V'), + (0x1E022, 'X'), + (0x1E023, 'V'), + (0x1E025, 'X'), + (0x1E026, 'V'), + (0x1E02B, 'X'), + (0x1E030, 'M', 'а'), + (0x1E031, 'M', 'б'), + (0x1E032, 'M', 'в'), + ] + +def _seg_71() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E033, 'M', 'г'), + (0x1E034, 'M', 'д'), + (0x1E035, 'M', 'е'), + (0x1E036, 'M', 'ж'), + (0x1E037, 'M', 'з'), + (0x1E038, 'M', 'и'), + (0x1E039, 'M', 'к'), + (0x1E03A, 'M', 'л'), + (0x1E03B, 'M', 'м'), + (0x1E03C, 'M', 'о'), + (0x1E03D, 'M', 'п'), + (0x1E03E, 'M', 'р'), + (0x1E03F, 'M', 'с'), + (0x1E040, 'M', 'т'), + (0x1E041, 'M', 'у'), + (0x1E042, 'M', 'ф'), + (0x1E043, 'M', 'х'), + (0x1E044, 'M', 'ц'), + (0x1E045, 'M', 'ч'), + (0x1E046, 'M', 'ш'), + (0x1E047, 'M', 'ы'), + (0x1E048, 'M', 'э'), + (0x1E049, 'M', 'ю'), + (0x1E04A, 'M', 'ꚉ'), + (0x1E04B, 'M', 'ә'), + (0x1E04C, 'M', 'і'), + (0x1E04D, 'M', 'ј'), + (0x1E04E, 'M', 'ө'), + (0x1E04F, 'M', 'ү'), + (0x1E050, 'M', 'ӏ'), + (0x1E051, 'M', 'а'), + (0x1E052, 'M', 'б'), + (0x1E053, 'M', 'в'), + (0x1E054, 'M', 'г'), + (0x1E055, 'M', 'д'), + (0x1E056, 'M', 'е'), + (0x1E057, 'M', 'ж'), + (0x1E058, 'M', 'з'), + (0x1E059, 'M', 'и'), + (0x1E05A, 'M', 'к'), + (0x1E05B, 'M', 'л'), + (0x1E05C, 'M', 'о'), + (0x1E05D, 'M', 'п'), + (0x1E05E, 'M', 'с'), + (0x1E05F, 'M', 'у'), + (0x1E060, 'M', 'ф'), + (0x1E061, 'M', 'х'), + (0x1E062, 'M', 'ц'), + (0x1E063, 'M', 'ч'), + (0x1E064, 'M', 'ш'), + (0x1E065, 'M', 'ъ'), + (0x1E066, 'M', 'ы'), + (0x1E067, 'M', 'ґ'), + (0x1E068, 'M', 'і'), + (0x1E069, 'M', 'ѕ'), + (0x1E06A, 'M', 'џ'), + (0x1E06B, 'M', 'ҫ'), + (0x1E06C, 'M', 'ꙑ'), + (0x1E06D, 'M', 'ұ'), + (0x1E06E, 'X'), + (0x1E08F, 'V'), + (0x1E090, 'X'), + (0x1E100, 'V'), + (0x1E12D, 'X'), + (0x1E130, 'V'), + (0x1E13E, 'X'), + (0x1E140, 'V'), + (0x1E14A, 'X'), + (0x1E14E, 'V'), + (0x1E150, 'X'), + (0x1E290, 'V'), + (0x1E2AF, 'X'), + (0x1E2C0, 'V'), + (0x1E2FA, 'X'), + (0x1E2FF, 'V'), + (0x1E300, 'X'), + (0x1E4D0, 'V'), + (0x1E4FA, 'X'), + (0x1E7E0, 'V'), + (0x1E7E7, 'X'), + (0x1E7E8, 'V'), + (0x1E7EC, 'X'), + (0x1E7ED, 'V'), + (0x1E7EF, 'X'), + (0x1E7F0, 'V'), + (0x1E7FF, 'X'), + (0x1E800, 'V'), + (0x1E8C5, 'X'), + (0x1E8C7, 'V'), + (0x1E8D7, 'X'), + (0x1E900, 'M', '𞤢'), + (0x1E901, 'M', '𞤣'), + (0x1E902, 'M', '𞤤'), + (0x1E903, 'M', '𞤥'), + (0x1E904, 'M', '𞤦'), + (0x1E905, 'M', '𞤧'), + (0x1E906, 'M', '𞤨'), + (0x1E907, 'M', '𞤩'), + (0x1E908, 'M', '𞤪'), + (0x1E909, 'M', '𞤫'), + ] + +def _seg_72() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E90A, 'M', '𞤬'), + (0x1E90B, 'M', '𞤭'), + (0x1E90C, 'M', '𞤮'), + (0x1E90D, 'M', '𞤯'), + (0x1E90E, 'M', '𞤰'), + (0x1E90F, 'M', '𞤱'), + (0x1E910, 'M', '𞤲'), + (0x1E911, 'M', '𞤳'), + (0x1E912, 'M', '𞤴'), + (0x1E913, 'M', '𞤵'), + (0x1E914, 'M', '𞤶'), + (0x1E915, 'M', '𞤷'), + (0x1E916, 'M', '𞤸'), + (0x1E917, 'M', '𞤹'), + (0x1E918, 'M', '𞤺'), + (0x1E919, 'M', '𞤻'), + (0x1E91A, 'M', '𞤼'), + (0x1E91B, 'M', '𞤽'), + (0x1E91C, 'M', '𞤾'), + (0x1E91D, 'M', '𞤿'), + (0x1E91E, 'M', '𞥀'), + (0x1E91F, 'M', '𞥁'), + (0x1E920, 'M', '𞥂'), + (0x1E921, 'M', '𞥃'), + (0x1E922, 'V'), + (0x1E94C, 'X'), + (0x1E950, 'V'), + (0x1E95A, 'X'), + (0x1E95E, 'V'), + (0x1E960, 'X'), + (0x1EC71, 'V'), + (0x1ECB5, 'X'), + (0x1ED01, 'V'), + (0x1ED3E, 'X'), + (0x1EE00, 'M', 'ا'), + (0x1EE01, 'M', 'ب'), + (0x1EE02, 'M', 'ج'), + (0x1EE03, 'M', 'د'), + (0x1EE04, 'X'), + (0x1EE05, 'M', 'و'), + (0x1EE06, 'M', 'ز'), + (0x1EE07, 'M', 'ح'), + (0x1EE08, 'M', 'ط'), + (0x1EE09, 'M', 'ي'), + (0x1EE0A, 'M', 'ك'), + (0x1EE0B, 'M', 'ل'), + (0x1EE0C, 'M', 'م'), + (0x1EE0D, 'M', 'ن'), + (0x1EE0E, 'M', 'س'), + (0x1EE0F, 'M', 'ع'), + (0x1EE10, 'M', 'ف'), + (0x1EE11, 'M', 'ص'), + (0x1EE12, 'M', 'ق'), + (0x1EE13, 'M', 'ر'), + (0x1EE14, 'M', 'ش'), + (0x1EE15, 'M', 'ت'), + (0x1EE16, 'M', 'ث'), + (0x1EE17, 'M', 'خ'), + (0x1EE18, 'M', 'ذ'), + (0x1EE19, 'M', 'ض'), + (0x1EE1A, 'M', 'ظ'), + (0x1EE1B, 'M', 'غ'), + (0x1EE1C, 'M', 'ٮ'), + (0x1EE1D, 'M', 'ں'), + (0x1EE1E, 'M', 'ڡ'), + (0x1EE1F, 'M', 'ٯ'), + (0x1EE20, 'X'), + (0x1EE21, 'M', 'ب'), + (0x1EE22, 'M', 'ج'), + (0x1EE23, 'X'), + (0x1EE24, 'M', 'ه'), + (0x1EE25, 'X'), + (0x1EE27, 'M', 'ح'), + (0x1EE28, 'X'), + (0x1EE29, 'M', 'ي'), + (0x1EE2A, 'M', 'ك'), + (0x1EE2B, 'M', 'ل'), + (0x1EE2C, 'M', 'م'), + (0x1EE2D, 'M', 'ن'), + (0x1EE2E, 'M', 'س'), + (0x1EE2F, 'M', 'ع'), + (0x1EE30, 'M', 'ف'), + (0x1EE31, 'M', 'ص'), + (0x1EE32, 'M', 'ق'), + (0x1EE33, 'X'), + (0x1EE34, 'M', 'ش'), + (0x1EE35, 'M', 'ت'), + (0x1EE36, 'M', 'ث'), + (0x1EE37, 'M', 'خ'), + (0x1EE38, 'X'), + (0x1EE39, 'M', 'ض'), + (0x1EE3A, 'X'), + (0x1EE3B, 'M', 'غ'), + (0x1EE3C, 'X'), + (0x1EE42, 'M', 'ج'), + (0x1EE43, 'X'), + (0x1EE47, 'M', 'ح'), + (0x1EE48, 'X'), + (0x1EE49, 'M', 'ي'), + (0x1EE4A, 'X'), + ] + +def _seg_73() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1EE4B, 'M', 'ل'), + (0x1EE4C, 'X'), + (0x1EE4D, 'M', 'ن'), + (0x1EE4E, 'M', 'س'), + (0x1EE4F, 'M', 'ع'), + (0x1EE50, 'X'), + (0x1EE51, 'M', 'ص'), + (0x1EE52, 'M', 'ق'), + (0x1EE53, 'X'), + (0x1EE54, 'M', 'ش'), + (0x1EE55, 'X'), + (0x1EE57, 'M', 'خ'), + (0x1EE58, 'X'), + (0x1EE59, 'M', 'ض'), + (0x1EE5A, 'X'), + (0x1EE5B, 'M', 'غ'), + (0x1EE5C, 'X'), + (0x1EE5D, 'M', 'ں'), + (0x1EE5E, 'X'), + (0x1EE5F, 'M', 'ٯ'), + (0x1EE60, 'X'), + (0x1EE61, 'M', 'ب'), + (0x1EE62, 'M', 'ج'), + (0x1EE63, 'X'), + (0x1EE64, 'M', 'ه'), + (0x1EE65, 'X'), + (0x1EE67, 'M', 'ح'), + (0x1EE68, 'M', 'ط'), + (0x1EE69, 'M', 'ي'), + (0x1EE6A, 'M', 'ك'), + (0x1EE6B, 'X'), + (0x1EE6C, 'M', 'م'), + (0x1EE6D, 'M', 'ن'), + (0x1EE6E, 'M', 'س'), + (0x1EE6F, 'M', 'ع'), + (0x1EE70, 'M', 'ف'), + (0x1EE71, 'M', 'ص'), + (0x1EE72, 'M', 'ق'), + (0x1EE73, 'X'), + (0x1EE74, 'M', 'ش'), + (0x1EE75, 'M', 'ت'), + (0x1EE76, 'M', 'ث'), + (0x1EE77, 'M', 'خ'), + (0x1EE78, 'X'), + (0x1EE79, 'M', 'ض'), + (0x1EE7A, 'M', 'ظ'), + (0x1EE7B, 'M', 'غ'), + (0x1EE7C, 'M', 'ٮ'), + (0x1EE7D, 'X'), + (0x1EE7E, 'M', 'ڡ'), + (0x1EE7F, 'X'), + (0x1EE80, 'M', 'ا'), + (0x1EE81, 'M', 'ب'), + (0x1EE82, 'M', 'ج'), + (0x1EE83, 'M', 'د'), + (0x1EE84, 'M', 'ه'), + (0x1EE85, 'M', 'و'), + (0x1EE86, 'M', 'ز'), + (0x1EE87, 'M', 'ح'), + (0x1EE88, 'M', 'ط'), + (0x1EE89, 'M', 'ي'), + (0x1EE8A, 'X'), + (0x1EE8B, 'M', 'ل'), + (0x1EE8C, 'M', 'م'), + (0x1EE8D, 'M', 'ن'), + (0x1EE8E, 'M', 'س'), + (0x1EE8F, 'M', 'ع'), + (0x1EE90, 'M', 'ف'), + (0x1EE91, 'M', 'ص'), + (0x1EE92, 'M', 'ق'), + (0x1EE93, 'M', 'ر'), + (0x1EE94, 'M', 'ش'), + (0x1EE95, 'M', 'ت'), + (0x1EE96, 'M', 'ث'), + (0x1EE97, 'M', 'خ'), + (0x1EE98, 'M', 'ذ'), + (0x1EE99, 'M', 'ض'), + (0x1EE9A, 'M', 'ظ'), + (0x1EE9B, 'M', 'غ'), + (0x1EE9C, 'X'), + (0x1EEA1, 'M', 'ب'), + (0x1EEA2, 'M', 'ج'), + (0x1EEA3, 'M', 'د'), + (0x1EEA4, 'X'), + (0x1EEA5, 'M', 'و'), + (0x1EEA6, 'M', 'ز'), + (0x1EEA7, 'M', 'ح'), + (0x1EEA8, 'M', 'ط'), + (0x1EEA9, 'M', 'ي'), + (0x1EEAA, 'X'), + (0x1EEAB, 'M', 'ل'), + (0x1EEAC, 'M', 'م'), + (0x1EEAD, 'M', 'ن'), + (0x1EEAE, 'M', 'س'), + (0x1EEAF, 'M', 'ع'), + (0x1EEB0, 'M', 'ف'), + (0x1EEB1, 'M', 'ص'), + (0x1EEB2, 'M', 'ق'), + (0x1EEB3, 'M', 'ر'), + (0x1EEB4, 'M', 'ش'), + ] + +def _seg_74() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1EEB5, 'M', 'ت'), + (0x1EEB6, 'M', 'ث'), + (0x1EEB7, 'M', 'خ'), + (0x1EEB8, 'M', 'ذ'), + (0x1EEB9, 'M', 'ض'), + (0x1EEBA, 'M', 'ظ'), + (0x1EEBB, 'M', 'غ'), + (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', '0,'), + (0x1F102, '3', '1,'), + (0x1F103, '3', '2,'), + (0x1F104, '3', '3,'), + (0x1F105, '3', '4,'), + (0x1F106, '3', '5,'), + (0x1F107, '3', '6,'), + (0x1F108, '3', '7,'), + (0x1F109, '3', '8,'), + (0x1F10A, '3', '9,'), + (0x1F10B, 'V'), + (0x1F110, '3', '(a)'), + (0x1F111, '3', '(b)'), + (0x1F112, '3', '(c)'), + (0x1F113, '3', '(d)'), + (0x1F114, '3', '(e)'), + (0x1F115, '3', '(f)'), + (0x1F116, '3', '(g)'), + (0x1F117, '3', '(h)'), + (0x1F118, '3', '(i)'), + (0x1F119, '3', '(j)'), + (0x1F11A, '3', '(k)'), + (0x1F11B, '3', '(l)'), + (0x1F11C, '3', '(m)'), + (0x1F11D, '3', '(n)'), + (0x1F11E, '3', '(o)'), + (0x1F11F, '3', '(p)'), + (0x1F120, '3', '(q)'), + (0x1F121, '3', '(r)'), + (0x1F122, '3', '(s)'), + (0x1F123, '3', '(t)'), + (0x1F124, '3', '(u)'), + (0x1F125, '3', '(v)'), + (0x1F126, '3', '(w)'), + (0x1F127, '3', '(x)'), + (0x1F128, '3', '(y)'), + (0x1F129, '3', '(z)'), + (0x1F12A, 'M', '〔s〕'), + (0x1F12B, 'M', 'c'), + (0x1F12C, 'M', 'r'), + (0x1F12D, 'M', 'cd'), + (0x1F12E, 'M', 'wz'), + (0x1F12F, 'V'), + (0x1F130, 'M', 'a'), + (0x1F131, 'M', 'b'), + (0x1F132, 'M', 'c'), + (0x1F133, 'M', 'd'), + (0x1F134, 'M', 'e'), + (0x1F135, 'M', 'f'), + (0x1F136, 'M', 'g'), + (0x1F137, 'M', 'h'), + (0x1F138, 'M', 'i'), + (0x1F139, 'M', 'j'), + (0x1F13A, 'M', 'k'), + (0x1F13B, 'M', 'l'), + (0x1F13C, 'M', 'm'), + (0x1F13D, 'M', 'n'), + (0x1F13E, 'M', 'o'), + (0x1F13F, 'M', 'p'), + (0x1F140, 'M', 'q'), + (0x1F141, 'M', 'r'), + (0x1F142, 'M', 's'), + (0x1F143, 'M', 't'), + (0x1F144, 'M', 'u'), + (0x1F145, 'M', 'v'), + (0x1F146, 'M', 'w'), + (0x1F147, 'M', 'x'), + (0x1F148, 'M', 'y'), + (0x1F149, 'M', 'z'), + (0x1F14A, 'M', 'hv'), + (0x1F14B, 'M', 'mv'), + (0x1F14C, 'M', 'sd'), + (0x1F14D, 'M', 'ss'), + (0x1F14E, 'M', 'ppv'), + (0x1F14F, 'M', 'wc'), + (0x1F150, 'V'), + (0x1F16A, 'M', 'mc'), + (0x1F16B, 'M', 'md'), + ] + +def _seg_75() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1F16C, 'M', 'mr'), + (0x1F16D, 'V'), + (0x1F190, 'M', 'dj'), + (0x1F191, 'V'), + (0x1F1AE, 'X'), + (0x1F1E6, 'V'), + (0x1F200, 'M', 'ほか'), + (0x1F201, 'M', 'ココ'), + (0x1F202, 'M', 'サ'), + (0x1F203, 'X'), + (0x1F210, 'M', '手'), + (0x1F211, 'M', '字'), + (0x1F212, 'M', '双'), + (0x1F213, 'M', 'デ'), + (0x1F214, 'M', '二'), + (0x1F215, 'M', '多'), + (0x1F216, 'M', '解'), + (0x1F217, 'M', '天'), + (0x1F218, 'M', '交'), + (0x1F219, 'M', '映'), + (0x1F21A, 'M', '無'), + (0x1F21B, 'M', '料'), + (0x1F21C, 'M', '前'), + (0x1F21D, 'M', '後'), + (0x1F21E, 'M', '再'), + (0x1F21F, 'M', '新'), + (0x1F220, 'M', '初'), + (0x1F221, 'M', '終'), + (0x1F222, 'M', '生'), + (0x1F223, 'M', '販'), + (0x1F224, 'M', '声'), + (0x1F225, 'M', '吹'), + (0x1F226, 'M', '演'), + (0x1F227, 'M', '投'), + (0x1F228, 'M', '捕'), + (0x1F229, 'M', '一'), + (0x1F22A, 'M', '三'), + (0x1F22B, 'M', '遊'), + (0x1F22C, 'M', '左'), + (0x1F22D, 'M', '中'), + (0x1F22E, 'M', '右'), + (0x1F22F, 'M', '指'), + (0x1F230, 'M', '走'), + (0x1F231, 'M', '打'), + (0x1F232, 'M', '禁'), + (0x1F233, 'M', '空'), + (0x1F234, 'M', '合'), + (0x1F235, 'M', '満'), + (0x1F236, 'M', '有'), + (0x1F237, 'M', '月'), + (0x1F238, 'M', '申'), + (0x1F239, 'M', '割'), + (0x1F23A, 'M', '営'), + (0x1F23B, 'M', '配'), + (0x1F23C, 'X'), + (0x1F240, 'M', '〔本〕'), + (0x1F241, 'M', '〔三〕'), + (0x1F242, 'M', '〔二〕'), + (0x1F243, 'M', '〔安〕'), + (0x1F244, 'M', '〔点〕'), + (0x1F245, 'M', '〔打〕'), + (0x1F246, 'M', '〔盗〕'), + (0x1F247, 'M', '〔勝〕'), + (0x1F248, 'M', '〔敗〕'), + (0x1F249, 'X'), + (0x1F250, 'M', '得'), + (0x1F251, 'M', '可'), + (0x1F252, 'X'), + (0x1F260, 'V'), + (0x1F266, 'X'), + (0x1F300, 'V'), + (0x1F6D8, 'X'), + (0x1F6DC, 'V'), + (0x1F6ED, 'X'), + (0x1F6F0, 'V'), + (0x1F6FD, 'X'), + (0x1F700, 'V'), + (0x1F777, 'X'), + (0x1F77B, 'V'), + (0x1F7DA, 'X'), + (0x1F7E0, 'V'), + (0x1F7EC, 'X'), + (0x1F7F0, 'V'), + (0x1F7F1, 'X'), + (0x1F800, 'V'), + (0x1F80C, 'X'), + (0x1F810, 'V'), + (0x1F848, 'X'), + (0x1F850, 'V'), + (0x1F85A, 'X'), + (0x1F860, 'V'), + (0x1F888, 'X'), + (0x1F890, 'V'), + (0x1F8AE, 'X'), + (0x1F8B0, 'V'), + (0x1F8B2, 'X'), + (0x1F900, 'V'), + (0x1FA54, 'X'), + (0x1FA60, 'V'), + (0x1FA6E, 'X'), + ] + +def _seg_76() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1FA70, 'V'), + (0x1FA7D, 'X'), + (0x1FA80, 'V'), + (0x1FA89, 'X'), + (0x1FA90, 'V'), + (0x1FABE, 'X'), + (0x1FABF, 'V'), + (0x1FAC6, 'X'), + (0x1FACE, 'V'), + (0x1FADC, 'X'), + (0x1FAE0, 'V'), + (0x1FAE9, 'X'), + (0x1FAF0, 'V'), + (0x1FAF9, 'X'), + (0x1FB00, 'V'), + (0x1FB93, 'X'), + (0x1FB94, 'V'), + (0x1FBCB, 'X'), + (0x1FBF0, 'M', '0'), + (0x1FBF1, 'M', '1'), + (0x1FBF2, 'M', '2'), + (0x1FBF3, 'M', '3'), + (0x1FBF4, 'M', '4'), + (0x1FBF5, 'M', '5'), + (0x1FBF6, 'M', '6'), + (0x1FBF7, 'M', '7'), + (0x1FBF8, 'M', '8'), + (0x1FBF9, 'M', '9'), + (0x1FBFA, 'X'), + (0x20000, 'V'), + (0x2A6E0, 'X'), + (0x2A700, 'V'), + (0x2B73A, 'X'), + (0x2B740, 'V'), + (0x2B81E, 'X'), + (0x2B820, 'V'), + (0x2CEA2, 'X'), + (0x2CEB0, 'V'), + (0x2EBE1, 'X'), + (0x2F800, 'M', '丽'), + (0x2F801, 'M', '丸'), + (0x2F802, 'M', '乁'), + (0x2F803, 'M', '𠄢'), + (0x2F804, 'M', '你'), + (0x2F805, 'M', '侮'), + (0x2F806, 'M', '侻'), + (0x2F807, 'M', '倂'), + (0x2F808, 'M', '偺'), + (0x2F809, 'M', '備'), + (0x2F80A, 'M', '僧'), + (0x2F80B, 'M', '像'), + (0x2F80C, 'M', '㒞'), + (0x2F80D, 'M', '𠘺'), + (0x2F80E, 'M', '免'), + (0x2F80F, 'M', '兔'), + (0x2F810, 'M', '兤'), + (0x2F811, 'M', '具'), + (0x2F812, 'M', '𠔜'), + (0x2F813, 'M', '㒹'), + (0x2F814, 'M', '內'), + (0x2F815, 'M', '再'), + (0x2F816, 'M', '𠕋'), + (0x2F817, 'M', '冗'), + (0x2F818, 'M', '冤'), + (0x2F819, 'M', '仌'), + (0x2F81A, 'M', '冬'), + (0x2F81B, 'M', '况'), + (0x2F81C, 'M', '𩇟'), + (0x2F81D, 'M', '凵'), + (0x2F81E, 'M', '刃'), + (0x2F81F, 'M', '㓟'), + (0x2F820, 'M', '刻'), + (0x2F821, 'M', '剆'), + (0x2F822, 'M', '割'), + (0x2F823, 'M', '剷'), + (0x2F824, 'M', '㔕'), + (0x2F825, 'M', '勇'), + (0x2F826, 'M', '勉'), + (0x2F827, 'M', '勤'), + (0x2F828, 'M', '勺'), + (0x2F829, 'M', '包'), + (0x2F82A, 'M', '匆'), + (0x2F82B, 'M', '北'), + (0x2F82C, 'M', '卉'), + (0x2F82D, 'M', '卑'), + (0x2F82E, 'M', '博'), + (0x2F82F, 'M', '即'), + (0x2F830, 'M', '卽'), + (0x2F831, 'M', '卿'), + (0x2F834, 'M', '𠨬'), + (0x2F835, 'M', '灰'), + (0x2F836, 'M', '及'), + (0x2F837, 'M', '叟'), + (0x2F838, 'M', '𠭣'), + (0x2F839, 'M', '叫'), + (0x2F83A, 'M', '叱'), + (0x2F83B, 'M', '吆'), + (0x2F83C, 'M', '咞'), + (0x2F83D, 'M', '吸'), + (0x2F83E, 'M', '呈'), + ] + +def _seg_77() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F83F, 'M', '周'), + (0x2F840, 'M', '咢'), + (0x2F841, 'M', '哶'), + (0x2F842, 'M', '唐'), + (0x2F843, 'M', '啓'), + (0x2F844, 'M', '啣'), + (0x2F845, 'M', '善'), + (0x2F847, 'M', '喙'), + (0x2F848, 'M', '喫'), + (0x2F849, 'M', '喳'), + (0x2F84A, 'M', '嗂'), + (0x2F84B, 'M', '圖'), + (0x2F84C, 'M', '嘆'), + (0x2F84D, 'M', '圗'), + (0x2F84E, 'M', '噑'), + (0x2F84F, 'M', '噴'), + (0x2F850, 'M', '切'), + (0x2F851, 'M', '壮'), + (0x2F852, 'M', '城'), + (0x2F853, 'M', '埴'), + (0x2F854, 'M', '堍'), + (0x2F855, 'M', '型'), + (0x2F856, 'M', '堲'), + (0x2F857, 'M', '報'), + (0x2F858, 'M', '墬'), + (0x2F859, 'M', '𡓤'), + (0x2F85A, 'M', '売'), + (0x2F85B, 'M', '壷'), + (0x2F85C, 'M', '夆'), + (0x2F85D, 'M', '多'), + (0x2F85E, 'M', '夢'), + (0x2F85F, 'M', '奢'), + (0x2F860, 'M', '𡚨'), + (0x2F861, 'M', '𡛪'), + (0x2F862, 'M', '姬'), + (0x2F863, 'M', '娛'), + (0x2F864, 'M', '娧'), + (0x2F865, 'M', '姘'), + (0x2F866, 'M', '婦'), + (0x2F867, 'M', '㛮'), + (0x2F868, 'X'), + (0x2F869, 'M', '嬈'), + (0x2F86A, 'M', '嬾'), + (0x2F86C, 'M', '𡧈'), + (0x2F86D, 'M', '寃'), + (0x2F86E, 'M', '寘'), + (0x2F86F, 'M', '寧'), + (0x2F870, 'M', '寳'), + (0x2F871, 'M', '𡬘'), + (0x2F872, 'M', '寿'), + (0x2F873, 'M', '将'), + (0x2F874, 'X'), + (0x2F875, 'M', '尢'), + (0x2F876, 'M', '㞁'), + (0x2F877, 'M', '屠'), + (0x2F878, 'M', '屮'), + (0x2F879, 'M', '峀'), + (0x2F87A, 'M', '岍'), + (0x2F87B, 'M', '𡷤'), + (0x2F87C, 'M', '嵃'), + (0x2F87D, 'M', '𡷦'), + (0x2F87E, 'M', '嵮'), + (0x2F87F, 'M', '嵫'), + (0x2F880, 'M', '嵼'), + (0x2F881, 'M', '巡'), + (0x2F882, 'M', '巢'), + (0x2F883, 'M', '㠯'), + (0x2F884, 'M', '巽'), + (0x2F885, 'M', '帨'), + (0x2F886, 'M', '帽'), + (0x2F887, 'M', '幩'), + (0x2F888, 'M', '㡢'), + (0x2F889, 'M', '𢆃'), + (0x2F88A, 'M', '㡼'), + (0x2F88B, 'M', '庰'), + (0x2F88C, 'M', '庳'), + (0x2F88D, 'M', '庶'), + (0x2F88E, 'M', '廊'), + (0x2F88F, 'M', '𪎒'), + (0x2F890, 'M', '廾'), + (0x2F891, 'M', '𢌱'), + (0x2F893, 'M', '舁'), + (0x2F894, 'M', '弢'), + (0x2F896, 'M', '㣇'), + (0x2F897, 'M', '𣊸'), + (0x2F898, 'M', '𦇚'), + (0x2F899, 'M', '形'), + (0x2F89A, 'M', '彫'), + (0x2F89B, 'M', '㣣'), + (0x2F89C, 'M', '徚'), + (0x2F89D, 'M', '忍'), + (0x2F89E, 'M', '志'), + (0x2F89F, 'M', '忹'), + (0x2F8A0, 'M', '悁'), + (0x2F8A1, 'M', '㤺'), + (0x2F8A2, 'M', '㤜'), + (0x2F8A3, 'M', '悔'), + (0x2F8A4, 'M', '𢛔'), + (0x2F8A5, 'M', '惇'), + (0x2F8A6, 'M', '慈'), + ] + +def _seg_78() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F8A7, 'M', '慌'), + (0x2F8A8, 'M', '慎'), + (0x2F8A9, 'M', '慌'), + (0x2F8AA, 'M', '慺'), + (0x2F8AB, 'M', '憎'), + (0x2F8AC, 'M', '憲'), + (0x2F8AD, 'M', '憤'), + (0x2F8AE, 'M', '憯'), + (0x2F8AF, 'M', '懞'), + (0x2F8B0, 'M', '懲'), + (0x2F8B1, 'M', '懶'), + (0x2F8B2, 'M', '成'), + (0x2F8B3, 'M', '戛'), + (0x2F8B4, 'M', '扝'), + (0x2F8B5, 'M', '抱'), + (0x2F8B6, 'M', '拔'), + (0x2F8B7, 'M', '捐'), + (0x2F8B8, 'M', '𢬌'), + (0x2F8B9, 'M', '挽'), + (0x2F8BA, 'M', '拼'), + (0x2F8BB, 'M', '捨'), + (0x2F8BC, 'M', '掃'), + (0x2F8BD, 'M', '揤'), + (0x2F8BE, 'M', '𢯱'), + (0x2F8BF, 'M', '搢'), + (0x2F8C0, 'M', '揅'), + (0x2F8C1, 'M', '掩'), + (0x2F8C2, 'M', '㨮'), + (0x2F8C3, 'M', '摩'), + (0x2F8C4, 'M', '摾'), + (0x2F8C5, 'M', '撝'), + (0x2F8C6, 'M', '摷'), + (0x2F8C7, 'M', '㩬'), + (0x2F8C8, 'M', '敏'), + (0x2F8C9, 'M', '敬'), + (0x2F8CA, 'M', '𣀊'), + (0x2F8CB, 'M', '旣'), + (0x2F8CC, 'M', '書'), + (0x2F8CD, 'M', '晉'), + (0x2F8CE, 'M', '㬙'), + (0x2F8CF, 'M', '暑'), + (0x2F8D0, 'M', '㬈'), + (0x2F8D1, 'M', '㫤'), + (0x2F8D2, 'M', '冒'), + (0x2F8D3, 'M', '冕'), + (0x2F8D4, 'M', '最'), + (0x2F8D5, 'M', '暜'), + (0x2F8D6, 'M', '肭'), + (0x2F8D7, 'M', '䏙'), + (0x2F8D8, 'M', '朗'), + (0x2F8D9, 'M', '望'), + (0x2F8DA, 'M', '朡'), + (0x2F8DB, 'M', '杞'), + (0x2F8DC, 'M', '杓'), + (0x2F8DD, 'M', '𣏃'), + (0x2F8DE, 'M', '㭉'), + (0x2F8DF, 'M', '柺'), + (0x2F8E0, 'M', '枅'), + (0x2F8E1, 'M', '桒'), + (0x2F8E2, 'M', '梅'), + (0x2F8E3, 'M', '𣑭'), + (0x2F8E4, 'M', '梎'), + (0x2F8E5, 'M', '栟'), + (0x2F8E6, 'M', '椔'), + (0x2F8E7, 'M', '㮝'), + (0x2F8E8, 'M', '楂'), + (0x2F8E9, 'M', '榣'), + (0x2F8EA, 'M', '槪'), + (0x2F8EB, 'M', '檨'), + (0x2F8EC, 'M', '𣚣'), + (0x2F8ED, 'M', '櫛'), + (0x2F8EE, 'M', '㰘'), + (0x2F8EF, 'M', '次'), + (0x2F8F0, 'M', '𣢧'), + (0x2F8F1, 'M', '歔'), + (0x2F8F2, 'M', '㱎'), + (0x2F8F3, 'M', '歲'), + (0x2F8F4, 'M', '殟'), + (0x2F8F5, 'M', '殺'), + (0x2F8F6, 'M', '殻'), + (0x2F8F7, 'M', '𣪍'), + (0x2F8F8, 'M', '𡴋'), + (0x2F8F9, 'M', '𣫺'), + (0x2F8FA, 'M', '汎'), + (0x2F8FB, 'M', '𣲼'), + (0x2F8FC, 'M', '沿'), + (0x2F8FD, 'M', '泍'), + (0x2F8FE, 'M', '汧'), + (0x2F8FF, 'M', '洖'), + (0x2F900, 'M', '派'), + (0x2F901, 'M', '海'), + (0x2F902, 'M', '流'), + (0x2F903, 'M', '浩'), + (0x2F904, 'M', '浸'), + (0x2F905, 'M', '涅'), + (0x2F906, 'M', '𣴞'), + (0x2F907, 'M', '洴'), + (0x2F908, 'M', '港'), + (0x2F909, 'M', '湮'), + (0x2F90A, 'M', '㴳'), + ] + +def _seg_79() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F90B, 'M', '滋'), + (0x2F90C, 'M', '滇'), + (0x2F90D, 'M', '𣻑'), + (0x2F90E, 'M', '淹'), + (0x2F90F, 'M', '潮'), + (0x2F910, 'M', '𣽞'), + (0x2F911, 'M', '𣾎'), + (0x2F912, 'M', '濆'), + (0x2F913, 'M', '瀹'), + (0x2F914, 'M', '瀞'), + (0x2F915, 'M', '瀛'), + (0x2F916, 'M', '㶖'), + (0x2F917, 'M', '灊'), + (0x2F918, 'M', '災'), + (0x2F919, 'M', '灷'), + (0x2F91A, 'M', '炭'), + (0x2F91B, 'M', '𠔥'), + (0x2F91C, 'M', '煅'), + (0x2F91D, 'M', '𤉣'), + (0x2F91E, 'M', '熜'), + (0x2F91F, 'X'), + (0x2F920, 'M', '爨'), + (0x2F921, 'M', '爵'), + (0x2F922, 'M', '牐'), + (0x2F923, 'M', '𤘈'), + (0x2F924, 'M', '犀'), + (0x2F925, 'M', '犕'), + (0x2F926, 'M', '𤜵'), + (0x2F927, 'M', '𤠔'), + (0x2F928, 'M', '獺'), + (0x2F929, 'M', '王'), + (0x2F92A, 'M', '㺬'), + (0x2F92B, 'M', '玥'), + (0x2F92C, 'M', '㺸'), + (0x2F92E, 'M', '瑇'), + (0x2F92F, 'M', '瑜'), + (0x2F930, 'M', '瑱'), + (0x2F931, 'M', '璅'), + (0x2F932, 'M', '瓊'), + (0x2F933, 'M', '㼛'), + (0x2F934, 'M', '甤'), + (0x2F935, 'M', '𤰶'), + (0x2F936, 'M', '甾'), + (0x2F937, 'M', '𤲒'), + (0x2F938, 'M', '異'), + (0x2F939, 'M', '𢆟'), + (0x2F93A, 'M', '瘐'), + (0x2F93B, 'M', '𤾡'), + (0x2F93C, 'M', '𤾸'), + (0x2F93D, 'M', '𥁄'), + (0x2F93E, 'M', '㿼'), + (0x2F93F, 'M', '䀈'), + (0x2F940, 'M', '直'), + (0x2F941, 'M', '𥃳'), + (0x2F942, 'M', '𥃲'), + (0x2F943, 'M', '𥄙'), + (0x2F944, 'M', '𥄳'), + (0x2F945, 'M', '眞'), + (0x2F946, 'M', '真'), + (0x2F948, 'M', '睊'), + (0x2F949, 'M', '䀹'), + (0x2F94A, 'M', '瞋'), + (0x2F94B, 'M', '䁆'), + (0x2F94C, 'M', '䂖'), + (0x2F94D, 'M', '𥐝'), + (0x2F94E, 'M', '硎'), + (0x2F94F, 'M', '碌'), + (0x2F950, 'M', '磌'), + (0x2F951, 'M', '䃣'), + (0x2F952, 'M', '𥘦'), + (0x2F953, 'M', '祖'), + (0x2F954, 'M', '𥚚'), + (0x2F955, 'M', '𥛅'), + (0x2F956, 'M', '福'), + (0x2F957, 'M', '秫'), + (0x2F958, 'M', '䄯'), + (0x2F959, 'M', '穀'), + (0x2F95A, 'M', '穊'), + (0x2F95B, 'M', '穏'), + (0x2F95C, 'M', '𥥼'), + (0x2F95D, 'M', '𥪧'), + (0x2F95F, 'X'), + (0x2F960, 'M', '䈂'), + (0x2F961, 'M', '𥮫'), + (0x2F962, 'M', '篆'), + (0x2F963, 'M', '築'), + (0x2F964, 'M', '䈧'), + (0x2F965, 'M', '𥲀'), + (0x2F966, 'M', '糒'), + (0x2F967, 'M', '䊠'), + (0x2F968, 'M', '糨'), + (0x2F969, 'M', '糣'), + (0x2F96A, 'M', '紀'), + (0x2F96B, 'M', '𥾆'), + (0x2F96C, 'M', '絣'), + (0x2F96D, 'M', '䌁'), + (0x2F96E, 'M', '緇'), + (0x2F96F, 'M', '縂'), + (0x2F970, 'M', '繅'), + (0x2F971, 'M', '䌴'), + ] + +def _seg_80() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F972, 'M', '𦈨'), + (0x2F973, 'M', '𦉇'), + (0x2F974, 'M', '䍙'), + (0x2F975, 'M', '𦋙'), + (0x2F976, 'M', '罺'), + (0x2F977, 'M', '𦌾'), + (0x2F978, 'M', '羕'), + (0x2F979, 'M', '翺'), + (0x2F97A, 'M', '者'), + (0x2F97B, 'M', '𦓚'), + (0x2F97C, 'M', '𦔣'), + (0x2F97D, 'M', '聠'), + (0x2F97E, 'M', '𦖨'), + (0x2F97F, 'M', '聰'), + (0x2F980, 'M', '𣍟'), + (0x2F981, 'M', '䏕'), + (0x2F982, 'M', '育'), + (0x2F983, 'M', '脃'), + (0x2F984, 'M', '䐋'), + (0x2F985, 'M', '脾'), + (0x2F986, 'M', '媵'), + (0x2F987, 'M', '𦞧'), + (0x2F988, 'M', '𦞵'), + (0x2F989, 'M', '𣎓'), + (0x2F98A, 'M', '𣎜'), + (0x2F98B, 'M', '舁'), + (0x2F98C, 'M', '舄'), + (0x2F98D, 'M', '辞'), + (0x2F98E, 'M', '䑫'), + (0x2F98F, 'M', '芑'), + (0x2F990, 'M', '芋'), + (0x2F991, 'M', '芝'), + (0x2F992, 'M', '劳'), + (0x2F993, 'M', '花'), + (0x2F994, 'M', '芳'), + (0x2F995, 'M', '芽'), + (0x2F996, 'M', '苦'), + (0x2F997, 'M', '𦬼'), + (0x2F998, 'M', '若'), + (0x2F999, 'M', '茝'), + (0x2F99A, 'M', '荣'), + (0x2F99B, 'M', '莭'), + (0x2F99C, 'M', '茣'), + (0x2F99D, 'M', '莽'), + (0x2F99E, 'M', '菧'), + (0x2F99F, 'M', '著'), + (0x2F9A0, 'M', '荓'), + (0x2F9A1, 'M', '菊'), + (0x2F9A2, 'M', '菌'), + (0x2F9A3, 'M', '菜'), + (0x2F9A4, 'M', '𦰶'), + (0x2F9A5, 'M', '𦵫'), + (0x2F9A6, 'M', '𦳕'), + (0x2F9A7, 'M', '䔫'), + (0x2F9A8, 'M', '蓱'), + (0x2F9A9, 'M', '蓳'), + (0x2F9AA, 'M', '蔖'), + (0x2F9AB, 'M', '𧏊'), + (0x2F9AC, 'M', '蕤'), + (0x2F9AD, 'M', '𦼬'), + (0x2F9AE, 'M', '䕝'), + (0x2F9AF, 'M', '䕡'), + (0x2F9B0, 'M', '𦾱'), + (0x2F9B1, 'M', '𧃒'), + (0x2F9B2, 'M', '䕫'), + (0x2F9B3, 'M', '虐'), + (0x2F9B4, 'M', '虜'), + (0x2F9B5, 'M', '虧'), + (0x2F9B6, 'M', '虩'), + (0x2F9B7, 'M', '蚩'), + (0x2F9B8, 'M', '蚈'), + (0x2F9B9, 'M', '蜎'), + (0x2F9BA, 'M', '蛢'), + (0x2F9BB, 'M', '蝹'), + (0x2F9BC, 'M', '蜨'), + (0x2F9BD, 'M', '蝫'), + (0x2F9BE, 'M', '螆'), + (0x2F9BF, 'X'), + (0x2F9C0, 'M', '蟡'), + (0x2F9C1, 'M', '蠁'), + (0x2F9C2, 'M', '䗹'), + (0x2F9C3, 'M', '衠'), + (0x2F9C4, 'M', '衣'), + (0x2F9C5, 'M', '𧙧'), + (0x2F9C6, 'M', '裗'), + (0x2F9C7, 'M', '裞'), + (0x2F9C8, 'M', '䘵'), + (0x2F9C9, 'M', '裺'), + (0x2F9CA, 'M', '㒻'), + (0x2F9CB, 'M', '𧢮'), + (0x2F9CC, 'M', '𧥦'), + (0x2F9CD, 'M', '䚾'), + (0x2F9CE, 'M', '䛇'), + (0x2F9CF, 'M', '誠'), + (0x2F9D0, 'M', '諭'), + (0x2F9D1, 'M', '變'), + (0x2F9D2, 'M', '豕'), + (0x2F9D3, 'M', '𧲨'), + (0x2F9D4, 'M', '貫'), + (0x2F9D5, 'M', '賁'), + ] + +def _seg_81() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F9D6, 'M', '贛'), + (0x2F9D7, 'M', '起'), + (0x2F9D8, 'M', '𧼯'), + (0x2F9D9, 'M', '𠠄'), + (0x2F9DA, 'M', '跋'), + (0x2F9DB, 'M', '趼'), + (0x2F9DC, 'M', '跰'), + (0x2F9DD, 'M', '𠣞'), + (0x2F9DE, 'M', '軔'), + (0x2F9DF, 'M', '輸'), + (0x2F9E0, 'M', '𨗒'), + (0x2F9E1, 'M', '𨗭'), + (0x2F9E2, 'M', '邔'), + (0x2F9E3, 'M', '郱'), + (0x2F9E4, 'M', '鄑'), + (0x2F9E5, 'M', '𨜮'), + (0x2F9E6, 'M', '鄛'), + (0x2F9E7, 'M', '鈸'), + (0x2F9E8, 'M', '鋗'), + (0x2F9E9, 'M', '鋘'), + (0x2F9EA, 'M', '鉼'), + (0x2F9EB, 'M', '鏹'), + (0x2F9EC, 'M', '鐕'), + (0x2F9ED, 'M', '𨯺'), + (0x2F9EE, 'M', '開'), + (0x2F9EF, 'M', '䦕'), + (0x2F9F0, 'M', '閷'), + (0x2F9F1, 'M', '𨵷'), + (0x2F9F2, 'M', '䧦'), + (0x2F9F3, 'M', '雃'), + (0x2F9F4, 'M', '嶲'), + (0x2F9F5, 'M', '霣'), + (0x2F9F6, 'M', '𩅅'), + (0x2F9F7, 'M', '𩈚'), + (0x2F9F8, 'M', '䩮'), + (0x2F9F9, 'M', '䩶'), + (0x2F9FA, 'M', '韠'), + (0x2F9FB, 'M', '𩐊'), + (0x2F9FC, 'M', '䪲'), + (0x2F9FD, 'M', '𩒖'), + (0x2F9FE, 'M', '頋'), + (0x2FA00, 'M', '頩'), + (0x2FA01, 'M', '𩖶'), + (0x2FA02, 'M', '飢'), + (0x2FA03, 'M', '䬳'), + (0x2FA04, 'M', '餩'), + (0x2FA05, 'M', '馧'), + (0x2FA06, 'M', '駂'), + (0x2FA07, 'M', '駾'), + (0x2FA08, 'M', '䯎'), + (0x2FA09, 'M', '𩬰'), + (0x2FA0A, 'M', '鬒'), + (0x2FA0B, 'M', '鱀'), + (0x2FA0C, 'M', '鳽'), + (0x2FA0D, 'M', '䳎'), + (0x2FA0E, 'M', '䳭'), + (0x2FA0F, 'M', '鵧'), + (0x2FA10, 'M', '𪃎'), + (0x2FA11, 'M', '䳸'), + (0x2FA12, 'M', '𪄅'), + (0x2FA13, 'M', '𪈎'), + (0x2FA14, 'M', '𪊑'), + (0x2FA15, 'M', '麻'), + (0x2FA16, 'M', '䵖'), + (0x2FA17, 'M', '黹'), + (0x2FA18, 'M', '黾'), + (0x2FA19, 'M', '鼅'), + (0x2FA1A, 'M', '鼏'), + (0x2FA1B, 'M', '鼖'), + (0x2FA1C, 'M', '鼻'), + (0x2FA1D, 'M', '𪘀'), + (0x2FA1E, 'X'), + (0x30000, 'V'), + (0x3134B, 'X'), + (0x31350, 'V'), + (0x323B0, '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() + + _seg_78() + + _seg_79() + + _seg_80() + + _seg_81() +) # type: Tuple[Union[Tuple[int, str], Tuple[int, str, str]], ...] diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__init__.py new file mode 100644 index 0000000..5071021 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__init__.py @@ -0,0 +1,57 @@ +# coding: utf-8 +from .exceptions import * +from .ext import ExtType, Timestamp + +import os +import sys + + +version = (1, 0, 4) +__version__ = "1.0.4" + + +if os.environ.get("MSGPACK_PUREPYTHON") or sys.version_info[0] == 2: + from .fallback import Packer, unpackb, Unpacker +else: + try: + from ._cmsgpack import Packer, unpackb, Unpacker + except ImportError: + from .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.11/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d08f43bd05a98536cc82f86a7bc58242e6759a4f GIT binary patch literal 2081 zcmb7E-ESL35a0EE_~UFRag)$0P+gj;l?kz_T0v-OAnFGoN(pT$$UR_Re4FGF-<`F4 zNt!5?tg2E4svsbw^f3>pfcg*czytXYu2m$gm5?g&lsBUYDe4omcd z97@GdEX7bQ)rb>$Hqmmmo@}l5N-O>VJU@gP4c0}J*)Sflx1=MxdRQmsVq!xz_fHHL@7F{Yep3vf8mv-!p(n=W#?c5aj{yO(0iZL^q`gw1}w_RXs$Zw+uD8+2F68j#1g>OkKczw?anC^}hX??G^mKv>~ zXLIrF4)DWpdujQzlnz5gs(X{Oq~hykudJJ{r7u$3C%WzHzNeR&Pl@T2Q=#>BLiDqh zs>#^da&*VCKIKu}tNFI)vO;Kd^(SyoMe?~4y5h1xAun_6aW(SC)wxBJPBX5GBSM)# zR>br4^Wu!>km9UWtWi&d#fqM@P?`j@`C4&-xC_OqJz1zlG3v}hY%MwPv}X=n6ZIN6s`3>n2DqtD6azN|rx zV#}XCH%FBC^VHQt^elaH$tUc8q=;rAzI-f9QV0gDyFf(`0b`=7be;Bq;EMRdBt0xt zFxd%UAz({+&l9uGkEu&uro z^QHC%dSa@LBOrvA?}Z3O?FGf#D&;BaIqljlM95q-ZAO@0hEAvEMbkIS`r-_6+h%&j zbA8ixnNEa71Zq^$d+WZ{$_G?F{6}Qy7K@6mh91a)2qERN1>a-hB2eQIvTF2mpf3ws znCv95I%;N7I`{RtFVB5({@(fe#ox8u>X|@026X?8NCxt;5ZnA=o+39ZB;`4Otz;>rRo|rPLRnc%!eTd7@ zwD6fMRd!p7Yaci@kNTG=^=Q;nqC~>WaJlN47FPskaPxVm#udR?SaxCTAp}noZ#$kf zUnL`S2woPA#NGkklrY9m(2<};4KxrOL{Ct%9zG3}s)tWgMOt?~-pKaUHCW5)owIjG zZjS`H6OW{mo6^Z9Qt|MQr#A=B{XDukIPz=%L8lf$hagUoMJ^DxgBF%1PZkr3r`}O= zBzO?e3>i9jbN+%BM*f9PUAt&Bxb`2AAy1k5-jVuYNgYB-pN{W)_xRo2dyjt>3MPST z@2~5VZw*5J#hcNUO9#WhVQ@io@&ob6YvO5){E;E#9sH83swqwfF2l4LPFI`(Ty~Dj zC@u%w5;K4W1@GXOM$IZV5A5;+Hph(WlJYRYV}&ivJU7os73NhF+;X|-9{ zwgUgyYIdSJ55Fltd}v8OVh?a5of9Ulrr)$|aPzpZ8uA3~)?^FI&5ppdQh+BU_W*k1 z&p^*+^8<1V1ZJ?Bu=sq}fSx{II9ok7AGc~XCZ4u}pmLcJSqy>sE|w6M5meX}92G`@ zrr|okMA4Oz?>$L;(d`2yEFZR_!`c%kaw-Bf&OWt>HUvfDQ%%32Dh6)qxl%_pPbeA$S;c0N4Xr=MlXZ0?0@(rvYI~ zsz{R_k`%0)0nwvNhXLLXzW}%(XWALDM;tlR;cnF4pk>2qvWJ_*OXILmNp(Bcfq zf|~dgrivW^i7}y92~2xz4}R!Jw%y$vufII9eTnW{06lW`34LSyUbx!cfj{#NeANEC zV+r7eV;m2)ScR4DULxt#h0b*sN_DJ_*!ZnnnJM|_5W*)W^;AEONcN%;t1lJ^7Mz$S#Ss%LixWDI#N z`}Kg#Lz0geu2L#sVx@1Cq}QqTf>j-xKRZE-sbWw?r*b{sNZS7thmqpKk61XPQ1Kex zPJH6RVVj9sz)w}UxQO&E)6A0J=N~1nfbYd!2#>oh?*a}onx+l(oCZsthjafLtv3^D zQ`44V59Z+f^J}!;OsM?4lbU$GzQA)IsaZI`|CXcgK1NMRh`Nowvv9ui)<)lL^i4^V rZ0+^Q#vr$SxxqqsEOL$BGMj#2HC+$RRy5 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 J{(X=J`hOzCkx2jm literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf482de3e5e61f0dad3c120e7926ea3352fd0a14 GIT binary patch literal 47195 zcmeIb33OXmdM5a=kstvAAPDXoD3T&UNn9ja3nfdUM9HEhQMM%8C6*J4;sYg8BuG7g zT2P?Pa#vE2M%@J~sy6MCx{w~bT58+pDAkp2SEthLN-CA5mjRep5rQ73HJS08;+#nj z-KtF2sXlXRzW=@j?*XJp%T7+`oIHa6yZe6s```cm_kaJasHl*`Q}=^U&;NhF&T;=c zS(L{i8y^46$Z>CRJU7Vk2HrSfm^2I;4P-V=mfX_4ip06jbO$d2ACUlb%73fh(X=+9ygU%LdC0T%fp-^H(%+LIEp% z5!}nk{R|f{U*WEr&Tv-@ykoG^$UVpL&aZL2%U|^!6H>>&^bA%9Y<%%xB~o=y)J)b6 zRwJbnl*Yq*_|l2G$@;L+;$;QD(gz)fX6HSxNgUyp02RBmQgDt#g zu$4Ct`uOs}HrO}8z8Ur{u($ISgB^V3U?*QS*yZ2q-!^LGtG{L#?B;8b(=&W6;C5Xr z)yb`7;g9k42)QGW?>CR{R7<^s_YUqFdmvUwxi zTl}3YOe8lje`$$f^jl^+iILt~Tvfh8K5BL<}_@FoWuP>YVz_Bm3wBo9KJO29Opi@>3?UdlC3MI& z=@^wO-adUT?cm2oLPKiSf(^OSf6xUm$EBREZ+zv(SFX?AoK0A39>eVmsj-lUgivP- ztFK^%O{%XzIExj6ffDk_l;p~dE7z~xyq2(52zE-qxJ0eJM7T-U4`w*9e)uj7Z*d__ zA4Rxv)%G2j-dAnBK|*Fz`$8(RK1O+%;MLu0`qHC?|TObJ32GOfmcZ~$PA`^4^y z8E)rYKYH`%eAj}#W|=b<^&1vlRr6hUw#OUp?0Rn`>1q>QZObO|c;qU+ofo@wyWpX# zX~ET$Xnro~IwHD`Ea#gG3R$n|dWx#adWxD83y}e}Hx8V>&j}S&1oHMuV}gps%GN|4 z`2aLJOQIo`Xu5d%+VnLHbk;yaV}a2r3@>}Ye`R7U7#g}T76_63z_pM+cwlC1g7*us z7o7?TV}bLs!|4$usy@oH^LPWC-s1e+pn>NGjeH(&1R6H+CZK9FZw9pR7L+n|shM8)PYf?~B!r;wH3+oei zN;e(!s7RYSg_NeLS@0rBf#za5|D4o#>Ad0TX<(K6#bSL&^_bqIYh z78)7~7b~sOt~hlgT=01ShF+FAb5X}){pJr(Jt)5a@&_*`>$}DJ?wI+uJ>~M;wm)<= zF1Q-wy-C+b(X}z5{64AQ{Pyd2UZ-F&{N=W|8R@eY|1%h}P=Fz%wj0OkC$CT%F~l{# zh%7()mYOvLnzTI_F|3Xd1ZSu~NhP;WW)0{^72(7+Xl3;{Qa?()lP{DaV7hS9KRG2_ zyFBK7e=+-R3ic|%9JlDK zoNu^0m~^&^&emnlR8*Vtl)lw}tN+cTw~xjQF~eeU^?dK$Ysq4tSnONo3`Mnz9z=Qb z$n7IBL(1;DdF-LRe!*TJHze&FMEiz>^2@~w)CH{jXt2;qI*zyW#8r%~xX@eQJ<8BE zvI?W}G-~e~gcgL_71&G<;r}`>cqF zWDbsnwF}2Dta~PgC(rT2dxajP+fN0ikvqr5jdOCH+^}P5Dm*YVI_eh=&rD3D3r@_0 zPK@>qhlbMyhpvW%VP>=)o)RX9Lx*VfNf(|9fplSJpD~?}P^Yg=`_l!dL2+Rro17M$ zNO#E$AP`|N_Dc+h5wa=|4I4IeUVz~(&}0!~HXe+aW;mgU`EXhI)o>YgU)g6y-zw&` zY3kf~+7L>cLsUddXa=NXkc#5P!}=5p?8pWG$i*QFF%-mVGZGSxAjDbx2X_HraOK

    M0 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

    stKO!Vv-1Z1hI=@%{G0#nbJ2j5hV>?>#_>#v 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 z zs9<)$$xs*}CP}3)PbR8mwze)exe@rsnAX9)FwCic%fvp^z854Lk2U&;YZUYnP3P1dq!8Jv%CaOkXpG7DK%;K(Pd3f!uR zxw)$?K%*+?$+vV+U>P8AJ6UDm=DPb05SFxnRM!K0p`~k?Q$dAlVr~^iOABe?l7ZDi z>cv#xu#f_=T)_I9HK@7;aLKE3G4$%n@C^WezNuwV0tZoN~XUe@Lvd!c4tYs^&>L<1%dyUz<(offvSF( zOwSQu!~Zy$1__K17y^K(@4$(n!zWH2?>#*P-7kH@|3+Rf5MTpaubS=`);*KZ$~58M zD_lkf_;JB2z=6vqgTavEx)WS?ifc>ge<`kTj{T*$qB-`roX6!Cig{(ROJZInzQmPR zH)l$j@|HQfp)ytMiSaSpT>rA!K&svJz{(YS=K52P;<@KiMee!76bQ3#9&|qjpIV~F#=4S10 z*=(|Or>qAPIX}pZkf5)nI|EYIZHbkBXfI1Qq)ebDI$rOYUs?)Ru03WIZ*Q^9t*|Hc+f z^$AlwDe~J&C?p3Ia-J%&qG9qx@>~OBj&*4P@}MR z*#ZaZ&jN&zo$|@as>Jr$WieANx|Gux{B#PIjGB5ji=?$+zqzvr94;li4i=ouarU z{u9M95WcEtt1~P9Tb5~R@Vk0>l z38Af0Jl==K@75^Zyu6|gP*W1Ybu+i4rW%^;K0r39^T~h=5 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/exceptions.py b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/exceptions.py new file mode 100644 index 0000000..d6d2615 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/exceptions.py @@ -0,0 +1,48 @@ +class UnpackException(Exception): + """Base class for some exceptions raised while unpacking. + + NOTE: unpack may raise exception other than subclass of + UnpackException. If you want to catch all error, catch + Exception instead. + """ + + +class BufferFull(UnpackException): + pass + + +class OutOfData(UnpackException): + pass + + +class FormatError(ValueError, UnpackException): + """Invalid msgpack format""" + + +class StackError(ValueError, UnpackException): + """Too nested""" + + +# Deprecated. Use ValueError instead +UnpackValueError = ValueError + + +class ExtraData(UnpackValueError): + """ExtraData is raised when there is trailing data. + + This exception is raised while only one-shot (not streaming) + unpack. + """ + + def __init__(self, unpacked, extra): + self.unpacked = unpacked + self.extra = extra + + def __str__(self): + return "unpack(b) received extra data." + + +# Deprecated. Use Exception instead to catch all exception during packing. +PackException = Exception +PackValueError = ValueError +PackOverflowError = OverflowError diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/ext.py b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/ext.py new file mode 100644 index 0000000..25544c5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/ext.py @@ -0,0 +1,193 @@ +# coding: utf-8 +from collections import namedtuple +import datetime +import sys +import struct + + +PY2 = sys.version_info[0] == 2 + +if PY2: + int_types = (int, long) + _utc = None +else: + int_types = int + try: + _utc = datetime.timezone.utc + except AttributeError: + _utc = datetime.timezone(datetime.timedelta(0)) + + +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) + + +class Timestamp(object): + """Timestamp represents the Timestamp extension type in msgpack. + + When built with Cython, msgpack uses C methods to pack and unpack `Timestamp`. When using pure-Python + msgpack, :func:`to_bytes` and :func:`from_bytes` are used to pack and unpack `Timestamp`. + + This class is immutable: Do not override seconds and nanoseconds. + """ + + __slots__ = ["seconds", "nanoseconds"] + + def __init__(self, seconds, nanoseconds=0): + """Initialize a Timestamp object. + + :param int seconds: + Number of seconds since the UNIX epoch (00:00:00 UTC Jan 1 1970, minus leap seconds). + May be negative. + + :param int nanoseconds: + Number of nanoseconds to add to `seconds` to get fractional time. + Maximum is 999_999_999. Default is 0. + + Note: Negative times (before the UNIX epoch) are represented as negative seconds + positive ns. + """ + if not isinstance(seconds, int_types): + raise TypeError("seconds must be an interger") + if not isinstance(nanoseconds, int_types): + raise TypeError("nanoseconds must be an integer") + if not (0 <= nanoseconds < 10**9): + raise ValueError( + "nanoseconds must be a non-negative integer less than 999999999." + ) + self.seconds = seconds + self.nanoseconds = nanoseconds + + def __repr__(self): + """String representation of Timestamp.""" + return "Timestamp(seconds={0}, nanoseconds={1})".format( + self.seconds, self.nanoseconds + ) + + def __eq__(self, other): + """Check for equality with another Timestamp object""" + if type(other) is self.__class__: + return ( + self.seconds == other.seconds and self.nanoseconds == other.nanoseconds + ) + return False + + def __ne__(self, other): + """not-equals method (see :func:`__eq__()`)""" + return not self.__eq__(other) + + def __hash__(self): + return hash((self.seconds, self.nanoseconds)) + + @staticmethod + def from_bytes(b): + """Unpack bytes into a `Timestamp` object. + + Used for pure-Python msgpack unpacking. + + :param b: Payload from msgpack ext message with code -1 + :type b: bytes + + :returns: Timestamp object unpacked from msgpack ext payload + :rtype: Timestamp + """ + if len(b) == 4: + seconds = struct.unpack("!L", b)[0] + nanoseconds = 0 + elif len(b) == 8: + data64 = struct.unpack("!Q", b)[0] + seconds = data64 & 0x00000003FFFFFFFF + nanoseconds = data64 >> 34 + elif len(b) == 12: + nanoseconds, seconds = struct.unpack("!Iq", b) + else: + raise ValueError( + "Timestamp type can only be created from 32, 64, or 96-bit byte objects" + ) + return Timestamp(seconds, nanoseconds) + + def to_bytes(self): + """Pack this Timestamp object into bytes. + + Used for pure-Python msgpack packing. + + :returns data: Payload for EXT message with code -1 (timestamp type) + :rtype: bytes + """ + if (self.seconds >> 34) == 0: # seconds is non-negative and fits in 34 bits + data64 = self.nanoseconds << 34 | self.seconds + if data64 & 0xFFFFFFFF00000000 == 0: + # nanoseconds is zero and seconds < 2**32, so timestamp 32 + data = struct.pack("!L", data64) + else: + # timestamp 64 + data = struct.pack("!Q", data64) + else: + # timestamp 96 + data = struct.pack("!Iq", self.nanoseconds, self.seconds) + return data + + @staticmethod + def from_unix(unix_sec): + """Create a Timestamp from posix timestamp in seconds. + + :param unix_float: Posix timestamp in seconds. + :type unix_float: int or float. + """ + seconds = int(unix_sec // 1) + nanoseconds = int((unix_sec % 1) * 10**9) + return Timestamp(seconds, nanoseconds) + + def to_unix(self): + """Get the timestamp as a floating-point value. + + :returns: posix timestamp + :rtype: float + """ + return self.seconds + self.nanoseconds / 1e9 + + @staticmethod + def from_unix_nano(unix_ns): + """Create a Timestamp from posix timestamp in nanoseconds. + + :param int unix_ns: Posix timestamp in nanoseconds. + :rtype: Timestamp + """ + return Timestamp(*divmod(unix_ns, 10**9)) + + def to_unix_nano(self): + """Get the timestamp as a unixtime in nanoseconds. + + :returns: posix timestamp in nanoseconds + :rtype: int + """ + return self.seconds * 10**9 + self.nanoseconds + + def to_datetime(self): + """Get the timestamp as a UTC datetime. + + Python 2 is not supported. + + :rtype: datetime. + """ + return datetime.datetime.fromtimestamp(0, _utc) + datetime.timedelta( + seconds=self.to_unix() + ) + + @staticmethod + def from_datetime(dt): + """Create a Timestamp from datetime with tzinfo. + + Python 2 is not supported. + + :rtype: Timestamp + """ + return Timestamp.from_unix(dt.timestamp()) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/fallback.py b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/fallback.py new file mode 100644 index 0000000..f560c7b --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/msgpack/fallback.py @@ -0,0 +1,1010 @@ +"""Fallback pure Python implementation of msgpack""" +from datetime import datetime as _DateTime +import sys +import struct + + +PY2 = sys.version_info[0] == 2 +if PY2: + int_types = (int, long) + + def dict_iteritems(d): + return d.iteritems() + +else: + int_types = int + unicode = str + xrange = range + + def dict_iteritems(d): + return d.items() + + +if sys.version_info < (3, 5): + # Ugly hack... + RecursionError = RuntimeError + + def _is_recursionerror(e): + return ( + len(e.args) == 1 + and isinstance(e.args[0], str) + and e.args[0].startswith("maximum recursion depth exceeded") + ) + +else: + + def _is_recursionerror(e): + return True + + +if hasattr(sys, "pypy_version_info"): + # StringIO 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 .exceptions import BufferFull, OutOfData, ExtraData, FormatError, StackError + +from .ext import ExtType, Timestamp + + +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): + view = memoryview(obj) + if view.itemsize != 1: + raise ValueError("cannot unpack from multi-byte object") + return view + + +def unpackb(packed, **kwargs): + """ + Unpack an object from `packed`. + + Raises ``ExtraData`` when *packed* contains extra bytes. + Raises ``ValueError`` when *packed* is incomplete. + Raises ``FormatError`` when *packed* is not valid msgpack. + Raises ``StackError`` when *packed* contains too nested. + Other exceptions can be raised during unpacking. + + See :class:`Unpacker` for options. + """ + unpacker = Unpacker(None, max_buffer_size=len(packed), **kwargs) + unpacker.feed(packed) + try: + ret = unpacker._unpack() + except OutOfData: + raise ValueError("Unpack failed: incomplete input") + except RecursionError as e: + if _is_recursionerror(e): + raise StackError + raise + if unpacker._got_extradata(): + raise ExtraData(ret, unpacker._get_extradata()) + return ret + + +if sys.version_info < (2, 7, 6): + + def _unpack_from(f, b, o=0): + """Explicit type cast for legacy struct.unpack_from""" + return struct.unpack_from(f, bytes(b), o) + +else: + _unpack_from = struct.unpack_from + +_NO_FORMAT_USED = "" +_MSGPACK_HEADERS = { + 0xC4: (1, _NO_FORMAT_USED, TYPE_BIN), + 0xC5: (2, ">H", TYPE_BIN), + 0xC6: (4, ">I", TYPE_BIN), + 0xC7: (2, "Bb", TYPE_EXT), + 0xC8: (3, ">Hb", TYPE_EXT), + 0xC9: (5, ">Ib", TYPE_EXT), + 0xCA: (4, ">f"), + 0xCB: (8, ">d"), + 0xCC: (1, _NO_FORMAT_USED), + 0xCD: (2, ">H"), + 0xCE: (4, ">I"), + 0xCF: (8, ">Q"), + 0xD0: (1, "b"), + 0xD1: (2, ">h"), + 0xD2: (4, ">i"), + 0xD3: (8, ">q"), + 0xD4: (1, "b1s", TYPE_EXT), + 0xD5: (2, "b2s", TYPE_EXT), + 0xD6: (4, "b4s", TYPE_EXT), + 0xD7: (8, "b8s", TYPE_EXT), + 0xD8: (16, "b16s", TYPE_EXT), + 0xD9: (1, _NO_FORMAT_USED, TYPE_RAW), + 0xDA: (2, ">H", TYPE_RAW), + 0xDB: (4, ">I", TYPE_RAW), + 0xDC: (2, ">H", TYPE_ARRAY), + 0xDD: (4, ">I", TYPE_ARRAY), + 0xDE: (2, ">H", TYPE_MAP), + 0xDF: (4, ">I", TYPE_MAP), +} + + +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. + Otherwise, unpack to Python str by decoding with UTF-8 encoding (default). + + :param int timestamp: + Control how timestamp type is unpacked: + + 0 - Timestamp + 1 - float (Seconds from the EPOCH) + 2 - int (Nanoseconds from the EPOCH) + 3 - datetime.datetime (UTC). Python 2 is not supported. + + :param bool strict_map_key: + If true (default), only str or bytes are accepted for map (dict) keys. + + :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 unicode_errors: + The error handler for decoding unicode. (default: 'strict') + This option should be used only when you have msgpack data which + contains invalid UTF-8 string. + + :param int max_buffer_size: + Limits size of data waiting unpacked. 0 means 2**32-1. + The default value is 100*1024*1024 (100MiB). + Raises `BufferFull` exception when it is insufficient. + You should set this parameter when unpacking data from untrusted source. + + :param int max_str_len: + Deprecated, use *max_buffer_size* instead. + Limits max length of str. (default: max_buffer_size) + + :param int max_bin_len: + Deprecated, use *max_buffer_size* instead. + Limits max length of bin. (default: max_buffer_size) + + :param int max_array_len: + Limits max length of array. + (default: max_buffer_size) + + :param int max_map_len: + Limits max length of map. + (default: max_buffer_size//2) + + :param int max_ext_len: + Deprecated, use *max_buffer_size* instead. + Limits max size of ext type. (default: max_buffer_size) + + Example of streaming deserialize from file-like object:: + + unpacker = Unpacker(file_like) + for o in unpacker: + process(o) + + Example of streaming deserialize from socket:: + + unpacker = Unpacker() + while True: + buf = sock.recv(1024**2) + if not buf: + break + unpacker.feed(buf) + for o in unpacker: + process(o) + + Raises ``ExtraData`` when *packed* contains extra bytes. + Raises ``OutOfData`` when *packed* is incomplete. + Raises ``FormatError`` when *packed* is not valid msgpack. + Raises ``StackError`` when *packed* contains too nested. + Other exceptions can be raised during unpacking. + """ + + def __init__( + self, + file_like=None, + read_size=0, + use_list=True, + raw=False, + timestamp=0, + strict_map_key=True, + object_hook=None, + object_pairs_hook=None, + list_hook=None, + unicode_errors=None, + max_buffer_size=100 * 1024 * 1024, + ext_hook=ExtType, + max_str_len=-1, + max_bin_len=-1, + max_array_len=-1, + max_map_len=-1, + max_ext_len=-1, + ): + 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() + #: 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 + + if not max_buffer_size: + max_buffer_size = 2**31 - 1 + if max_str_len == -1: + max_str_len = max_buffer_size + if max_bin_len == -1: + max_bin_len = max_buffer_size + if max_array_len == -1: + max_array_len = max_buffer_size + if max_map_len == -1: + max_map_len = max_buffer_size // 2 + if max_ext_len == -1: + max_ext_len = max_buffer_size + + self._max_buffer_size = max_buffer_size + 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._strict_map_key = bool(strict_map_key) + self._unicode_errors = unicode_errors + self._use_list = use_list + if not (0 <= timestamp <= 3): + raise ValueError("timestamp must be 0..3") + self._timestamp = timestamp + 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 + + # Use extend here: INPLACE_ADD += doesn't reliably typecast memoryview in jython + self._buffer.extend(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): + ret = self._read(n, raise_outofdata=False) + self._consume() + return ret + + def _read(self, n, raise_outofdata=True): + # (int) -> bytearray + self._reserve(n, raise_outofdata=raise_outofdata) + i = self._buff_i + ret = self._buffer[i : i + n] + self._buff_i = i + len(ret) + return ret + + def _reserve(self, n, raise_outofdata=True): + 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 + if remain_bytes + len(self._buffer) > self._max_buffer_size: + raise BufferFull + 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 and raise_outofdata: + self._buff_i = 0 # rollback + raise OutOfData + + def _read_header(self): + 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 ValueError("%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 ValueError( + "%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 ValueError("%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 0xC4 <= b <= 0xC6: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + if len(fmt) > 0: + n = _unpack_from(fmt, self._buffer, self._buff_i)[0] + else: + n = self._buffer[self._buff_i] + self._buff_i += size + if n > self._max_bin_len: + raise ValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len)) + obj = self._read(n) + elif 0xC7 <= b <= 0xC9: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + L, n = _unpack_from(fmt, self._buffer, self._buff_i) + self._buff_i += size + if L > self._max_ext_len: + raise ValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len)) + obj = self._read(L) + elif 0xCA <= b <= 0xD3: + size, fmt = _MSGPACK_HEADERS[b] + self._reserve(size) + if len(fmt) > 0: + obj = _unpack_from(fmt, self._buffer, self._buff_i)[0] + else: + obj = self._buffer[self._buff_i] + self._buff_i += size + elif 0xD4 <= b <= 0xD8: + size, fmt, typ = _MSGPACK_HEADERS[b] + if self._max_ext_len < size: + raise ValueError( + "%s exceeds max_ext_len(%s)" % (size, self._max_ext_len) + ) + self._reserve(size + 1) + n, obj = _unpack_from(fmt, self._buffer, self._buff_i) + self._buff_i += size + 1 + elif 0xD9 <= b <= 0xDB: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + if len(fmt) > 0: + (n,) = _unpack_from(fmt, self._buffer, self._buff_i) + else: + n = self._buffer[self._buff_i] + self._buff_i += size + if n > self._max_str_len: + raise ValueError("%s exceeds max_str_len(%s)" % (n, self._max_str_len)) + obj = self._read(n) + elif 0xDC <= b <= 0xDD: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + (n,) = _unpack_from(fmt, self._buffer, self._buff_i) + self._buff_i += size + if n > self._max_array_len: + raise ValueError( + "%s exceeds max_array_len(%s)" % (n, self._max_array_len) + ) + elif 0xDE <= b <= 0xDF: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + (n,) = _unpack_from(fmt, self._buffer, self._buff_i) + self._buff_i += size + if n > self._max_map_len: + raise ValueError("%s exceeds max_map_len(%s)" % (n, self._max_map_len)) + else: + raise FormatError("Unknown header: 0x%x" % b) + return typ, n, obj + + def _unpack(self, execute=EX_CONSTRUCT): + typ, n, obj = self._read_header() + + if execute == EX_READ_ARRAY_HEADER: + if typ != TYPE_ARRAY: + raise ValueError("Expected array") + return n + if execute == EX_READ_MAP_HEADER: + if typ != TYPE_MAP: + raise ValueError("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) + if self._strict_map_key and type(key) not in (unicode, bytes): + raise ValueError( + "%s is not allowed for map key" % str(type(key)) + ) + if not PY2 and type(key) is str: + key = sys.intern(key) + 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._raw: + obj = bytes(obj) + else: + obj = obj.decode("utf_8", self._unicode_errors) + return obj + if typ == TYPE_BIN: + return bytes(obj) + if typ == TYPE_EXT: + if n == -1: # timestamp + ts = Timestamp.from_bytes(bytes(obj)) + if self._timestamp == 1: + return ts.to_unix() + elif self._timestamp == 2: + return ts.to_unix_nano() + elif self._timestamp == 3: + return ts.to_datetime() + else: + return ts + else: + return self._ext_hook(n, 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 + except RecursionError: + raise StackError + + next = __next__ + + def skip(self): + self._unpack(EX_SKIP) + self._consume() + + def unpack(self): + try: + ret = self._unpack(EX_CONSTRUCT) + except RecursionError: + raise StackError + self._consume() + return ret + + def read_array_header(self): + ret = self._unpack(EX_READ_ARRAY_HEADER) + self._consume() + return ret + + def read_map_header(self): + ret = self._unpack(EX_READ_MAP_HEADER) + 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. (default: True) + + :param bool strict_types: + If set to true, types will be checked to be exact. Derived classes + from serializable 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 bool datetime: + If set to true, datetime with tzinfo is packed into Timestamp type. + Note that the tzinfo is stripped in the timestamp. + You can get UTC datetime with `timestamp=3` option of the Unpacker. + (Python 2 is not supported). + + :param str unicode_errors: + The error handler for encoding unicode. (default: 'strict') + DO NOT USE THIS!! This option is kept for very specific usage. + + Example of streaming deserialize from file-like object:: + + unpacker = Unpacker(file_like) + for o in unpacker: + process(o) + + Example of streaming deserialize from socket:: + + unpacker = Unpacker() + while True: + buf = sock.recv(1024**2) + if not buf: + break + unpacker.feed(buf) + for o in unpacker: + process(o) + + Raises ``ExtraData`` when *packed* contains extra bytes. + Raises ``OutOfData`` when *packed* is incomplete. + Raises ``FormatError`` when *packed* is not valid msgpack. + Raises ``StackError`` when *packed* contains too nested. + Other exceptions can be raised during unpacking. + """ + + def __init__( + self, + default=None, + use_single_float=False, + autoreset=True, + use_bin_type=True, + strict_types=False, + datetime=False, + unicode_errors=None, + ): + self._strict_types = strict_types + self._use_float = use_single_float + self._autoreset = autoreset + self._use_bin_type = use_bin_type + self._buffer = StringIO() + if PY2 and datetime: + raise ValueError("datetime is not supported in Python 2") + self._datetime = bool(datetime) + self._unicode_errors = unicode_errors or "strict" + 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 ValueError("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 OverflowError("Integer value out of range") + if check(obj, (bytes, bytearray)): + n = len(obj) + if n >= 2**32: + raise ValueError("%s is too large" % type(obj).__name__) + self._pack_bin_header(n) + return self._buffer.write(obj) + if check(obj, unicode): + obj = obj.encode("utf-8", self._unicode_errors) + n = len(obj) + if n >= 2**32: + raise ValueError("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 ValueError("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, Timestamp)): + if check(obj, Timestamp): + code = -1 + data = obj.to_bytes() + else: + 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 self._datetime and check(obj, _DateTime) and obj.tzinfo is not None: + obj = Timestamp.from_datetime(obj) + default_used = 1 + continue + + if not default_used and self._default is not None: + obj = self._default(obj) + default_used = 1 + continue + + if self._datetime and check(obj, _DateTime): + raise ValueError("Cannot serialize %r where tzinfo=None" % (obj,)) + + raise TypeError("Cannot serialize %r" % (obj,)) + + def pack(self, obj): + try: + self._pack(obj) + except: + self._buffer = StringIO() # force reset + raise + if self._autoreset: + ret = self._buffer.getvalue() + self._buffer = StringIO() + return ret + + def pack_map_pairs(self, pairs): + self._pack_map_pairs(len(pairs), pairs) + if self._autoreset: + ret = self._buffer.getvalue() + self._buffer = StringIO() + return ret + + def pack_array_header(self, n): + if n >= 2**32: + raise ValueError + self._pack_array_header(n) + if self._autoreset: + ret = self._buffer.getvalue() + self._buffer = StringIO() + return ret + + def pack_map_header(self, n): + if n >= 2**32: + raise ValueError + self._pack_map_header(n) + if self._autoreset: + ret = self._buffer.getvalue() + self._buffer = StringIO() + 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 ValueError("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 ValueError("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 ValueError("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 ValueError("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 ValueError("Bin is too large") + + def bytes(self): + """Return internal buffer contents as bytes object""" + return self._buffer.getvalue() + + def reset(self): + """Reset internal buffer. + + This method is useful only when autoreset=False. + """ + self._buffer = StringIO() + + def getbuffer(self): + """Return view of internal buffer.""" + if USING_STRINGBUILDER or PY2: + return memoryview(self.bytes()) + else: + return self._buffer.getbuffer() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__about__.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__about__.py new file mode 100644 index 0000000..3551bc2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__about__.py @@ -0,0 +1,26 @@ +# 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. + +__all__ = [ + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", +] + +__title__ = "packaging" +__summary__ = "Core utilities for Python packages" +__uri__ = "https://github.com/pypa/packaging" + +__version__ = "21.3" + +__author__ = "Donald Stufft and individual contributors" +__email__ = "donald@stufft.io" + +__license__ = "BSD-2-Clause or Apache-2.0" +__copyright__ = "2014-2019 %s" % __author__ diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__init__.py new file mode 100644 index 0000000..3c50c5d --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__init__.py @@ -0,0 +1,25 @@ +# 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 .__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.11/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a916231c3fe93ae87915d342a356fca2fb3eba61 GIT binary patch literal 646 zcmYL_y^hmB6otq6bL^}`3WU%WkwKye$evAh3qS|~yA2IOO6O+ecqaBNw#S+oM~W-I z1foSWhXs_jOeC;#GbI(u5u@Thx_rLgS3!%SFb1dlhb$bEJ zHxwg^ei#9wMqtoZ(4y_2O*=t{c7rbM1wCp8ChfCs)k7%gQ)`YU_N0Gf5u&+H86h_V zLR6V$piTjc)Ma!agjq~6B3p>5fYwZC(A;f9yBSBSgslyhmc4VYsuq8H?ks( zzJxK)Pez?p{Kpo$GSB)NYtlm*kKFFe32_nG=Mv6?8t6vmWI;&Q5{u#Zfo#v7bxcvv_oWz3w literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ff2d80bf8983edaaf180d56d4bfbad2c31ade43 GIT binary patch literal 567 zcmcJLy-ve05XbE#Z9b|ZCPwxS)T)q}5RbsZ=H*BeD|Lxu%lVM9Al`zV1@R6%2`dv@ zt8Se*HwEzm*wRmT=fCcM=hx{pA$ZQ;x5btc^68SF;~j(D6$Z~FCpj&NqMRy^d&=j& z3V5JKe5A&FtU?~Dh)0wZB==q@k8}Ty%z`iMN@meV0+6=NN?U-BDL|%8Z)LG+FpU9( zN@a=R1fZ0esA@4Jb*ofr`$5#mrgZfXptW)kbi&qBR{*ofM(AWihuFa_W_^c|!`LA} z+|CkbnJ#sU?t{YB|Huwa4()zBIoGtr8Q;hb#bkfaR$2+R&Y7`#EwZL&T6M5YvxnBO zPE;K$<&v2mm#!}7iv_D?BQ6ZSr-i7Qk%j@va&6gAlvTk1WF>K|x#{=OwbFT8iW_^1 hhVCEhN5sablx~ukdK>b;IEyFFx1kHjHzf< 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 G1^y4c%zn-Q literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a99e515066e4b44be46d823b70fd8b7fc7c91517 GIT binary patch literal 3689 zcmc&#Pfr_16rWwMjRBiQwFxGW;D|(t+rr`|YSjvHs!}xvU&zUqmGKV7)U2J^H4-id z4pHSwJ+x9QIC7|{5MQAm0wfOAN;&ll5V@zE`reGa?5=kSZIQb6zMVJoX5O3k@Aq3e zJx1WU|NGn8L7b33kr_Nnf6!Zp!2yxUSHvK%i6I@!gq*@Fo-(XZatzGrV2YF_E-iy} zEFdj|v>cF*8OjaZi_kz zM(s8;tCGiX9LM18CAi&&1pDNYlN@Y3At#cfShTTWp=kbHRoiTCQ*F!8TCBN6tG1;z zw|DgQO7)v|OWUF5j@GEJYpq>-vuQqEDi$@XZqvmUtXFE((pvSFrh}N#WSW?)n>9_h zY}T%Vb<|pF?K(+aXSBt1y)!j11aGi3m>vOBEF}Bn4|S&7>A{fr?giN)?)3!>4v6i! zvyJ!dKYQdDR!-ejKeq;#FP+GavRSb<9R*EdN!Te|!7vxmR9p=)RZOE$?+%cC@$ktUXe094<*aU2VXpGgZx@p-Jvr3&&U9UDOmIa9sW*>bOVjoUs;HVzD52G@3 z_~-}?e`9fVjOD+%F93G69(T=HwMFA(#pKcT~UHeA5*aGajMp;-CYB0$I@Cf%} z6nM@!*%GZ)?D`J%riia}+{S zYY7A37DB0@VnLaeZLr=M)AjA9(Qe>4rR%TSl}3Lh2JM24!)_;5H*NL-juOpvY)6i= z-fT8l4yM>Fl01@!NFF2k2nm*f@ClYD!*t{Xo1irf4%l~pm$DSUd$@2(;1eVXDV`Tg zd0g@mSeiO~jEz^z)v+&0AgwO1gv6cT6lK*0IxH;ILK0w9Dz2^ldW?v znDjnSdI+jqP`cawR+P5e&S3SHK#4a(rsDO2W@05onkfK@R{{1v5ln1?zW(f%|CNKT z=|8;CI>2=Jm|a8Zi_N(+7m-XH zH$Df6ev!RVr@Jb5Y^gBGFs_Uzz!Hu$B#01<#{lbs6_I>`BoZAs5`;knZzf0<;I;06 zOZ^ZrD{x>ITc?*m|GfqxZlig>A0lo8h;jlVaz}G`!(1d0O$8lQDkuV2d8E1jcq{N@ z@4MuR!1z_R0-G>Ztz96OF-ejxQ_~WF>M(hWbAMeeJR_-Gcjf!lA6EC1mx*Z!>>DPy cDTkZ-tItUG$yw&{d8TlYDV&i>@#h!#8%1j4kpKVy literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38eaf8bdca183596cbbd00d43b52a1a60a6da8fe GIT binary patch literal 16529 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99929bf913e39fa8c91a7ad3907b8317a8428e0c GIT binary patch literal 7644 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39313ae68450a7ade5839639e423ca63e39856de GIT binary patch literal 34367 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ccc7cb1077e28af66e70b9100846f518ba8425f0 GIT binary patch literal 6687 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 jDA>t4>r None: + def unpack(fmt: str) -> int: + try: + data = file.read(struct.calcsize(fmt)) + result: Tuple[int, ...] = struct.unpack(fmt, data) + except struct.error: + raise _ELFFileHeader._InvalidELFFileHeader() + return result[0] + + self.e_ident_magic = unpack(">I") + if self.e_ident_magic != self.ELF_MAGIC_NUMBER: + raise _ELFFileHeader._InvalidELFFileHeader() + self.e_ident_class = unpack("B") + if self.e_ident_class not in {self.ELFCLASS32, self.ELFCLASS64}: + raise _ELFFileHeader._InvalidELFFileHeader() + self.e_ident_data = unpack("B") + if self.e_ident_data not in {self.ELFDATA2LSB, self.ELFDATA2MSB}: + raise _ELFFileHeader._InvalidELFFileHeader() + self.e_ident_version = unpack("B") + self.e_ident_osabi = unpack("B") + self.e_ident_abiversion = unpack("B") + self.e_ident_pad = file.read(7) + format_h = "H" + format_i = "I" + format_q = "Q" + format_p = format_i if self.e_ident_class == self.ELFCLASS32 else format_q + self.e_type = unpack(format_h) + self.e_machine = unpack(format_h) + self.e_version = unpack(format_i) + self.e_entry = unpack(format_p) + self.e_phoff = unpack(format_p) + self.e_shoff = unpack(format_p) + self.e_flags = unpack(format_i) + self.e_ehsize = unpack(format_h) + self.e_phentsize = unpack(format_h) + self.e_phnum = unpack(format_h) + self.e_shentsize = unpack(format_h) + self.e_shnum = unpack(format_h) + self.e_shstrndx = unpack(format_h) + + +def _get_elf_header() -> Optional[_ELFFileHeader]: + try: + with open(sys.executable, "rb") as f: + elf_header = _ELFFileHeader(f) + except (OSError, TypeError, _ELFFileHeader._InvalidELFFileHeader): + return None + return elf_header + + +def _is_linux_armhf() -> bool: + # hard-float ABI can be detected from the ELF header of the running + # process + # https://static.docs.arm.com/ihi0044/g/aaelf32.pdf + elf_header = _get_elf_header() + if elf_header is None: + return False + result = elf_header.e_ident_class == elf_header.ELFCLASS32 + result &= elf_header.e_ident_data == elf_header.ELFDATA2LSB + result &= elf_header.e_machine == elf_header.EM_ARM + result &= ( + elf_header.e_flags & elf_header.EF_ARM_ABIMASK + ) == elf_header.EF_ARM_ABI_VER5 + result &= ( + elf_header.e_flags & elf_header.EF_ARM_ABI_FLOAT_HARD + ) == elf_header.EF_ARM_ABI_FLOAT_HARD + return result + + +def _is_linux_i686() -> bool: + elf_header = _get_elf_header() + if elf_header is None: + return False + result = elf_header.e_ident_class == elf_header.ELFCLASS32 + result &= elf_header.e_ident_data == elf_header.ELFDATA2LSB + result &= elf_header.e_machine == elf_header.EM_386 + return result + + +def _have_compatible_abi(arch: str) -> bool: + if arch == "armv7l": + return _is_linux_armhf() + if arch == "i686": + return _is_linux_i686() + return arch in {"x86_64", "aarch64", "ppc64", "ppc64le", "s390x"} + + +# If glibc ever changes its major version, we need to know what the last +# minor version was, so we can build the complete list of all versions. +# For now, guess what the highest minor version might be, assume it will +# be 50 for testing. Once this actually happens, update the dictionary +# with the actual value. +_LAST_GLIBC_MINOR: Dict[int, int] = collections.defaultdict(lambda: 50) + + +class _GLibCVersion(NamedTuple): + major: int + minor: int + + +def _glibc_version_string_confstr() -> Optional[str]: + """ + Primary implementation of glibc_version_string using os.confstr. + """ + # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely + # to be broken or missing. This strategy is used in the standard library + # platform module. + # https://github.com/python/cpython/blob/fcf1d003bf4f0100c/Lib/platform.py#L175-L183 + try: + # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17". + version_string = os.confstr("CS_GNU_LIBC_VERSION") + assert version_string is not None + _, version = version_string.split() + except (AssertionError, AttributeError, OSError, ValueError): + # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... + return None + return version + + +def _glibc_version_string_ctypes() -> Optional[str]: + """ + Fallback implementation of glibc_version_string using ctypes. + """ + try: + import ctypes + except ImportError: + return None + + # 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. + # + # We must also handle the special case where the executable is not a + # dynamically linked executable. This can occur when using musl libc, + # for example. In this situation, dlopen() will error, leading to an + # OSError. Interestingly, at least in the case of musl, there is no + # errno set on the OSError. The single string argument used to construct + # OSError comes from libc itself and is therefore not portable to + # hard code here. In any case, failure to call dlopen() means we + # can proceed, so we bail on our attempt. + try: + process_namespace = ctypes.CDLL(None) + except OSError: + return 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: str = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +def _glibc_version_string() -> Optional[str]: + """Returns glibc version string, or None if not using glibc.""" + return _glibc_version_string_confstr() or _glibc_version_string_ctypes() + + +def _parse_glibc_version(version_str: str) -> Tuple[int, int]: + """Parse glibc 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 -1, -1 + return int(m.group("major")), int(m.group("minor")) + + +@functools.lru_cache() +def _get_glibc_version() -> Tuple[int, int]: + version_str = _glibc_version_string() + if version_str is None: + return (-1, -1) + return _parse_glibc_version(version_str) + + +# From PEP 513, PEP 600 +def _is_compatible(name: str, arch: str, version: _GLibCVersion) -> bool: + sys_glibc = _get_glibc_version() + if sys_glibc < version: + return False + # Check for presence of _manylinux module. + try: + import _manylinux # noqa + except ImportError: + return True + if hasattr(_manylinux, "manylinux_compatible"): + result = _manylinux.manylinux_compatible(version[0], version[1], arch) + if result is not None: + return bool(result) + return True + if version == _GLibCVersion(2, 5): + if hasattr(_manylinux, "manylinux1_compatible"): + return bool(_manylinux.manylinux1_compatible) + if version == _GLibCVersion(2, 12): + if hasattr(_manylinux, "manylinux2010_compatible"): + return bool(_manylinux.manylinux2010_compatible) + if version == _GLibCVersion(2, 17): + if hasattr(_manylinux, "manylinux2014_compatible"): + return bool(_manylinux.manylinux2014_compatible) + return True + + +_LEGACY_MANYLINUX_MAP = { + # CentOS 7 w/ glibc 2.17 (PEP 599) + (2, 17): "manylinux2014", + # CentOS 6 w/ glibc 2.12 (PEP 571) + (2, 12): "manylinux2010", + # CentOS 5 w/ glibc 2.5 (PEP 513) + (2, 5): "manylinux1", +} + + +def platform_tags(linux: str, arch: str) -> Iterator[str]: + if not _have_compatible_abi(arch): + return + # Oldest glibc to be supported regardless of architecture is (2, 17). + too_old_glibc2 = _GLibCVersion(2, 16) + if arch in {"x86_64", "i686"}: + # On x86/i686 also oldest glibc to be supported is (2, 5). + too_old_glibc2 = _GLibCVersion(2, 4) + current_glibc = _GLibCVersion(*_get_glibc_version()) + glibc_max_list = [current_glibc] + # We can assume compatibility across glibc major versions. + # https://sourceware.org/bugzilla/show_bug.cgi?id=24636 + # + # Build a list of maximum glibc versions so that we can + # output the canonical list of all glibc from current_glibc + # down to too_old_glibc2, including all intermediary versions. + for glibc_major in range(current_glibc.major - 1, 1, -1): + glibc_minor = _LAST_GLIBC_MINOR[glibc_major] + glibc_max_list.append(_GLibCVersion(glibc_major, glibc_minor)) + for glibc_max in glibc_max_list: + if glibc_max.major == too_old_glibc2.major: + min_minor = too_old_glibc2.minor + else: + # For other glibc major versions oldest supported is (x, 0). + min_minor = -1 + for glibc_minor in range(glibc_max.minor, min_minor, -1): + glibc_version = _GLibCVersion(glibc_max.major, glibc_minor) + tag = "manylinux_{}_{}".format(*glibc_version) + if _is_compatible(tag, arch, glibc_version): + yield linux.replace("linux", tag) + # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags. + if glibc_version in _LEGACY_MANYLINUX_MAP: + legacy_tag = _LEGACY_MANYLINUX_MAP[glibc_version] + if _is_compatible(legacy_tag, arch, glibc_version): + yield linux.replace("linux", legacy_tag) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/_musllinux.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/_musllinux.py new file mode 100644 index 0000000..8ac3059 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/_musllinux.py @@ -0,0 +1,136 @@ +"""PEP 656 support. + +This module implements logic to detect if the currently running Python is +linked against musl, and what musl version is used. +""" + +import contextlib +import functools +import operator +import os +import re +import struct +import subprocess +import sys +from typing import IO, Iterator, NamedTuple, Optional, Tuple + + +def _read_unpacked(f: IO[bytes], fmt: str) -> Tuple[int, ...]: + return struct.unpack(fmt, f.read(struct.calcsize(fmt))) + + +def _parse_ld_musl_from_elf(f: IO[bytes]) -> Optional[str]: + """Detect musl libc location by parsing the Python executable. + + Based on: https://gist.github.com/lyssdod/f51579ae8d93c8657a5564aefc2ffbca + ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html + """ + f.seek(0) + try: + ident = _read_unpacked(f, "16B") + except struct.error: + return None + if ident[:4] != tuple(b"\x7fELF"): # Invalid magic, not ELF. + return None + f.seek(struct.calcsize("HHI"), 1) # Skip file type, machine, and version. + + try: + # e_fmt: Format for program header. + # p_fmt: Format for section header. + # p_idx: Indexes to find p_type, p_offset, and p_filesz. + e_fmt, p_fmt, p_idx = { + 1: ("IIIIHHH", "IIIIIIII", (0, 1, 4)), # 32-bit. + 2: ("QQQIHHH", "IIQQQQQQ", (0, 2, 5)), # 64-bit. + }[ident[4]] + except KeyError: + return None + else: + p_get = operator.itemgetter(*p_idx) + + # Find the interpreter section and return its content. + try: + _, e_phoff, _, _, _, e_phentsize, e_phnum = _read_unpacked(f, e_fmt) + except struct.error: + return None + for i in range(e_phnum + 1): + f.seek(e_phoff + e_phentsize * i) + try: + p_type, p_offset, p_filesz = p_get(_read_unpacked(f, p_fmt)) + except struct.error: + return None + if p_type != 3: # Not PT_INTERP. + continue + f.seek(p_offset) + interpreter = os.fsdecode(f.read(p_filesz)).strip("\0") + if "musl" not in interpreter: + return None + return interpreter + return None + + +class _MuslVersion(NamedTuple): + major: int + minor: int + + +def _parse_musl_version(output: str) -> Optional[_MuslVersion]: + lines = [n for n in (n.strip() for n in output.splitlines()) if n] + if len(lines) < 2 or lines[0][:4] != "musl": + return None + m = re.match(r"Version (\d+)\.(\d+)", lines[1]) + if not m: + return None + return _MuslVersion(major=int(m.group(1)), minor=int(m.group(2))) + + +@functools.lru_cache() +def _get_musl_version(executable: str) -> Optional[_MuslVersion]: + """Detect currently-running musl runtime version. + + This is done by checking the specified executable's dynamic linking + information, and invoking the loader to parse its output for a version + string. If the loader is musl, the output would be something like:: + + musl libc (x86_64) + Version 1.2.2 + Dynamic Program Loader + """ + with contextlib.ExitStack() as stack: + try: + f = stack.enter_context(open(executable, "rb")) + except OSError: + return None + ld = _parse_ld_musl_from_elf(f) + if not ld: + return None + proc = subprocess.run([ld], stderr=subprocess.PIPE, universal_newlines=True) + return _parse_musl_version(proc.stderr) + + +def platform_tags(arch: str) -> Iterator[str]: + """Generate musllinux tags compatible to the current platform. + + :param arch: Should be the part of platform tag after the ``linux_`` + prefix, e.g. ``x86_64``. The ``linux_`` prefix is assumed as a + prerequisite for the current platform to be musllinux-compatible. + + :returns: An iterator of compatible musllinux tags. + """ + sys_musl = _get_musl_version(sys.executable) + if sys_musl is None: # Python not dynamically linked against musl. + return + for minor in range(sys_musl.minor, -1, -1): + yield f"musllinux_{sys_musl.major}_{minor}_{arch}" + + +if __name__ == "__main__": # pragma: no cover + import sysconfig + + plat = sysconfig.get_platform() + assert plat.startswith("linux-"), "not linux" + + print("plat:", plat) + print("musl:", _get_musl_version(sys.executable)) + print("tags:", end=" ") + for t in platform_tags(re.sub(r"[.-]", "_", plat.split("-", 1)[-1])): + print(t, end="\n ") diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/_structures.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/_structures.py new file mode 100644 index 0000000..90a6465 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/_structures.py @@ -0,0 +1,61 @@ +# 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. + + +class InfinityType: + def __repr__(self) -> str: + return "Infinity" + + def __hash__(self) -> int: + return hash(repr(self)) + + def __lt__(self, other: object) -> bool: + return False + + def __le__(self, other: object) -> bool: + return False + + def __eq__(self, other: object) -> bool: + return isinstance(other, self.__class__) + + def __gt__(self, other: object) -> bool: + return True + + def __ge__(self, other: object) -> bool: + return True + + def __neg__(self: object) -> "NegativeInfinityType": + return NegativeInfinity + + +Infinity = InfinityType() + + +class NegativeInfinityType: + def __repr__(self) -> str: + return "-Infinity" + + def __hash__(self) -> int: + return hash(repr(self)) + + def __lt__(self, other: object) -> bool: + return True + + def __le__(self, other: object) -> bool: + return True + + def __eq__(self, other: object) -> bool: + return isinstance(other, self.__class__) + + def __gt__(self, other: object) -> bool: + return False + + def __ge__(self, other: object) -> bool: + return False + + def __neg__(self: object) -> InfinityType: + return Infinity + + +NegativeInfinity = NegativeInfinityType() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/markers.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/markers.py new file mode 100644 index 0000000..540e7a4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/markers.py @@ -0,0 +1,304 @@ +# 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. + +import operator +import os +import platform +import sys +from typing import Any, Callable, Dict, List, Optional, Tuple, Union + +from pip._vendor.pyparsing import ( # noqa: N817 + Forward, + Group, + Literal as L, + ParseException, + ParseResults, + QuotedString, + ZeroOrMore, + stringEnd, + stringStart, +) + +from .specifiers import InvalidSpecifier, Specifier + +__all__ = [ + "InvalidMarker", + "UndefinedComparison", + "UndefinedEnvironmentName", + "Marker", + "default_environment", +] + +Operator = Callable[[str, str], bool] + + +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: + def __init__(self, value: Any) -> None: + self.value = value + + def __str__(self) -> str: + return str(self.value) + + def __repr__(self) -> str: + return f"<{self.__class__.__name__}('{self}')>" + + def serialize(self) -> str: + raise NotImplementedError + + +class Variable(Node): + def serialize(self) -> str: + return str(self) + + +class Value(Node): + def serialize(self) -> str: + return f'"{self}"' + + +class Op(Node): + def serialize(self) -> str: + 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") # PEP-508 +) +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: Union[ParseResults, List[Any]]) -> List[Any]: + if isinstance(results, ParseResults): + return [_coerce_parse_result(i) for i in results] + else: + return results + + +def _format_marker( + marker: Union[List[str], Tuple[Node, ...], str], first: Optional[bool] = True +) -> str: + + assert isinstance(marker, (list, tuple, str)) + + # 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: Dict[str, Operator] = { + "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: str, op: Op, rhs: str) -> bool: + try: + spec = Specifier("".join([op.serialize(), rhs])) + except InvalidSpecifier: + pass + else: + return spec.contains(lhs) + + oper: Optional[Operator] = _operators.get(op.serialize()) + if oper is None: + raise UndefinedComparison(f"Undefined {op!r} on {lhs!r} and {rhs!r}.") + + return oper(lhs, rhs) + + +class Undefined: + pass + + +_undefined = Undefined() + + +def _get_env(environment: Dict[str, str], name: str) -> str: + value: Union[str, Undefined] = environment.get(name, _undefined) + + if isinstance(value, Undefined): + raise UndefinedEnvironmentName( + f"{name!r} does not exist in evaluation environment." + ) + + return value + + +def _evaluate_markers(markers: List[Any], environment: Dict[str, str]) -> bool: + groups: List[List[bool]] = [[]] + + for marker in markers: + assert isinstance(marker, (list, tuple, str)) + + 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: "sys._version_info") -> str: + 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() -> Dict[str, str]: + iver = format_full_version(sys.implementation.version) + implementation_name = sys.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": ".".join(platform.python_version_tuple()[:2]), + "sys_platform": sys.platform, + } + + +class Marker: + def __init__(self, marker: str) -> None: + try: + self._markers = _coerce_parse_result(MARKER.parseString(marker)) + except ParseException as e: + raise InvalidMarker( + f"Invalid marker: {marker!r}, parse error at " + f"{marker[e.loc : e.loc + 8]!r}" + ) + + def __str__(self) -> str: + return _format_marker(self._markers) + + def __repr__(self) -> str: + return f"" + + def evaluate(self, environment: Optional[Dict[str, str]] = None) -> bool: + """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.11/site-packages/pip/_vendor/packaging/requirements.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/requirements.py new file mode 100644 index 0000000..1eab7dd --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/requirements.py @@ -0,0 +1,146 @@ +# 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. + +import re +import string +import urllib.parse +from typing import List, Optional as TOptional, Set + +from pip._vendor.pyparsing import ( # noqa + Combine, + Literal as L, + Optional, + ParseException, + Regex, + Word, + ZeroOrMore, + originalTextFor, + stringEnd, + stringStart, +) + +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: + """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: str) -> None: + try: + req = REQUIREMENT.parseString(requirement_string) + except ParseException as e: + raise InvalidRequirement( + f'Parse error at "{ requirement_string[e.loc : e.loc + 8]!r}": {e.msg}' + ) + + self.name: str = req.name + if req.url: + parsed_url = urllib.parse.urlparse(req.url) + if parsed_url.scheme == "file": + if urllib.parse.urlunparse(parsed_url) != req.url: + raise InvalidRequirement("Invalid URL given") + elif not (parsed_url.scheme and parsed_url.netloc) or ( + not parsed_url.scheme and not parsed_url.netloc + ): + raise InvalidRequirement(f"Invalid URL: {req.url}") + self.url: TOptional[str] = req.url + else: + self.url = None + self.extras: Set[str] = set(req.extras.asList() if req.extras else []) + self.specifier: SpecifierSet = SpecifierSet(req.specifier) + self.marker: TOptional[Marker] = req.marker if req.marker else None + + def __str__(self) -> str: + parts: List[str] = [self.name] + + if self.extras: + formatted_extras = ",".join(sorted(self.extras)) + parts.append(f"[{formatted_extras}]") + + if self.specifier: + parts.append(str(self.specifier)) + + if self.url: + parts.append(f"@ {self.url}") + if self.marker: + parts.append(" ") + + if self.marker: + parts.append(f"; {self.marker}") + + return "".join(parts) + + def __repr__(self) -> str: + return f"" diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/specifiers.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/specifiers.py new file mode 100644 index 0000000..0e218a6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/specifiers.py @@ -0,0 +1,802 @@ +# 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. + +import abc +import functools +import itertools +import re +import warnings +from typing import ( + Callable, + Dict, + Iterable, + Iterator, + List, + Optional, + Pattern, + Set, + Tuple, + TypeVar, + Union, +) + +from .utils import canonicalize_version +from .version import LegacyVersion, Version, parse + +ParsedVersion = Union[Version, LegacyVersion] +UnparsedVersion = Union[Version, LegacyVersion, str] +VersionTypeVar = TypeVar("VersionTypeVar", bound=UnparsedVersion) +CallableOperator = Callable[[ParsedVersion, str], bool] + + +class InvalidSpecifier(ValueError): + """ + An invalid specifier was found, users should refer to PEP 440. + """ + + +class BaseSpecifier(metaclass=abc.ABCMeta): + @abc.abstractmethod + def __str__(self) -> str: + """ + Returns the str representation of this Specifier like object. This + should be representative of the Specifier itself. + """ + + @abc.abstractmethod + def __hash__(self) -> int: + """ + Returns a hash value for this Specifier like object. + """ + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Returns a boolean representing whether or not the two Specifier like + objects are equal. + """ + + @abc.abstractproperty + def prereleases(self) -> Optional[bool]: + """ + Returns whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @prereleases.setter + def prereleases(self, value: bool) -> None: + """ + Sets whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @abc.abstractmethod + def contains(self, item: str, prereleases: Optional[bool] = None) -> bool: + """ + Determines if the given item is contained within this specifier. + """ + + @abc.abstractmethod + def filter( + self, iterable: Iterable[VersionTypeVar], prereleases: Optional[bool] = None + ) -> Iterable[VersionTypeVar]: + """ + 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: Dict[str, str] = {} + _regex: Pattern[str] + + def __init__(self, spec: str = "", prereleases: Optional[bool] = None) -> None: + match = self._regex.search(spec) + if not match: + raise InvalidSpecifier(f"Invalid specifier: '{spec}'") + + self._spec: Tuple[str, str] = ( + match.group("operator").strip(), + match.group("version").strip(), + ) + + # Store whether or not this Specifier should accept prereleases + self._prereleases = prereleases + + def __repr__(self) -> str: + pre = ( + f", prereleases={self.prereleases!r}" + if self._prereleases is not None + else "" + ) + + return f"<{self.__class__.__name__}({str(self)!r}{pre})>" + + def __str__(self) -> str: + return "{}{}".format(*self._spec) + + @property + def _canonical_spec(self) -> Tuple[str, str]: + return self._spec[0], canonicalize_version(self._spec[1]) + + def __hash__(self) -> int: + return hash(self._canonical_spec) + + def __eq__(self, other: object) -> bool: + if isinstance(other, str): + try: + other = self.__class__(str(other)) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._canonical_spec == other._canonical_spec + + def _get_operator(self, op: str) -> CallableOperator: + operator_callable: CallableOperator = getattr( + self, f"_compare_{self._operators[op]}" + ) + return operator_callable + + def _coerce_version(self, version: UnparsedVersion) -> ParsedVersion: + if not isinstance(version, (LegacyVersion, Version)): + version = parse(version) + return version + + @property + def operator(self) -> str: + return self._spec[0] + + @property + def version(self) -> str: + return self._spec[1] + + @property + def prereleases(self) -> Optional[bool]: + return self._prereleases + + @prereleases.setter + def prereleases(self, value: bool) -> None: + self._prereleases = value + + def __contains__(self, item: str) -> bool: + return self.contains(item) + + def contains( + self, item: UnparsedVersion, prereleases: Optional[bool] = None + ) -> bool: + + # 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") + normalized_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 normalized_item.is_prerelease and not prereleases: + return False + + # Actually do the comparison to determine if this item is contained + # within this Specifier or not. + operator_callable: CallableOperator = self._get_operator(self.operator) + return operator_callable(normalized_item, self.version) + + def filter( + self, iterable: Iterable[VersionTypeVar], prereleases: Optional[bool] = None + ) -> Iterable[VersionTypeVar]: + + 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 in case 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(==|!=|<=|>=|<|>)) + \s* + (?P + [^,;\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 __init__(self, spec: str = "", prereleases: Optional[bool] = None) -> None: + super().__init__(spec, prereleases) + + warnings.warn( + "Creating a LegacyVersion has been deprecated and will be " + "removed in the next major release", + DeprecationWarning, + ) + + def _coerce_version(self, version: UnparsedVersion) -> LegacyVersion: + if not isinstance(version, LegacyVersion): + version = LegacyVersion(str(version)) + return version + + def _compare_equal(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective == self._coerce_version(spec) + + def _compare_not_equal(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective != self._coerce_version(spec) + + def _compare_less_than_equal(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective <= self._coerce_version(spec) + + def _compare_greater_than_equal( + self, prospective: LegacyVersion, spec: str + ) -> bool: + return prospective >= self._coerce_version(spec) + + def _compare_less_than(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective < self._coerce_version(spec) + + def _compare_greater_than(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective > self._coerce_version(spec) + + +def _require_version_compare( + fn: Callable[["Specifier", ParsedVersion, str], bool] +) -> Callable[["Specifier", ParsedVersion, str], bool]: + @functools.wraps(fn) + def wrapped(self: "Specifier", prospective: ParsedVersion, spec: str) -> bool: + if not isinstance(prospective, Version): + return False + return fn(self, prospective, spec) + + return wrapped + + +class Specifier(_IndividualSpecifier): + + _regex_str = r""" + (?P(~=|==|!=|<=|>=|<|>|===)) + (?P + (?: + # 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. + (?=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + "===": "arbitrary", + } + + @_require_version_compare + def _compare_compatible(self, prospective: ParsedVersion, spec: str) -> bool: + + # 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 suffix segments. + prefix = ".".join( + list(itertools.takewhile(_is_not_suffix, _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: ParsedVersion, spec: str) -> bool: + + # 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. + split_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. + split_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. + shortened_prospective = split_prospective[: len(split_spec)] + + # Pad out our two sides with zeros so that they both equal the same + # length. + padded_spec, padded_prospective = _pad_version( + split_spec, shortened_prospective + ) + + return padded_prospective == padded_spec + else: + # Convert our spec string into a Version + spec_version = 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_version.local: + prospective = Version(prospective.public) + + return prospective == spec_version + + @_require_version_compare + def _compare_not_equal(self, prospective: ParsedVersion, spec: str) -> bool: + return not self._compare_equal(prospective, spec) + + @_require_version_compare + def _compare_less_than_equal(self, prospective: ParsedVersion, spec: str) -> bool: + + # NB: Local version identifiers are NOT permitted in the version + # specifier, so local version labels can be universally removed from + # the prospective version. + return Version(prospective.public) <= Version(spec) + + @_require_version_compare + def _compare_greater_than_equal( + self, prospective: ParsedVersion, spec: str + ) -> bool: + + # NB: Local version identifiers are NOT permitted in the version + # specifier, so local version labels can be universally removed from + # the prospective version. + return Version(prospective.public) >= Version(spec) + + @_require_version_compare + def _compare_less_than(self, prospective: ParsedVersion, spec_str: str) -> bool: + + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec_str) + + # 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: ParsedVersion, spec_str: str) -> bool: + + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec_str) + + # 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 technically 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: Version, spec: str) -> bool: + return str(prospective).lower() == str(spec).lower() + + @property + def prereleases(self) -> bool: + + # 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: bool) -> None: + self._prereleases = value + + +_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") + + +def _version_split(version: str) -> List[str]: + result: List[str] = [] + for item in version.split("."): + match = _prefix_regex.search(item) + if match: + result.extend(match.groups()) + else: + result.append(item) + return result + + +def _is_not_suffix(segment: str) -> bool: + return not any( + segment.startswith(prefix) for prefix in ("dev", "a", "b", "rc", "post") + ) + + +def _pad_version(left: List[str], right: List[str]) -> Tuple[List[str], List[str]]: + 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: str = "", prereleases: Optional[bool] = None + ) -> None: + + # Split on , to break each individual specifier into it's own item, and + # strip each item to remove leading/trailing whitespace. + split_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[_IndividualSpecifier] = set() + for specifier in split_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) -> str: + pre = ( + f", prereleases={self.prereleases!r}" + if self._prereleases is not None + else "" + ) + + return f"" + + def __str__(self) -> str: + return ",".join(sorted(str(s) for s in self._specs)) + + def __hash__(self) -> int: + return hash(self._specs) + + def __and__(self, other: Union["SpecifierSet", str]) -> "SpecifierSet": + if isinstance(other, str): + 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: object) -> bool: + if isinstance(other, (str, _IndividualSpecifier)): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs == other._specs + + def __len__(self) -> int: + return len(self._specs) + + def __iter__(self) -> Iterator[_IndividualSpecifier]: + return iter(self._specs) + + @property + def prereleases(self) -> Optional[bool]: + + # 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: bool) -> None: + self._prereleases = value + + def __contains__(self, item: UnparsedVersion) -> bool: + return self.contains(item) + + def contains( + self, item: UnparsedVersion, prereleases: Optional[bool] = None + ) -> bool: + + # 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: Iterable[VersionTypeVar], prereleases: Optional[bool] = None + ) -> Iterable[VersionTypeVar]: + + # 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: List[VersionTypeVar] = [] + found_prereleases: List[VersionTypeVar] = [] + + item: UnparsedVersion + parsed_version: Union[Version, LegacyVersion] + + 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.11/site-packages/pip/_vendor/packaging/tags.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/tags.py new file mode 100644 index 0000000..9a3d25a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/tags.py @@ -0,0 +1,487 @@ +# 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. + +import logging +import platform +import sys +import sysconfig +from importlib.machinery import EXTENSION_SUFFIXES +from typing import ( + Dict, + FrozenSet, + Iterable, + Iterator, + List, + Optional, + Sequence, + Tuple, + Union, + cast, +) + +from . import _manylinux, _musllinux + +logger = logging.getLogger(__name__) + +PythonVersion = Sequence[int] +MacVersion = Tuple[int, int] + +INTERPRETER_SHORT_NAMES: Dict[str, str] = { + "python": "py", # Generic. + "cpython": "cp", + "pypy": "pp", + "ironpython": "ip", + "jython": "jy", +} + + +_32_BIT_INTERPRETER = sys.maxsize <= 2 ** 32 + + +class Tag: + """ + A representation of the tag triple for a wheel. + + Instances are considered immutable and thus are hashable. Equality checking + is also supported. + """ + + __slots__ = ["_interpreter", "_abi", "_platform", "_hash"] + + def __init__(self, interpreter: str, abi: str, platform: str) -> None: + self._interpreter = interpreter.lower() + self._abi = abi.lower() + self._platform = platform.lower() + # The __hash__ of every single element in a Set[Tag] will be evaluated each time + # that a set calls its `.disjoint()` method, which may be called hundreds of + # times when scanning a page of links for packages with tags matching that + # Set[Tag]. Pre-computing the value here produces significant speedups for + # downstream consumers. + self._hash = hash((self._interpreter, self._abi, self._platform)) + + @property + def interpreter(self) -> str: + return self._interpreter + + @property + def abi(self) -> str: + return self._abi + + @property + def platform(self) -> str: + return self._platform + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Tag): + return NotImplemented + + return ( + (self._hash == other._hash) # Short-circuit ASAP for perf reasons. + and (self._platform == other._platform) + and (self._abi == other._abi) + and (self._interpreter == other._interpreter) + ) + + def __hash__(self) -> int: + return self._hash + + def __str__(self) -> str: + return f"{self._interpreter}-{self._abi}-{self._platform}" + + def __repr__(self) -> str: + return f"<{self} @ {id(self)}>" + + +def parse_tag(tag: str) -> FrozenSet[Tag]: + """ + Parses the provided tag (e.g. `py3-none-any`) into a frozenset of Tag instances. + + Returning a set is required due to the possibility that the tag is a + compressed tag set. + """ + tags = set() + interpreters, abis, platforms = tag.split("-") + for interpreter in interpreters.split("."): + for abi in abis.split("."): + for platform_ in platforms.split("."): + tags.add(Tag(interpreter, abi, platform_)) + return frozenset(tags) + + +def _get_config_var(name: str, warn: bool = False) -> Union[int, str, None]: + value = sysconfig.get_config_var(name) + if value is None and warn: + logger.debug( + "Config variable '%s' is unset, Python ABI tag may be incorrect", name + ) + return value + + +def _normalize_string(string: str) -> str: + return string.replace(".", "_").replace("-", "_") + + +def _abi3_applies(python_version: PythonVersion) -> bool: + """ + Determine if the Python version supports abi3. + + PEP 384 was first implemented in Python 3.2. + """ + return len(python_version) > 1 and tuple(python_version) >= (3, 2) + + +def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]: + py_version = tuple(py_version) # To allow for version comparison. + abis = [] + version = _version_nodot(py_version[:2]) + debug = pymalloc = ucs4 = "" + with_debug = _get_config_var("Py_DEBUG", warn) + has_refcount = hasattr(sys, "gettotalrefcount") + # Windows doesn't set Py_DEBUG, so checking for support of debug-compiled + # extension modules is the best option. + # https://github.com/pypa/pip/issues/3383#issuecomment-173267692 + has_ext = "_d.pyd" in EXTENSION_SUFFIXES + if with_debug or (with_debug is None and (has_refcount or has_ext)): + debug = "d" + if py_version < (3, 8): + with_pymalloc = _get_config_var("WITH_PYMALLOC", warn) + if with_pymalloc or with_pymalloc is None: + pymalloc = "m" + if py_version < (3, 3): + unicode_size = _get_config_var("Py_UNICODE_SIZE", warn) + if unicode_size == 4 or ( + unicode_size is None and sys.maxunicode == 0x10FFFF + ): + ucs4 = "u" + elif debug: + # Debug builds can also load "normal" extension modules. + # We can also assume no UCS-4 or pymalloc requirement. + abis.append(f"cp{version}") + abis.insert( + 0, + "cp{version}{debug}{pymalloc}{ucs4}".format( + version=version, debug=debug, pymalloc=pymalloc, ucs4=ucs4 + ), + ) + return abis + + +def cpython_tags( + python_version: Optional[PythonVersion] = None, + abis: Optional[Iterable[str]] = None, + platforms: Optional[Iterable[str]] = None, + *, + warn: bool = False, +) -> Iterator[Tag]: + """ + Yields the tags for a CPython interpreter. + + The tags consist of: + - cp-- + - cp-abi3- + - cp-none- + - cp-abi3- # Older Python versions down to 3.2. + + If python_version only specifies a major version then user-provided ABIs and + the 'none' ABItag will be used. + + If 'abi3' or 'none' are specified in 'abis' then they will be yielded at + their normal position and not at the beginning. + """ + if not python_version: + python_version = sys.version_info[:2] + + interpreter = f"cp{_version_nodot(python_version[:2])}" + + if abis is None: + if len(python_version) > 1: + abis = _cpython_abis(python_version, warn) + else: + abis = [] + abis = list(abis) + # 'abi3' and 'none' are explicitly handled later. + for explicit_abi in ("abi3", "none"): + try: + abis.remove(explicit_abi) + except ValueError: + pass + + platforms = list(platforms or platform_tags()) + for abi in abis: + for platform_ in platforms: + yield Tag(interpreter, abi, platform_) + if _abi3_applies(python_version): + yield from (Tag(interpreter, "abi3", platform_) for platform_ in platforms) + yield from (Tag(interpreter, "none", platform_) for platform_ in platforms) + + if _abi3_applies(python_version): + for minor_version in range(python_version[1] - 1, 1, -1): + for platform_ in platforms: + interpreter = "cp{version}".format( + version=_version_nodot((python_version[0], minor_version)) + ) + yield Tag(interpreter, "abi3", platform_) + + +def _generic_abi() -> Iterator[str]: + abi = sysconfig.get_config_var("SOABI") + if abi: + yield _normalize_string(abi) + + +def generic_tags( + interpreter: Optional[str] = None, + abis: Optional[Iterable[str]] = None, + platforms: Optional[Iterable[str]] = None, + *, + warn: bool = False, +) -> Iterator[Tag]: + """ + Yields the tags for a generic interpreter. + + The tags consist of: + - -- + + The "none" ABI will be added if it was not explicitly provided. + """ + if not interpreter: + interp_name = interpreter_name() + interp_version = interpreter_version(warn=warn) + interpreter = "".join([interp_name, interp_version]) + if abis is None: + abis = _generic_abi() + platforms = list(platforms or platform_tags()) + abis = list(abis) + if "none" not in abis: + abis.append("none") + for abi in abis: + for platform_ in platforms: + yield Tag(interpreter, abi, platform_) + + +def _py_interpreter_range(py_version: PythonVersion) -> Iterator[str]: + """ + Yields Python versions in descending order. + + After the latest version, the major-only version will be yielded, and then + all previous versions of that major version. + """ + if len(py_version) > 1: + yield f"py{_version_nodot(py_version[:2])}" + yield f"py{py_version[0]}" + if len(py_version) > 1: + for minor in range(py_version[1] - 1, -1, -1): + yield f"py{_version_nodot((py_version[0], minor))}" + + +def compatible_tags( + python_version: Optional[PythonVersion] = None, + interpreter: Optional[str] = None, + platforms: Optional[Iterable[str]] = None, +) -> Iterator[Tag]: + """ + Yields the sequence of tags that are compatible with a specific version of Python. + + The tags consist of: + - py*-none- + - -none-any # ... if `interpreter` is provided. + - py*-none-any + """ + if not python_version: + python_version = sys.version_info[:2] + platforms = list(platforms or platform_tags()) + for version in _py_interpreter_range(python_version): + for platform_ in platforms: + yield Tag(version, "none", platform_) + if interpreter: + yield Tag(interpreter, "none", "any") + for version in _py_interpreter_range(python_version): + yield Tag(version, "none", "any") + + +def _mac_arch(arch: str, is_32bit: bool = _32_BIT_INTERPRETER) -> str: + if not is_32bit: + return arch + + if arch.startswith("ppc"): + return "ppc" + + return "i386" + + +def _mac_binary_formats(version: MacVersion, cpu_arch: str) -> List[str]: + formats = [cpu_arch] + if cpu_arch == "x86_64": + if version < (10, 4): + return [] + formats.extend(["intel", "fat64", "fat32"]) + + elif cpu_arch == "i386": + if version < (10, 4): + return [] + formats.extend(["intel", "fat32", "fat"]) + + elif cpu_arch == "ppc64": + # TODO: Need to care about 32-bit PPC for ppc64 through 10.2? + if version > (10, 5) or version < (10, 4): + return [] + formats.append("fat64") + + elif cpu_arch == "ppc": + if version > (10, 6): + return [] + formats.extend(["fat32", "fat"]) + + if cpu_arch in {"arm64", "x86_64"}: + formats.append("universal2") + + if cpu_arch in {"x86_64", "i386", "ppc64", "ppc", "intel"}: + formats.append("universal") + + return formats + + +def mac_platforms( + version: Optional[MacVersion] = None, arch: Optional[str] = None +) -> Iterator[str]: + """ + Yields the platform tags for a macOS system. + + The `version` parameter is a two-item tuple specifying the macOS version to + generate platform tags for. The `arch` parameter is the CPU architecture to + generate platform tags for. Both parameters default to the appropriate value + for the current system. + """ + version_str, _, cpu_arch = platform.mac_ver() + if version is None: + version = cast("MacVersion", tuple(map(int, version_str.split(".")[:2]))) + else: + version = version + if arch is None: + arch = _mac_arch(cpu_arch) + else: + arch = arch + + if (10, 0) <= version and version < (11, 0): + # Prior to Mac OS 11, each yearly release of Mac OS bumped the + # "minor" version number. The major version was always 10. + for minor_version in range(version[1], -1, -1): + compat_version = 10, minor_version + binary_formats = _mac_binary_formats(compat_version, arch) + for binary_format in binary_formats: + yield "macosx_{major}_{minor}_{binary_format}".format( + major=10, minor=minor_version, binary_format=binary_format + ) + + if version >= (11, 0): + # Starting with Mac OS 11, each yearly release bumps the major version + # number. The minor versions are now the midyear updates. + for major_version in range(version[0], 10, -1): + compat_version = major_version, 0 + binary_formats = _mac_binary_formats(compat_version, arch) + for binary_format in binary_formats: + yield "macosx_{major}_{minor}_{binary_format}".format( + major=major_version, minor=0, binary_format=binary_format + ) + + if version >= (11, 0): + # Mac OS 11 on x86_64 is compatible with binaries from previous releases. + # Arm64 support was introduced in 11.0, so no Arm binaries from previous + # releases exist. + # + # However, the "universal2" binary format can have a + # macOS version earlier than 11.0 when the x86_64 part of the binary supports + # that version of macOS. + if arch == "x86_64": + for minor_version in range(16, 3, -1): + compat_version = 10, minor_version + binary_formats = _mac_binary_formats(compat_version, arch) + for binary_format in binary_formats: + yield "macosx_{major}_{minor}_{binary_format}".format( + major=compat_version[0], + minor=compat_version[1], + binary_format=binary_format, + ) + else: + for minor_version in range(16, 3, -1): + compat_version = 10, minor_version + binary_format = "universal2" + yield "macosx_{major}_{minor}_{binary_format}".format( + major=compat_version[0], + minor=compat_version[1], + binary_format=binary_format, + ) + + +def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]: + linux = _normalize_string(sysconfig.get_platform()) + if is_32bit: + if linux == "linux_x86_64": + linux = "linux_i686" + elif linux == "linux_aarch64": + linux = "linux_armv7l" + _, arch = linux.split("_", 1) + yield from _manylinux.platform_tags(linux, arch) + yield from _musllinux.platform_tags(arch) + yield linux + + +def _generic_platforms() -> Iterator[str]: + yield _normalize_string(sysconfig.get_platform()) + + +def platform_tags() -> Iterator[str]: + """ + Provides the platform tags for this installation. + """ + if platform.system() == "Darwin": + return mac_platforms() + elif platform.system() == "Linux": + return _linux_platforms() + else: + return _generic_platforms() + + +def interpreter_name() -> str: + """ + Returns the name of the running interpreter. + """ + name = sys.implementation.name + return INTERPRETER_SHORT_NAMES.get(name) or name + + +def interpreter_version(*, warn: bool = False) -> str: + """ + Returns the version of the running interpreter. + """ + version = _get_config_var("py_version_nodot", warn=warn) + if version: + version = str(version) + else: + version = _version_nodot(sys.version_info[:2]) + return version + + +def _version_nodot(version: PythonVersion) -> str: + return "".join(map(str, version)) + + +def sys_tags(*, warn: bool = False) -> Iterator[Tag]: + """ + Returns the sequence of tag triples for the running interpreter. + + The order of the sequence corresponds to priority order for the + interpreter, from most to least important. + """ + + interp_name = interpreter_name() + if interp_name == "cp": + yield from cpython_tags(warn=warn) + else: + yield from generic_tags() + + if interp_name == "pp": + yield from compatible_tags(interpreter="pp3") + else: + yield from compatible_tags() diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/utils.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/utils.py new file mode 100644 index 0000000..bab11b8 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/utils.py @@ -0,0 +1,136 @@ +# 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. + +import re +from typing import FrozenSet, NewType, Tuple, Union, cast + +from .tags import Tag, parse_tag +from .version import InvalidVersion, Version + +BuildTag = Union[Tuple[()], Tuple[int, str]] +NormalizedName = NewType("NormalizedName", str) + + +class InvalidWheelFilename(ValueError): + """ + An invalid wheel filename was found, users should refer to PEP 427. + """ + + +class InvalidSdistFilename(ValueError): + """ + An invalid sdist filename was found, users should refer to the packaging user guide. + """ + + +_canonicalize_regex = re.compile(r"[-_.]+") +# PEP 427: The build number must start with a digit. +_build_tag_regex = re.compile(r"(\d+)(.*)") + + +def canonicalize_name(name: str) -> NormalizedName: + # This is taken from PEP 503. + value = _canonicalize_regex.sub("-", name).lower() + return cast(NormalizedName, value) + + +def canonicalize_version(version: Union[Version, str]) -> str: + """ + This is very similar to Version.__str__, but has one subtle difference + with the way it handles the release segment. + """ + if isinstance(version, str): + try: + parsed = Version(version) + except InvalidVersion: + # Legacy versions cannot be normalized + return version + else: + parsed = version + + parts = [] + + # Epoch + if parsed.epoch != 0: + parts.append(f"{parsed.epoch}!") + + # Release segment + # NB: This strips trailing '.0's to normalize + parts.append(re.sub(r"(\.0)+$", "", ".".join(str(x) for x in parsed.release))) + + # Pre-release + if parsed.pre is not None: + parts.append("".join(str(x) for x in parsed.pre)) + + # Post-release + if parsed.post is not None: + parts.append(f".post{parsed.post}") + + # Development release + if parsed.dev is not None: + parts.append(f".dev{parsed.dev}") + + # Local version segment + if parsed.local is not None: + parts.append(f"+{parsed.local}") + + return "".join(parts) + + +def parse_wheel_filename( + filename: str, +) -> Tuple[NormalizedName, Version, BuildTag, FrozenSet[Tag]]: + if not filename.endswith(".whl"): + raise InvalidWheelFilename( + f"Invalid wheel filename (extension must be '.whl'): {filename}" + ) + + filename = filename[:-4] + dashes = filename.count("-") + if dashes not in (4, 5): + raise InvalidWheelFilename( + f"Invalid wheel filename (wrong number of parts): {filename}" + ) + + parts = filename.split("-", dashes - 2) + name_part = parts[0] + # See PEP 427 for the rules on escaping the project name + if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None: + raise InvalidWheelFilename(f"Invalid project name: {filename}") + name = canonicalize_name(name_part) + version = Version(parts[1]) + if dashes == 5: + build_part = parts[2] + build_match = _build_tag_regex.match(build_part) + if build_match is None: + raise InvalidWheelFilename( + f"Invalid build number: {build_part} in '{filename}'" + ) + build = cast(BuildTag, (int(build_match.group(1)), build_match.group(2))) + else: + build = () + tags = parse_tag(parts[-1]) + return (name, version, build, tags) + + +def parse_sdist_filename(filename: str) -> Tuple[NormalizedName, Version]: + if filename.endswith(".tar.gz"): + file_stem = filename[: -len(".tar.gz")] + elif filename.endswith(".zip"): + file_stem = filename[: -len(".zip")] + else: + raise InvalidSdistFilename( + f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):" + f" {filename}" + ) + + # We are requiring a PEP 440 version, which cannot contain dashes, + # so we split on the last dash. + name_part, sep, version_part = file_stem.rpartition("-") + if not sep: + raise InvalidSdistFilename(f"Invalid sdist filename: {filename}") + + name = canonicalize_name(name_part) + version = Version(version_part) + return (name, version) diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/packaging/version.py b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/version.py new file mode 100644 index 0000000..de9a09a --- /dev/null +++ b/venv/lib/python3.11/site-packages/pip/_vendor/packaging/version.py @@ -0,0 +1,504 @@ +# 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. + +import collections +import itertools +import re +import warnings +from typing import Callable, Iterator, List, Optional, SupportsInt, Tuple, Union + +from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType + +__all__ = ["parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN"] + +InfiniteTypes = Union[InfinityType, NegativeInfinityType] +PrePostDevType = Union[InfiniteTypes, Tuple[str, int]] +SubLocalType = Union[InfiniteTypes, int, str] +LocalType = Union[ + NegativeInfinityType, + Tuple[ + Union[ + SubLocalType, + Tuple[SubLocalType, str], + Tuple[NegativeInfinityType, SubLocalType], + ], + ..., + ], +] +CmpKey = Tuple[ + int, Tuple[int, ...], PrePostDevType, PrePostDevType, PrePostDevType, LocalType +] +LegacyCmpKey = Tuple[int, Tuple[str, ...]] +VersionComparisonMethod = Callable[ + [Union[CmpKey, LegacyCmpKey], Union[CmpKey, LegacyCmpKey]], bool +] + +_Version = collections.namedtuple( + "_Version", ["epoch", "release", "dev", "pre", "post", "local"] +) + + +def parse(version: str) -> Union["LegacyVersion", "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: + _key: Union[CmpKey, LegacyCmpKey] + + def __hash__(self) -> int: + return hash(self._key) + + # Please keep the duplicated `isinstance` check + # in the six comparisons hereunder + # unless you find a way to avoid adding overhead function calls. + def __lt__(self, other: "_BaseVersion") -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key < other._key + + def __le__(self, other: "_BaseVersion") -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key <= other._key + + def __eq__(self, other: object) -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key == other._key + + def __ge__(self, other: "_BaseVersion") -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key >= other._key + + def __gt__(self, other: "_BaseVersion") -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key > other._key + + def __ne__(self, other: object) -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key != other._key + + +class LegacyVersion(_BaseVersion): + def __init__(self, version: str) -> None: + self._version = str(version) + self._key = _legacy_cmpkey(self._version) + + warnings.warn( + "Creating a LegacyVersion has been deprecated and will be " + "removed in the next major release", + DeprecationWarning, + ) + + def __str__(self) -> str: + return self._version + + def __repr__(self) -> str: + return f"" + + @property + def public(self) -> str: + return self._version + + @property + def base_version(self) -> str: + return self._version + + @property + def epoch(self) -> int: + return -1 + + @property + def release(self) -> None: + return None + + @property + def pre(self) -> None: + return None + + @property + def post(self) -> None: + return None + + @property + def dev(self) -> None: + return None + + @property + def local(self) -> None: + return None + + @property + def is_prerelease(self) -> bool: + return False + + @property + def is_postrelease(self) -> bool: + return False + + @property + def is_devrelease(self) -> bool: + 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: str) -> Iterator[str]: + 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: str) -> LegacyCmpKey: + + # 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: List[str] = [] + 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) + + return epoch, tuple(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[0-9]+)!)? # epoch + (?P[0-9]+(?:\.[0-9]+)*) # release segment + (?P

                                              # pre-release
    +            [-_\.]?
    +            (?P(a|b|c|rc|alpha|beta|pre|preview))
    +            [-_\.]?
    +            (?P[0-9]+)?
    +        )?
    +        (?P                                         # post release
    +            (?:-(?P[0-9]+))
    +            |
    +            (?:
    +                [-_\.]?
    +                (?Ppost|rev|r)
    +                [-_\.]?
    +                (?P[0-9]+)?
    +            )
    +        )?
    +        (?P                                          # dev release
    +            [-_\.]?
    +            (?Pdev)
    +            [-_\.]?
    +            (?P[0-9]+)?
    +        )?
    +    )
    +    (?:\+(?P[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: str) -> None:
    +
    +        # Validate the version and parse it into pieces
    +        match = self._regex.search(version)
    +        if not match:
    +            raise InvalidVersion(f"Invalid version: '{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) -> str:
    +        return f""
    +
    +    def __str__(self) -> str:
    +        parts = []
    +
    +        # Epoch
    +        if self.epoch != 0:
    +            parts.append(f"{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(f".post{self.post}")
    +
    +        # Development release
    +        if self.dev is not None:
    +            parts.append(f".dev{self.dev}")
    +
    +        # Local version segment
    +        if self.local is not None:
    +            parts.append(f"+{self.local}")
    +
    +        return "".join(parts)
    +
    +    @property
    +    def epoch(self) -> int:
    +        _epoch: int = self._version.epoch
    +        return _epoch
    +
    +    @property
    +    def release(self) -> Tuple[int, ...]:
    +        _release: Tuple[int, ...] = self._version.release
    +        return _release
    +
    +    @property
    +    def pre(self) -> Optional[Tuple[str, int]]:
    +        _pre: Optional[Tuple[str, int]] = self._version.pre
    +        return _pre
    +
    +    @property
    +    def post(self) -> Optional[int]:
    +        return self._version.post[1] if self._version.post else None
    +
    +    @property
    +    def dev(self) -> Optional[int]:
    +        return self._version.dev[1] if self._version.dev else None
    +
    +    @property
    +    def local(self) -> Optional[str]:
    +        if self._version.local:
    +            return ".".join(str(x) for x in self._version.local)
    +        else:
    +            return None
    +
    +    @property
    +    def public(self) -> str:
    +        return str(self).split("+", 1)[0]
    +
    +    @property
    +    def base_version(self) -> str:
    +        parts = []
    +
    +        # Epoch
    +        if self.epoch != 0:
    +            parts.append(f"{self.epoch}!")
    +
    +        # Release segment
    +        parts.append(".".join(str(x) for x in self.release))
    +
    +        return "".join(parts)
    +
    +    @property
    +    def is_prerelease(self) -> bool:
    +        return self.dev is not None or self.pre is not None
    +
    +    @property
    +    def is_postrelease(self) -> bool:
    +        return self.post is not None
    +
    +    @property
    +    def is_devrelease(self) -> bool:
    +        return self.dev is not None
    +
    +    @property
    +    def major(self) -> int:
    +        return self.release[0] if len(self.release) >= 1 else 0
    +
    +    @property
    +    def minor(self) -> int:
    +        return self.release[1] if len(self.release) >= 2 else 0
    +
    +    @property
    +    def micro(self) -> int:
    +        return self.release[2] if len(self.release) >= 3 else 0
    +
    +
    +def _parse_letter_version(
    +    letter: str, number: Union[str, bytes, SupportsInt]
    +) -> Optional[Tuple[str, int]]:
    +
    +    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)
    +
    +    return None
    +
    +
    +_local_version_separators = re.compile(r"[\._-]")
    +
    +
    +def _parse_local_version(local: str) -> Optional[LocalType]:
    +    """
    +    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)
    +        )
    +    return None
    +
    +
    +def _cmpkey(
    +    epoch: int,
    +    release: Tuple[int, ...],
    +    pre: Optional[Tuple[str, int]],
    +    post: Optional[Tuple[str, int]],
    +    dev: Optional[Tuple[str, int]],
    +    local: Optional[Tuple[SubLocalType]],
    +) -> CmpKey:
    +
    +    # 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: PrePostDevType = NegativeInfinity
    +    # Versions without a pre-release (except as noted above) should sort after
    +    # those with one.
    +    elif pre is None:
    +        _pre = Infinity
    +    else:
    +        _pre = pre
    +
    +    # Versions without a post segment should sort before those with one.
    +    if post is None:
    +        _post: PrePostDevType = NegativeInfinity
    +
    +    else:
    +        _post = post
    +
    +    # Versions without a development segment should sort after those with one.
    +    if dev is None:
    +        _dev: PrePostDevType = Infinity
    +
    +    else:
    +        _dev = dev
    +
    +    if local is None:
    +        # Versions without a local segment should sort before those with one.
    +        _local: LocalType = NegativeInfinity
    +    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 (NegativeInfinity, i) for i in local
    +        )
    +
    +    return epoch, _release, _pre, _post, _dev, _local
    diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__init__.py b/venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__init__.py
    new file mode 100644
    index 0000000..4cd562c
    --- /dev/null
    +++ b/venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__init__.py
    @@ -0,0 +1,3296 @@
    +# 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
    +import ntpath
    +import posixpath
    +from pkgutil import get_importer
    +
    +try:
    +    import _imp
    +except ImportError:
    +    # Python 3.2 compatibility
    +    import imp as _imp
    +
    +try:
    +    FileExistsError
    +except NameError:
    +    FileExistsError = OSError
    +
    +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 platformdirs
    +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')
    +
    +
    +__metaclass__ = type
    +
    +
    +if (3, 0) < sys.version_info < (3, 5):
    +    raise RuntimeError("Python 3.5 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',
    +
    +    # Warnings
    +    'PkgResourcesDeprecationWarning',
    +
    +    # 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 = '{}.{}'.format(*sys.version_info)
    +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.
    +    """
    +    from sysconfig 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:
    +    """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).
    +        """
    +        return (
    +            entry
    +            for dist in self
    +            for entry in dist.get_entry_map(group).values()
    +            if name is None or name == entry.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:
    +    """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.6'``);
    +        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 platformdirs.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 _get_metadata_path(self, name):
    +        return self._fn(self.egg_info, name)
    +
    +    def has_metadata(self, name):
    +        if not self.egg_info:
    +            return self.egg_info
    +
    +        path = self._get_metadata_path(name)
    +        return self._has(path)
    +
    +    def get_metadata(self, name):
    +        if not self.egg_info:
    +            return ""
    +        path = self._get_metadata_path(name)
    +        value = self._get(path)
    +        if six.PY2:
    +            return value
    +        try:
    +            return value.decode('utf-8')
    +        except UnicodeDecodeError as exc:
    +            # Include the path in the error message to simplify
    +            # troubleshooting, and without changing the exception type.
    +            exc.reason += ' in {} file at path: {}'.format(name, path)
    +            raise
    +
    +    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):
    +        self._validate_resource_path(resource_name)
    +        if resource_name:
    +            return os.path.join(base, *resource_name.split('/'))
    +        return base
    +
    +    @staticmethod
    +    def _validate_resource_path(path):
    +        """
    +        Validate the resource paths according to the docs.
    +        https://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access
    +
    +        >>> warned = getfixture('recwarn')
    +        >>> warnings.simplefilter('always')
    +        >>> vrp = NullProvider._validate_resource_path
    +        >>> vrp('foo/bar.txt')
    +        >>> bool(warned)
    +        False
    +        >>> vrp('../foo/bar.txt')
    +        >>> bool(warned)
    +        True
    +        >>> warned.clear()
    +        >>> vrp('/foo/bar.txt')
    +        >>> bool(warned)
    +        True
    +        >>> vrp('foo/../../bar.txt')
    +        >>> bool(warned)
    +        True
    +        >>> warned.clear()
    +        >>> vrp('foo/f../bar.txt')
    +        >>> bool(warned)
    +        False
    +
    +        Windows path separators are straight-up disallowed.
    +        >>> vrp(r'\\foo/bar.txt')
    +        Traceback (most recent call last):
    +        ...
    +        ValueError: Use of .. or absolute path in a resource path \
    +is not allowed.
    +
    +        >>> vrp(r'C:\\foo/bar.txt')
    +        Traceback (most recent call last):
    +        ...
    +        ValueError: Use of .. or absolute path in a resource path \
    +is not allowed.
    +
    +        Blank values are allowed
    +
    +        >>> vrp('')
    +        >>> bool(warned)
    +        False
    +
    +        Non-string values are not.
    +
    +        >>> vrp(None)
    +        Traceback (most recent call last):
    +        ...
    +        AttributeError: ...
    +        """
    +        invalid = (
    +            os.path.pardir in path.split(posixpath.sep) or
    +            posixpath.isabs(path) or
    +            ntpath.isabs(path)
    +        )
    +        if not invalid:
    +            return
    +
    +        msg = "Use of .. or absolute path in a resource path is not allowed."
    +
    +        # Aggressively disallow Windows absolute paths
    +        if ntpath.isabs(path) and not posixpath.isabs(path):
    +            raise ValueError(msg)
    +
    +        # for compatibility, warn; in future
    +        # raise ValueError(msg)
    +        warnings.warn(
    +            msg[:-1] + " and will raise exceptions in a future release.",
    +            DeprecationWarning,
    +            stacklevel=4,
    +        )
    +
    +    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_names = 'SourceFileLoader', 'SourcelessFileLoader',
    +        for name in loader_names:
    +            loader_cls = getattr(importlib_machinery, name, 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 _get_metadata_path(self, name):
    +        return self.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
    +
    +    # capture warnings due to #1111
    +    with warnings.catch_warnings():
    +        warnings.simplefilter("ignore")
    +        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)))
    +
    +    new_path = sorted(orig_path, key=position_in_sys_path)
    +    new_path = [_normalize_cached(p) for p in new_path]
    +
    +    if isinstance(module.__path__, list):
    +        module.__path__[:] = new_path
    +    else:
    +        module.__path__ = new_path
    +
    +
    +def declare_namespace(packageName):
    +    """Declare that package 'packageName' is a namespace package"""
    +
    +    _imp.acquire_lock()
    +    try:
    +        if packageName in _namespace_packages:
    +            return
    +
    +        path = sys.path
    +        parent, _, _ = packageName.rpartition('.')
    +
    +        if parent:
    +            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 or None, []).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(os.path.normpath(_cygwin_patch(filename))))
    +
    +
    +def _cygwin_patch(filename):  # pragma: nocover
    +    """
    +    Contrary to POSIX 2008, on Cygwin, getcwd (3) contains
    +    symlink components. Using
    +    os.path.abspath() works around this limitation. A fix in os.getcwd()
    +    would probably better, in Cygwin even more so, except
    +    that this seems to be by design...
    +    """
    +    return os.path.abspath(filename) if sys.platform == 'cygwin' else 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[^-]+) (
    +        -(?P[^-]+) (
    +            -py(?P[^-]+) (
    +                -(?P.+)
    +            )?
    +        )?
    +    )?
    +    """,
    +    re.VERBOSE | re.IGNORECASE,
    +).match
    +
    +
    +class EntryPoint:
    +    """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.",
    +                PkgResourcesDeprecationWarning,
    +                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.+?)\s*'
    +        r'=\s*'
    +        r'(?P[\w.]+)\s*'
    +        r'(:\s*(?P[\w.]+))?\s*'
    +        r'(?P\[.*\])?\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:
    +    """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 = self._get_version()
    +            if version is None:
    +                path = self._get_metadata_path_for_display(self.PKG_INFO)
    +                msg = (
    +                    "Missing 'Version:' header and/or {} file at path: {}"
    +                ).format(self.PKG_INFO, path)
    +                raise ValueError(msg, 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_path_for_display(self, name):
    +        """
    +        Return the path to the given metadata file, if available.
    +        """
    +        try:
    +            # We need to access _get_metadata_path() on the provider object
    +            # directly rather than through this class's __getattr__()
    +            # since _get_metadata_path() is marked private.
    +            path = self._provider._get_metadata_path(name)
    +
    +        # Handle exceptions e.g. in case the distribution's metadata
    +        # provider doesn't support _get_metadata_path().
    +        except Exception:
    +            return '[could not detect]'
    +
    +        return path
    +
    +    def _get_metadata(self, name):
    +        if self.has_metadata(name):
    +            for line in self.get_metadata_lines(name):
    +                yield line
    +
    +    def _get_version(self):
    +        lines = self._get_metadata(self.PKG_INFO)
    +        version = _version_from_file(lines)
    +
    +        return version
    +
    +    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)
    +
    +    def __dir__(self):
    +        return list(
    +            set(super(Distribution, self).__dir__())
    +            | set(
    +                attr for attr in self._provider.__dir__()
    +                if not attr.startswith('_')
    +            )
    +        )
    +
    +    if not hasattr(object, '__dir__'):
    +        # python 2.7 not supported
    +        del __dir__
    +
    +    @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 = self._get_version()
    +        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.url,
    +            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)
    +        try:
    +            mkdir(dirname, 0o755)
    +        except FileExistsError:
    +            pass
    +
    +
    +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())
    +
    +class PkgResourcesDeprecationWarning(Warning):
    +    """
    +    Base class for warning about deprecations in ``pkg_resources``
    +
    +    This class is not derived from ``DeprecationWarning``, and as such is
    +    visible by default.
    +    """
    diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc
    new file mode 100644
    index 0000000000000000000000000000000000000000..cb052157f23686a21237029d66103760b28d1e86
    GIT binary patch
    literal 158235
    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%0A+!h$186{WL`}@93Sw2372ed^Em}^1 z%$b?HX(aOZ=H{0Wflf9cP^?vQlp8ONbVS0XajQ&_@jVJb#x0TPg%2Wezw&Zg(b=fi zXypM?@IPRjMc9oT0-<8~(#prnOqORX zUVBC}9pEX#9qcBVJ1VlPJTfy!{_S#&Zvsmy>(Dh>ybhKJ)V?SsDyqCnraFwpn{g0w z5QMp-k*15mHb+$n6?_HeW^Z=K-PG@h!ew}7#I>tu%1c?R$@H5~vAmO+^B>dReM)GB zs#Avk4gLIv5@NFm4+}9=5Dzda+xQ=$GsLj-e~kn_w2O0E?Xxa6c&d$&Eth+@_InTX zJw$K(U()>~4`7mktec@ZqQ9I|bWuz!khQWHezB~#D3OHyvfaerQ7Ij|QJcL|{%ySANOU_||ZCd~r9@*U6 zy|K4@?ZeD4;-;7aJ&;=jj+09;QW8ZR=O_z`{g-&=YZF2vk3SScCuHDa!F^K6I~7Qy zkX@3qOK^4p0T*>Ge^%|g(|@mj)%L8SDmj@P_|At+zv17TdOLOOBj-cssw-1owQcIP zPf|F<`$Kn!?nLfIpag{GV~7RaO7$VKj8H)vL?MbGBr3W)C3mO5HV9M@UCiIH)(5nY zq$N}BPfgw(O^!mfz3B;UctY?{zOa5)^o&WKF~KvoMPScuYaS^)EP96l+)TgQf&1+B z-+BAq+l1r{35?lwluIq7mxYEtY?-}>AU0yCx|Al50B9s#{gE??SnB@NNuef$4aYtU zt+lMXo|K9Qj)+Z@Qq!d9pG;X_($&6?D%RQnNrF)8URV~_yC&hmO(|qNz#j_qYy^7N zIYo72&(s9r-(5M$DG<*>6{F&V8x1hxdD1B~z?u4t)Nm$w9F5@* zqAcqUDo}Ii(~-^QfsN*Y_4l7dh2{aV`J~i*5)jTcu*?eq^!SnUfm3K5dfX`bM18iEz~-e7wCK_nH~%DtQQ{>SZN;D{7BA_R`S+^%Gg2iR&wwcLaM<05CO z^uYD~#HOcp!_z8yLXsyWy4xjp`>F-1G%`+x^*0i9?Qqxn9|++I3Jl!_YY?d-3>}=S zPeTr$$kaDV^#@V)%0AS*5;r1w`72wwYz7vB*OaYCvh@hIo=k-&d3p5@1=~I*3dC7l4$0+Hbf$dL_=Zf~Hvrx8KEdvB( zqfgu}%Q3tqUAoV0fk}&&w3J(F$gEjOf<7`v){+Bl^ixZ|#m#aS0CB%6mD_+7`65ah zKE?N<kSK0w1A-SVB2| z0Ewa)gg;!w5&MC#Cgtg!Y(8Zii=WXRi3fO^pR#7)7Zjhl=LFW zTIbJ`XR~bi{x5X+HqLP#?Hu+9wz{%A016|F?7Keve%`CM0<;5Z&|T!mHSuE-@Yo;c8ldb zQh5)0MVV){>2`zqd_CU*t|ra}ylP zy=a=egxqlkx#!NGC>f+X3X|1=Z94iQcWQxKDy3_Sr>SGx?92=Od4A99bVp&5T-v6i zFLI|QN?PdB!Xz2mrlT)%r%rLTbZKEiHN?>uxl=>G%c@#DP1S6h=*$b2K9^HKXH~Zf zRV`aA(t*%1nK{@G0{0G5V1_|Vz}~?v#J#Yat6R5CNM2B~QUTD7vRcXBuws2~y;{m) fW-6X0KiFnxUhHt5xf`X;t)|cHy`}41Z|Q#ljLooC literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc b/venv/lib/python3.11/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df8411b1c6a96e17e56aa80cc7596c7ef679d717 GIT binary patch literal 17034 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

    9bE&(m4p>F^v%PGWc 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

    x9eEUb}3HKIHE`$84eWl!9F(;I%!)9u? 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%0DytpTNAWw$V3X2i0RqNm> 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 B;DZ1F literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi new file mode 100644 index 0000000..30b67d8 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi @@ -0,0 +1,28 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives import padding + +def check_ansix923_padding(data: bytes) -> bool: ... + +class PKCS7PaddingContext(padding.PaddingContext): + def __init__(self, block_size: int) -> None: ... + def update(self, data: bytes) -> bytes: ... + def finalize(self) -> bytes: ... + +class PKCS7UnpaddingContext(padding.PaddingContext): + def __init__(self, block_size: int) -> None: ... + def update(self, data: bytes) -> bytes: ... + def finalize(self) -> bytes: ... + +class ObjectIdentifier: + def __init__(self, val: str) -> None: ... + @property + def dotted_string(self) -> str: ... + @property + def _name(self) -> str: ... + +T = typing.TypeVar("T") diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi new file mode 100644 index 0000000..8010008 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi @@ -0,0 +1,8 @@ +# 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. + +import typing + +lib = typing.Any +ffi = typing.Any diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi new file mode 100644 index 0000000..3b5f208 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi @@ -0,0 +1,7 @@ +# 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. + +def decode_dss_signature(signature: bytes) -> tuple[int, int]: ... +def encode_dss_signature(r: int, s: int) -> bytes: ... +def parse_spki_for_data(data: bytes) -> bytes: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi new file mode 100644 index 0000000..09f46b1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi @@ -0,0 +1,17 @@ +# 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. + +class _Reasons: + BACKEND_MISSING_INTERFACE: _Reasons + UNSUPPORTED_HASH: _Reasons + UNSUPPORTED_CIPHER: _Reasons + UNSUPPORTED_PADDING: _Reasons + UNSUPPORTED_MGF: _Reasons + UNSUPPORTED_PUBLIC_KEY_ALGORITHM: _Reasons + UNSUPPORTED_ELLIPTIC_CURVE: _Reasons + UNSUPPORTED_SERIALIZATION: _Reasons + UNSUPPORTED_X509: _Reasons + UNSUPPORTED_EXCHANGE_ALGORITHM: _Reasons + UNSUPPORTED_DIFFIE_HELLMAN: _Reasons + UNSUPPORTED_MAC: _Reasons diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi new file mode 100644 index 0000000..e4321be --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi @@ -0,0 +1,117 @@ +# 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. + +import datetime +import typing + +from cryptography import x509 +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric.types import PrivateKeyTypes +from cryptography.x509 import ocsp + +class OCSPRequest: + @property + def issuer_key_hash(self) -> bytes: ... + @property + def issuer_name_hash(self) -> bytes: ... + @property + def hash_algorithm(self) -> hashes.HashAlgorithm: ... + @property + def serial_number(self) -> int: ... + def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... + @property + def extensions(self) -> x509.Extensions: ... + +class OCSPResponse: + @property + def responses(self) -> typing.Iterator[OCSPSingleResponse]: ... + @property + def response_status(self) -> ocsp.OCSPResponseStatus: ... + @property + def signature_algorithm_oid(self) -> x509.ObjectIdentifier: ... + @property + def signature_hash_algorithm( + self, + ) -> hashes.HashAlgorithm | None: ... + @property + def signature(self) -> bytes: ... + @property + def tbs_response_bytes(self) -> bytes: ... + @property + def certificates(self) -> list[x509.Certificate]: ... + @property + def responder_key_hash(self) -> bytes | None: ... + @property + def responder_name(self) -> x509.Name | None: ... + @property + def produced_at(self) -> datetime.datetime: ... + @property + def produced_at_utc(self) -> datetime.datetime: ... + @property + def certificate_status(self) -> ocsp.OCSPCertStatus: ... + @property + def revocation_time(self) -> datetime.datetime | None: ... + @property + def revocation_time_utc(self) -> datetime.datetime | None: ... + @property + def revocation_reason(self) -> x509.ReasonFlags | None: ... + @property + def this_update(self) -> datetime.datetime: ... + @property + def this_update_utc(self) -> datetime.datetime: ... + @property + def next_update(self) -> datetime.datetime | None: ... + @property + def next_update_utc(self) -> datetime.datetime | None: ... + @property + def issuer_key_hash(self) -> bytes: ... + @property + def issuer_name_hash(self) -> bytes: ... + @property + def hash_algorithm(self) -> hashes.HashAlgorithm: ... + @property + def serial_number(self) -> int: ... + @property + def extensions(self) -> x509.Extensions: ... + @property + def single_extensions(self) -> x509.Extensions: ... + def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... + +class OCSPSingleResponse: + @property + def certificate_status(self) -> ocsp.OCSPCertStatus: ... + @property + def revocation_time(self) -> datetime.datetime | None: ... + @property + def revocation_time_utc(self) -> datetime.datetime | None: ... + @property + def revocation_reason(self) -> x509.ReasonFlags | None: ... + @property + def this_update(self) -> datetime.datetime: ... + @property + def this_update_utc(self) -> datetime.datetime: ... + @property + def next_update(self) -> datetime.datetime | None: ... + @property + def next_update_utc(self) -> datetime.datetime | None: ... + @property + def issuer_key_hash(self) -> bytes: ... + @property + def issuer_name_hash(self) -> bytes: ... + @property + def hash_algorithm(self) -> hashes.HashAlgorithm: ... + @property + def serial_number(self) -> int: ... + +def load_der_ocsp_request(data: bytes) -> ocsp.OCSPRequest: ... +def load_der_ocsp_response(data: bytes) -> ocsp.OCSPResponse: ... +def create_ocsp_request( + builder: ocsp.OCSPRequestBuilder, +) -> ocsp.OCSPRequest: ... +def create_ocsp_response( + status: ocsp.OCSPResponseStatus, + builder: ocsp.OCSPResponseBuilder | None, + private_key: PrivateKeyTypes | None, + hash_algorithm: hashes.HashAlgorithm | None, +) -> ocsp.OCSPResponse: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi new file mode 100644 index 0000000..320cef1 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi @@ -0,0 +1,72 @@ +# 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. + +import typing + +from cryptography.hazmat.bindings._rust.openssl import ( + aead, + ciphers, + cmac, + dh, + dsa, + ec, + ed448, + ed25519, + hashes, + hmac, + kdf, + keys, + poly1305, + rsa, + x448, + x25519, +) + +__all__ = [ + "aead", + "ciphers", + "cmac", + "dh", + "dsa", + "ec", + "ed448", + "ed25519", + "hashes", + "hmac", + "kdf", + "keys", + "openssl_version", + "openssl_version_text", + "poly1305", + "raise_openssl_error", + "rsa", + "x448", + "x25519", +] + +CRYPTOGRAPHY_IS_LIBRESSL: bool +CRYPTOGRAPHY_IS_BORINGSSL: bool +CRYPTOGRAPHY_OPENSSL_300_OR_GREATER: bool +CRYPTOGRAPHY_OPENSSL_309_OR_GREATER: bool +CRYPTOGRAPHY_OPENSSL_320_OR_GREATER: bool + +class Providers: ... + +_legacy_provider_loaded: bool +_providers: Providers + +def openssl_version() -> int: ... +def openssl_version_text() -> str: ... +def raise_openssl_error() -> typing.NoReturn: ... +def capture_error_stack() -> list[OpenSSLError]: ... +def is_fips_enabled() -> bool: ... +def enable_fips(providers: Providers) -> None: ... + +class OpenSSLError: + @property + def lib(self) -> int: ... + @property + def reason(self) -> int: ... + @property + def reason_text(self) -> bytes: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi new file mode 100644 index 0000000..047f49d --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi @@ -0,0 +1,103 @@ +# 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. + +class AESGCM: + def __init__(self, key: bytes) -> None: ... + @staticmethod + def generate_key(key_size: int) -> bytes: ... + def encrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... + def decrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... + +class ChaCha20Poly1305: + def __init__(self, key: bytes) -> None: ... + @staticmethod + def generate_key() -> bytes: ... + def encrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... + def decrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... + +class AESCCM: + def __init__(self, key: bytes, tag_length: int = 16) -> None: ... + @staticmethod + def generate_key(key_size: int) -> bytes: ... + def encrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... + def decrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... + +class AESSIV: + def __init__(self, key: bytes) -> None: ... + @staticmethod + def generate_key(key_size: int) -> bytes: ... + def encrypt( + self, + data: bytes, + associated_data: list[bytes] | None, + ) -> bytes: ... + def decrypt( + self, + data: bytes, + associated_data: list[bytes] | None, + ) -> bytes: ... + +class AESOCB3: + def __init__(self, key: bytes) -> None: ... + @staticmethod + def generate_key(key_size: int) -> bytes: ... + def encrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... + def decrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... + +class AESGCMSIV: + def __init__(self, key: bytes) -> None: ... + @staticmethod + def generate_key(key_size: int) -> bytes: ... + def encrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... + def decrypt( + self, + nonce: bytes, + data: bytes, + associated_data: bytes | None, + ) -> bytes: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi new file mode 100644 index 0000000..759f3b5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi @@ -0,0 +1,38 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives import ciphers +from cryptography.hazmat.primitives.ciphers import modes + +@typing.overload +def create_encryption_ctx( + algorithm: ciphers.CipherAlgorithm, mode: modes.ModeWithAuthenticationTag +) -> ciphers.AEADEncryptionContext: ... +@typing.overload +def create_encryption_ctx( + algorithm: ciphers.CipherAlgorithm, mode: modes.Mode +) -> ciphers.CipherContext: ... +@typing.overload +def create_decryption_ctx( + algorithm: ciphers.CipherAlgorithm, mode: modes.ModeWithAuthenticationTag +) -> ciphers.AEADDecryptionContext: ... +@typing.overload +def create_decryption_ctx( + algorithm: ciphers.CipherAlgorithm, mode: modes.Mode +) -> ciphers.CipherContext: ... +def cipher_supported( + algorithm: ciphers.CipherAlgorithm, mode: modes.Mode +) -> bool: ... +def _advance( + ctx: ciphers.AEADEncryptionContext | ciphers.AEADDecryptionContext, n: int +) -> None: ... +def _advance_aad( + ctx: ciphers.AEADEncryptionContext | ciphers.AEADDecryptionContext, n: int +) -> None: ... + +class CipherContext: ... +class AEADEncryptionContext: ... +class AEADDecryptionContext: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi new file mode 100644 index 0000000..9c03508 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi @@ -0,0 +1,18 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives import ciphers + +class CMAC: + def __init__( + self, + algorithm: ciphers.BlockCipherAlgorithm, + backend: typing.Any = None, + ) -> None: ... + def update(self, data: bytes) -> None: ... + def finalize(self) -> bytes: ... + def verify(self, signature: bytes) -> None: ... + def copy(self) -> CMAC: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi new file mode 100644 index 0000000..08733d7 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi @@ -0,0 +1,51 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives.asymmetric import dh + +MIN_MODULUS_SIZE: int + +class DHPrivateKey: ... +class DHPublicKey: ... +class DHParameters: ... + +class DHPrivateNumbers: + def __init__(self, x: int, public_numbers: DHPublicNumbers) -> None: ... + def private_key(self, backend: typing.Any = None) -> dh.DHPrivateKey: ... + @property + def x(self) -> int: ... + @property + def public_numbers(self) -> DHPublicNumbers: ... + +class DHPublicNumbers: + def __init__( + self, y: int, parameter_numbers: DHParameterNumbers + ) -> None: ... + def public_key(self, backend: typing.Any = None) -> dh.DHPublicKey: ... + @property + def y(self) -> int: ... + @property + def parameter_numbers(self) -> DHParameterNumbers: ... + +class DHParameterNumbers: + def __init__(self, p: int, g: int, q: int | None = None) -> None: ... + def parameters(self, backend: typing.Any = None) -> dh.DHParameters: ... + @property + def p(self) -> int: ... + @property + def g(self) -> int: ... + @property + def q(self) -> int | None: ... + +def generate_parameters( + generator: int, key_size: int, backend: typing.Any = None +) -> dh.DHParameters: ... +def from_pem_parameters( + data: bytes, backend: typing.Any = None +) -> dh.DHParameters: ... +def from_der_parameters( + data: bytes, backend: typing.Any = None +) -> dh.DHParameters: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi new file mode 100644 index 0000000..0922a4c --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi @@ -0,0 +1,41 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives.asymmetric import dsa + +class DSAPrivateKey: ... +class DSAPublicKey: ... +class DSAParameters: ... + +class DSAPrivateNumbers: + def __init__(self, x: int, public_numbers: DSAPublicNumbers) -> None: ... + @property + def x(self) -> int: ... + @property + def public_numbers(self) -> DSAPublicNumbers: ... + def private_key(self, backend: typing.Any = None) -> dsa.DSAPrivateKey: ... + +class DSAPublicNumbers: + def __init__( + self, y: int, parameter_numbers: DSAParameterNumbers + ) -> None: ... + @property + def y(self) -> int: ... + @property + def parameter_numbers(self) -> DSAParameterNumbers: ... + def public_key(self, backend: typing.Any = None) -> dsa.DSAPublicKey: ... + +class DSAParameterNumbers: + def __init__(self, p: int, q: int, g: int) -> None: ... + @property + def p(self) -> int: ... + @property + def q(self) -> int: ... + @property + def g(self) -> int: ... + def parameters(self, backend: typing.Any = None) -> dsa.DSAParameters: ... + +def generate_parameters(key_size: int) -> dsa.DSAParameters: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi new file mode 100644 index 0000000..5c3b7bf --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi @@ -0,0 +1,52 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives.asymmetric import ec + +class ECPrivateKey: ... +class ECPublicKey: ... + +class EllipticCurvePrivateNumbers: + def __init__( + self, private_value: int, public_numbers: EllipticCurvePublicNumbers + ) -> None: ... + def private_key( + self, backend: typing.Any = None + ) -> ec.EllipticCurvePrivateKey: ... + @property + def private_value(self) -> int: ... + @property + def public_numbers(self) -> EllipticCurvePublicNumbers: ... + +class EllipticCurvePublicNumbers: + def __init__(self, x: int, y: int, curve: ec.EllipticCurve) -> None: ... + def public_key( + self, backend: typing.Any = None + ) -> ec.EllipticCurvePublicKey: ... + @property + def x(self) -> int: ... + @property + def y(self) -> int: ... + @property + def curve(self) -> ec.EllipticCurve: ... + def __eq__(self, other: object) -> bool: ... + +def curve_supported(curve: ec.EllipticCurve) -> bool: ... +def generate_private_key( + curve: ec.EllipticCurve, backend: typing.Any = None +) -> ec.EllipticCurvePrivateKey: ... +def from_private_numbers( + numbers: ec.EllipticCurvePrivateNumbers, +) -> ec.EllipticCurvePrivateKey: ... +def from_public_numbers( + numbers: ec.EllipticCurvePublicNumbers, +) -> ec.EllipticCurvePublicKey: ... +def from_public_bytes( + curve: ec.EllipticCurve, data: bytes +) -> ec.EllipticCurvePublicKey: ... +def derive_private_key( + private_value: int, curve: ec.EllipticCurve +) -> ec.EllipticCurvePrivateKey: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi new file mode 100644 index 0000000..5233f9a --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi @@ -0,0 +1,12 @@ +# 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 cryptography.hazmat.primitives.asymmetric import ed25519 + +class Ed25519PrivateKey: ... +class Ed25519PublicKey: ... + +def generate_key() -> ed25519.Ed25519PrivateKey: ... +def from_private_bytes(data: bytes) -> ed25519.Ed25519PrivateKey: ... +def from_public_bytes(data: bytes) -> ed25519.Ed25519PublicKey: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi new file mode 100644 index 0000000..7a06520 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi @@ -0,0 +1,12 @@ +# 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 cryptography.hazmat.primitives.asymmetric import ed448 + +class Ed448PrivateKey: ... +class Ed448PublicKey: ... + +def generate_key() -> ed448.Ed448PrivateKey: ... +def from_private_bytes(data: bytes) -> ed448.Ed448PrivateKey: ... +def from_public_bytes(data: bytes) -> ed448.Ed448PublicKey: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi new file mode 100644 index 0000000..56f3170 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi @@ -0,0 +1,19 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives import hashes + +class Hash(hashes.HashContext): + def __init__( + self, algorithm: hashes.HashAlgorithm, backend: typing.Any = None + ) -> None: ... + @property + def algorithm(self) -> hashes.HashAlgorithm: ... + def update(self, data: bytes) -> None: ... + def finalize(self) -> bytes: ... + def copy(self) -> Hash: ... + +def hash_supported(algorithm: hashes.HashAlgorithm) -> bool: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi new file mode 100644 index 0000000..e38d9b5 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi @@ -0,0 +1,21 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives import hashes + +class HMAC(hashes.HashContext): + def __init__( + self, + key: bytes, + algorithm: hashes.HashAlgorithm, + backend: typing.Any = None, + ) -> None: ... + @property + def algorithm(self) -> hashes.HashAlgorithm: ... + def update(self, data: bytes) -> None: ... + def finalize(self) -> bytes: ... + def verify(self, signature: bytes) -> None: ... + def copy(self) -> HMAC: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi new file mode 100644 index 0000000..4b90bb4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi @@ -0,0 +1,43 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives.hashes import HashAlgorithm + +def derive_pbkdf2_hmac( + key_material: bytes, + algorithm: HashAlgorithm, + salt: bytes, + iterations: int, + length: int, +) -> bytes: ... + +class Scrypt: + def __init__( + self, + salt: bytes, + length: int, + n: int, + r: int, + p: int, + backend: typing.Any = None, + ) -> None: ... + def derive(self, key_material: bytes) -> bytes: ... + def verify(self, key_material: bytes, expected_key: bytes) -> None: ... + +class Argon2id: + def __init__( + self, + *, + salt: bytes, + length: int, + iterations: int, + lanes: int, + memory_cost: int, + ad: bytes | None = None, + secret: bytes | None = None, + ) -> None: ... + def derive(self, key_material: bytes) -> bytes: ... + def verify(self, key_material: bytes, expected_key: bytes) -> None: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi new file mode 100644 index 0000000..6815b7d --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi @@ -0,0 +1,33 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives.asymmetric.types import ( + PrivateKeyTypes, + PublicKeyTypes, +) + +def load_der_private_key( + data: bytes, + password: bytes | None, + backend: typing.Any = None, + *, + unsafe_skip_rsa_key_validation: bool = False, +) -> PrivateKeyTypes: ... +def load_pem_private_key( + data: bytes, + password: bytes | None, + backend: typing.Any = None, + *, + unsafe_skip_rsa_key_validation: bool = False, +) -> PrivateKeyTypes: ... +def load_der_public_key( + data: bytes, + backend: typing.Any = None, +) -> PublicKeyTypes: ... +def load_pem_public_key( + data: bytes, + backend: typing.Any = None, +) -> PublicKeyTypes: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi new file mode 100644 index 0000000..2e9b0a9 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi @@ -0,0 +1,13 @@ +# 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. + +class Poly1305: + def __init__(self, key: bytes) -> None: ... + @staticmethod + def generate_tag(key: bytes, data: bytes) -> bytes: ... + @staticmethod + def verify_tag(key: bytes, data: bytes, tag: bytes) -> None: ... + def update(self, data: bytes) -> None: ... + def finalize(self) -> bytes: ... + def verify(self, tag: bytes) -> None: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi new file mode 100644 index 0000000..ef7752d --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi @@ -0,0 +1,55 @@ +# 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. + +import typing + +from cryptography.hazmat.primitives.asymmetric import rsa + +class RSAPrivateKey: ... +class RSAPublicKey: ... + +class RSAPrivateNumbers: + def __init__( + self, + p: int, + q: int, + d: int, + dmp1: int, + dmq1: int, + iqmp: int, + public_numbers: RSAPublicNumbers, + ) -> None: ... + @property + def p(self) -> int: ... + @property + def q(self) -> int: ... + @property + def d(self) -> int: ... + @property + def dmp1(self) -> int: ... + @property + def dmq1(self) -> int: ... + @property + def iqmp(self) -> int: ... + @property + def public_numbers(self) -> RSAPublicNumbers: ... + def private_key( + self, + backend: typing.Any = None, + *, + unsafe_skip_rsa_key_validation: bool = False, + ) -> rsa.RSAPrivateKey: ... + +class RSAPublicNumbers: + def __init__(self, e: int, n: int) -> None: ... + @property + def n(self) -> int: ... + @property + def e(self) -> int: ... + def public_key(self, backend: typing.Any = None) -> rsa.RSAPublicKey: ... + +def generate_private_key( + public_exponent: int, + key_size: int, +) -> rsa.RSAPrivateKey: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi new file mode 100644 index 0000000..da0f3ec --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi @@ -0,0 +1,12 @@ +# 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 cryptography.hazmat.primitives.asymmetric import x25519 + +class X25519PrivateKey: ... +class X25519PublicKey: ... + +def generate_key() -> x25519.X25519PrivateKey: ... +def from_private_bytes(data: bytes) -> x25519.X25519PrivateKey: ... +def from_public_bytes(data: bytes) -> x25519.X25519PublicKey: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi new file mode 100644 index 0000000..e51cfeb --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi @@ -0,0 +1,12 @@ +# 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 cryptography.hazmat.primitives.asymmetric import x448 + +class X448PrivateKey: ... +class X448PublicKey: ... + +def generate_key() -> x448.X448PrivateKey: ... +def from_private_bytes(data: bytes) -> x448.X448PrivateKey: ... +def from_public_bytes(data: bytes) -> x448.X448PublicKey: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi new file mode 100644 index 0000000..40514c4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi @@ -0,0 +1,46 @@ +# 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. + +import typing + +from cryptography import x509 +from cryptography.hazmat.primitives.asymmetric.types import PrivateKeyTypes +from cryptography.hazmat.primitives.serialization import ( + KeySerializationEncryption, +) +from cryptography.hazmat.primitives.serialization.pkcs12 import ( + PKCS12KeyAndCertificates, + PKCS12PrivateKeyTypes, +) + +class PKCS12Certificate: + def __init__( + self, cert: x509.Certificate, friendly_name: bytes | None + ) -> None: ... + @property + def friendly_name(self) -> bytes | None: ... + @property + def certificate(self) -> x509.Certificate: ... + +def load_key_and_certificates( + data: bytes, + password: bytes | None, + backend: typing.Any = None, +) -> tuple[ + PrivateKeyTypes | None, + x509.Certificate | None, + list[x509.Certificate], +]: ... +def load_pkcs12( + data: bytes, + password: bytes | None, + backend: typing.Any = None, +) -> PKCS12KeyAndCertificates: ... +def serialize_key_and_certificates( + name: bytes | None, + key: PKCS12PrivateKeyTypes | None, + cert: x509.Certificate | None, + cas: typing.Iterable[x509.Certificate | PKCS12Certificate] | None, + encryption_algorithm: KeySerializationEncryption, +) -> bytes: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi new file mode 100644 index 0000000..f9aa81e --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi @@ -0,0 +1,49 @@ +# 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. + +import typing + +from cryptography import x509 +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.asymmetric import rsa +from cryptography.hazmat.primitives.serialization import pkcs7 + +def serialize_certificates( + certs: list[x509.Certificate], + encoding: serialization.Encoding, +) -> bytes: ... +def encrypt_and_serialize( + builder: pkcs7.PKCS7EnvelopeBuilder, + encoding: serialization.Encoding, + options: typing.Iterable[pkcs7.PKCS7Options], +) -> bytes: ... +def sign_and_serialize( + builder: pkcs7.PKCS7SignatureBuilder, + encoding: serialization.Encoding, + options: typing.Iterable[pkcs7.PKCS7Options], +) -> bytes: ... +def decrypt_der( + data: bytes, + certificate: x509.Certificate, + private_key: rsa.RSAPrivateKey, + options: typing.Iterable[pkcs7.PKCS7Options], +) -> bytes: ... +def decrypt_pem( + data: bytes, + certificate: x509.Certificate, + private_key: rsa.RSAPrivateKey, + options: typing.Iterable[pkcs7.PKCS7Options], +) -> bytes: ... +def decrypt_smime( + data: bytes, + certificate: x509.Certificate, + private_key: rsa.RSAPrivateKey, + options: typing.Iterable[pkcs7.PKCS7Options], +) -> bytes: ... +def load_pem_pkcs7_certificates( + data: bytes, +) -> list[x509.Certificate]: ... +def load_der_pkcs7_certificates( + data: bytes, +) -> list[x509.Certificate]: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi new file mode 100644 index 0000000..ef9f779 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi @@ -0,0 +1,22 @@ +# 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 cryptography import x509 +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.serialization import pkcs7 + +class TestCertificate: + not_after_tag: int + not_before_tag: int + issuer_value_tags: list[int] + subject_value_tags: list[int] + +def test_parse_certificate(data: bytes) -> TestCertificate: ... +def pkcs7_verify( + encoding: serialization.Encoding, + sig: bytes, + msg: bytes | None, + certs: list[x509.Certificate], + options: list[pkcs7.PKCS7Options], +) -> None: ... diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi new file mode 100644 index 0000000..b494fb6 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi @@ -0,0 +1,246 @@ +# 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. + +import datetime +import typing + +from cryptography import x509 +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric.ec import ECDSA +from cryptography.hazmat.primitives.asymmetric.padding import PSS, PKCS1v15 +from cryptography.hazmat.primitives.asymmetric.types import ( + CertificateIssuerPublicKeyTypes, + CertificatePublicKeyTypes, + PrivateKeyTypes, +) +from cryptography.x509 import certificate_transparency + +def load_pem_x509_certificate( + data: bytes, backend: typing.Any = None +) -> x509.Certificate: ... +def load_der_x509_certificate( + data: bytes, backend: typing.Any = None +) -> x509.Certificate: ... +def load_pem_x509_certificates( + data: bytes, +) -> list[x509.Certificate]: ... +def load_pem_x509_crl( + data: bytes, backend: typing.Any = None +) -> x509.CertificateRevocationList: ... +def load_der_x509_crl( + data: bytes, backend: typing.Any = None +) -> x509.CertificateRevocationList: ... +def load_pem_x509_csr( + data: bytes, backend: typing.Any = None +) -> x509.CertificateSigningRequest: ... +def load_der_x509_csr( + data: bytes, backend: typing.Any = None +) -> x509.CertificateSigningRequest: ... +def encode_name_bytes(name: x509.Name) -> bytes: ... +def encode_extension_value(extension: x509.ExtensionType) -> bytes: ... +def create_x509_certificate( + builder: x509.CertificateBuilder, + private_key: PrivateKeyTypes, + hash_algorithm: hashes.HashAlgorithm | None, + rsa_padding: PKCS1v15 | PSS | None, +) -> x509.Certificate: ... +def create_x509_csr( + builder: x509.CertificateSigningRequestBuilder, + private_key: PrivateKeyTypes, + hash_algorithm: hashes.HashAlgorithm | None, + rsa_padding: PKCS1v15 | PSS | None, +) -> x509.CertificateSigningRequest: ... +def create_x509_crl( + builder: x509.CertificateRevocationListBuilder, + private_key: PrivateKeyTypes, + hash_algorithm: hashes.HashAlgorithm | None, + rsa_padding: PKCS1v15 | PSS | None, +) -> x509.CertificateRevocationList: ... + +class Sct: + @property + def version(self) -> certificate_transparency.Version: ... + @property + def log_id(self) -> bytes: ... + @property + def timestamp(self) -> datetime.datetime: ... + @property + def entry_type(self) -> certificate_transparency.LogEntryType: ... + @property + def signature_hash_algorithm(self) -> hashes.HashAlgorithm: ... + @property + def signature_algorithm( + self, + ) -> certificate_transparency.SignatureAlgorithm: ... + @property + def signature(self) -> bytes: ... + @property + def extension_bytes(self) -> bytes: ... + +class Certificate: + def fingerprint(self, algorithm: hashes.HashAlgorithm) -> bytes: ... + @property + def serial_number(self) -> int: ... + @property + def version(self) -> x509.Version: ... + def public_key(self) -> CertificatePublicKeyTypes: ... + @property + def public_key_algorithm_oid(self) -> x509.ObjectIdentifier: ... + @property + def not_valid_before(self) -> datetime.datetime: ... + @property + def not_valid_before_utc(self) -> datetime.datetime: ... + @property + def not_valid_after(self) -> datetime.datetime: ... + @property + def not_valid_after_utc(self) -> datetime.datetime: ... + @property + def issuer(self) -> x509.Name: ... + @property + def subject(self) -> x509.Name: ... + @property + def signature_hash_algorithm( + self, + ) -> hashes.HashAlgorithm | None: ... + @property + def signature_algorithm_oid(self) -> x509.ObjectIdentifier: ... + @property + def signature_algorithm_parameters( + self, + ) -> None | PSS | PKCS1v15 | ECDSA: ... + @property + def extensions(self) -> x509.Extensions: ... + @property + def signature(self) -> bytes: ... + @property + def tbs_certificate_bytes(self) -> bytes: ... + @property + def tbs_precertificate_bytes(self) -> bytes: ... + def __eq__(self, other: object) -> bool: ... + def __hash__(self) -> int: ... + def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... + def verify_directly_issued_by(self, issuer: Certificate) -> None: ... + +class RevokedCertificate: ... + +class CertificateRevocationList: + def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... + def fingerprint(self, algorithm: hashes.HashAlgorithm) -> bytes: ... + def get_revoked_certificate_by_serial_number( + self, serial_number: int + ) -> RevokedCertificate | None: ... + @property + def signature_hash_algorithm( + self, + ) -> hashes.HashAlgorithm | None: ... + @property + def signature_algorithm_oid(self) -> x509.ObjectIdentifier: ... + @property + def signature_algorithm_parameters( + self, + ) -> None | PSS | PKCS1v15 | ECDSA: ... + @property + def issuer(self) -> x509.Name: ... + @property + def next_update(self) -> datetime.datetime | None: ... + @property + def next_update_utc(self) -> datetime.datetime | None: ... + @property + def last_update(self) -> datetime.datetime: ... + @property + def last_update_utc(self) -> datetime.datetime: ... + @property + def extensions(self) -> x509.Extensions: ... + @property + def signature(self) -> bytes: ... + @property + def tbs_certlist_bytes(self) -> bytes: ... + def __eq__(self, other: object) -> bool: ... + def __len__(self) -> int: ... + @typing.overload + def __getitem__(self, idx: int) -> x509.RevokedCertificate: ... + @typing.overload + def __getitem__(self, idx: slice) -> list[x509.RevokedCertificate]: ... + def __iter__(self) -> typing.Iterator[x509.RevokedCertificate]: ... + def is_signature_valid( + self, public_key: CertificateIssuerPublicKeyTypes + ) -> bool: ... + +class CertificateSigningRequest: + def __eq__(self, other: object) -> bool: ... + def __hash__(self) -> int: ... + def public_key(self) -> CertificatePublicKeyTypes: ... + @property + def subject(self) -> x509.Name: ... + @property + def signature_hash_algorithm( + self, + ) -> hashes.HashAlgorithm | None: ... + @property + def signature_algorithm_oid(self) -> x509.ObjectIdentifier: ... + @property + def signature_algorithm_parameters( + self, + ) -> None | PSS | PKCS1v15 | ECDSA: ... + @property + def extensions(self) -> x509.Extensions: ... + @property + def attributes(self) -> x509.Attributes: ... + def public_bytes(self, encoding: serialization.Encoding) -> bytes: ... + @property + def signature(self) -> bytes: ... + @property + def tbs_certrequest_bytes(self) -> bytes: ... + @property + def is_signature_valid(self) -> bool: ... + def get_attribute_for_oid(self, oid: x509.ObjectIdentifier) -> bytes: ... + +class PolicyBuilder: + def time(self, new_time: datetime.datetime) -> PolicyBuilder: ... + def store(self, new_store: Store) -> PolicyBuilder: ... + def max_chain_depth(self, new_max_chain_depth: int) -> PolicyBuilder: ... + def build_client_verifier(self) -> ClientVerifier: ... + def build_server_verifier( + self, subject: x509.verification.Subject + ) -> ServerVerifier: ... + +class VerifiedClient: + @property + def subjects(self) -> list[x509.GeneralName] | None: ... + @property + def chain(self) -> list[x509.Certificate]: ... + +class ClientVerifier: + @property + def validation_time(self) -> datetime.datetime: ... + @property + def store(self) -> Store: ... + @property + def max_chain_depth(self) -> int: ... + def verify( + self, + leaf: x509.Certificate, + intermediates: list[x509.Certificate], + ) -> VerifiedClient: ... + +class ServerVerifier: + @property + def subject(self) -> x509.verification.Subject: ... + @property + def validation_time(self) -> datetime.datetime: ... + @property + def store(self) -> Store: ... + @property + def max_chain_depth(self) -> int: ... + def verify( + self, + leaf: x509.Certificate, + intermediates: list[x509.Certificate], + ) -> list[x509.Certificate]: ... + +class Store: + def __init__(self, certs: list[x509.Certificate]) -> None: ... + +class VerificationError(Exception): + pass diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__init__.py new file mode 100644 index 0000000..b509336 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__init__.py @@ -0,0 +1,3 @@ +# 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. diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a6f8760634cd33e5b21b7e321a36090bda62bad GIT binary patch literal 220 zcmXv|K?=e!5KJtJ2*r1Ju#0#VpWwv@gtQH9YMX>4Ez~dg0G}Y`#nxcXGvOeyt?@du+~h6f{917ju~ey488#WAoGXDb isibEtGVQQDR64CoakO*1KYr-eNL@fF?Z`wnz}*jpvpu;0 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f010550dd352763d58370b8fd0cef46620e6aee0 GIT binary patch literal 5536 zcmbVQ%}*QK6(4^QgZcglBtS@jBqgtj!%JJK($i~+8Hfeg$Tn@7s=XTQi#@@fvF?mX zh$=OUcJ&rrR8{wts;d9P`y;$WclD&Mx|=Gytol3G9~m=~hy-!Z;oQ%2f9K<#;a_88 zBN~3b`~H8`uVyvvKP2>iVx2!C?`9*K_IItKRU&n*5qS}bXqAmh{7>;0QSbzK415SY z4t@ZsVpD`o!#!W)^Ww}$~{PlN6`RnM*Gb!rGj?p0Pg~9O8Mn^Tb@MpgJa=oh z_2kj!X4)}b{;-L0qspChS)4aryDE%k?L1vG-ZTt1eQa74)2d>pCbt}?o@QkmJ#;yv z{-}8_m;9?(&2aqciBag4M02J=-fBN2moJhxyhLnt$kSqpAwk#v6d+YV@{b4riRL!q za*S?YEU~BhPQIYa;jWn9ld0~X*<7|Hr@KNy&*{7QQg*APE0j8fjua^nIUiKrsWaG! zl$}6(cOB%d=0y{vua8_obH6FaO8Z5>-d!=jcSW__I#6}RJhWLr>w`Iek(~Jym1sy=5F{?(s>M(NAP>n)tOh9#(iJRDbh14R*$i{14EJ}byuK<(Z zz%jYp)2roh)^tvpS>cvzy63EBTCQB_4O0Zru*1a}7p!d5>*VFZ3FW$p4f+#8Z#Nro z18gnmMt9NrJ`krX`N(Hp?wY)NS^E>j7Ovnp2&TS@a{cl&!XhwhDdP)PMoWr%v6#*0 zn8jap(nKbE_)IS_Iz=w}X8^rT)-W6w(4F#gdHvELE1S(47xMPyexw!GF57hm&`Ie~ zI2XgxB5AnxJ~49^4f4G9Dk)3vOB+Fhj}EpXIr`L;RA`K4$W7-L4ut#!OY#Zt)NEx+}v z2)KsvnsGza&soKA4LM8WuLN}Q_o`P*aHHbyyy?Hh;5MN^-wC)-$9>pI%POmPRS?u$ zXnjW-AxH9&&vc}5IjZM&vpJm|pCjwYR97-B)0Jag0ik3%H96lE36u&yFtWeHwImPO#H1ry!=vMcJW-1urg0;T$+vty{mf=_98 zauznq`|UJAcJh%hJAL%sQsD|X9#aM~PfU)GuNh`|B3cP}(WOQE(CZlOUGL$#^TiLB z%C9}l;H*d~OyzCiHl@;#XCJC1ydt4zuLsVyo6NGA;1;jiuBl31aRfD*q{;!2KqCC8DpT837O9v* zdSMNe%~aZU$cLhBHK0TVunw+!j&)~f{fcDq3k@6Zyo~@Tlh5yEb*4YhAUE&oa*VV+ z+f+3Zx8z{V*!HQ(p_0V~1sm%2C4UAicgB0U`#AKT!DkfJH;QlCTKpcD`vZY9L*(ih zFFeh`yUYf3s`2uv!%l30I_^!luPq0l_OBHN&i*r6ALZ3gq5M(1uM#u`c9hefAL^Ns zzRmRf4*T`9?7j}4+}h6Oc0&Pr7|^a|@z>2x9C7=Ey{aLI;G711z=#So{f@My(*Lb? zG5WZj+HA)+KLb5wMEF8>H;2!UOB!EMM=~O!#;jVl;A~K1QH5%MAsu@O>E0J1I!B07 zAR!Ai@a51cYC;tZMpJOzOK9{r(yE8tT06Dgj;|}^>*8|-l={H0*l^u5h?eLpNhYb>2%b`LLo$ZQXG&Uz&nl(5A%gmZX+t< za4L}i*_e|f48eTh)Mq3JgInxq1WD>mw-t zs~o9vlnQ+nTY_9!PG$1B?JSvhYoFz|4)kItH2QDM`{XwbyV9!jZ^a+6fHIf!2LGw? zVv$J18_^kY*t^l>;q#)n88B-4Xa)Qa&K%^M`63F;dplf%?ENEQaCs1=hb znm0(6CaG_b+#5VnX%KpD*u1d5!K4$Qk#LQKq?TA|-~PrMCSgQNEVh>(dnpn|wZvL`{TJRC3FBH~ zwY~POH$lRrme^=N*z=}HnC|X2L&B_@AXT zOKq_4t&niLyY(FsR<*=>`|eY3jf8bA@so?>PrdsjJm?A!NqF4dV3Pz5q^(VLepRad EKVX6JF8}}l literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..509bf5e318be4500a7900d6b93cc400193000831 GIT binary patch literal 5610 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 list[str]: + return [ + "SSL_CTX_set_cert_cb", + "SSL_set_cert_cb", + ] + + +def cryptography_has_ssl_st() -> list[str]: + return [ + "SSL_ST_BEFORE", + "SSL_ST_OK", + "SSL_ST_INIT", + "SSL_ST_RENEGOTIATE", + ] + + +def cryptography_has_tls_st() -> list[str]: + return [ + "TLS_ST_BEFORE", + "TLS_ST_OK", + ] + + +def cryptography_has_ssl_sigalgs() -> list[str]: + return [ + "SSL_CTX_set1_sigalgs_list", + ] + + +def cryptography_has_psk() -> list[str]: + return [ + "SSL_CTX_use_psk_identity_hint", + "SSL_CTX_set_psk_server_callback", + "SSL_CTX_set_psk_client_callback", + ] + + +def cryptography_has_psk_tlsv13() -> list[str]: + return [ + "SSL_CTX_set_psk_find_session_callback", + "SSL_CTX_set_psk_use_session_callback", + "Cryptography_SSL_SESSION_new", + "SSL_CIPHER_find", + "SSL_SESSION_set1_master_key", + "SSL_SESSION_set_cipher", + "SSL_SESSION_set_protocol_version", + ] + + +def cryptography_has_custom_ext() -> list[str]: + return [ + "SSL_CTX_add_client_custom_ext", + "SSL_CTX_add_server_custom_ext", + "SSL_extension_supported", + ] + + +def cryptography_has_tlsv13_functions() -> list[str]: + return [ + "SSL_VERIFY_POST_HANDSHAKE", + "SSL_CTX_set_ciphersuites", + "SSL_verify_client_post_handshake", + "SSL_CTX_set_post_handshake_auth", + "SSL_set_post_handshake_auth", + "SSL_SESSION_get_max_early_data", + "SSL_write_early_data", + "SSL_read_early_data", + "SSL_CTX_set_max_early_data", + ] + + +def cryptography_has_engine() -> list[str]: + return [ + "ENGINE_by_id", + "ENGINE_init", + "ENGINE_finish", + "ENGINE_get_default_RAND", + "ENGINE_set_default_RAND", + "ENGINE_unregister_RAND", + "ENGINE_ctrl_cmd", + "ENGINE_free", + "ENGINE_get_name", + "ENGINE_ctrl_cmd_string", + "ENGINE_load_builtin_engines", + "ENGINE_load_private_key", + "ENGINE_load_public_key", + "SSL_CTX_set_client_cert_engine", + ] + + +def cryptography_has_verified_chain() -> list[str]: + return [ + "SSL_get0_verified_chain", + ] + + +def cryptography_has_srtp() -> list[str]: + return [ + "SSL_CTX_set_tlsext_use_srtp", + "SSL_set_tlsext_use_srtp", + "SSL_get_selected_srtp_profile", + ] + + +def cryptography_has_op_no_renegotiation() -> list[str]: + return [ + "SSL_OP_NO_RENEGOTIATION", + ] + + +def cryptography_has_dtls_get_data_mtu() -> list[str]: + return [ + "DTLS_get_data_mtu", + ] + + +def cryptography_has_ssl_cookie() -> list[str]: + return [ + "SSL_OP_COOKIE_EXCHANGE", + "DTLSv1_listen", + "SSL_CTX_set_cookie_generate_cb", + "SSL_CTX_set_cookie_verify_cb", + ] + + +def cryptography_has_prime_checks() -> list[str]: + return [ + "BN_prime_checks_for_size", + ] + + +def cryptography_has_unexpected_eof_while_reading() -> list[str]: + return ["SSL_R_UNEXPECTED_EOF_WHILE_READING"] + + +def cryptography_has_ssl_op_ignore_unexpected_eof() -> list[str]: + return [ + "SSL_OP_IGNORE_UNEXPECTED_EOF", + ] + + +def cryptography_has_get_extms_support() -> list[str]: + return ["SSL_get_extms_support"] + + +# This is a mapping of +# {condition: function-returning-names-dependent-on-that-condition} so we can +# loop over them and delete unsupported names at runtime. It will be removed +# when cffi supports #if in cdef. We use functions instead of just a dict of +# lists so we can use coverage to measure which are used. +CONDITIONAL_NAMES = { + "Cryptography_HAS_SET_CERT_CB": cryptography_has_set_cert_cb, + "Cryptography_HAS_SSL_ST": cryptography_has_ssl_st, + "Cryptography_HAS_TLS_ST": cryptography_has_tls_st, + "Cryptography_HAS_SIGALGS": cryptography_has_ssl_sigalgs, + "Cryptography_HAS_PSK": cryptography_has_psk, + "Cryptography_HAS_PSK_TLSv1_3": cryptography_has_psk_tlsv13, + "Cryptography_HAS_CUSTOM_EXT": cryptography_has_custom_ext, + "Cryptography_HAS_TLSv1_3_FUNCTIONS": cryptography_has_tlsv13_functions, + "Cryptography_HAS_ENGINE": cryptography_has_engine, + "Cryptography_HAS_VERIFIED_CHAIN": cryptography_has_verified_chain, + "Cryptography_HAS_SRTP": cryptography_has_srtp, + "Cryptography_HAS_OP_NO_RENEGOTIATION": ( + cryptography_has_op_no_renegotiation + ), + "Cryptography_HAS_DTLS_GET_DATA_MTU": cryptography_has_dtls_get_data_mtu, + "Cryptography_HAS_SSL_COOKIE": cryptography_has_ssl_cookie, + "Cryptography_HAS_PRIME_CHECKS": cryptography_has_prime_checks, + "Cryptography_HAS_UNEXPECTED_EOF_WHILE_READING": ( + cryptography_has_unexpected_eof_while_reading + ), + "Cryptography_HAS_SSL_OP_IGNORE_UNEXPECTED_EOF": ( + cryptography_has_ssl_op_ignore_unexpected_eof + ), + "Cryptography_HAS_GET_EXTMS_SUPPORT": cryptography_has_get_extms_support, +} diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/binding.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/binding.py new file mode 100644 index 0000000..d4dfeef --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/bindings/openssl/binding.py @@ -0,0 +1,121 @@ +# 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 annotations + +import os +import sys +import threading +import types +import typing +import warnings + +import cryptography +from cryptography.exceptions import InternalError +from cryptography.hazmat.bindings._rust import _openssl, openssl +from cryptography.hazmat.bindings.openssl._conditional import CONDITIONAL_NAMES + + +def _openssl_assert(ok: bool) -> None: + if not ok: + errors = openssl.capture_error_stack() + + raise InternalError( + "Unknown OpenSSL error. This error is commonly encountered when " + "another library is not cleaning up the OpenSSL error stack. If " + "you are using cryptography with another library that uses " + "OpenSSL try disabling it before reporting a bug. Otherwise " + "please file an issue at https://github.com/pyca/cryptography/" + "issues with information on how to reproduce " + f"this. ({errors!r})", + errors, + ) + + +def build_conditional_library( + lib: typing.Any, + conditional_names: dict[str, typing.Callable[[], list[str]]], +) -> typing.Any: + conditional_lib = types.ModuleType("lib") + conditional_lib._original_lib = lib # type: ignore[attr-defined] + excluded_names = set() + for condition, names_cb in conditional_names.items(): + if not getattr(lib, condition): + excluded_names.update(names_cb()) + + for attr in dir(lib): + if attr not in excluded_names: + setattr(conditional_lib, attr, getattr(lib, attr)) + + return conditional_lib + + +class Binding: + """ + OpenSSL API wrapper. + """ + + lib: typing.ClassVar = None + ffi = _openssl.ffi + _lib_loaded = False + _init_lock = threading.Lock() + + def __init__(self) -> None: + self._ensure_ffi_initialized() + + @classmethod + def _ensure_ffi_initialized(cls) -> None: + with cls._init_lock: + if not cls._lib_loaded: + cls.lib = build_conditional_library( + _openssl.lib, CONDITIONAL_NAMES + ) + cls._lib_loaded = True + + @classmethod + def init_static_locks(cls) -> None: + cls._ensure_ffi_initialized() + + +def _verify_package_version(version: str) -> None: + # Occasionally we run into situations where the version of the Python + # package does not match the version of the shared object that is loaded. + # This may occur in environments where multiple versions of cryptography + # are installed and available in the python path. To avoid errors cropping + # up later this code checks that the currently imported package and the + # shared object that were loaded have the same version and raise an + # ImportError if they do not + so_package_version = _openssl.ffi.string( + _openssl.lib.CRYPTOGRAPHY_PACKAGE_VERSION + ) + if version.encode("ascii") != so_package_version: + raise ImportError( + "The version of cryptography does not match the loaded " + "shared object. This can happen if you have multiple copies of " + "cryptography installed in your Python path. Please try creating " + "a new virtual environment to resolve this issue. " + f"Loaded python version: {version}, " + f"shared object version: {so_package_version}" + ) + + _openssl_assert( + _openssl.lib.OpenSSL_version_num() == openssl.openssl_version(), + ) + + +_verify_package_version(cryptography.__version__) + +Binding.init_static_locks() + +if ( + sys.platform == "win32" + and os.environ.get("PROCESSOR_ARCHITEW6432") is not None +): + warnings.warn( + "You are using cryptography on a 32-bit Python on a 64-bit Windows " + "Operating System. Cryptography will be significantly faster if you " + "switch to using a 64-bit Python.", + UserWarning, + stacklevel=2, + ) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/__init__.py new file mode 100644 index 0000000..41d7318 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/__init__.py @@ -0,0 +1,5 @@ +# 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 annotations diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b027c39b94747e6a32ea779b2436592cc57fcab GIT binary patch literal 274 zcmZXNJx;?w5QTSaDT<8JaDhlrxkyG4E#e3?>1b9P@5bKX{n75&l5+(Pz!4C4;1HB3 zEfrl*x>T%%sCb&6H+r8mFSA*}lAhka>yNZQ$Ky}guYuELGS5sh2`w}50KjCnW@Y|0 z0wo+Sgtd+YX=meonH>tww;gpsaUSx7yt30so@;EJQMi-ngWIW!B0AIaji??wkG--z zwt9nppvKvom6Wj?Q1*3;W}^O5)Gbo{CKHE=k~=9wv`pkoH^0hlW8SY3Wi zKn=T7VXaFdX=meYUF<5(H+|{@aURNyyt2bY9v!yM5N;Lv;I<@FL}v!R7V@F@IFKE% z(`)o&YMs4Wu2vXzqJ_`7Xego#qff30!nY%~;?anNiew1i z5Rr&PB}h3?DN;D19%xYhLJ#df0Eq)yDW|FjdICA8ocg}A?BcI9pwckweLOqw%+9+r z&of`YhC+S<;iuoWhc;9~{=^3-cL;=0O>{d(tw1`TFPLdlFXWAwY#sR`TgZ%b>&0P>cV&kPTsMbv zR%3NSBsH#aeQ+W*qD`a>eNxNpG=un4><3!<8X`}LMv|0~q{L`amWZYdLBsw+mnk$K z+;&KMn4fuOl%!W{U;*ZvQI^5*+%c1+kE!5x&{DeYbYHP#fS7Od9N0HI5pE)Ui!hC_ zgz!58fhsH++_XFc6Q*WlBuI4vIto2VOCLkzDKTAl2$>>NbQ$tKck@q?lxt_CpRCZn z6^VPHByR>-ku1f~vV-Emz*5oZtI@=8A*UrCutbp;9%vcUNECA8seyE6WUQDN*Ye|u ztUiz^PME`md`JA!rG%lI+QlN+(?gn($nc4xSs3E!;_yUbI6aw5n+c|6xK`B7L`L+I zkw`oJWW6~Z;8(;^S)WQN?;Qrv)uJ;|uC)>vj9L7P+w=xiNifOQD{`7O4a;@rJh~ z>N$-D8@6Rgo4Hq&YS)idV}))|>=-Sf7AmF3q@)7!^ML&18u@uabY75OgXUvFrq;+$ zWqy!f$Wrfey_nT{diyP<1CR%yo|r8DIDS8mAh=yoUvAHYa}{!{8V?v95yIo@6vb;2 zN=$|bc}Vloe=R5NlnY@g2E+M}5^~E9_8Uy(@=mBLb64^x^O)SnPebla{4n^^Hu&3B zJx4|DsNH4*vSqT_Z6;TLr!eDp0HD7>c-ENfobOy1eSB^9+D5Q(p<}V-=TFyyCuX~6 zyI+JN3oUc^=I<>wKfXVEUziv8B3#dMo10+D8r2)V)*^#6S zv!0M0NYBe8CbO!AL*YykN+fDnC}%0kRvBSb$704Kwi4<_m#26batNN+O=_3D4X zSSq;sCjDVs?svN5H~{l^5bATj$??dgyy&v`umtj8cT9eJ7dfeo= zx)7waJUpEr()Pm5&#(*vQrsv2lymcF1vlFl+n1!J?q^MFt>@QU&#y%;tVb>!%;bO` z95PEi-Cg~6Ke1;AT!e2v0ysR1hJ`yWKd+%Phsw_#ha7U=M2G5;lV3+m)ezW)X$Z*C z8k#k~Et;VR6*Q9}0Rk=c0oET386B#c@RMGqGG%84;>RIy8A_LJ0959KfiGYw{k^?C z_EO^wtBn6;lnY_?E`x4^kB7@3+aHHO-=IHr33L@LRRsDH(-3;$u35N>IrNA#hjuKs zuSKHkk?6sUO<3!`Nh8%EjlFBcWox}%qw4G$Z}s$cl`T>ag*oVh%bf4A?GJVA2?>83 z<|NUdJu^q}9^nq$^_kQJ9072gsH}=JmbiV!5-)N+r?XUczDibAC=vL6Vm6b=t+VfMy0roP-Y9SdX5T3C&o-NxjXyS6ia%vuYpjcwbQ k{BqaUTANFhTn$F|oHcOjKV&`mItTnGtKaH+Ep{pY0Fk>19RL6T literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py new file mode 100644 index 0000000..a7d4aa3 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py @@ -0,0 +1,107 @@ +# 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 annotations + +from cryptography.hazmat.primitives._cipheralgorithm import ( + BlockCipherAlgorithm, + CipherAlgorithm, + _verify_key_size, +) + + +class ARC4(CipherAlgorithm): + name = "RC4" + key_sizes = frozenset([40, 56, 64, 80, 128, 160, 192, 256]) + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + @property + def key_size(self) -> int: + return len(self.key) * 8 + + +class TripleDES(BlockCipherAlgorithm): + name = "3DES" + block_size = 64 + key_sizes = frozenset([64, 128, 192]) + + def __init__(self, key: bytes): + if len(key) == 8: + key += key + key + elif len(key) == 16: + key += key[:8] + self.key = _verify_key_size(self, key) + + @property + def key_size(self) -> int: + return len(self.key) * 8 + + +class Blowfish(BlockCipherAlgorithm): + name = "Blowfish" + block_size = 64 + key_sizes = frozenset(range(32, 449, 8)) + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + @property + def key_size(self) -> int: + return len(self.key) * 8 + + +class CAST5(BlockCipherAlgorithm): + name = "CAST5" + block_size = 64 + key_sizes = frozenset(range(40, 129, 8)) + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + @property + def key_size(self) -> int: + return len(self.key) * 8 + + +class SEED(BlockCipherAlgorithm): + name = "SEED" + block_size = 128 + key_sizes = frozenset([128]) + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + @property + def key_size(self) -> int: + return len(self.key) * 8 + + +class IDEA(BlockCipherAlgorithm): + name = "IDEA" + block_size = 64 + key_sizes = frozenset([128]) + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + @property + def key_size(self) -> int: + return len(self.key) * 8 + + +# This class only allows RC2 with a 128-bit key. No support for +# effective key bits or other key sizes is provided. +class RC2(BlockCipherAlgorithm): + name = "RC2" + block_size = 64 + key_sizes = frozenset([128]) + + def __init__(self, key: bytes): + self.key = _verify_key_size(self, key) + + @property + def key_size(self) -> int: + return len(self.key) * 8 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__init__.py new file mode 100644 index 0000000..b509336 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__init__.py @@ -0,0 +1,3 @@ +# 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. diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65ee9827fc04cdc75e59a0a68b35ed0f2a71c645 GIT binary patch literal 214 zcmXv|K?=e!5KJtJ2*r1Ju#0#VpWwv@gtQH9YSV-yEz~dg0G}YOv&mfmRKR zd2*=@G@@#tlrfmr=epWQyB#>`#nxcXGvOeyt?@du+~h6f{HnOeCaI*C4aSVgN_xg3 d(+HM<%iX?tbXXJAMEF literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5271ecf7cb3b2fb65d88d878d594051dbfc0b97c GIT binary patch literal 920 zcmZuvJ#Q015Z%2G+i`45AVernPJ;#bWYHoNCqfhmE0P;z37yur8~eqOf~<`*vn__RZ{lu2#zg#)ofg$6n_ypGkG2CRAcGUL2p2sJ zl#}LJorj`1Xgc-dZnypzmRCpJR=v^Op6z_Wx-BKb6NUFU*P%O1BH@m>o62M)e68Fh zns|NYzZ<9SM8p#}4Ek<5)x#uy+HAF46=?A!1wR`I<@$1(>SQ2UI-I&gHj9{sOhFXr zU;=KBZ3}Ov)64?RVs`&lH=1a#fgpuNpRVQ-80j<&i6&VDXcV)O=V7SlWo6Hc5xU68h9fT^vE&{&k3ecnu0CEk8S9bNv zF8#3g=7wok=41m4lN26+8Q0p`o4K`dtU~hSm=_wp16MOYWJ)z`6n-*>rw8E@e@%H8 zAS<>Hk6uGmF6E}Y>(aBl)aP;!V)5bBTY$MqDV>)I-TzMN|9(G7`E)hsl>!CHx8dXd Qr$;OM0-b;U6R|4bFCnhpH~;_u literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c4c551f01fff48740a6210a147efbc49d40c0b8 GIT binary patch literal 2749 zcmcIm&2Jk;6rcUDy>=Ws(5Ov6DBBc8wMcEHr4>jKD6LXN3b}+&BUr6>C-yq)U3YeE z)m9HF$^nTBw?qP@RtkYCAaUTpfj=Thk%(48ii9}y<|yHk6Yq`Vb>b!@92oEZc4pqZ znfKx@i7D8mBIE@D>!K~@Mfgg#RFU(t zKt%E;G35nfMyOcc()4edzHw`|YYn~{Iyc0<@+hRPzLBrljGFH(uhU0ck!DJ{q=Fk-bm9PnT( zAMMddn2}>NVm%stX6zUZ#Zh8T<$*s^_+00d$Tc(EZ<=jeLE9k~tt(vP-r=GK|Lay5I zORjT0J2sZ{ET3Mjf?O|BFK4hu)pv_bua+9QlHRQ7KFnlQEZ?ewSTnfWddKZ-wGqf* zIBgF0Y)BS+2f!xo_dLPhHZ;j@YL>Z8>Uh-u*mC?&POw?yp~LU%wq>eww4r)dlX~i` z%i0?jTBKTzTCjXCRGDUYN?0F2dyiN@RD(E7qVY+ZXM0T#MQ2bmjewp664-kJb3X{z zez!!qp{hFzW>Ri=fnt%f;mb{<6+ z5MDrd385#+RO~|-f!DhW&`mN(GdVRsH9z%mYV*J3TTf2l>_I%FAT|tbb_oHGnIQsn z3U=_@;1{SY5`W)KQ4Z^-@IY7rt<_LdAbxl&69Q5gyV@NuHbMG;l*604F0hyVcxO=p zH~sPYU%@{Bm?K;V+L3P}2Uq$GEQ4f>PIDihB7roYf6J*Kpk?(+Gn(PlyenigQ6|Hv zU_diU)R@zFy4uzp4J4a7oEw4!(0YwdGUhVQ7{EywEWU<^d!VXq(jL(2lv%S4twVY2 zDoDrR^~wPAy*;ssTesfmiu`B77BN|BeDuA XJPS*2Y+>(CS9Cfqq+8?&;CuHEjk;qB literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f013b4bc551f94b12d097f5e6c350d5dd58920d4 GIT binary patch literal 7716 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 ZfNoD<^Zfe*to{6%mrQhL4wpdA@E1!kxMlzV literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/hashes.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/hashes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c2fbfd869d2bb0ffd170d7f1333ba07fb16cc0f GIT binary patch literal 9494 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 V-VfOO_~bk6FJXVtLf>!${{ls@uL1x7 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10935dbb33dc6757044dd670596b41dc1b07e268 GIT binary patch literal 9143 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 WSk?+hwL)Zuzr@nNR;i-L<$nPnU~D-6 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/padding.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/__pycache__/padding.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f7114ca396b7f808529c9036d62a0f0027e6814 GIT binary patch literal 8512 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_asymmetric.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_asymmetric.py new file mode 100644 index 0000000..ea55ffd --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_asymmetric.py @@ -0,0 +1,19 @@ +# 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 annotations + +import abc + +# This exists to break an import cycle. It is normally accessible from the +# asymmetric padding module. + + +class AsymmetricPadding(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def name(self) -> str: + """ + A string naming this padding (e.g. "PSS", "PKCS1"). + """ diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py new file mode 100644 index 0000000..588a616 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py @@ -0,0 +1,58 @@ +# 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 annotations + +import abc + +from cryptography import utils + +# This exists to break an import cycle. It is normally accessible from the +# ciphers module. + + +class CipherAlgorithm(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def name(self) -> str: + """ + A string naming this mode (e.g. "AES", "Camellia"). + """ + + @property + @abc.abstractmethod + def key_sizes(self) -> frozenset[int]: + """ + Valid key sizes for this algorithm in bits + """ + + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + The size of the key being used as an integer in bits (e.g. 128, 256). + """ + + +class BlockCipherAlgorithm(CipherAlgorithm): + key: bytes + + @property + @abc.abstractmethod + def block_size(self) -> int: + """ + The size of a block as an integer in bits (e.g. 64, 128). + """ + + +def _verify_key_size(algorithm: CipherAlgorithm, key: bytes) -> bytes: + # Verify that the key is instance of bytes + utils._check_byteslike("key", key) + + # Verify that the key size matches the expected key size + if len(key) * 8 not in algorithm.key_sizes: + raise ValueError( + f"Invalid key size ({len(key) * 8}) for {algorithm.name}." + ) + return key diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_serialization.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_serialization.py new file mode 100644 index 0000000..4615772 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/_serialization.py @@ -0,0 +1,169 @@ +# 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 annotations + +import abc + +from cryptography import utils +from cryptography.hazmat.primitives.hashes import HashAlgorithm + +# This exists to break an import cycle. These classes are normally accessible +# from the serialization module. + + +class PBES(utils.Enum): + PBESv1SHA1And3KeyTripleDESCBC = "PBESv1 using SHA1 and 3-Key TripleDES" + PBESv2SHA256AndAES256CBC = "PBESv2 using SHA256 PBKDF2 and AES256 CBC" + + +class Encoding(utils.Enum): + PEM = "PEM" + DER = "DER" + OpenSSH = "OpenSSH" + Raw = "Raw" + X962 = "ANSI X9.62" + SMIME = "S/MIME" + + +class PrivateFormat(utils.Enum): + PKCS8 = "PKCS8" + TraditionalOpenSSL = "TraditionalOpenSSL" + Raw = "Raw" + OpenSSH = "OpenSSH" + PKCS12 = "PKCS12" + + def encryption_builder(self) -> KeySerializationEncryptionBuilder: + if self not in (PrivateFormat.OpenSSH, PrivateFormat.PKCS12): + raise ValueError( + "encryption_builder only supported with PrivateFormat.OpenSSH" + " and PrivateFormat.PKCS12" + ) + return KeySerializationEncryptionBuilder(self) + + +class PublicFormat(utils.Enum): + SubjectPublicKeyInfo = "X.509 subjectPublicKeyInfo with PKCS#1" + PKCS1 = "Raw PKCS#1" + OpenSSH = "OpenSSH" + Raw = "Raw" + CompressedPoint = "X9.62 Compressed Point" + UncompressedPoint = "X9.62 Uncompressed Point" + + +class ParameterFormat(utils.Enum): + PKCS3 = "PKCS3" + + +class KeySerializationEncryption(metaclass=abc.ABCMeta): + pass + + +class BestAvailableEncryption(KeySerializationEncryption): + def __init__(self, password: bytes): + if not isinstance(password, bytes) or len(password) == 0: + raise ValueError("Password must be 1 or more bytes.") + + self.password = password + + +class NoEncryption(KeySerializationEncryption): + pass + + +class KeySerializationEncryptionBuilder: + def __init__( + self, + format: PrivateFormat, + *, + _kdf_rounds: int | None = None, + _hmac_hash: HashAlgorithm | None = None, + _key_cert_algorithm: PBES | None = None, + ) -> None: + self._format = format + + self._kdf_rounds = _kdf_rounds + self._hmac_hash = _hmac_hash + self._key_cert_algorithm = _key_cert_algorithm + + def kdf_rounds(self, rounds: int) -> KeySerializationEncryptionBuilder: + if self._kdf_rounds is not None: + raise ValueError("kdf_rounds already set") + + if not isinstance(rounds, int): + raise TypeError("kdf_rounds must be an integer") + + if rounds < 1: + raise ValueError("kdf_rounds must be a positive integer") + + return KeySerializationEncryptionBuilder( + self._format, + _kdf_rounds=rounds, + _hmac_hash=self._hmac_hash, + _key_cert_algorithm=self._key_cert_algorithm, + ) + + def hmac_hash( + self, algorithm: HashAlgorithm + ) -> KeySerializationEncryptionBuilder: + if self._format is not PrivateFormat.PKCS12: + raise TypeError( + "hmac_hash only supported with PrivateFormat.PKCS12" + ) + + if self._hmac_hash is not None: + raise ValueError("hmac_hash already set") + return KeySerializationEncryptionBuilder( + self._format, + _kdf_rounds=self._kdf_rounds, + _hmac_hash=algorithm, + _key_cert_algorithm=self._key_cert_algorithm, + ) + + def key_cert_algorithm( + self, algorithm: PBES + ) -> KeySerializationEncryptionBuilder: + if self._format is not PrivateFormat.PKCS12: + raise TypeError( + "key_cert_algorithm only supported with " + "PrivateFormat.PKCS12" + ) + if self._key_cert_algorithm is not None: + raise ValueError("key_cert_algorithm already set") + return KeySerializationEncryptionBuilder( + self._format, + _kdf_rounds=self._kdf_rounds, + _hmac_hash=self._hmac_hash, + _key_cert_algorithm=algorithm, + ) + + def build(self, password: bytes) -> KeySerializationEncryption: + if not isinstance(password, bytes) or len(password) == 0: + raise ValueError("Password must be 1 or more bytes.") + + return _KeySerializationEncryption( + self._format, + password, + kdf_rounds=self._kdf_rounds, + hmac_hash=self._hmac_hash, + key_cert_algorithm=self._key_cert_algorithm, + ) + + +class _KeySerializationEncryption(KeySerializationEncryption): + def __init__( + self, + format: PrivateFormat, + password: bytes, + *, + kdf_rounds: int | None, + hmac_hash: HashAlgorithm | None, + key_cert_algorithm: PBES | None, + ): + self._format = format + self.password = password + + self._kdf_rounds = kdf_rounds + self._hmac_hash = hmac_hash + self._key_cert_algorithm = key_cert_algorithm diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py new file mode 100644 index 0000000..b509336 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py @@ -0,0 +1,3 @@ +# 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. diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9de6bc5d3862f53119764c212df38da0409e2490 GIT binary patch literal 225 zcmXv|K?=e!5KI(B1o0gnbP=!O6TJ9<5ZlnEHcd#@Li~ac@CoAGqrdS3mEJtL1v`h? znH?DBKATM$;rjYyPrC2U^x%Kdj!E2D$_{M7_YdX=lVnitF7H!!8i{UosR%ulUfR<#U2azC@(evKpVyO~x<@w4-=TO@a!aadT8`=%mTB+6ectL* z)3&?NtSB~RhT1hoT&xL$`0vlMbmG9x7le|gq?2Zfrgt+!O`q4(k26o<_L*RjW;UWx z(dQBxxroMsUP@@>^)ig$f?K}z>))tM?NNs^+s!fR44BEe%-B;MdY2BhU@gG~Y=hs@ zNe&ti(GplmjcycW|GGm>%HTO$R!v>@%t2d*ZUTe#KznDO>`QLOrrrBCT9!}EM#t*W z#;)GzGi#S>j@__&drC{y9t`@8J!iwZxZTk)@poIfg9?;?FYIs)aXQ|Y{ zTRsPm2!2lBmbe9KYL;%8?bFrhve!TI1#a%X#lWZ2^_W7i2)DW1&9;UxiJBiGX#Je2 ze>a%S-}1GyWv4^sez2yph(D^!sx5P~p#@+F75iz12*8$*RDsyoFRUoTP3D61>#f5hs5%Di-fP!-=N_|AkxEZ z;UK$uluBpIM?{e0G|8<6>>|m{@tZvA2r|(@&XUj(Cb+SQPK52bh7JMR&A|{C)bxBpqY%+p(dQEya}kYI zeKDa?)RzGE*4z@r(xBBfG(brn2X5LhooV5{pBlX#g!k`Yv$hOJ?ozYubY$zkw|xPz zsLX?AU{8(m0zj5x8zVZZh8(I3?iNh?WJB`UndTxu`X><=!<$C7S_sU5Cbp#+0GYb{ z7Xy5EI)*Lx`FzOG_f)rw!RE6^D`Cec{9i^~cNc`#>_GBnFbn~Y97wpAv!Y1F8PA$&jR#p4LXT}d)Xg=hwN)- z42?@}MF!?(E$EfGIWH94Ov|#mS_*W;b@n-7BUp`_9jZOBWr|>EIEi2ZEae&LEwE>! zU6G4&ib5YM$_Uen*m`x3w*zXEIN#a#;TREJv^h-q{5OD~g!DQZ;gHWEJ;TrgwjFSP zflrm#6=bX<`3VrW0Ed-6WzLYv$h(T<=SW^hat#UJg>Pdk2IxOU9+K`)L2_%|wh|4|#f#+(}Y22$j+#C-qBwG?fWo>2+$UU;aGeLb}u^U3&D!c zo|~@){)$uc__;Ks%%~i z&CA?)C`k_6lcC)J3U=5HxQBJ;Sq@Q|;V}#P#2DZ}5lVo*+J~r7h@EHHNB97`#_k}Q zq|I_HL9%yHE+d)b#&_|SC&&-5bqmSINMZ>RYcCF&e}abn0?7YMg3MqICCDT}BBwk< z4HYEg0@@K|Vn=Ye%&W6_9a_VR^8Ntc)IdeauvF($>u!W!e$>5}AN7`D;u{IOuCM`= znHWQE8Jmj#lFD5_>oEu}|D6fL3e8RF9d~*1A|${*hLOSWEXARjBp;!KxN<`KXR22q~WiAK(8;a6VW{T};0_=a1~ zehBm^ElCm_m!wz6WF!22PKuBC=Q+7Oj(!ixJLBm0`O3x<>tF@g%SSm)!pEM4ZwjM1U)~-HL4r({XWa%hZlVFXLn+ z`-ap$?_zIneNDCx2z0Z3l-odyN%G~*ukLdGF$!NyG(M4t{KlAEJ|v}YN%b32{rod@ n@A}td>ws*H$<|Tsbu^hIo|C{oM&XNzMpK&NB{&LS9=ksPt0*MT literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b43e63703d42c5e0e532f85f8941dd0682592a3d GIT binary patch literal 6762 zcmdT|&2QVt6(8z@`m_?;vSr8l;5ysgDzzmialFa4XyM%?`;n|0#M^YCqF^a;Y|)WK z?T~UIAuWs|x1zwFnmz0xrxZbY=pWEOp$9n-5Q9L007ZeeCk0L~KJ~q!NQshSX^UP; zNl(L>$2X5}-h00{^M{FvD1qy@e}1*Cogn0Ic;j3_yCEF@Lm=c4QHd&)NLk1U0=9i6 zU(Uz>{W(AU`%8gxFemb{Kq*uX=fdSkF2e7FrD!>piwnd@J|e34kfF=k4>X(rE`&pKSWSx*gSu5Yg2QJ7MuCS`^tGHTXX#qMU>u42+#v|ezX1E#<>=p`JA&;ZvKK#s3*H7a$k zk7$K5c+QZNiYnRipe^A7A-7M;r%bAN8vxa8U)E2xC@UsN z(#o2t?ZU8P)XVU;Oe7uSO%sPzE!lD;LG(1S5YCGI6PW2E1PA?9R5YtY85H&ZzMi?ASFFSX*xRm+#O z!gvYlx<}jIhb8aK?6fMR?kn^J?E6Nqh9?ZaB)w zkXLUHsO^NeA?bO{j{ghwU73x3_1%%IM|~@xDyCuu^L0q{RzxXn>kLd+KKdS}SD7PO z<_@DA+*Ij-WTRZ>V*tB#hq=&!H<0`$SdrY<-_*7%2KOtR+3nuoSupKqm_OLNNYKy* ziUvTkb7H`NhZ|GgmBGF%$nR!8YqHBRe&X(Whc|KC{xfdcKH)%*leEutbpZ#@^bP;W zt9Y1J3c9LQwvSTY@*;DiGhm5ZIs+s;I^D-`$JX;EAGMMo2;mb77rDEr>Aq(`q0QbR z1}5n|ROsYSP;cmxdeVktFH9B?W|C7FK^!WE#9gav+|EJ=?1f&z_rHW>6^MbeV)(6o28wVUVB={A`p!bP1AUlxoPGqVv}n88ckxjk)EBVDArt$Y=a#V@ zW?a*Y$idaUj4jleao_7c6=zs|GAuROJP<1k)lZc&v(8Ro-vW}iki3oL9VAOgcwk<| zRv)w?e)Fu3PZ_U)^g`>zvFM5@n|Sy|JAkk|4#<8ho)7}ML%M*DJyT-%A^+IgCqn4d==Uvlr?Bcr1d`R=?Yef)+ z71(mpE_O4_r&eG?uh3C&0tM0)*W&j8lD0J1cOss+a-C`vtA;nB2}gl$?chZdaTn#* z8+>2qu7cfZc;6?Y?ZV6ow3rryN37g195-~YY6}~uj{Z6kgW?(VaAQbL62K% z82sHtNdboHu}|ISZ((mgys_`&cptKHP+P}=>qtIE@)?poWaB9e$xq<-e}`-yc=DoF zat!qA+s<-Z@VWrgxfQ}=5?WD@qGr7c1z~2rQs>L)@k6YR;U^q!LE{m50H-*+0y|-% ze|9d_=RK_ZjbQqmF+z6S_G6Saa6KU2rvZ8V8|i>XAht9TMiNJIl90v<XLM6W%cTkba~~yOG}c@q}7#cYq-laGUruX+0o^ef*3-{T(h!vme` z3H(2EZpbE_mf;BvR~k=MATPVG#o^79m+gZW`!J|lbO9w z4`MSfVi%srF6_saTCt^OV9BnT5X2!baOvn<3@yigjD+Wf$cS;QxzY=GQnXdW3@^(J zeT4_TCED(3E%u()W$e?sOkS(tX2!_KxU>v>hOoOpth2+oq1x}9?J+!|VIp#-kLS#E zPXSp7`J>%^s})-R;KR@0bcok27T*!OUi4Gg<#uq~3NyN`8E|gOHgR5jU+XL)pS`65 zw?=NyPKj4v7T?=BP%_A~jMDfHFNrO8sr%C4QTPY;5!?@19{A9CjK2VF`vpOOqFp%O zB#XV@mn6E!KL=!DkAGg0n@#WcfUGx%eGkYdP4BlY#snz82g%okZ|?K{S2*~(%W;~V zPB+OM%>IJRJ}0wZJ!qxgZKba4leHFEYm&9LxQrqPi7gWPU*X{EF2^qfvY2g>v;U3E z&2N6j=NcmOt>q>;b3o!R$joyx^Hr%e`%Y{2@;+H@k<}(yeVLS6$+ufc(0TG;`dn-J pd}|u|Pae!Ja?bagWV#(D7cyjPQ8O*Twr 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23d855054cc08d5f3150932aeeda6d3b86e7696f GIT binary patch literal 5563 zcmdT|&2JmW6`v)S6iHE9QkErKa+)2lUiK&yqmE#sUG1_S72%ITxM!-s~5bOD77DL%QTX z&d$7f^ScCMmD7D%r5zc`!|tX{QN z(@oVZ>osFO7qJExYsPxLt}~NrGnEycmCe{krR%4((D z-~vkSlKAU*ML7C9JbXzgDGC}XMrc$!rHRkPZRp)aK7JKN8e5CIPuifC3~}@XI8JM+ z5Jw`wF{Jf{IFbR5VJ#ctNNEG$oikQuPMe&Xx_tG)`ckD_`j~E7qNbXv60K6meCCUlDFFS~&VEG$7psNHIvaKSl)dMP#d;)0-4@f-z$DctenwX2O43bCQ{m zZIHCc3uH%}XDAHgx}=sK)0)k+4t7@aFnt4a4k$1Aj?O>Rn zR@PZc@z!AIMuyf}^5Xo$;)4hGA3mD9r94=iy?6Jf^6}hnm6>}V-G6xZ(Vb7MG+Q@J z#gT0FIKr&#GSjO{org~00o#dM(Ne`=SS>oBgaP@~XpbHTP5B$caWv%CSrs;EoAGUuAoh3C@Lfi(4vwl7_4O4s%h*N#9w zu@baa(zSAJ<#;%_sq=HrfE8cX8HDtBw1dIkBe(fr$=UWOlVEA%I|6q$?g-dgk;c^& z_?=&mR;lb35UN3T!Pdf@GNIp&p8S|@<~{!T9g>S$qCqRmYy?EIb3oikvNP~trQ4(4 zcq8QE_Tf>OaD=Ko982H z;`$P9O-o$T^-7@Vb`Q~*r}E8JT6%2A^vOD$Qf7NDaVO^@wzd~hQLKZqxH9Psi{?}C{{{Qs=Bsb!FF0v&}3(%w^UIL1M1MKuJPhyMb)K})vqoY zCR0nMGjbkf^MuJ^D~|+Ik*5w%L2ec&2xp9c0bv_LS2Y`7KaiKSb_CCGBd>mG1nt`513#j!51ob zR|$;sE~l&sNB@GZ0Gb)lA|VtZa+DJb^~Y%3KcWHU^n^GP0glsJe~2R);26@R5JxJ& zF|1`m9KBkWqnxa}3mKFrlLE})sTC-KA{fkz_%^rPgEa!c8sX;wYf!UYxb16!Fig%| zl4anBpY|+^EwqFq3pRkQQ%DAZSm_m7qYNCNz;Od5VHijF+1p+c5-wL`B;>ZdJ9ZtW z8bu&K>4|;mK)SRqO*W;;y~L!Qu3m`K&l#I#>z0=ujG`E|=XzYt=$Hn^`MvIb}9 z1^^~B#Rf~ZFFMeYUAx~x>)Jp>$^j9O>Wy=*Xm9`L{n163=pV%$C)x42P7r8|uu-5j z2xt;t2H+(@QQf!5<6Oras5cAk?~i~qok=B3WcTXsqhAMn^jaACde6X#D#H>!l4LXR zXyD3_L=Fz<11yiF(N43*n_V2%&hQxu^x(@0BFzF;0AA|=lik$sK$Gq3dvJ0>p4WYM zj^{$~l6B@qHee}7mluA(T4Y)dT8stLy}HNkyl3$OU`T`KFTPrbfTRP>u+RmdnTXi4 zF%;Gf`>Vk12LS%iu(8swpgWAwc(233kN-qRma`iu4%33oBH_4; z?`0$$CSJkTH6&P**!xJPkbH>b7LwaY?jY&FTc{#KG7Y!!Zy+JObp`R3P1^9*l@{Qw zEF!P#IBt`+@#{El<1rUPaWM579F;(<pOR!HQfH%ou_{&QC@2d|BScB0xa&o5#<`b;~IGd|2bfB6o@#$`b9Tx|2>}J zA1hYR%M3#->~~IANPZSv=tQu0Whj?VULWp ze_xW+Q~r5LX7{>%Uy$2-!S4%lbuajB#m5B*R+wy^`g)Z2AL8IEpW{=32-)Z4>;XCZ z)kJe7-yHdHpWJAY8++tND?WwN!er~h*YENELmYhNbJRiFz;iNkKt{frZjKh3qci(t Lw%KM5KMVf{bdSma literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f134ed754ba9fb460b90b503a6974e00d1a2f25 GIT binary patch literal 5652 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..544ee63356af3e639d366b06145b5a82c59f7027 GIT binary patch literal 5601 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ec7f8e523a4b647c0abfd1b813da317cffa40f9 GIT binary patch literal 5433 zcmdT|-A^0Y6~AMTjcp7AgoOlXGNH{TZo$r16-Y?bgs{oB2|-#`J5QUkn*G;r6md5fqWnx zfZt#~Sdi0lA(Re@emNg5^rR!A9m+=wv2;u#0dkKR;g`hdp@EHFSHPbmJ3&HT!`FGz z@c^NHG-5<|0?-d%=V51P{8hjE*7{2$8;bkB5qDcVpzmw=I!{A-45atISNg!$NIy#l zzJc@sS6;hxBd`LywL%i{e;`XjvU~Mn(X@0cXBPQlB47_cDe`iuWHO5yxAW^J%URii z9nqGl&VdDH^q3`D)APBCSRmty#oxwGN=Ltkm(K|$X~`hz01X-ghWt|A zf!^21C!VxSLmOfD%@{PI9UMJAjv*t~!4dIsoG|)3IHHCEwh!BVpIp5u5R!-Lh;)V z8m{KJ3O-joKdY--s+EP_P0Ba~f@-d*kHE<*D-V*1s6CZoTP4d}XL>2SmCWjuf^H=n zEAnI`8r%+sXTa|N6y#{00EQdL&`$gGlf{)MOG}TIA1~b17CxE3e|z!Xf_D4Cy+_L* zKfeFaj85{YZk90FI`IUoJFTgFs`pto@%u<<=6@<hH-FMzxtZzK1s{?A)wqL(Be>L>s!NB}i11D<(*A7F$6aDW9kU9zW_5U+Q1}18X`bN3DuU!7}>Yg%F zQ)a4>nIl-A*b!RHm`1L+emv?wp2>yAfE`{l894EHyp6#z;3F}ZX&hi&lVAc92LR6~ z9soE-fy!(Qc3eD?FL{@m7CV#{B!+IyMg6N2u2e@yAXYd8R-A_gXJJE9W-#JS|$P zWj5?`;_w%aqY|oP*+8rI8c433{(9?h{2a_>lSt4uJ7mJP zGCORpVtm{3s%hqZ>8iWIlb*rzS(Zc5Gu0|K^VsjqBax{YZ`r~ zX_aBWx=!yD>gOrBn2?>ri3OHn9%E4;iLm2t^qKHE`;Iq`oVx*s7u&D`YQWBW92c-R z2E|A#>IJH4c1+U>rcusgJFaPHPh+Gvlh-+ilbSURaYF5&zM8T7^;K>$J!3US&f?l) zd%uq@bePy<;V7Z8AXxADAAmR^hV&pbP!B{yvvuNphL5Egk(8 zx_q_ygc0bdnljYvVI$PhAEM!ARWd#>dOA2FK8}%Y71_rzYA79R#C#kljlm9%USkN- z(J8xMge8L`YEdZbB9eTGKn80?7TXbKdu3dLGA{jZlyTIo35!+;!_Z4a86rAS=-42( z&=OHk*$}o)AVDwN@pW3H3^qW6dsToNaSc z=ghk}@mmKNSN4@FU*6qQW^2l9H8R^wFurruz21E6)thC3sCgS2P$5B^nHoo{qR%22IAeWoIZ?lad`N|ZA9t^twdOH18d_%qM`CCU(4b5+OqRq3ahtX^EF zDqLqEC*#ek%mJ7?2Z5QJIRj!J1)k^KVX_a8&7)s^Y1|dik;dJDtj{>O-#hT?Ds*=O zG|}7O5FjGbc3RjRE{Ea8ZXpq{4s$pA0T5UaHFQvuH#e@Ko{3K(YjXTpB69DGYrmb_9@z`3wV+xjk~DW9 z55AGd_T{ndx!U+tZT$M4e4{4csLD6$;UA)ePO{Cv_?75C#KCt>j#4)Xw+`f?H}d$t fJih&)HZfhBnA?+Y*5sR2_k;U%3w60A3i7`IWg5hB literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py new file mode 100644 index 0000000..31c9748 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py @@ -0,0 +1,135 @@ +# 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 annotations + +import abc + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import _serialization + +generate_parameters = rust_openssl.dh.generate_parameters + + +DHPrivateNumbers = rust_openssl.dh.DHPrivateNumbers +DHPublicNumbers = rust_openssl.dh.DHPublicNumbers +DHParameterNumbers = rust_openssl.dh.DHParameterNumbers + + +class DHParameters(metaclass=abc.ABCMeta): + @abc.abstractmethod + def generate_private_key(self) -> DHPrivateKey: + """ + Generates and returns a DHPrivateKey. + """ + + @abc.abstractmethod + def parameter_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.ParameterFormat, + ) -> bytes: + """ + Returns the parameters serialized as bytes. + """ + + @abc.abstractmethod + def parameter_numbers(self) -> DHParameterNumbers: + """ + Returns a DHParameterNumbers. + """ + + +DHParametersWithSerialization = DHParameters +DHParameters.register(rust_openssl.dh.DHParameters) + + +class DHPublicKey(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + The bit length of the prime modulus. + """ + + @abc.abstractmethod + def parameters(self) -> DHParameters: + """ + The DHParameters object associated with this public key. + """ + + @abc.abstractmethod + def public_numbers(self) -> DHPublicNumbers: + """ + Returns a DHPublicNumbers. + """ + + @abc.abstractmethod + def public_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PublicFormat, + ) -> bytes: + """ + Returns the key serialized as bytes. + """ + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Checks equality. + """ + + +DHPublicKeyWithSerialization = DHPublicKey +DHPublicKey.register(rust_openssl.dh.DHPublicKey) + + +class DHPrivateKey(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + The bit length of the prime modulus. + """ + + @abc.abstractmethod + def public_key(self) -> DHPublicKey: + """ + The DHPublicKey associated with this private key. + """ + + @abc.abstractmethod + def parameters(self) -> DHParameters: + """ + The DHParameters object associated with this private key. + """ + + @abc.abstractmethod + def exchange(self, peer_public_key: DHPublicKey) -> bytes: + """ + Given peer's DHPublicKey, carry out the key exchange and + return shared key as bytes. + """ + + @abc.abstractmethod + def private_numbers(self) -> DHPrivateNumbers: + """ + Returns a DHPrivateNumbers. + """ + + @abc.abstractmethod + def private_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PrivateFormat, + encryption_algorithm: _serialization.KeySerializationEncryption, + ) -> bytes: + """ + Returns the key serialized as bytes. + """ + + +DHPrivateKeyWithSerialization = DHPrivateKey +DHPrivateKey.register(rust_openssl.dh.DHPrivateKey) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py new file mode 100644 index 0000000..6dd34c0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py @@ -0,0 +1,154 @@ +# 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 annotations + +import abc +import typing + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import _serialization, hashes +from cryptography.hazmat.primitives.asymmetric import utils as asym_utils + + +class DSAParameters(metaclass=abc.ABCMeta): + @abc.abstractmethod + def generate_private_key(self) -> DSAPrivateKey: + """ + Generates and returns a DSAPrivateKey. + """ + + @abc.abstractmethod + def parameter_numbers(self) -> DSAParameterNumbers: + """ + Returns a DSAParameterNumbers. + """ + + +DSAParametersWithNumbers = DSAParameters +DSAParameters.register(rust_openssl.dsa.DSAParameters) + + +class DSAPrivateKey(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + The bit length of the prime modulus. + """ + + @abc.abstractmethod + def public_key(self) -> DSAPublicKey: + """ + The DSAPublicKey associated with this private key. + """ + + @abc.abstractmethod + def parameters(self) -> DSAParameters: + """ + The DSAParameters object associated with this private key. + """ + + @abc.abstractmethod + def sign( + self, + data: bytes, + algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, + ) -> bytes: + """ + Signs the data + """ + + @abc.abstractmethod + def private_numbers(self) -> DSAPrivateNumbers: + """ + Returns a DSAPrivateNumbers. + """ + + @abc.abstractmethod + def private_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PrivateFormat, + encryption_algorithm: _serialization.KeySerializationEncryption, + ) -> bytes: + """ + Returns the key serialized as bytes. + """ + + +DSAPrivateKeyWithSerialization = DSAPrivateKey +DSAPrivateKey.register(rust_openssl.dsa.DSAPrivateKey) + + +class DSAPublicKey(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + The bit length of the prime modulus. + """ + + @abc.abstractmethod + def parameters(self) -> DSAParameters: + """ + The DSAParameters object associated with this public key. + """ + + @abc.abstractmethod + def public_numbers(self) -> DSAPublicNumbers: + """ + Returns a DSAPublicNumbers. + """ + + @abc.abstractmethod + def public_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PublicFormat, + ) -> bytes: + """ + Returns the key serialized as bytes. + """ + + @abc.abstractmethod + def verify( + self, + signature: bytes, + data: bytes, + algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, + ) -> None: + """ + Verifies the signature of the data. + """ + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Checks equality. + """ + + +DSAPublicKeyWithSerialization = DSAPublicKey +DSAPublicKey.register(rust_openssl.dsa.DSAPublicKey) + +DSAPrivateNumbers = rust_openssl.dsa.DSAPrivateNumbers +DSAPublicNumbers = rust_openssl.dsa.DSAPublicNumbers +DSAParameterNumbers = rust_openssl.dsa.DSAParameterNumbers + + +def generate_parameters( + key_size: int, backend: typing.Any = None +) -> DSAParameters: + if key_size not in (1024, 2048, 3072, 4096): + raise ValueError("Key size must be 1024, 2048, 3072, or 4096 bits.") + + return rust_openssl.dsa.generate_parameters(key_size) + + +def generate_private_key( + key_size: int, backend: typing.Any = None +) -> DSAPrivateKey: + parameters = generate_parameters(key_size) + return parameters.generate_private_key() diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py new file mode 100644 index 0000000..da1fbea --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py @@ -0,0 +1,403 @@ +# 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 annotations + +import abc +import typing + +from cryptography import utils +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat._oid import ObjectIdentifier +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import _serialization, hashes +from cryptography.hazmat.primitives.asymmetric import utils as asym_utils + + +class EllipticCurveOID: + SECP192R1 = ObjectIdentifier("1.2.840.10045.3.1.1") + SECP224R1 = ObjectIdentifier("1.3.132.0.33") + SECP256K1 = ObjectIdentifier("1.3.132.0.10") + SECP256R1 = ObjectIdentifier("1.2.840.10045.3.1.7") + SECP384R1 = ObjectIdentifier("1.3.132.0.34") + SECP521R1 = ObjectIdentifier("1.3.132.0.35") + BRAINPOOLP256R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.7") + BRAINPOOLP384R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.11") + BRAINPOOLP512R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.13") + SECT163K1 = ObjectIdentifier("1.3.132.0.1") + SECT163R2 = ObjectIdentifier("1.3.132.0.15") + SECT233K1 = ObjectIdentifier("1.3.132.0.26") + SECT233R1 = ObjectIdentifier("1.3.132.0.27") + SECT283K1 = ObjectIdentifier("1.3.132.0.16") + SECT283R1 = ObjectIdentifier("1.3.132.0.17") + SECT409K1 = ObjectIdentifier("1.3.132.0.36") + SECT409R1 = ObjectIdentifier("1.3.132.0.37") + SECT571K1 = ObjectIdentifier("1.3.132.0.38") + SECT571R1 = ObjectIdentifier("1.3.132.0.39") + + +class EllipticCurve(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def name(self) -> str: + """ + The name of the curve. e.g. secp256r1. + """ + + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + Bit size of a secret scalar for the curve. + """ + + +class EllipticCurveSignatureAlgorithm(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def algorithm( + self, + ) -> asym_utils.Prehashed | hashes.HashAlgorithm: + """ + The digest algorithm used with this signature. + """ + + +class EllipticCurvePrivateKey(metaclass=abc.ABCMeta): + @abc.abstractmethod + def exchange( + self, algorithm: ECDH, peer_public_key: EllipticCurvePublicKey + ) -> bytes: + """ + Performs a key exchange operation using the provided algorithm with the + provided peer's public key. + """ + + @abc.abstractmethod + def public_key(self) -> EllipticCurvePublicKey: + """ + The EllipticCurvePublicKey for this private key. + """ + + @property + @abc.abstractmethod + def curve(self) -> EllipticCurve: + """ + The EllipticCurve that this key is on. + """ + + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + Bit size of a secret scalar for the curve. + """ + + @abc.abstractmethod + def sign( + self, + data: bytes, + signature_algorithm: EllipticCurveSignatureAlgorithm, + ) -> bytes: + """ + Signs the data + """ + + @abc.abstractmethod + def private_numbers(self) -> EllipticCurvePrivateNumbers: + """ + Returns an EllipticCurvePrivateNumbers. + """ + + @abc.abstractmethod + def private_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PrivateFormat, + encryption_algorithm: _serialization.KeySerializationEncryption, + ) -> bytes: + """ + Returns the key serialized as bytes. + """ + + +EllipticCurvePrivateKeyWithSerialization = EllipticCurvePrivateKey +EllipticCurvePrivateKey.register(rust_openssl.ec.ECPrivateKey) + + +class EllipticCurvePublicKey(metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def curve(self) -> EllipticCurve: + """ + The EllipticCurve that this key is on. + """ + + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + Bit size of a secret scalar for the curve. + """ + + @abc.abstractmethod + def public_numbers(self) -> EllipticCurvePublicNumbers: + """ + Returns an EllipticCurvePublicNumbers. + """ + + @abc.abstractmethod + def public_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PublicFormat, + ) -> bytes: + """ + Returns the key serialized as bytes. + """ + + @abc.abstractmethod + def verify( + self, + signature: bytes, + data: bytes, + signature_algorithm: EllipticCurveSignatureAlgorithm, + ) -> None: + """ + Verifies the signature of the data. + """ + + @classmethod + def from_encoded_point( + cls, curve: EllipticCurve, data: bytes + ) -> EllipticCurvePublicKey: + utils._check_bytes("data", data) + + if len(data) == 0: + raise ValueError("data must not be an empty byte string") + + if data[0] not in [0x02, 0x03, 0x04]: + raise ValueError("Unsupported elliptic curve point type") + + return rust_openssl.ec.from_public_bytes(curve, data) + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Checks equality. + """ + + +EllipticCurvePublicKeyWithSerialization = EllipticCurvePublicKey +EllipticCurvePublicKey.register(rust_openssl.ec.ECPublicKey) + +EllipticCurvePrivateNumbers = rust_openssl.ec.EllipticCurvePrivateNumbers +EllipticCurvePublicNumbers = rust_openssl.ec.EllipticCurvePublicNumbers + + +class SECT571R1(EllipticCurve): + name = "sect571r1" + key_size = 570 + + +class SECT409R1(EllipticCurve): + name = "sect409r1" + key_size = 409 + + +class SECT283R1(EllipticCurve): + name = "sect283r1" + key_size = 283 + + +class SECT233R1(EllipticCurve): + name = "sect233r1" + key_size = 233 + + +class SECT163R2(EllipticCurve): + name = "sect163r2" + key_size = 163 + + +class SECT571K1(EllipticCurve): + name = "sect571k1" + key_size = 571 + + +class SECT409K1(EllipticCurve): + name = "sect409k1" + key_size = 409 + + +class SECT283K1(EllipticCurve): + name = "sect283k1" + key_size = 283 + + +class SECT233K1(EllipticCurve): + name = "sect233k1" + key_size = 233 + + +class SECT163K1(EllipticCurve): + name = "sect163k1" + key_size = 163 + + +class SECP521R1(EllipticCurve): + name = "secp521r1" + key_size = 521 + + +class SECP384R1(EllipticCurve): + name = "secp384r1" + key_size = 384 + + +class SECP256R1(EllipticCurve): + name = "secp256r1" + key_size = 256 + + +class SECP256K1(EllipticCurve): + name = "secp256k1" + key_size = 256 + + +class SECP224R1(EllipticCurve): + name = "secp224r1" + key_size = 224 + + +class SECP192R1(EllipticCurve): + name = "secp192r1" + key_size = 192 + + +class BrainpoolP256R1(EllipticCurve): + name = "brainpoolP256r1" + key_size = 256 + + +class BrainpoolP384R1(EllipticCurve): + name = "brainpoolP384r1" + key_size = 384 + + +class BrainpoolP512R1(EllipticCurve): + name = "brainpoolP512r1" + key_size = 512 + + +_CURVE_TYPES: dict[str, EllipticCurve] = { + "prime192v1": SECP192R1(), + "prime256v1": SECP256R1(), + "secp192r1": SECP192R1(), + "secp224r1": SECP224R1(), + "secp256r1": SECP256R1(), + "secp384r1": SECP384R1(), + "secp521r1": SECP521R1(), + "secp256k1": SECP256K1(), + "sect163k1": SECT163K1(), + "sect233k1": SECT233K1(), + "sect283k1": SECT283K1(), + "sect409k1": SECT409K1(), + "sect571k1": SECT571K1(), + "sect163r2": SECT163R2(), + "sect233r1": SECT233R1(), + "sect283r1": SECT283R1(), + "sect409r1": SECT409R1(), + "sect571r1": SECT571R1(), + "brainpoolP256r1": BrainpoolP256R1(), + "brainpoolP384r1": BrainpoolP384R1(), + "brainpoolP512r1": BrainpoolP512R1(), +} + + +class ECDSA(EllipticCurveSignatureAlgorithm): + def __init__( + self, + algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, + deterministic_signing: bool = False, + ): + from cryptography.hazmat.backends.openssl.backend import backend + + if ( + deterministic_signing + and not backend.ecdsa_deterministic_supported() + ): + raise UnsupportedAlgorithm( + "ECDSA with deterministic signature (RFC 6979) is not " + "supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, + ) + self._algorithm = algorithm + self._deterministic_signing = deterministic_signing + + @property + def algorithm( + self, + ) -> asym_utils.Prehashed | hashes.HashAlgorithm: + return self._algorithm + + @property + def deterministic_signing( + self, + ) -> bool: + return self._deterministic_signing + + +generate_private_key = rust_openssl.ec.generate_private_key + + +def derive_private_key( + private_value: int, + curve: EllipticCurve, + backend: typing.Any = None, +) -> EllipticCurvePrivateKey: + if not isinstance(private_value, int): + raise TypeError("private_value must be an integer type.") + + if private_value <= 0: + raise ValueError("private_value must be a positive integer.") + + return rust_openssl.ec.derive_private_key(private_value, curve) + + +class ECDH: + pass + + +_OID_TO_CURVE = { + EllipticCurveOID.SECP192R1: SECP192R1, + EllipticCurveOID.SECP224R1: SECP224R1, + EllipticCurveOID.SECP256K1: SECP256K1, + EllipticCurveOID.SECP256R1: SECP256R1, + EllipticCurveOID.SECP384R1: SECP384R1, + EllipticCurveOID.SECP521R1: SECP521R1, + EllipticCurveOID.BRAINPOOLP256R1: BrainpoolP256R1, + EllipticCurveOID.BRAINPOOLP384R1: BrainpoolP384R1, + EllipticCurveOID.BRAINPOOLP512R1: BrainpoolP512R1, + EllipticCurveOID.SECT163K1: SECT163K1, + EllipticCurveOID.SECT163R2: SECT163R2, + EllipticCurveOID.SECT233K1: SECT233K1, + EllipticCurveOID.SECT233R1: SECT233R1, + EllipticCurveOID.SECT283K1: SECT283K1, + EllipticCurveOID.SECT283R1: SECT283R1, + EllipticCurveOID.SECT409K1: SECT409K1, + EllipticCurveOID.SECT409R1: SECT409R1, + EllipticCurveOID.SECT571K1: SECT571K1, + EllipticCurveOID.SECT571R1: SECT571R1, +} + + +def get_curve_for_oid(oid: ObjectIdentifier) -> type[EllipticCurve]: + try: + return _OID_TO_CURVE[oid] + except KeyError: + raise LookupError( + "The provided object identifier has no matching elliptic " + "curve class" + ) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py new file mode 100644 index 0000000..3a26185 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py @@ -0,0 +1,116 @@ +# 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 annotations + +import abc + +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import _serialization + + +class Ed25519PublicKey(metaclass=abc.ABCMeta): + @classmethod + def from_public_bytes(cls, data: bytes) -> Ed25519PublicKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.ed25519_supported(): + raise UnsupportedAlgorithm( + "ed25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, + ) + + return rust_openssl.ed25519.from_public_bytes(data) + + @abc.abstractmethod + def public_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PublicFormat, + ) -> bytes: + """ + The serialized bytes of the public key. + """ + + @abc.abstractmethod + def public_bytes_raw(self) -> bytes: + """ + The raw bytes of the public key. + Equivalent to public_bytes(Raw, Raw). + """ + + @abc.abstractmethod + def verify(self, signature: bytes, data: bytes) -> None: + """ + Verify the signature. + """ + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Checks equality. + """ + + +Ed25519PublicKey.register(rust_openssl.ed25519.Ed25519PublicKey) + + +class Ed25519PrivateKey(metaclass=abc.ABCMeta): + @classmethod + def generate(cls) -> Ed25519PrivateKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.ed25519_supported(): + raise UnsupportedAlgorithm( + "ed25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, + ) + + return rust_openssl.ed25519.generate_key() + + @classmethod + def from_private_bytes(cls, data: bytes) -> Ed25519PrivateKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.ed25519_supported(): + raise UnsupportedAlgorithm( + "ed25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, + ) + + return rust_openssl.ed25519.from_private_bytes(data) + + @abc.abstractmethod + def public_key(self) -> Ed25519PublicKey: + """ + The Ed25519PublicKey derived from the private key. + """ + + @abc.abstractmethod + def private_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PrivateFormat, + encryption_algorithm: _serialization.KeySerializationEncryption, + ) -> bytes: + """ + The serialized bytes of the private key. + """ + + @abc.abstractmethod + def private_bytes_raw(self) -> bytes: + """ + The raw bytes of the private key. + Equivalent to private_bytes(Raw, Raw, NoEncryption()). + """ + + @abc.abstractmethod + def sign(self, data: bytes) -> bytes: + """ + Signs the data. + """ + + +Ed25519PrivateKey.register(rust_openssl.ed25519.Ed25519PrivateKey) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py new file mode 100644 index 0000000..78c82c4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py @@ -0,0 +1,118 @@ +# 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 annotations + +import abc + +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import _serialization + + +class Ed448PublicKey(metaclass=abc.ABCMeta): + @classmethod + def from_public_bytes(cls, data: bytes) -> Ed448PublicKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.ed448_supported(): + raise UnsupportedAlgorithm( + "ed448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, + ) + + return rust_openssl.ed448.from_public_bytes(data) + + @abc.abstractmethod + def public_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PublicFormat, + ) -> bytes: + """ + The serialized bytes of the public key. + """ + + @abc.abstractmethod + def public_bytes_raw(self) -> bytes: + """ + The raw bytes of the public key. + Equivalent to public_bytes(Raw, Raw). + """ + + @abc.abstractmethod + def verify(self, signature: bytes, data: bytes) -> None: + """ + Verify the signature. + """ + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Checks equality. + """ + + +if hasattr(rust_openssl, "ed448"): + Ed448PublicKey.register(rust_openssl.ed448.Ed448PublicKey) + + +class Ed448PrivateKey(metaclass=abc.ABCMeta): + @classmethod + def generate(cls) -> Ed448PrivateKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.ed448_supported(): + raise UnsupportedAlgorithm( + "ed448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, + ) + + return rust_openssl.ed448.generate_key() + + @classmethod + def from_private_bytes(cls, data: bytes) -> Ed448PrivateKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.ed448_supported(): + raise UnsupportedAlgorithm( + "ed448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, + ) + + return rust_openssl.ed448.from_private_bytes(data) + + @abc.abstractmethod + def public_key(self) -> Ed448PublicKey: + """ + The Ed448PublicKey derived from the private key. + """ + + @abc.abstractmethod + def sign(self, data: bytes) -> bytes: + """ + Signs the data. + """ + + @abc.abstractmethod + def private_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PrivateFormat, + encryption_algorithm: _serialization.KeySerializationEncryption, + ) -> bytes: + """ + The serialized bytes of the private key. + """ + + @abc.abstractmethod + def private_bytes_raw(self) -> bytes: + """ + The raw bytes of the private key. + Equivalent to private_bytes(Raw, Raw, NoEncryption()). + """ + + +if hasattr(rust_openssl, "x448"): + Ed448PrivateKey.register(rust_openssl.ed448.Ed448PrivateKey) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py new file mode 100644 index 0000000..b4babf4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py @@ -0,0 +1,113 @@ +# 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 annotations + +import abc + +from cryptography.hazmat.primitives import hashes +from cryptography.hazmat.primitives._asymmetric import ( + AsymmetricPadding as AsymmetricPadding, +) +from cryptography.hazmat.primitives.asymmetric import rsa + + +class PKCS1v15(AsymmetricPadding): + name = "EMSA-PKCS1-v1_5" + + +class _MaxLength: + "Sentinel value for `MAX_LENGTH`." + + +class _Auto: + "Sentinel value for `AUTO`." + + +class _DigestLength: + "Sentinel value for `DIGEST_LENGTH`." + + +class PSS(AsymmetricPadding): + MAX_LENGTH = _MaxLength() + AUTO = _Auto() + DIGEST_LENGTH = _DigestLength() + name = "EMSA-PSS" + _salt_length: int | _MaxLength | _Auto | _DigestLength + + def __init__( + self, + mgf: MGF, + salt_length: int | _MaxLength | _Auto | _DigestLength, + ) -> None: + self._mgf = mgf + + if not isinstance( + salt_length, (int, _MaxLength, _Auto, _DigestLength) + ): + raise TypeError( + "salt_length must be an integer, MAX_LENGTH, " + "DIGEST_LENGTH, or AUTO" + ) + + if isinstance(salt_length, int) and salt_length < 0: + raise ValueError("salt_length must be zero or greater.") + + self._salt_length = salt_length + + @property + def mgf(self) -> MGF: + return self._mgf + + +class OAEP(AsymmetricPadding): + name = "EME-OAEP" + + def __init__( + self, + mgf: MGF, + algorithm: hashes.HashAlgorithm, + label: bytes | None, + ): + if not isinstance(algorithm, hashes.HashAlgorithm): + raise TypeError("Expected instance of hashes.HashAlgorithm.") + + self._mgf = mgf + self._algorithm = algorithm + self._label = label + + @property + def algorithm(self) -> hashes.HashAlgorithm: + return self._algorithm + + @property + def mgf(self) -> MGF: + return self._mgf + + +class MGF(metaclass=abc.ABCMeta): + _algorithm: hashes.HashAlgorithm + + +class MGF1(MGF): + MAX_LENGTH = _MaxLength() + + def __init__(self, algorithm: hashes.HashAlgorithm): + if not isinstance(algorithm, hashes.HashAlgorithm): + raise TypeError("Expected instance of hashes.HashAlgorithm.") + + self._algorithm = algorithm + + +def calculate_max_pss_salt_length( + key: rsa.RSAPrivateKey | rsa.RSAPublicKey, + hash_algorithm: hashes.HashAlgorithm, +) -> int: + if not isinstance(key, (rsa.RSAPrivateKey, rsa.RSAPublicKey)): + raise TypeError("key must be an RSA public or private key") + # bit length - 1 per RFC 3447 + emlen = (key.key_size + 6) // 8 + salt_length = emlen - hash_algorithm.digest_size - 2 + assert salt_length >= 0 + return salt_length diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py new file mode 100644 index 0000000..905068e --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py @@ -0,0 +1,263 @@ +# 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 annotations + +import abc +import random +import typing +from math import gcd + +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import _serialization, hashes +from cryptography.hazmat.primitives._asymmetric import AsymmetricPadding +from cryptography.hazmat.primitives.asymmetric import utils as asym_utils + + +class RSAPrivateKey(metaclass=abc.ABCMeta): + @abc.abstractmethod + def decrypt(self, ciphertext: bytes, padding: AsymmetricPadding) -> bytes: + """ + Decrypts the provided ciphertext. + """ + + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + The bit length of the public modulus. + """ + + @abc.abstractmethod + def public_key(self) -> RSAPublicKey: + """ + The RSAPublicKey associated with this private key. + """ + + @abc.abstractmethod + def sign( + self, + data: bytes, + padding: AsymmetricPadding, + algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, + ) -> bytes: + """ + Signs the data. + """ + + @abc.abstractmethod + def private_numbers(self) -> RSAPrivateNumbers: + """ + Returns an RSAPrivateNumbers. + """ + + @abc.abstractmethod + def private_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PrivateFormat, + encryption_algorithm: _serialization.KeySerializationEncryption, + ) -> bytes: + """ + Returns the key serialized as bytes. + """ + + +RSAPrivateKeyWithSerialization = RSAPrivateKey +RSAPrivateKey.register(rust_openssl.rsa.RSAPrivateKey) + + +class RSAPublicKey(metaclass=abc.ABCMeta): + @abc.abstractmethod + def encrypt(self, plaintext: bytes, padding: AsymmetricPadding) -> bytes: + """ + Encrypts the given plaintext. + """ + + @property + @abc.abstractmethod + def key_size(self) -> int: + """ + The bit length of the public modulus. + """ + + @abc.abstractmethod + def public_numbers(self) -> RSAPublicNumbers: + """ + Returns an RSAPublicNumbers + """ + + @abc.abstractmethod + def public_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PublicFormat, + ) -> bytes: + """ + Returns the key serialized as bytes. + """ + + @abc.abstractmethod + def verify( + self, + signature: bytes, + data: bytes, + padding: AsymmetricPadding, + algorithm: asym_utils.Prehashed | hashes.HashAlgorithm, + ) -> None: + """ + Verifies the signature of the data. + """ + + @abc.abstractmethod + def recover_data_from_signature( + self, + signature: bytes, + padding: AsymmetricPadding, + algorithm: hashes.HashAlgorithm | None, + ) -> bytes: + """ + Recovers the original data from the signature. + """ + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Checks equality. + """ + + +RSAPublicKeyWithSerialization = RSAPublicKey +RSAPublicKey.register(rust_openssl.rsa.RSAPublicKey) + +RSAPrivateNumbers = rust_openssl.rsa.RSAPrivateNumbers +RSAPublicNumbers = rust_openssl.rsa.RSAPublicNumbers + + +def generate_private_key( + public_exponent: int, + key_size: int, + backend: typing.Any = None, +) -> RSAPrivateKey: + _verify_rsa_parameters(public_exponent, key_size) + return rust_openssl.rsa.generate_private_key(public_exponent, key_size) + + +def _verify_rsa_parameters(public_exponent: int, key_size: int) -> None: + if public_exponent not in (3, 65537): + raise ValueError( + "public_exponent must be either 3 (for legacy compatibility) or " + "65537. Almost everyone should choose 65537 here!" + ) + + if key_size < 1024: + raise ValueError("key_size must be at least 1024-bits.") + + +def _modinv(e: int, m: int) -> int: + """ + Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1 + """ + x1, x2 = 1, 0 + a, b = e, m + while b > 0: + q, r = divmod(a, b) + xn = x1 - q * x2 + a, b, x1, x2 = b, r, x2, xn + return x1 % m + + +def rsa_crt_iqmp(p: int, q: int) -> int: + """ + Compute the CRT (q ** -1) % p value from RSA primes p and q. + """ + return _modinv(q, p) + + +def rsa_crt_dmp1(private_exponent: int, p: int) -> int: + """ + Compute the CRT private_exponent % (p - 1) value from the RSA + private_exponent (d) and p. + """ + return private_exponent % (p - 1) + + +def rsa_crt_dmq1(private_exponent: int, q: int) -> int: + """ + Compute the CRT private_exponent % (q - 1) value from the RSA + private_exponent (d) and q. + """ + return private_exponent % (q - 1) + + +def rsa_recover_private_exponent(e: int, p: int, q: int) -> int: + """ + Compute the RSA private_exponent (d) given the public exponent (e) + and the RSA primes p and q. + + This uses the Carmichael totient function to generate the + smallest possible working value of the private exponent. + """ + # This lambda_n is the Carmichael totient function. + # The original RSA paper uses the Euler totient function + # here: phi_n = (p - 1) * (q - 1) + # Either version of the private exponent will work, but the + # one generated by the older formulation may be larger + # than necessary. (lambda_n always divides phi_n) + # + # TODO: Replace with lcm(p - 1, q - 1) once the minimum + # supported Python version is >= 3.9. + lambda_n = (p - 1) * (q - 1) // gcd(p - 1, q - 1) + return _modinv(e, lambda_n) + + +# Controls the number of iterations rsa_recover_prime_factors will perform +# to obtain the prime factors. +_MAX_RECOVERY_ATTEMPTS = 500 + + +def rsa_recover_prime_factors(n: int, e: int, d: int) -> tuple[int, int]: + """ + Compute factors p and q from the private exponent d. We assume that n has + no more than two factors. This function is adapted from code in PyCrypto. + """ + # reject invalid values early + if 17 != pow(17, e * d, n): + raise ValueError("n, d, e don't match") + # See 8.2.2(i) in Handbook of Applied Cryptography. + ktot = d * e - 1 + # The quantity d*e-1 is a multiple of phi(n), even, + # and can be represented as t*2^s. + t = ktot + while t % 2 == 0: + t = t // 2 + # Cycle through all multiplicative inverses in Zn. + # The algorithm is non-deterministic, but there is a 50% chance + # any candidate a leads to successful factoring. + # See "Digitalized Signatures and Public Key Functions as Intractable + # as Factorization", M. Rabin, 1979 + spotted = False + tries = 0 + while not spotted and tries < _MAX_RECOVERY_ATTEMPTS: + a = random.randint(2, n - 1) + tries += 1 + k = t + # Cycle through all values a^{t*2^i}=a^k + while k < ktot: + cand = pow(a, k, n) + # Check if a^k is a non-trivial root of unity (mod n) + if cand != 1 and cand != (n - 1) and pow(cand, 2, n) == 1: + # We have found a number such that (cand-1)(cand+1)=0 (mod n). + # Either of the terms divides n. + p = gcd(cand + 1, n) + spotted = True + break + k *= 2 + if not spotted: + raise ValueError("Unable to compute factors p and q from exponent d.") + # Found ! + q, r = divmod(n, p) + assert r == 0 + p, q = sorted((p, q), reverse=True) + return (p, q) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/types.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/types.py new file mode 100644 index 0000000..1fe4eaf --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/types.py @@ -0,0 +1,111 @@ +# 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 annotations + +import typing + +from cryptography import utils +from cryptography.hazmat.primitives.asymmetric import ( + dh, + dsa, + ec, + ed448, + ed25519, + rsa, + x448, + x25519, +) + +# Every asymmetric key type +PublicKeyTypes = typing.Union[ + dh.DHPublicKey, + dsa.DSAPublicKey, + rsa.RSAPublicKey, + ec.EllipticCurvePublicKey, + ed25519.Ed25519PublicKey, + ed448.Ed448PublicKey, + x25519.X25519PublicKey, + x448.X448PublicKey, +] +PUBLIC_KEY_TYPES = PublicKeyTypes +utils.deprecated( + PUBLIC_KEY_TYPES, + __name__, + "Use PublicKeyTypes instead", + utils.DeprecatedIn40, + name="PUBLIC_KEY_TYPES", +) +# Every asymmetric key type +PrivateKeyTypes = typing.Union[ + dh.DHPrivateKey, + ed25519.Ed25519PrivateKey, + ed448.Ed448PrivateKey, + rsa.RSAPrivateKey, + dsa.DSAPrivateKey, + ec.EllipticCurvePrivateKey, + x25519.X25519PrivateKey, + x448.X448PrivateKey, +] +PRIVATE_KEY_TYPES = PrivateKeyTypes +utils.deprecated( + PRIVATE_KEY_TYPES, + __name__, + "Use PrivateKeyTypes instead", + utils.DeprecatedIn40, + name="PRIVATE_KEY_TYPES", +) +# Just the key types we allow to be used for x509 signing. This mirrors +# the certificate public key types +CertificateIssuerPrivateKeyTypes = typing.Union[ + ed25519.Ed25519PrivateKey, + ed448.Ed448PrivateKey, + rsa.RSAPrivateKey, + dsa.DSAPrivateKey, + ec.EllipticCurvePrivateKey, +] +CERTIFICATE_PRIVATE_KEY_TYPES = CertificateIssuerPrivateKeyTypes +utils.deprecated( + CERTIFICATE_PRIVATE_KEY_TYPES, + __name__, + "Use CertificateIssuerPrivateKeyTypes instead", + utils.DeprecatedIn40, + name="CERTIFICATE_PRIVATE_KEY_TYPES", +) +# Just the key types we allow to be used for x509 signing. This mirrors +# the certificate private key types +CertificateIssuerPublicKeyTypes = typing.Union[ + dsa.DSAPublicKey, + rsa.RSAPublicKey, + ec.EllipticCurvePublicKey, + ed25519.Ed25519PublicKey, + ed448.Ed448PublicKey, +] +CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES = CertificateIssuerPublicKeyTypes +utils.deprecated( + CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES, + __name__, + "Use CertificateIssuerPublicKeyTypes instead", + utils.DeprecatedIn40, + name="CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES", +) +# This type removes DHPublicKey. x448/x25519 can be a public key +# but cannot be used in signing so they are allowed here. +CertificatePublicKeyTypes = typing.Union[ + dsa.DSAPublicKey, + rsa.RSAPublicKey, + ec.EllipticCurvePublicKey, + ed25519.Ed25519PublicKey, + ed448.Ed448PublicKey, + x25519.X25519PublicKey, + x448.X448PublicKey, +] +CERTIFICATE_PUBLIC_KEY_TYPES = CertificatePublicKeyTypes +utils.deprecated( + CERTIFICATE_PUBLIC_KEY_TYPES, + __name__, + "Use CertificatePublicKeyTypes instead", + utils.DeprecatedIn40, + name="CERTIFICATE_PUBLIC_KEY_TYPES", +) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py new file mode 100644 index 0000000..826b956 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py @@ -0,0 +1,24 @@ +# 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 annotations + +from cryptography.hazmat.bindings._rust import asn1 +from cryptography.hazmat.primitives import hashes + +decode_dss_signature = asn1.decode_dss_signature +encode_dss_signature = asn1.encode_dss_signature + + +class Prehashed: + def __init__(self, algorithm: hashes.HashAlgorithm): + if not isinstance(algorithm, hashes.HashAlgorithm): + raise TypeError("Expected instance of HashAlgorithm.") + + self._algorithm = algorithm + self._digest_size = algorithm.digest_size + + @property + def digest_size(self) -> int: + return self._digest_size diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py new file mode 100644 index 0000000..0cfa36e --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py @@ -0,0 +1,109 @@ +# 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 annotations + +import abc + +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import _serialization + + +class X25519PublicKey(metaclass=abc.ABCMeta): + @classmethod + def from_public_bytes(cls, data: bytes) -> X25519PublicKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.x25519_supported(): + raise UnsupportedAlgorithm( + "X25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, + ) + + return rust_openssl.x25519.from_public_bytes(data) + + @abc.abstractmethod + def public_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PublicFormat, + ) -> bytes: + """ + The serialized bytes of the public key. + """ + + @abc.abstractmethod + def public_bytes_raw(self) -> bytes: + """ + The raw bytes of the public key. + Equivalent to public_bytes(Raw, Raw). + """ + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Checks equality. + """ + + +X25519PublicKey.register(rust_openssl.x25519.X25519PublicKey) + + +class X25519PrivateKey(metaclass=abc.ABCMeta): + @classmethod + def generate(cls) -> X25519PrivateKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.x25519_supported(): + raise UnsupportedAlgorithm( + "X25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, + ) + return rust_openssl.x25519.generate_key() + + @classmethod + def from_private_bytes(cls, data: bytes) -> X25519PrivateKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.x25519_supported(): + raise UnsupportedAlgorithm( + "X25519 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, + ) + + return rust_openssl.x25519.from_private_bytes(data) + + @abc.abstractmethod + def public_key(self) -> X25519PublicKey: + """ + Returns the public key associated with this private key + """ + + @abc.abstractmethod + def private_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PrivateFormat, + encryption_algorithm: _serialization.KeySerializationEncryption, + ) -> bytes: + """ + The serialized bytes of the private key. + """ + + @abc.abstractmethod + def private_bytes_raw(self) -> bytes: + """ + The raw bytes of the private key. + Equivalent to private_bytes(Raw, Raw, NoEncryption()). + """ + + @abc.abstractmethod + def exchange(self, peer_public_key: X25519PublicKey) -> bytes: + """ + Performs a key exchange operation using the provided peer's public key. + """ + + +X25519PrivateKey.register(rust_openssl.x25519.X25519PrivateKey) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py new file mode 100644 index 0000000..86086ab --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py @@ -0,0 +1,112 @@ +# 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 annotations + +import abc + +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.bindings._rust import openssl as rust_openssl +from cryptography.hazmat.primitives import _serialization + + +class X448PublicKey(metaclass=abc.ABCMeta): + @classmethod + def from_public_bytes(cls, data: bytes) -> X448PublicKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.x448_supported(): + raise UnsupportedAlgorithm( + "X448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, + ) + + return rust_openssl.x448.from_public_bytes(data) + + @abc.abstractmethod + def public_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PublicFormat, + ) -> bytes: + """ + The serialized bytes of the public key. + """ + + @abc.abstractmethod + def public_bytes_raw(self) -> bytes: + """ + The raw bytes of the public key. + Equivalent to public_bytes(Raw, Raw). + """ + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Checks equality. + """ + + +if hasattr(rust_openssl, "x448"): + X448PublicKey.register(rust_openssl.x448.X448PublicKey) + + +class X448PrivateKey(metaclass=abc.ABCMeta): + @classmethod + def generate(cls) -> X448PrivateKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.x448_supported(): + raise UnsupportedAlgorithm( + "X448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, + ) + + return rust_openssl.x448.generate_key() + + @classmethod + def from_private_bytes(cls, data: bytes) -> X448PrivateKey: + from cryptography.hazmat.backends.openssl.backend import backend + + if not backend.x448_supported(): + raise UnsupportedAlgorithm( + "X448 is not supported by this version of OpenSSL.", + _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, + ) + + return rust_openssl.x448.from_private_bytes(data) + + @abc.abstractmethod + def public_key(self) -> X448PublicKey: + """ + Returns the public key associated with this private key + """ + + @abc.abstractmethod + def private_bytes( + self, + encoding: _serialization.Encoding, + format: _serialization.PrivateFormat, + encryption_algorithm: _serialization.KeySerializationEncryption, + ) -> bytes: + """ + The serialized bytes of the private key. + """ + + @abc.abstractmethod + def private_bytes_raw(self) -> bytes: + """ + The raw bytes of the private key. + Equivalent to private_bytes(Raw, Raw, NoEncryption()). + """ + + @abc.abstractmethod + def exchange(self, peer_public_key: X448PublicKey) -> bytes: + """ + Performs a key exchange operation using the provided peer's public key. + """ + + +if hasattr(rust_openssl, "x448"): + X448PrivateKey.register(rust_openssl.x448.X448PrivateKey) diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py new file mode 100644 index 0000000..10c15d0 --- /dev/null +++ b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py @@ -0,0 +1,27 @@ +# 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 annotations + +from cryptography.hazmat.primitives._cipheralgorithm import ( + BlockCipherAlgorithm, + CipherAlgorithm, +) +from cryptography.hazmat.primitives.ciphers.base import ( + AEADCipherContext, + AEADDecryptionContext, + AEADEncryptionContext, + Cipher, + CipherContext, +) + +__all__ = [ + "AEADCipherContext", + "AEADDecryptionContext", + "AEADEncryptionContext", + "BlockCipherAlgorithm", + "Cipher", + "CipherAlgorithm", + "CipherContext", +] diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89370641cd2068e11baecc5467761d0a52a9151e GIT binary patch literal 767 zcmbu5KabNe7{=`+P12N#1Hl)7DMG|Lu_B~$f5uzbyjX5x65rWzaNLSAvGV~~Zn_2d z4)-CLz23xDblXkX4V7q@8+eoal=n&AC(oO2(`g1=eYyT!e-8k-@y)he?+f0ZI(`Ke zsGtB6VhH_xAOacUP)0b~^r0BZ7{@ZfiA-@S$9OC=oIy~7D!PJrQjOk$JpSb^b7&{D zZIz*htG3Sr`{b=q<;4;28m4EWR+^he+J}2WKC+KyC$r;0K2oh=AB}zLrDIm=Rp;$? zaZe0uRKA=WP zhR!S0X?4y@(<3F9WKPSAMTeHGT_VBfs9TvvwXcf9L)3G_UUu#|ty#ab4;uDyPTPIZ z-%yAU-f}}o(XH;%*HTpr!QSY{E&+5`f9bFeA%yD;z~?`~vwzQZ6vAK)?nfH?_x=|L Q>BPBg@j3B_K5zm50Isds7XSbN literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca2feba98dcd51a8b128730abfc2f3e4edcf835b GIT binary patch literal 721 zcmY*VJ&)5s5Zz6jICdQAAOax}Lfj#t6nHO0*C8Z`08#KEMWS%C+Qf_P;4kg2Bl)T{ zRQv#X8pI!<;zy)#5xGL5qBFYgDs}_0;_>*+%$u?I?R*^!Od##kk3Zgd3xHp$*qf}C z!He$_KLZ!IFa!~FAXIrPY(;HHgTMoB`wMhBR9kj;A4pj0`^?cBe6Qwv4c@4Eqrvag zsh(pt_AD+HV!hAeAJ$pSGlqSaSGm$ZhF>A}y%HsvgQ;~R# zq<(Ju)GB8rwSN?Ed`3&Bwmt?-;IK4d9c(RhWzV2;vU_(?pm$793;K_8^DPdv)e zp;Giusr*wA1tM6fc98m%aij#Y~=b#|8@%P*0lWJi`{XBEY1=*FaF$%$+9OOb@eZ6dT)&=$N96n7-9wEW2I zN`_dcB?=!D)CF=VAOXEJZJ}CldMVIb5B&*Lp@Xo10Ru%2x>2A`IrY6+a>*rW$S&l1 z$bI{E-oBYP@6EiA{c9u=B+!2Q&y&^P4HEJnd}uYljR=ipk&qpt5>?PiK}ZV%;-W4V zq_o6wN%s`IX)nh;fcw%uj(Y+3r~MrF0WPOyj{5-*qyrq60S~5w91rNBLO31fcuu2+#(4XoH*<1zN0!7U#4ZKRdA?Uf->QRTkys+m5IpDGz%IM+=0?$Pk&ueG$1b}A*cwTFbs$M#i#|J#4 zE}pS7dHldL?&7(8CXWm}S6n==_u~OODWKB{8tt;v2-o);K%4B*_a*hsC6c&$jLS|4 zRw!F6mdvcFm5K&DdN)i>N5nJx)43V!n44Yt_!f5DonM&6`_jU~Jly5?_0qi+&By~D z_?T&Boz5>T!9y&wNtw2?m071-8AGekglG-J%enPAt(>Q9R$nbK&CD09XjezBWeU7| z><6LoV?cHYC22t=X%Q|-71AEq0p3+O8GjP?1lSvJ*)8o;gR1v|C+(-Q8dBv4o;@Hu zZjnhkpax+5VN04_SURpkf5O9Ja6A4N0s;eRu)T;Sf%ukpdCR0m4xXKca>0oZ8aDvh zA*M4kA@|9BVGrJY?7V-UWE{FmmdL)axG%C0aIzr)`=aGBsJ_A<4CGRjuZ>i`RG_If zHC1M%HJUSxRH?9;SEzT@%Fs-Dy$tm1Dm79$wpBJu zt1Mg2Z>93tN+D~)NLoQNwM`^*BN(Y{%M3=cyk*Imj8@dlOr{bBy(C*t-vE&sctWb= z$cFQz|j-!qo<0iy$4TB`&Bb?@SrEqrjEqrwx0pAAfZ9w+}?3>v04ub0lk_b`=@T9XT1ZX>M zPd1GhvfK0UArT-$;{yQwYKT`Dv=OWomiMAK|+gc{+|KOW-p)^={LD z2m27r!DUbYohR=?(|g({FSQH5gV?ph*tPRMny$lG3ZwQ|5LF6&M{9@mKI17`QJJ}&ya7Lk zsdGZ$F0Jy|N!HFm=Jr@GM{ul|D*LTe^Be?rhB{|?Z`q0tpuB(PIrBLPYmf7CB=zyF zi%I=C2+D_fIdWoUT=@cvj&qQc5A$;5ltE5csF9!p8kF<^JF+M!V4!&Ms6tP4_Cmpe zrHhaHA;|c9f{YCPk!J><0SG?%Ec|cY=!!6ww^%CXXs#&{7YhR+JPVC4xpdE8#+c|! znr+P)Q5Eis?$SpfCLV@n11jX~?J`Xj*EuhXnph1rn<}~A`VEWn(<>h5|L0r;xI9x~{EL_9k`* zf0orZ=mKLUX8AIFT!`9OZrHgHPHLdgiei@@JQ0NW)l|9@Q~!W3{scguqUnhoIh3#L z-h1RdkdudUvL+|L3Jq*;e0JyIo!$7qLu0kj*pv8p?eg~z;BTW9w?fb?A%PPa=)ik>{}(i;Eusr z7ZaoSO=D#PKH0!G4ThV>3U}tJwwH8$M|zI*mFJiYT{Xjy%`hG^i~tOMiPd+wj{G%a zC&W%V%$>INR;OGoAv(C4Su_jdJP`!=F@y1HoY#bypj$zemKn`uO{#KVU=7SW9e0Z} z)9&Z#_xMrgCh96SzLvjje+&99`#B7Ze%GL&z`7&|LOn=?$r^d1^Z%4wsk#4kQ53{F zc^2?Ji@-Tv8I=eh2{rOz=f5sWxRA3!I3&O~s9sPDUOB<;(>86~FTlsFUQmlnoM889 zn>O707U%5uY7hnJ1-0np33i{hX`@6Kta=Yg?8qY@dBU(p@0?JVi8pxY8953>>w^J7 zJRty15!5*tX){IoFb(%*y4Yq4_hB09%hWMbpbt~*ET;cyO)tPSgo^G3+rK`+-qSYe TonC8j3-LYSHi=^#o`n1t)hzQi literal 0 HcmV?d00001 diff --git a/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-311.pyc b/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4031e350706f0b42d50782e74c7fb673df4c4ce2 GIT binary patch literal 7401 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 z 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

    )sVaeggjVxaldJrDWr@&0(ff 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%0DIQ(wnZop%#lgWz<%z~t# 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�Sv&(RX<7Wjhtq(NSa4aUGbzYR4bgJkBQH;hl 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Ð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%0ApkKQgdTNo@v7; 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�T+6aJv#(rdj!%Hi4rgYSW1L|F$2ha597A$V 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 z zXw~!#*hIqJQ4c<`pIB}ySh(Adkx$)#DDT(Z6E6C=syv)6p0hxQm*y9QYTvNwzs6nt zP+Cf5UYs?noK}?Hj~ERq+uK!%#GN)8NQ0)tg4DnyUdq5la@xP|fI6z@wusfFD5jxl zW1%7`{O-h<{)eLJ8DA(IBZsFg%%e5X~x$UEajXUHK&yW{v_US zGuI(iZJ0qzB4S~}(hNzX{<=VN;u4GI{ih1-s1+UijbE6|wv!3bdTWBie7@aCIWb?UF6>-k4in^jXzffKCEv-F}cleK-;aKk4ap zvhph7K%an;2s#RISPwaRKWa;>E89YWURIm;1r>E!=p|jCC2St0JQ>>6veoc(3 zL?C{5A_Fv;-^}-ZtILaiyLwnfQPb6@1R;mlCZRkBlsb#4uN_5$dr)^+s@G?ayGJG5 zbm*rI4j7_$))j$l()3q)Zu}|=QIe#+;a19vVd7&duKb*gPi;dfBEt@p|_y@gNR zAsKbLQ-=o7$|K87NHoz*{?~*@ej%o zexnw-Gt&0Q%=hy^mep3uId+kX{JreH-ZjiEqHEbJ2eK;TTojtuo0wZjJdD1_JV6k! zSmEQ!tu+{f>_u?ArM{4jsrsUl`@2z0a!@Aw>+l)e0o z`$+#1KF(vGrv+(@ws`sh6~}v)H)9zoNTZRA5O*)e_MudP>-eyy@Weh4tsu>NY5Qqt z-Z+%t`fTtF)rR1p_+b7?^BYrWLw{K4puj$@5!3j&7f*&)g+g<{5*@}!l(%wG%E3%3 zS~XV;W!yxryNVn!lyQ?1&hrVLp_DKnjuj*T$6Ld2?ebP zyrgi1*IJk!2&X+NJ#cFtr5mxK>@Zi&=Z1Th`=-c~%I&S#YqA@hYz-AorlEKNH`kK% zX=y)De53=R8#L0XhIKlpX%>T@e62Ae!ZE#+aF$GP=-1twA+hjC9iC%k z^bS>C-*$-u=&?CZRlVib?`0o}#i{YqsN^sh*c}=qZ(N7}+DKeF8JgsQhBSrUpi|nH z(?(*kW)PfKko8dIcFu!A~wbUYWPktm~LQn%>;htkLZs#6d^)%s7bH zl!M48K7#c@({4bdVL;?9_mRI_WpiAsZ5g^Hx;DWmxlzziQbI{g5@+Q4XdM=jU+c`r zmMjsusw^_D2PV8u3l)z3XfId8WPp6 zEg_H=yj*_-M|p(9T5p!A-36*^FlU;biEReonNuuSFJ1R9Yu<{|=IQ+|P zX4~gXsl-p!(3d_2vwzBC_yN&Pm)1pfpC4-%dS z2uzxK5R4u8yGqo}^yLHC$y_zc*gsUWkRi9@YrWVTh~=%uAGTDvIglsQKTzkEh+ZiY z=jFm4)BoFMwS_`!DMaRmVq|dZCW&)(syo5 z%I~dKd^yES@%51eZ&URTW<^qhZ*|X;M?zA9Z*>p)gro%D>S94-@oQ|jnE#0f#7Akq z`qZ`)yr+t5a9sD-1Ah4LD#_rcqzul#0U6u~ZCdcc{fLwJMqu<_5PzOO&H3RE%7ddH zXf6*Lz&g1Y|8IF9y}g+{(7H6FERq%qh*WpWJvQ3AY(sJzCtF`L<-zRx19>p`#6Kht zCM3)6OZn}}gEJ}NvdPVq2W3k9w%ig^^59S06VmeF#-OpZJXm?} z_T|ChKQ@;K?|s@#9&{d$JXj5FTJXZHhzOGh$^9gIpr%Tmf;gEd@9r&tib84qw{+M5 z1yV{qg5e|2RG^8=mBO|Y?7Dfcp|H!n7A?3=S3l(BaoD-y0&kFd%s6J9m0Nd@oifyg zf^s`j&MQcvn#Gi3pINyt@Rm?cg1Jjj?n^tBumh?QI&D^&M-0~Lx;=w3^X#z1-2VH} zt0B14aLv=(Wp(5JW9=ldIP%`QdDXPwCJYC?*VXB9bvhu$YyAK$zX$qn?Q~Y@`_IYz zM)#J!5Axqwg6H#Dy{suQ3qT2;t3*!-LcI8>Q{GP%g)@G40V-HZwPTKbX*+|XaDAropO^E#eDzq<89{q!-#;yyk;BLmgDgN^kO{D z1Oj5OPF776At61E6Nsb`dx}zl-V+Se5_KsUD4A2F?NoSW7!X;%KTyA_@OB2O=C3wT zI`0h>o?!p*%ZJwAvdVOSXWvPGTW{Onze^N0mv8mIJI=fG|6}8vIPUkx`5khajq?JZ zkRIpfNzgi(xj*f2XLEU`H`X-XBiAF(j?p-$H`mf%eTbwM^XKV1wm*Lkp;O6W`Cs$L zOecS2{;Zq+f1N*bOaB;MZ>QY$=g)QIG^6VnpOB{Ou%HdipSjHN?aiNE@af;){F(i} z@zYONrTJ<2?eNo!A8a#!&imw#&Y#_Zp!s7D0r>fII6>2XfBw{}OMhVgY%@^5H-E~e z{m%TE`=0f;O-6sm-bR1xp+gJ(;7X>{AD%z&9s9?|c{b&?KhA$8r`b49_6g~6z9MKN zbN(zxP-N~8lJn<)#P7@>i-Dm713S)>edPdIRj^d-NuLlNHn3IQ~vQ02% z$Q=e;UO9@tt@B1-aW#KCj=DN8Yc$J1`_UK=vdx1%L3u5iE4yI~jMSU8c)F!Ex(3qf zMoYHF3fIpl$cl|<-HFEpHSNDG79;q(WwR(QPkEx9e=2KniQ>^kKD8C9(LJg!aygzN zx6$2}%*9EFcw#{=Z@pMac%rfOoM+cT&|rawKcrlz_)EUI$sK1bJ^ce`mU-9sD|^d;JQ=(=q2Rk=pY(V0fVMNjk)v>w$=E;1zPu%h zeffAAPQHJ829Soj$wy1N*ly+ex)aC_B;6+2`6I2x>^ERx4$I8F6E)nqd1hfYzctSR z;L|s&@^tsXzpaN8FQ$hl8>BVv3wmt~#+}#&MCr-Na?_aH@*UP)Gby<{VK=u%SKCt> z1hDwEkJ=_G1Ps<2-yn_MP!7$8fyGt^`B1td^SmLX!F8AHPmO3_9ea%etgAB!=DDf+ zSb^KOMvP;%2go$Og?lH{CF}@_PZhZq4`|zG*gVMaS5D@0*2?~(r2MTE@!ycXXD zExt=yeD`Yc-N(M+-*CMBUMYNMsYb)z>kX zuRlJsezWaI3Gu3f-nFy9(=%G~XR3dfr298(YP0@5&F8lLJHX@j>nQLGVy3-!3;1;x ze!h1}A^5Sx7yS#?hdy9kyIXY|fk|EUELrz{>LwPY<(a*oVB_ccBeQ=6 z`0uvtUuJ%f?c}HZQ51oK$N`ZR)t_&ToKO&Lrwf!fD_#J1536vKK3>Z=eqSJrmt^SW zDmzd@44=^Z>)L)`=*vjrDp?Pu+gLjI3naXA6 z;)QSKX<1WqGlmd<@Z<>-?9Y0EO#L>pyy&EYNv9N@)FX7OV27g>9H;c&hM5rZxnDmC$5LNZ3N=Sv$zJ}HZL`B zHwoN05AJD!%ib2;hw}h;VG7(sfJ;2@=6C?50x-b?7$X1+z!P@KJUY6J8u9CC+g1BY z9aSkprNrw-KXVti_DHhbhi?~V~IKApU9-#!Ent%UgG6<;=x;VC{cl|I7Kxe2k$9>4gjCCwsw z^ZsF!yBHttt^f;FJ4!(g^w!wkKh>bG#R|8EyJa=B{kWzg3r1wuy4pFxjI{lPB;(MR zm5$59GHq&CyVrg8Ka$zf5y9yhzTJPsf7~_XHyf6HDTz8+xuf?nq|;e$!kz+NA7vKo ze(ipB7i5K7g+q@m8nt((wk&j;e6IpsX zHP)6uu;75*+I$r=Cj6k#W4~R!lZESFUq*C@`@yQTx*@xK%2G}B((0zXs+GMr%;z9J z%Z13Sh!%f-Qw43$<6ogZp!Tb(lNI}8XOM|@dXeN%x3-J3BdA^?&^ zTS!NfEQ_q^{cdUX;%ql%AKIN#@5%COUKK~cjq|ed!04&{@pYK8SYwj$MkKznLhb1N z4K;hBY2J$cejp&YI=YJj-q?9hi#3hm&YTHIp%t_*41&fW8(^*Yb;&3 zZr}L+@TZ{Ou~&T)_Xc8JhEK7n)EVToGpnsfqmQ=jMk;iG0;QolmXvP%PdHk*A8GT2 zfO`rVgdE`;)}55kKcU(~0c=5W0zRb2L1*I*kQ%jKREV~Hce0J$fBB=t?j$mlUj?5% z{O8wvYGj26Bl{(v8Xkq5NL>2z?IQcFR!I3idz0j$4K)-E%6fWV6^a%*4#8>FzL z6A(vpxXs@%Hzj9V<7^)q+~@FwsJyqyuui>!TNi>%^TgsTs>5m7trWeY#huk?h(?iw zKR~$TdPA=_PxQU+ZIF!~PwrurR+HmC)o*ZUW!b4-8`9Qs#j{JT_sE`C2eW`B;fEu| zk!Ih~w%28TXDY+e=WVDm_BSoR<%V&Zb+7Q&iR`B@?cVGO728h}!}SA5Vxf*=Z4b86 zoiGD8`CZ};J8fxdXgmF{UYteRo)10}%-~$YTs&GEkbTfuzcER|)!XsBi7UB{jVcDiL zSbpj50L;b}3*ElRB{i9$)lH@YdO}mlCLc5M%+EG+iR%bvupUm68B3McH$DTNKRdn~ zv<&o@mgCdHe}W|_NAB=XfC5)0N_G3@%>l4+<)<>so5}8m(&|RuEm*)Ec%ljEEfwSL z3n&q(r@OoGW=GXQwJXPSt$CxH{jHMq>-&!(CuYXx@wwP?8x#PR5>c>1_pDG?H@f{- zsp1)D)vmnmmBjocf6iqtG$rPw_;)U!98jjdkuEFhB=k!o%g_TBGNL(r6@3^wiMu}E zxQ-NOglt{F3of>otqdw6w1~HSdY!zsEk3}?34~K;ZU2d(lhm3o)*9;W?WU6efA8rv zQkc0*D9QU(0__hwML%T8DrAgi{x^-X=7*-v@X1Hf2~E*MVK4}GBPADG$<^*ND>?oW zl1>gvb@Qco2&nKam5LQdr@@_vCL_U>i`4H>*2|kO77n1rgw$doh zQSHJ}9~U=V^v2a~!$t4xzQE>Z-BjP@h1WCruK;Mq?9=?s;J+!~j+cD}64 za&9IBBXb+I2ui~Gtvh@KN9)I|^eZ}L^IUg=(kr?M$z?%^5e1C3C&y@1PfBKVf%S=3 z3nYL6vw|2pG&+)hsp7qlQLMV~3dO>#lBRDz9FOh^)z1oj~ z8f1%lNo;dm-|=Y@4hV>#e&o2`nEs#YA31Box_WGHbji4c4 z(N%6e<9XJZ^!nkj@0Y#pjh91Lw+lhB^h1Mb?@^lLJxuJb!`d8K3J>DbO}Eav7RgFM zDGTd4u(y!yU)bDV8^0AY*}lVI&L=ww^ID^gocRUwz~(U91uzj)?modxF~hALJQEF4 zbqli>s=1n>QisYh|k(4Jfw>Ah~AZ9rnhYpOtU07!Zi zWt+Z|*4+o(xfd$?#BHjrtN;@m1%&HOBfcGJMKkQNVfK($5x?2M5co#sru`e0n z^Xb(*xiCTYF6z-ZdYkT%kv%Wy5d*BNerYZlw!<$r{AApd%;4&zgb?zlh}^mwk9l3C zoS-(kQQ+;q`=>Si^eHr5>zlrhe76ad(oKgn;!nI9FjybpXUbo^ywDutFR_QWd7}F; zrvb!PaT)fdo#@PlH`Bi3xPcQhd81*Un(KuGRT7U%hCC*D0lVsO{ljkK}DLT|G*w?hv z%4?BQ?!AjNBkYi*I}SAnCV1$a_U5FoC7}`xdHMd?M4EJy7MMb208!L5d7_~@NhH& z*k29KUcgDboTg94`mM{gx=XLiurY=+^fEWWeRvbfK^N_Ei|R>qECnM^PYqVkXsS6zkqFA{2JK znt7(Na$PtfOKK2bkigvS$V}PF##13Lb_LL@Z>y52P~5A4XS%$370kTyDAm-s29BoH z#BA^fvxbD0kzvew<;z}+?R7vCov&>zjze8GjXk*qNZs#sx3lb*BQsF$D10J?-NP>! zEA$==D`2L`iZAD%B%f6K%+AU*i(jm`r|^sZ!+1rpRg+`fM}m%))3#=sMUAyN1&9B9 zCG{TT3^ABYU7>MPK>0%hP<*`rd`wqh?@YF=MP$Ua`__ppR>hRQ>gR9u=GK*6OeC(3yfHj} z0?Sj9F3Y>KJVuCjy@STdHaJ7;U{veCJ``l?WxSW?`g){38w64#JyKs^0aE>il+JPN z9LDB~H? zSG=I8`U<6lUi1v>ul697Rh-S+?f7{zttzwEIgRvY;t138*SLk;jx#0KcykvPLad3X zxUW;3UnthMSpV1(YB0b2LAnWCnoUX6KC~Bd-0WkdUNCneOAj<=JD5ztsiA`>11(B>Zi`Te^2WJxKAAm+N zcFzD^;g@kEUrmU@oz4Y`cIYtBrs@$_F>yl^yZ=Q~z5v*yDPQtW*3;CS99b4BTU5R2 z(yG06?^Ke_tOjQs%G-g&1Ukc#OEsU*0a{>H3RANcoGmf_g_YPA3}_Dr*{xB ztC`0h*mE9O4dnq5^&lP>h`)FcX9~pa%|LV#h>{eDv1xn;`uZ2DzF0dk&*OQxPp?q= zZ60p6;P!0>R~+P=M341zmo(gZW~^KPH|t+}0l7xNUu7}x{d&9|^Ul-5uP@s8$wKq< z(BN&!+Alo67Y|?y5;$e+vhX%M-*32h-rJI^f61;KT>T4-Ex%a*j?llq)AaY7_P>)V zO;KSFe&SLlZd`EW+Kys~HSWtYJ#DQq=&IGg)_JlR^3s{c=`&oulOFiNYJ zX1hlX&SoFbdyN~qH!NcfS1otD5pld=@SV!?g5d$6ZmuY;cY`6J>*9sGDB`u&DU#fT+rIzKx-!q1q*jSZP@cFBCm%v zaJ#zrCexNIJ~T^3t`=C%6B%~M>7z!wlzpQDb5f4mK->VWfQMw`AH)V$N)xlZa=#?# z)QbOazvA~Ytt;{H3}62)>RVCmezh7>*{V2&B}VYCa0kpXdXG@o`}?kc&vw^!ha{#K zj3LqM&>xG>7sN}L4ga(M^u3qKL+f}K_uWPYI@!nIJksq60_nsVu0zn({#hw~<^Thd z>SCPDEUeYtE0#$(FYces;3Is4a!V!q=2_9I58QyKtalR!q-~N;IDY z`z3UX%sHCkPZyaDFSkF4I>rc(E0%#FyR>WO}yo_L$Q-uqpzVZ{|cG6he5x_#XS?g$YpVfZN13i!Q={OiP|f{hz*nJ~ z+5B)5;c`{I*^CTyK;qvO1o+=NSQA1xx=~!}5|0kzXj=A^(@PR(R67QLS-4_tM1bgb62Dkr& zRQj^smj06Q7uA=s1y^+Nqm$_35!J(@!@Fk#>2xQ%A@CNh@ACs#5&4o)7}PDTj`g5= z^>5jgh1I{Ivh8EQh<^wAecYV|e(~JVQt`ZIBjie2x6;NuC;k&0ZOf^ZjUyd2`&U_N zQ1+iCL0LUUlED*!J*f(*YU^mr`K77VS5s@(W>YIYf8c+ngo(Z3z2CJpIer2su7UpK z=hs~bTjtj<=WjE={{83F{CY5RejPF5|3ANSIVd&rqUP7Q^K2}G`PGF6ZGN%ej31V< z-z=3si(Q8#DyTGU$=!P`X0hVQbal(CrD-?1+uza1EDY?T)2B*B-5)WbW)O>)=PG8u7{jl2L7MRog45_R|WXyIM6a-c@fW0a|5ah3!@B z=bL=5{-a`Ijyr7g!28PSdcCRVTf!G$aZuq~@^K)TqiwgrUj)dd=K=DjYNa%Ce?cwt z_{b7>#km?ZA9{*n&r!?}an}HiGYWPN%Sj8Y{F4ERf66!LljhG-O6_2q8Ce1fr2z_? z(u9hA8}0^VkFdA(2M6ZHI)^8 z9-1zJEeXiXJA!u#R=eFfC4%|4F-+Nf3CBvZ%OlGu2Y>u9SRG!Nr2H}3Do+3d|FC&b zzVJDcJz36Gp58G`>+hg-Q|zE1|5)W;+$_KMyYV9CYHI$a{P~8u^WRfn8{F?C%+l50hUM_Z9O;-JE>@i4P>t;G zdY-5D-O|_cXbazVz3c^u!9Lp9^|U6!An6RP>Swf{+Z z`NS)g3Qv)0i}E%L1Uh_KWGzJg?i?Eg_t_+~5rzFS^C0FCj`{Uqxt~itH?D&#zPq8o zYl&<^F7@@=6x%-AxFtiJqK`gc^sDR({meodD}Il*+%C}7G{-dc7CfS)_%MbdJ)W=a zC_>DK=R_JKMXmOu7E~L=zhvtTa<00cAwIoMA|xxxLNQQMfAal& zvY!_Nwc05my8{m&>^of!83cSD-2$AOKhbw`5)jPOi+J|?`Q{eiVe-xW+SiIqYeRF) zfbS~UElQ?6=FyRayv{?JrZc_@Eyh}cf5IdoZz~qJ-l%50H}0-F9P<+j2abc->)%{w zqU3K>0^GrDxs|*(_76#zI|U0cF&*}q6*E-RyA9m>dR?v%r07le*y}6P-(|YQM^WC- zKSX-0OSwl=2Cc&7Bk1V|H~OC5slqyQX-=;Xb+{Qca}PxjWbKkY%}@4pi<|DDOxs8i zDZ;UyWw#xa6<-TRNqDGUroWse{I}42mamSIg~&T80PwQfK+8PmRCUj!`g{NO1krn> z${KkZS+OpY2HJ4_>m8FB?D9ebJ^)bL0MKQW4o5rZzuFlbf~o)N^*RKuI!awUOU5Gw3k-UKCZ{nbPMU*N1T8GVYR!jot;_NcBfkW0sgUZ zWCUtX40!DnOca!)H?C9Ahbqb$Xoi6`c-}6UICi$vP;c+8Ao2kkqEyQ*Y-)t-w11+t zSd!G^&J?y)t--y{`7A$mUcJ+*Uz(7k7g41&vKWfgN}mx`xp{)8iQe`w zccIm8m*pD2Nt0faP{od&&ma9ovCGQpwj|}rkl4xkSG^9A_7GV{?mz*U-lx%2=`Z7V znub-TG1U;B7qq*RZ+Che15f-a%FNJ+#CKs70{P6O(O$y6zm-EBJ0j(?03SWjkcF^` zBds2WquY;uQ>2I7T}pDgeZcmE^^nSPcR+&%WQjz@=C_RZ+>}z^>CH5b?wwz~dDqY_ zH_(MSS-B&!aGG8=?kb(3az?v4ia*MgIc}boD(UHc@%UUwJ-{7nhvuu@VF9>j1P&af zBb4%NO{^PDo7&LiCaM>Po*_0zwC(1EXkW+8$d)rX!JZ#e_ear8ZbV3%RbFNRwpx*XxT9{k`@23Z&gO>-C8gPp!Gwx9&2u@`cu( zU|{R@`9kaw5N@&JoCIR2x|1ob@w@j3-c>sFv|v1Cw>*fYG~=KX^Au4IaXZ8b88$&_ zHfA59M(!W)=_R*iX@md52iuH=rVsAe%EZP)WLAva#6;{vow`l53r9EMQ|o;=`r4KH6DvGs{Xto-@Iy{DWZ6KKJ;~BB1F)Cr{W|ZP z;vir_p|Dwq)t@Gel*(D$52idvl|*J#9xD-IAY=K)KQi?4Zq~bNL!Ke#Uh6yPL@e#L zh=`kAUer+afpuX`U0a%Wwe-WP{S@=nYJzHJa)vJN_h`im;`?}?Kp{qQ50Iw12Dx%1 zza&L+tqT%1BY&nNZavYT(Bv*n>xWuEy{!3gCu>OvyIrldiDfAStz*LSZ78;Gq)h;p zh4t5np&H%kA8=0vyt5J*jwkb%-A&>Brx(b4BRxH`rfy%d=^^iF>55^aJAf+mkl2(N z2UY&PhBS82Zx{+(>FI!b;f;f&0Y=zoC4*7tL=Oo^&&ff4OuK_NB|p%{Y)M?>4m(bS zo_LzP{fP)&IV$w>F4&)E0>)EXtrJA_VERD0o|L)qywMq zmJ2MHjXV2r6`pi&=H}I+UMJUM-$+pz=Nb13A9Y=Xfov}W!|eqCZ2|3Vp`76a=nTxx z91*L$IZkdNaEshI*|(wZT1f6-YkBr*sZga|-IZ0ImF5V3vH8HWrpS!vRf2h`G@(XX5Wn2q5c{Rq$8Xd&g-;0@^Y$9 zumd}r-k*UVg7aK^Qo(Npu!B^8JKmjql%zw|-qap%%$Uho$?=iaP|(-32T7Ek{A3zg zbb>Q&Q{L&u<6zs^39V4tMZ4F*-i+9CjLV}(Ij2IvpT`;Fv)=9nf?00K5c9g*tLVFl zgT&qX?*00_A><*&5Flq zhG+JXdnlJZISB|hMzO*jKpw0gyxLa*{6;s0DrRj)))uh#X4Ejz_%+rOwg_wa<3>@@ zYfbcR&eDUV3E9XH54b3UbWwe|x0Mx^@dnt4)X!KQGQ7Q;z{b&rzhK_uqDIx_wETQ zYHVxsx6{!NDekH%5r3B4jNX{NH*d_FkALTlEUDKv=+=hC##_w8IZm5QbA}Ny>s>#x3xxU1& z?;GkThicljA*F#bFWCyG&E9esIpJ6s%g_Qtht7UjOhd84vXkJAi>@$=OxIiYiJ0{( zxsBhQe0BTr9=^!F6tS?S$#t5%uGpUe^-Vh|07l|=*l-w;X~&=%YnaS3e?ICbiPNUOrFDV!BF)6W;0rpsD&U47nzL0(>v=KvrS zvJOSJ#el0r9QWU?ws6hvWI6;ztBDPgQ&-sCb(y!ucA?fdR_T z`HIs|*IxH33e0fbXUI=+qZ|3uI@6T9y2xKifxunMt2d*Pzew5CEQ)oxyf06P?^wR^ z6L_v4V3`Y%6}BvDu%CR8!FHGW0r-FoV(@~i&ELs}rnky){v(^rfA(udRC zxgCPu@$9=yKEE9u%-Fxn6roqzzjQbI7N$K%5pCoP#5p_v%d0x~Dlt|#%(i8X?nG13 zLep*%IErogMbf}uH<1#WGU+tB=Wpiy(F(B6kmo2s1zNT8RCiTR%|OnPvMP@j*LFD% z|J{Ulj(cf>9iJXHDs*CAkC0so;-m*|_4B+j9N!u65-R&XfJZ^Yc)5 z&}*vG;8y4HmzDN7EXNg*?=vjNUn5}9OH*2-I|AW?LV-$FN2TGJ-WZc1De)hs+P?JP ze`a6$XA*2*T7=2Q?GV{!U;6T`8!};JESa`{KEZ^S!L{#Kn(wFe(v7yQGNo`8+Qiib z#*81hUoZ9}uB*Y}hK2KiRJSkZX2CJ;WkAxfe*uPeLcZGVh%*sMwYE#c@(3U)T`vZJ z>`c93;mQ_(@&iEk7$Dvk;#!SJ+HZ^w<0k5n(pce-bYHM8GFTI@kVZB)D7cFi3{5rD zLS(JSZ+Lj4j?`Ej4e7~Wua3{fDT4LJ;H}B(X7G0N@Oa~AVPgxtZl$<-Q%-vDwwtXt zR{tOk$ERZ$zq4x>l#U2Jqz4Gt)|8p%0ZRq=zCsazOurByiB~g5hyC7Z-d9cjnRuCO zsGNxN5hf0Nh0Y(KrY8+fj0Ios7jzCuI+cLO3MCMiYI+nQdPz83)aV2?c%a*ko5*9P zyqc8d+HB(h6bzv*Ht&#+#L*-qQbSid*+$X8!qg6 zN~?c8HdM2RaIXHfBvhlYRQx(7REsYvzzREgV9fqbK#&=)(T#jkFie3z&R;60@skUs zf){^HxJ-8F%b(QN8oy2yCimXxMsHQ~hjIB-x0`i>Q1uB~`ctUCH+NVs=@L_$cLH>Sd`H3)-u=S7(|N%yL! zksLPm>)o`k_1+)$ioF2K$R@`#*upcOsd49`bgXA<+fyC*?f`K6VHO0?+#U|sdXf9v z2}wM^9))&(oHAmC`=qdcn^a-{%3qsfe>ZX#g14&NzqI<>Kk@5`&@EqSqR(l66MwRD zvnoQ5eIBY_p|n`x%2YEG1As5zslhNxEcdJ5@>H3#f-*NT*s}b<=GVKn9jyXg>g9J$ zO;{-GJa4Is2m)A^e#;W@RG`;L)-0gM-Y8bt*>|{Gs+FHEM1aQ*oC6qWTelg;VHX7a z722#UUC)d2hXYFX(i2jZ=3Awn&r*cCH&8dOtDNc8SN5JkJo$BcY2>X8TaPS+8v>8* zHu<8Edw+p;sNV1NJmX|tX~cYMclcyA03WfU+vDFI>4mqHc|F=r4IA7eZ<@JG4`H>* zcmLH_^uqicSxv5TotI$j2<>=87jUA7U|d!!|HH2m)yPHe=&I?{I#{sf_@S_*hhIP0;ER># z?Ff9Glg7H-7&Nhj)|obPV`kb2xVsvt@t&#r)xQ31s=t|hDwhP6rwaAR7xTvXd`pb)cx!95o3UtpQ@qRwOMGJ- z<$=`-So7ps&v;Cw4XO5iy{04=}Ip_HZ;{(Ro$XkP0+CJzdO8YU2i<_&*htYsPq-^Qre)%jq zMpp#(p379d!JhmXMoC%muPrtuW7-M!%>>f%dDGCaRYf9kTOYRuG$$2a+ph`J$-2ra z&9rz~7*OA^6&&Aid*Q?WPwKZ9Bv%RGoh z&^-oSAgbhZa)u0HUgGYH+g%AvSkgzlaHvgqx#Bdf0Mqyd!8`!dau_7r&AmYH@-@Ue z_;Cb7PC~$N3xLb3Z|s%D`)}1Zvgdl)<$6>W?gc8>s9kw_?<{0?^~g-kK&GBa82_`z z%H}&=Z5rA&-o;vxe5uDpo^h`fu+h{5)KW}^ZaIx0Fc#0@qH5%G3;sm0g=DeX2V%yJ z26!-T!W-(hdD*BBcV5z$WkdUNFK34Pb~>t^5lN&+sHO912?|chKzb)3eHC?GzOVMd zo>bErALt#VN<9ocnmGUj{oNo*C!si7wi%pb+%o1-yt`pwS{R}&xa<>H&D#MM)zp+rm?PQ>F7;37se3UDQNlZDF`a#qM`O90?7q%N+AW7L`T5cc<90F2Tn`?AsA` zH2`7^IsakFYpN`9k6dpY@|Qgr0;aEq;PGP_f~O~JfHma4UqP@6uH}(9Z!!gv+!03J zB<^?T`}!xU{t>?Zg{ptC)#nuL6RQP;yGc$~?m*@Eh!o$(C!E)8y@+>j@xABy&GOAx z>K)ERTeld03o2y;956vPji#A^UL)n*+3(oc6Ir)@2VIOrP+r1d_xrr3gTecl@dh4JXMO54DSnFf>ck7uu3Q&?esLw;8C0t7 z$zmN@YyR6}y7(AlH_s1l=6K_R9$gtlTQ8A+Sohpx*D-q+1oPKx2t$~gE#LRn`i@)b zhq^Z+74B49-?7(lPU_~L%^h6{y9b#?vVbz|2*bs!c(I-pZ=2P=tI`q&CC_VM{bKw9 zG|RqtUt@)lzGJAY9*cEHhDs`b`B4^L@j&lLJ&-TxP{FlxRr;G%s+z+)r(F|o5zn$L zzbm$`ju;c~=Q>#vR_EU9_FFXd)ck$bXjYw?x6SfKmnG|u(3Q2C5l1ArZ@VuV1<>d=~dujEtI9gq4sPNw6A?^v8f>AdTyJgsIb8%jlo_+>6$+^&QSEtvo>y0cW ztimU8IRR^Z!rr6jR$ULUj8|IXWLnFLyrtA#m3j`T>`&2O1+RKBAyCsYDYY*meVfCz zw0eNPUpj`D#Mp-}i+`s@I9AHK=)XVbo5}cQpvjlzYmy;mbi-t^%1Ra~1P;-lSOA%_=HrOjd0oGAsnp!OGO!z*|HSwN5 zYWiGe3pdQe|9fZPKj7h?CHUuV3%_Ga_zXXB*cB-p4)OR;>ecjlvVWP;mrU=-DBtxD zm2ax#7`*M{?Gyy-+FoHobJ8=$8@wN?G`f7e3wXco@qV-jyq}^!%>3ZxKU;qxNPGw) zL1WZi4_1~%LJHeUP~6;bWH1MKC*<)&bRUgyXlH9`$~|8fdKe!#=dJlD2J(+hyZ* zs=m0Xz~?UiBGJ>$^z|NBy{|oP531f{$$FwfApd;5zhoG&h=0UYV>}ixV`W-I?>x;U zUu6kOu^p#0xPP4beRC6NZ*KzC_G5{=gIvwUOQ|>Qv^`-5Z+{(}_pOj?Zi~m~1=! z13uN{wZsfFI7&FKWl^4O-gQ>TnARoYJ+ism^(- z+-3-^amTFO+=Q0Ijo2KwKZp?H;~0GqGvfe0fx=b3$LT@tU+tjVbpi-YRozM2@cb=|kX zG$ShgcDS$f=nzb(T}+GDI*Xo>F>l$_dVaR1*1qA#Q@cSw z8sf{JYnGorbrgLL*|8DzD609xg(|0@Vf0QcM5FgmQeWTASUO*dtIy~_|@OzMg z+tBCr*zeKjid4I4`pmq$8GNG;j|8UZGyB7CGyRVw;(P7{l zdYNX_7ao7VG=Bu4c>87Vz5(M|^*3#*m+s0q`a0ckhx5O|IQ~?v}nH$l;%sPaL+%gL2M(Ve5hsu$*ve_ zW>KD!7l|J={D*`7YF9FU5ftM3HIE9pkw2I>NiBFo-4U#Bk#%m`MW)a`-yVhbJs}t? zKB_0`!Chlaq0Kxl>3=D9tVeJ}^Zcb)XY_L9&Xk_Rf*oA%7zo{2L2@S_Q^J*89KggW zJT|ZRCf{qk%CJib`y@(#9@Sb0!3sFQv&fJR)Lbc26SF0hR+Ijq%zYqVoN(f&b;ZQ63q8 z?>)$4g=+?T59NFsH2$GG87R$|zlX4Y`MYM=*PfZ2R34L~JSJgbax9p{uOZ*h8!MnF ztD1stCton6f`Ostm2P0WtH<_M+On-U%3D2C(nd<7`5~e~tlHI$&?Xn-7wo8e?{BW> z6MAvBX$AUVfpv3~D8DO}DRK9za;)%zph(zFRRS_OOmkWBDXfucgV!KAOs+DlJ*hd7 z8voS#CO34XQTx=^pnkXbELQw$0jLkBOYDV1Svgr2!6eWRt2gZssy&x-X0oRFdm^6D zbL;%N@EC*XS>sHGHJ+Lyh5V$~?%=7O*e3;0j}%nnr3bYWo)c(xL_Bn7>jyk6$ja zub9&oTmr>jhPz&{Al5b-YX>XUSLfM~wasS8774wR(YYk#HTBD2Zk;j`!_P0Sw=go{ z>ONVanj7`Y)*ww1_bjhQ`c;?}7F$o%&h8Q+fF5RRbA(h1@?P>DCNFC@sr$+0@?4L^ zcrUtWfN9A%XAj$G*KFw!a^YdC`pG;EuIVNoU zM=ImWpQ`_=um9;*>d)~6yg>CA(ki2Lc@lYq>g5t*>?F&hyD`CYN}H~Qj$AT%hVty< zXWO4b{h7~F&3kfZZ)iH>toVJI=$`1C8>{Bt@Xh^r0L`7^o6AJE3AqzLJF{{pU-=MK zma-nlT%M*xBh5jHT;(oRZj{-X>gPK?_sieN<$`TiJXhNg4*jNn2OGWUbH7sVeIBh5 zLTfH9w&2wv?>5Z|Q06rst z=`laRS3g44M+(~uOn|3{t(7lufC_x#;m_V5_&a*|5g}5BWX&Avw?-I&8h@qEYG3DC z)%g%ubn+I}$)%2a!WaBd1*5*;NhE>m6Ztjf1!O0fNX<-=9^M$gvE_oMQ`zVbA%O0xAwaC&^N z7WDaYxb?NQ>Nol>L{)z+aOtb&WIR8~AAX)a@2f2Mg(|xB8DB2}bFWW*L#b0dpyLGS z5g{mAh-^lSb2!xTv=|_a<{%5*a9{gY)xOl%Zll^Gg@(>gwetH)xm04S`sy9bVeL)h z*Gia1mW#(adoYCp^Rox@8a6|>m+y_nC`painMm=2R5jN2vJ|Z4Y$rI^vHky1YX#Ta zm&V@FY=2&Qx+Zkt9_WB}^>9)Le(2)iX*}On5#{yU!oQfM^B0$0ER&{GDc0XRZcT-e z`J{DYQz@Y#uvg+3w;C)ypawS2H}oeoU_tegR)Be(uigtHYu&3vln@+_w>Ds2W7o0P zJrNfhu@hgN+|b5v0_^A+z>MH=x0?k)R{pgae%_vyQGexq&GNlHE2I9*7WHFopT6V&Hs0me)50Gf?>z|_l(FG4d~eAZ zkM7&S_afy76g%jGm+ZgEwg`1hM;QO=+B*UxY> zPd71o>P7_5abEDex;KL7v0;Jy8cU*=Uqg^loSQDqAjb^hdZM2+c2c{cvQXCO=#dH_ zKN$NAh<6YV*@M?5=$=(*l-NovDL&|}bx5r;_PUU)De+{{HorR6S`%k@?xFxH}t??v(1!n_A(uw)6O-tGbtw?{jXX`e-EUcX5X>q z`M=a_1Ds`UEI>Gy|6h(~yt48V`6!GcIJaHBrrW1Vo*nBBrU6{VNTydLA7@=8t0?H> z4irf7TMDnkvFXrG>KHpoA1c1&i4oU+-+pGi7gfDA=h{8#?-@V$$clW&>3dE_uc2e) zsFw8GP}wHhKGLrGScr90#o{LR2(d23RHx!i;p`P6m&WA;c|81||LWkI*Pv2&P<0Fu zHp5gsOD1I7UvzO*56d+g58Y37yI>?sN~7z|NMv;1LN3mThI%ikeZ8tcwB6CXg!PtT zJB5Mk;6L%ch_teL!Z(97fqkRxCx6Y52doc~%S{g?L@wQ<6d_^Av_x~VbvOn5Ia*es_!Rx$bK%%Ny`bXU6#&T$c1B+vC} z`D}ErJ%il_f~fWj{H{CI*thV{d$J72ZfMu0V&p~{G(MQO8O2V{{N9O{9Sz;)IGig~ z^5gDEc|EbiGkzy>wMroCy!UG1$~~C9h4>v-L}18BLP+Ph&fsL>$+|;zZz;zqC$7xx|)B+%Bl`LI`Cxj z91KMOG5@ zGjXG%VvZ;H_RbSLKCv9grK^83ogAy@0}M{&9^U@Nh+YRr_Tw2Zp(AuH^kVe@O#+kI>4~%9o-c+Dm!@_Hv0Zl6)oHX@ihfn0aBM1suzcwU!bsg z?*2R20Dtx!fG2stU+f0p1P!8f3+1H3d=G#VPauMkk8U>gn2EMOU?Sa5efNrx_3Q$Vz;Gcj&LeQ15V*u6AhkbYw35%G00n&0*ienO{?#*PRMStR4tIMeOtpXGRvU>Tf68Bg8c{u1Q#& z9rU$_yP^}Fi57piuR62J&1h|(U+~HDaJ71Bm5pxv5^g4+ZfPf-uEEX!tJkj}1fvum z0v;^7HegBpw))tn%ELtDATAjG&SR?kHsLSHrcQDBP+bxk_!-rQ*QeIk(;~mg-$z`f zK=IN;Z_-on`2($6sHf#IIP|F!Ne!>(I{n(;s0}lB*wi{K(UfUi|2# zA0_-K(T^eg7=km;dDVm4aL9PVd67fa5gY_QMIK~~XJViYcIS1B=edSLaW7DCKUUbh zmn9}S?H<;&28eWBxOFmF8V)qN;v4sY~o&=cadcN1Ih+Ehkiwg|6;0 zf4vFMR$Gbvyh@j88k$EZ$m8ILg*uZvSuf>(ZSS3=ov)>ZhH7LVvll6UmV0bCnjJeM z8`WxMD2!YG8rOzS7kwO>riH;fQnwNr7(k@>L0m{vKmH$cZyq0Yk^KKB5F{u%Q33G| ziUJFwC|QXRO(f_E4x`+QZuXEKTI_w)Jw^LzY0kIzb`-`&;K)z#J2)m7E!vJoh?UCqJ{hd7!z! zp~EsRE0`>PHftlvgz?r;HE^C`vmk)FP^f@hE(hdyfX z2@QbLlzLb3hDI-oHylQ2>?vijZ$dsS&75dRitt-*^bA6fxY(8#|MN>Vrsn&@%DVk= znBwkH`>-GOBG#=o*;0xs6&(jL-<==D_e#2P0%!@3xoJ2~a z$4?Sn%O;q?0&SwB>z0Lyl7?YY>8R(ZDiD_yl$WsV`8~L#h_Jtxu;cEJ4!Uu z*7I3KY;D^&v}h_e&SxLhEBoEF;DUnpP= zURA*xW_?jBYinCPRpz(w*zyRzR`G-S;^YFBYup$KLzdNLujXdI zSN_Idz%?s=#4SJ8aQVf7i}JyOOQCT23LH(oPoaTFW{N~aLpo?GEsqBxYoF#p8Pk(K zvPHent$&4H70}we^1c4Rd17;I%k#z5?BBup!e=e>iTZ*-B=;9M7`L=;nBO{V>cQe9 zjDv(kYsi#(H1!^X5e7yD`N3jGwpV=G8dk3R=ZRw1M%R&6JmHm?0aa+R3tOS6-R_5VO{r(> zymNehU2besC^Y#Ms@SvC#Xp3O|Dm#KUAXSX{9c?nxtf6u@?7Bqz>r4_bDoDzr2|Xb z8}nU0*S<6piJJ zyM!{KequXA{mvl)KWA}f^DLFkED+lIPqLDV3JY4odAR~e$nKAEhvtc^BlY4vH^Iki zx?=+w#m)KX9w59cJ%Q2|Z7DyjLo)LvaG~byBB8SfZARMqW_iy|pC>s?PW-;7R^>ji zt?jSx#(`MRpLBls+dj~JederfFGe-t95CZB4SwQ0wP|qx3-}ECMcq!Z&3TdSXB1I0 zwz(ksfjxj$*B-k^x^z=vbOx2`asMDiNTL2qMu6g_-tVBY?ie;Zob;<^lPw`JXglOz zXj)#up?O{Q%iAqf+o<&to0D7o!GtyamM5=-UV2uQHmBk|+q3S_%DM}4}-UN8ABH|7Y%uHrhh`iRo#y72wO66M=9VXm2U{C3E&s`ujS zhbGE9Hl+&0UsSf-q__B3D<&8-6l%GIzHASpXhU60UVS{U2azEf_ zH7vf~ZFx9wnE9NZO%nWMb5+@EbGR3;)@*4Ln)C}dveh@_9vrIu&i-n{Un_M>o4B~G zL6seYL^Zv(R`kMu>nHbA8tC5eN-t*sMY`u{6p(V~aNRWwX?%z3Bm0u6jG+|I3Dy28 z+Qv7ArVYa%uKj@7ksjrVihzKA#*BdBV9I8f4S)^{)d+9&a3YUq40w8o#F#S~d_b7YewpQpM5kP9#%tQO#{h#S+gp=T+%ryr=c-s?m$JGxjNe6k3dtJX+i)aO zGx}nMYR7OaSg%h|)34Vm)^mAZzyBpDEyGt5ip`>1WjZaiJRBf`X~Ju? zi=N*_E_{;?0di&T`iiRE^r|x&ZL*^G3HeMa3kxmFE&VHI3rJP0ouC+b%OdH*E0+W2 zkhuZqiJRVnQ%kFx_DI~oLV25oq8}`j0kg?^NDbrG`sGFdmTRLs`vs2Q3pl=}`MKAe zaMiMk+z+ac0_7DDx2*ccCjOLHMKT0)Le*K~dF>!q!MBh$RQom`kYl|*OU?=SH&pX? zt^2BX5nekWhc=5OCZH6*~C3)_} z)`J&2{|LVSi|?r~wN8+vUUyqY4LI*n3T?68E#!*1T zlY1n@i`JMgG=kR6*s=|#{~U+KYrc%^aA!pnLv`4@E^b59-EI5Swx?X+i;0|MS1>WUUIAWM|xK4_h>12 zLt*||YO}r5o_yU47tb$d>Df)L2;(K5}+(Fj%W_e}p*XVoD zeuqD3zc8!)J7Ze3PwUgVQ1bCS;lRj_h21^M=;h=XYXG(WR_< zLWi7C%~Z-N631?j0%FGTP#0ODWD?&K5Skjz=0&iD0@Y+jS6Fgknd$XrNq2LGijAms zBei(uQalx^kttZVx{rR|W(@Hcexngc$9#pnmkJS|O_4VYyhKUbzjJvmd$*kI{1Z|i zO)j;-kLcQ0z~7CH(;I-YYgESt!dkeRGNI;Tw?~?mP({cD1hh_jhJ@&yVgh z5BlrR0sTB!DVD$Fqa1)=CQsZtLMTl!)5B?%R!4Z*6_6Y&WZy)k!*w&eYND~rIDEd@F)(WGbcqsg!UW+tSk5Xw%w2jzd3W| zH5s{}V2bz}q$Ki!!D4*4oN+vDwW41H(sKqhY)T!XdGjguwu25bF;Fl5v7 z501pfP}b;vWceG8p_(h1d1<$eZZ8nmNNcXLybtKS?(>Jtz5e!GDp~q`pYE};%B6N7 z|A!vh_yCZDtH&PPloMGe%@4CqlgnipBS0d3>L<{W_5F|E6av#!Hd8})cl`~s2I=t8 zL$gG3IcAh9USJ`SKU!1&_NCR^im$sAh2yQV>P^L=+hke~Pluv|`CnVo#?2l>XgsIY z;yKaxhG6Nf;CkW^WrwgmReAgexP@%}^`8rUdo@9s1v}BZl*XDAQ(_4s{Q9Q9gRlPw zXh$!se<{<#ee*bacLP<+X6_6IN%gL=EiX?Ti+#6Y{4yH$jV=M_Nc&v<9cd`59^1a@ zpvW8iIws@g*d2xViWsfrHsGb(-=$j7dVfon$v!oDiV5Vb`={j42`%=E`a%%| zTiLI8bSFx}XOfHT4Xz^6^PSvN^)mo}4{vMB``WXEil9QNh4F!Q*zg;MEUPG?Wgeb1-VJ6~U`3PxswhgD`IJ$R* z{Y_dwM3IS8%x3ROu-O&Hu1#a`9v;m7(~ccC_dw!eu*h7WMGD0nc)()izRX7%W*?cUgf2_Z-8?F&$wN0iHz0oVec+@1Wmw7NoO-Z%+r` zwq<=gHu!dj|7P(u6^U`}xL5Be6i=eOqNIepQ`A7kq^>?oSqa2?xpV|(; z1u+qh6S`c*jolb34I){Kbb{D|cJ7NifJ4o?Hf;eAZxgONDL;Jw0$wCa?SX%ikC!XD zT36=m!crIp0M7U}d22@A+4b=XH}fW${G+Q}cV-6j;LK$ZRvy^!?x|bAx(@`0un&u{ zy0max53!2(sG>|$R6Ix(+xm+4Q;_ zZOMTDpfhS4bNisoRRqdiyG8j2J(?0%kD_DD6@7bM6WJozMEep6!e>kPB(|Hec%6l+a_#RQou`MmM{!K{`{AU^{Wn&$>}q zObi0z7Z}5`#etdD;VB%y2uw5tL=tVVpf={W% zf?EHwwJ#c|_U8wElEN8d*p6L(Q49|WmJ&Pe%AfH=V2hpkqhG^m#^!;1JK*pR}uIw)!Tx7 zecYekQjvhcuE&iII>buTi$XP@F+FxhXmpA1{TX2dMLs=29VPN7vopzt$OIxqqvR!C zfRy5Ws(r}%1FEL|P6g8v4+$3$$^m=h&4*F*ig4>GRdYA3T9l}d)O8JTlhoi-%q z;i$mA57C#{Np#H^LtZW=NDnn^Ne#)x6uCIIak-?xKy})SNr^|X==MESFO`| zf3XahgE%-^o+PuZgh)dc z1S-+_0X6FB8||S+KL9LP*y%=(sL|bO^qOxpN{w`TOi$nZOrsgTk@U*s{;GI~uQ*T@ z_w*ItRK>e|#Rs!cI!e%sXw)pfEU4g5%f$nB^`^)I-G3#D9svkS(T8@MwnB7sk9Cyk zhlh-ixizW%zm7hvEtn>X8Lw1?4vb21RI;HO10K=T9C91DeQ(_Se``&|?jWNJ0-K#G#9TgYd{ zA6%Su|J%|Z@k{Fd&Y$b^p=gY0{Yby{;wDPzv0{K{|Vo%r?l)(i$NnEaMdHw;_61vI9#<_Bft?rG+GMhZ<9K zYt0JcFHVSWy;_Q4q%^Q4UHGl`iSZ|TJJLn`V%N8yv@Z3n&sOUq z-(j{5Xf<*uS;SD9iEnglcjJXw{5*oAjft0M##p+~594pM2~GXP7P>8-Bl5M>InqQ1 z)_1fni#jB|Y?&}$7ySMqwO#umL1N>`05q_kO+pivI@VV^UDfPUA*F4=7v`wnfl98# zLxB6puXczaWMqn$CoSc}kqqZ|@?rY1aM&Np2RvX6Vzzv!JFx{n+7K=N$K=SuUL@j!8QcOPadn{9oos}nV`GQn<^b})InAXkx zYFksrlGf%6_`9PS1#=I~K^0qIBTCXg>hqdio=bUs?n-KprLvyUv6 z?qWk%C#O)&*ZLA?U9Pc}PJ)U%{<94W%G$_vX0SoGz7bqZt>m&LI@xX6Z$pzUPL{Nc zt(_Oo!=)rqa{pS^&2RfF-uQ&9c+L9U^s4)tRwR6R2?Uo|INu0gRL_1bdjFka>IT82 z#L6tgfax_ZMz?f!7M;yHQ%EOD4pfhIzw0ra>G5ECOx@|*5BBZ%Qv36K`)|Le{ZQJs zQc^Y{6p|-FB)5}qv}SIzaCt?Iy7)%fcI&xnG>Asc%q)G@R0;XD1cqKYV&MVg-8O9t z$;Wx4_7N~LlgWf-tmZ_~C0AimF33YtKrpw`+xB0U_M?Z{51MwCblIXW27}An{_CWp z`Dy_lE8Ieg!ga&ZKEeb!k|Uj0rNM+7-QVcPj{bTg<7FZofmf!ejT)L*N)_qYCdE}_ z5;aoK**KW6^Q@<6Khm9j_JM>BRpc_3D5}3wCYH^#b0a-acbG@3<}=YczQO_wO8!PO zw>w{Gb1QA&K)a{1d}tUcVO({)8!&>Q{JNsWP{`MZ5_KFDdTnHYflIb&9>z?nGmLSh zASznWn69yq8mWi8ejNWq`u9_uvXeQs4(#{6{7%*Tdn%lKGcKG{EZtJ0i>khlXM0cW zFI4?I=wu&8p@LIXp%Vaub1>4jnvrWRw_f3^^i!2V(oUOM#O%xdu?dS=3e<|8!5z~^ zHwYVxY|0$pR=tRzlG{T$Hs>ep#|p&5P0J8ITFN}~p);UV&dRFatVrvgmke}h#No~R z_kK~v?x7E8Ne&=^WbV_5^y+ zVL@@noa8{`SglFr>IN9^&7Oy`VbhtBBl)c)rrK@q`9f|2n?jSs&m>7z*%ZoxVZ8p4 zpfaKb?mMz1#x|W4eH~KoV*+6LJD9f=6wi;2wZSr853y#n=1Xlr-&Ab&M#1% zn#mJ`!K2dswlja@7zzz~`?iOdC!(xOsdAPwOPsS3ry`be|MZ-!57gw->y2!ab+syW z!N(5!9QMs}cgOzpt7V=j+7l#2v$uZrG+Se%Gx789!#n1r9?g;`z{@&>2M@F8erQ8# zf9RLS<&prGCDZ*BDy6x6Fhs`zELQT-je8B(i}de+u4iM{gi{}QJD{Ls6E=j4%ul)y z^u!K|-?7JoR=5|3dQuJ%#);1J3yhSH4sRyq@qh}4%0*~LuvYSj*E>H^Vzm*UG{qYo}UXcEi=Bv6%0=r>$USx-U4I6I#fgd|ZhSe^M9v@qk zA1w~o-KXzRbh-|0&+@-;w-3Ux&21t*!xq0*Xhn0VAy3nL8v;5A*e`r4jlM}&r8!|c z^hq30bAJP>29ebpX6Htah%ef>bZRM}j69KdH_UE>|84^)L}u4b5}f$kv%hN-Tb&zQ z)jl+2PV;zYC-dTqNVS+Aj{yMv_UZZfFa56c1KThsH`+hGH0V82Y$@S3%xM#Cp!e1J zk?D0dirC8b8$a8*CnWTgl=J#9nY<}deY>bx0R<}#NDEiKJd0-Qt zlX}eaVZHE4-8JP8<~J{LB5_iu{@1%KVRzfvOQ08gF%Z&J%uUT-lOZnN== zG{yP;yLmQx_k-P<*MjKq|DW*|{(mxFDcCUEfHXU|;k68VM5ABB#@R<9=AvCEu4(|4 z2$`m0tMeiqVl%YJOCx9dxX=HxK31mz=0-1XULV(F)&~n->tlwW>XBIs#Pi>*@pMv8 z{}PvO!DP5;fnS>&Zn#xNUr~f;bpzi+sh2`PAp?S`VpA5!ZxWSfL zn@Fhc*6*nS`?Py@yU6)d6vJuq#+XU+CcM8@)$)t1%8V*htJ}8B$ozXEnbFPA*#2o5 z^Sl^qAAOcEt0zZKu_1X|9)nmnNmj)h?qEP@76rkOE`C>~#04<=4KaxWGFMjdqb?@W zKg;9aBltB{3j9c34fl_F`t|cajsFk$yG`VXW~pzmg0?heC*=*}KvtC=TPn(QqwcRXEZ#M_Q zzy~ARtjIPEURbjE(|*%$an=lm?wuW91kTy}3E!LdlT}F1fxJozX>&3nbP3XPQNP7> zF~`fS_|n;~4e~O!n%!hk>V;+*63EfnsrxsIo7%8Ngn@Shp{YbgCbe6=(O_aRbY zUe`Zd*Y3yF8b?Fq0DupO>v1ddV7qC7jvqH@K#Xg^Ts!Ebeo>|v`WHR~D0|C}`v*PY zbQak?ezrVd)7Lv$<9E-8%&yhxHB3x0Rb$us?hB4yuN7dIQarfUo%dcmuM<^)k{v%> zc3N!pHvgnyoL9$q@5sjk_q4bq3sSgQ&ZMGh_-O7nT~ zhvn%{aP>3zi@R9&>)ld`xDKtC=QSnxc6N2&Qi@wnSL_W#3PUxPgitH^a@eShBR;`H zdzHnn$QcrkYMUJvA6L*}QEXA0vbe6q%DbOOyPh!;&eRAhW9n&(CCl)V-XEDoOc&qQ z|BHIA@g`Xi#ue7f7Ax$&q`*HAn6A&Tp8vc@PW?Zq@zxNBZks)+LXn4Ji~eoGY)}+OAMDb&AQ&x{}2!jo(8x)xea}8|GFNYSfD6?wuX| z{Jz5c$}LX^f=_qa(BwU+mXR+~Rzz2`iwvjZy4K5HrlGY>k5$v9f}d{O+*FS>NI#^b zujaQX*W&au1@@Wx3*DA4(OItDLBcKY#1;R$K^~pjmq7=yo0C*DZkEi^LSn(KCv5p))%D*zO(uc{tJTTO7daL+YG#a4(S|;~R4N$Q)z4AQ*K`%Vj$m)V*~&^Xtw# zZwvDf?Z|eR(f=pbX@ALKqYKx~P_2>4GpL5}^7~0R{;!pM2VC&G?lv{paI35bd67ad z_pAAV9%?$7Hp(}8P#`^fO7_06)Kpm8uV$MjTuv)pEsL3TjiHCWee5UVa_@?|e|Fy_ zzN6d>*o3gfD#Kysod*0^J@qn3`z3ti@(3|fYusB=!CfJ@2%x;CUw3Y$O`Ii(_^?a>=Bw~JGtLDV?PjhHm@MPzO&{d9L&`}&(U0kYR*G{ zDX)7%G?%FhV4>P@dnWT|WbgYis zZ^g8P7d8kX_0`S|_TX0VN5EX{;v+ojPDla zLMAkA=lIuoJqK zRP)dHBMzF#Ke0`RU4KYLRo<Spd!7I_7Ce}$wG)~cZhR$$5 zPTdyNCk<3S+sq~Ga-MwE)J>krPpfHd3us_&Z_P!eDk^0%nu`im#M>=dMR_XPqeYQA zPquGS)J8?J2{*&aRT1}HO;dt74R~eN3pqJK3Bz0%(_-TPbKHgO7=gg@8gg~0rXr6I z50Bi^g@F%2;x;-lKk}~EziJw{l7hCg~ zmu;-^0f6u|&J1cC<7;TFlIk@Z7@Au4y~h59)7)Y9=Q=rCbQIHk74e6L%i5-ajR=5k zzD12mm)}bzh@EHG+Zvol3ZZb>wqSs#BW3 zW0Vk~HbXVtQS*(-JL)ZpdBP?rKb&%{mO4K=?g02S0-?exQ;=lc_T0@)l0$sB?pl^= zm-vXTvCX-W4xwqs=gwZ0-{I|vt0z>WwT-YR_UbUZ#RlX?V+f4`_x3!0<<%#!r;Xz| zjc?sNN|E@y7H?3;71%A`qrUFg&qdr1uF~MLvnT4DfE;ogZ!Sb|glhMNk3Hq~6BOD! zGEx7=%*#s?wU(jy8v6$|ZuT_}(NEQoBFRyZ4VVES)MLM%6sl4BfBqT~EeNnuD8Ldv^(F&aNEzt{`Ib+6fC)g1r}(jDLlTWcBBnWJ`S5@|=#b2M*Q zRo&yqZY9`}HOBIN@&tt&hHA?A$nm11n|tI|w&FF?J$i22D820fl)e3C$wz68>ug1# znq8J=umB*etCivg7|uFOqj2Z$orEsU#c~v!<+H<`@v2vzcsb;_ zv(hrS-8e0}8zy*VC)tGxZg!5rfA9(550ZFDl;jBhV*2Hri!n&>&5h|g;M-NXyVEy{ zs*!F&Y4i^FI_@6d=-Di!%330I5h1c3sZ*&W!EyCi+cM%8foZai&&WG@W7zw|Vd6*+ zCXYJ0>p<8&avEg5a4fqwjk$dFpc zWYy4Xj?W+YDaWWd#wEZB_~p(u~uu5kN- zG=F#T7tm7QgDZNvEH%lRV>KeYmGXKZ4BXxv)DXn9!%bp^+jh0!TDD-^iN+PWN62D; z2*BN{Bi%hV)bhm*H32Z^2!*VykO1hh#RNbd0-#&HU3IxmRutJOv-oRtFIx8IFfdP^ z%b)4}<;_Z!46_o}TiKgk^}8hfJ3|fGrf?R~e7DF4%<0zOA8~cm^drlzS$1mNC(Ey3 z>ny-Exdw!QXK+nJFyC;pK8l?l=ewpowk0>($r!`yZfzpl)tTNsa_$u1W$Iu3U+U+n zzQlT~`lVU*$zo^<7H8dTgoSSgenD3K5cO@+7=K$76Ehh@uk8BDc#_7SQ&6Tp7mKC& z8gi@pFaKZa7yLo}YU*Z6>keQP;TZ z`uZr%FN^%Y+r_0y`}3qsHtwk>#1cNr`yF)_=YcAVWnHLQ$Z?&fnJQ4T7r(f)4gy!# zxPKp{Omuon``%2FC*5?X*S$PY*0>GS0$W|zj|@&)9rDOA)@DlzC~c~ zwh$rRxOIJN-@1pJsElOz=ifz;M%U+PP7BRv5$s3Y$8rEZ!L5GKD4(3TjYXKzU);^U zw|_rMZ%fqMTA92S(Az}cTL@h;y-)R}x6~A^TQ}IZds6L4;iipbj9Lv%UMMH}n$&}%saQ#JfJiyxdmPeFH>*q`+Ex$j9Npa<4vfN*gM1Iam z<>ehr7trgA>h<-*P0)781oqU=6;~vRR?PSEE^oB#uBgCxo~m=(VoX0j)%;frW~D{$ zO}*i@z<(9+X9)bM9{eosj$1S@h0B$KYk=#7x+P!O5}DXSH6KHf&?LnLm+1PGAUXOh znV~;xi%mN{IzKj`quv1|pg}LD)71mQwF=3A*XX<>Y;Ua%izgaVx2NTy#|#$-_<<&O z(Zs#+XJ2Z%Kp1i2!PE-|$}zCyY=OEW03}_RDci|| zLN2BIZR`8pUzJOP%1`>rcK$Yc1mhY1)q$Du{8H?3yusI1PKw}s1^t5hOBQ8~Kd2w} z^=tpA{x$MX3g~rDP+z$XKzu~Hen}i^`}_))LnBmMFUH^-C2L7>USrJyBFBHbj)1-``^~pKU?o2aELhyM$_gq%?c{^>dmj*FM0%&bM5| zKlOTh3E-cq8onczCDz$&IucS`5!6XkC zyEe-<$tk_3{)rsmerxvBC(T0d^n7@G?zjI`0LE&r0i-US&gp~|64{?yE*-i+_jM{@ z;Qc`EeT5?{o4sxb0*UN}{b1zT6nZz;xoJyKvgtMK6ucGI*Cxsp03`Kc3j`$uL${5D zM+t=K{KWkdf#jd{*IkIkbPE5h^_-E16R{;B50OdiqkWXNK2daiK;8pBUDs4^MutSu zzZ*pI6)yMu%}qW&URMq{?U>$~C_0fgcsu>{iMT_7HjVC9jHRiM?0X>J`WJiors(Lp z?E|3}Voqb5I|lyniK2nCZE^wj6u?qYi*cRvD&8_ z@p)}5sC}nu>phiVGr%^O27Fqps^_a}W%Kv-Zy9wnpvv^UPxJS@R_(j#dq=+8nJPF> z1#a`&g}EuRER2_M_J`|OC-HZN#pkh9bSGDH5=qXWfdhx(^m5YET73#GLvTj)p#`qlf$yiIVQKP&7W&ZA#TgdFZ80q!s>QJZB9>!OJ zf`{Qw84I0)E~`oiQ66yWBYge;3L*vSXztO!!BV|Ql{{khlXM}1x z0@5vHlwwWS=Ye|EVM-DuTM{hU+lL5 zU1+$^1J~sce|=Wd3)BQT*(KmBx2K0(F34pb@=!tEAINA)&lq5@CoNqM5{lOkQBMgp zK4$U)I@?15qHFIkk>-I3wTZ^A{;#@l_JgTeONl~Q+}DGc7Hpywi3#{nVkF}2f|W;f zqU;3HPi3r&kEkAK%aV3CZa8s+|awe*KKYZ#)~fA^c3kWYtus4 z^Wd#b^}3G1sgkx8@$GnTET~A_S*Uh*@D}}#5^4*Fa4mz0_dJ`2@_5JYZVlz-bsd$Q zfotSY?Y(R*?x#kZf<5nnP$B?Rupg+nEkFED>3!yx^*rE4C+tUwcE8Thx_}K{76j59 z%o=3PJ1@PPo6Q-%`Q4z9)?zPKa|O*JpWMhH9B1{=W?Bxldm(_QsfE9|WN}?aq2tSL zs!^SB6WErg`zrE%jZ$AH_`dGV>g(5^>8nTcJh~nHF#A(~)^>iF1L@H1>f2&c$>7P|FH9$-U}{%?J?o506eFL)Y+=@_~nvte)2KkxTdv+Z%^SXUS!G-7QXF+#@DACUpXSZ>RwRePucbZ zyj#dKBGqpsY05Q(W+K3pKNhnA;e!y0d}GM&OEG^A;rzD26f~alNfdql*?|yuqx*`Y z>D$pEww5EbK@N#0hs8H#qWRLBdfB0^#QsrQ@rXQGJMPX+NWg23<>`Lj@>4N5hiH%ZdoLcJ+v0zM$6WjIcB$hLk>7V3~y!^bC>hL$$0#lG(u1nYe2 zj(Wa1YH#jTbSVw88%QCK`Yl(~-hiZDg0yoShFp#}ih#IX^a=I~(mX+Q^5H+t{mtCm zvf}@QYUKB(qx?pr=}1lFs$1@ldM_#PPY36x`F`AV2yiHZ7v8wfB=pA+ zv7D=&ve=s3=rfq&bffL{Aa5g;;ntmSktX?u+w>j1@@jr+eP|SRwKw@OAxiQID_TVp ziPs8{0%iZkj7vT2?FQ@l%K3FKE};8nQP6yeh&NCig4@@(ln&bojikJIZ1=sQ|FJ4^ z*vf$hB0y~ui;s!xiOSl{*53Z)F8j{d=a)&$zuk2a|2s|dpR)O%02*mIS}0M*6&^b= zn9HfjJwmq-?7+LU0q{ONlZJAfx+}9j+zuZ8J%XQVQ3 z(lEL}Eyz=*79G@L6_DV_Z2QC{S|qR4DtOX2Dp4bg)+34C>oj`d_l?e=5fN9bImRYW zplud)Tk@x=Oljs+x-$3Zv&{^;-!lP&b_7RbP~7M@!#U#9bJFikDQTuo;gKSfG&rev zHtPh{oJRG|5Q`qKdERK6N%OVEy{fa0adqTU(e}_M(i|PR+;ejw*vQrzaPrQ+i$uDM z8oH=f7Z=loWwNW4{;eGoCCeT9z1gQ<$Qr)a-_MxhC-X!G$YjDe=x!|;rG;6;jrSZ#-ck|Y zM$D4Vam0I??waqqfsc>ro#&ns-yu({u+B*`d_AE{YKWa*;*DbccH|2$EB<$+pD5Mn zHn0**c_Fv>9Dm+3%0`LpE4pN|2;GP!?p&%#z=d0=sxG|7kEf3De9L&uWOg0(J7 zwi?k^@pY4{0fE$OrmvjQBP$*|y?-emX24&l8RpeATcl#}@%I!Eco?`ya12!`YmMeCzWq7ZMSJT)cRtApu|EL;o{UB;+-{9~psOk8lO_sG zqUfz>w5_ah%O)%OW&D*oSS`TxhU~kEq#ub>^9Xk7`B$q%^|LjT(-v9XqYW_=MKvaW zHiahZfaUK&p9TID^541eerU^yqHF%)VaO!zA_if?UF;R`R|~0BO*@RBsXc5ydDMk< zECl;`1m9(Th2wtUs25LephJJEuco9daeQ96MU`o$cRJD%E!JaEOZ(R*if&`(1n%Q&ez!WwB9K1fM`bC}S0rqv1(>)k? zx@iuKP3sfQRtnvCyoZ98(Ll(pF1jQyX-~v^x_*oMm&d5?`4wNb6%3d=mw`LCh>w>) zqPsp*kNmGaT6~wkpF2(8)A?Wb;d{nh{QLZR4;|d1eSIO5#gMOfl_3+vzCCB`{7bU( z^uNR{*-k4h1-6t z>1&L+z~YGzl3h`R*-fiHaaQ+2cgIbfHLCh|Cqv}0_)1$*GLYt}uWe*xf+V}r4Zpt> z+u!UR7JG<;AEPss9j<<2^UgysdC8^2zt`tg?FLojbNZvk@5Zb)y6trvbQ^4QSTg@* z25>XJ%N{+?D^f?FyVDSkJzyiMU9UD=9eSQaa?iaZN9)P z43?{`C|V@*)x{gya&LukQmT;R32qo}ygts38=T+m*9ix#OY8kg2V>VU_F(}G>-z_U z`Sg&v`i7qN?Fc|LGn}hiW#hd3R>pa;ALoBw0>Qf(f2(_o(r?!{kykY$+KA zPCnG<5BdKwV2c0Si~qTMNYg)gnd)bn>-@U7Th@NS?;Ep!r_&s~n|Z3UzJu~dfRu!mT!D}#h~3}ja9y-Kb$NzA zOjZ5Tea!g`#w7DM3TgfUVpVV6xkoVR!3VIDVn8DBS0p*tvh1@j0x$jMZ3mi@R(lj3U{J+h`Hy_nOQBu6d7O)eCCYOBD>`YU>29QT=gR0Sc@#so z^$VO9=aBUI(9!?|NtxUvc;R>QboVyQNP2!+$kTJZo-BneBTrL1w3u&`r-x_iElh6h z*5bR#Q-x}$<>`#BExu<>D}r|$eEd87Zp{5}_`RQz79Wz zetWjUFa7>2zSTik$N{3aK>)ldV2P3wUqArd^`!(IcO|tHdO>%T zWTMZOIvH@Ln*(b zWdS$25|8zD6Tx~KwUm}BQIadfkM@XXZ?}yr8F64|XzN=JQp-hxpD20zIhyV8`(|&@ zOs94EL-^^ay@t+}7o!9$lcV^NUcc`7zb5G}`EFVv141nKV=QwOj89Z!%ic#p<^YIlbY5{|#vBE7vWkbXLR`Y0P zm5=?>Ey&!C+YMl<7yJ|4e?73RX*!Y=ny%q4&0j%x<2Pg2JJ7FRr4CE^J=41A)S?e~ z0zpTSX}U3^$V=dC8&D>`opYN4G$e`LZXg)k5iv0>X96<4{(SyLMCXM4Bsd9e8=Vj!JRWQ}_U^fFYBlAwlsY_v(e?c?3jvzD{3 zpEaJbma-``%5RwZs4m%dEiFWA)0&WBULSA+J-(-m2j5lTYlp!cVO$2raF*sPz2w)y z+^PDO`elYHx$1y!#Ww*}#;^DCG&reU)r`&8d#SSBpqM;$uYG28dtn@S$hXPxxPh~r zn+}G?IU<_poYCMRDmP-TiFUq9?qfA&*-N)!P z`4n=}_G7dSI#(x)$yBP7>&|>)_dYZzel;lGUd6Jl*KZF1HTVp9sw)oE`>xdkxKA+o z!`aT>hp(6jU((5KqPAPIXNG8}SdItmXTKQHh8WQ{y6x|h$Q%D>Ic!T>e}@Rh)j}{)GW2PvS_QqC-E8qzU?Q!k z0+b}Ky3vt_Q_OFlt`CFT4}QbTFo0nV5Ke7HJ>i>E^ znK#hlr@&wpn1Mmy=eZx>+$0GrZhb22hOibnsXq6x)X<_A_~)%W)p+w`_Kwql?r!mb z_Y~kNJ~6Os1@;aPHruRrIADz&*uw~kOy`TU3^J$qWO4baKL_h>4O`EB_Xb9Yx$d2x zzGvBNY8NTuzdJ{cRVwNDml!l|*_-=C|FXtuR3|kY!USGojRog_7+c8y^rW;_UQ>1N z?}|Ks$NHf>NqOqqti|N{u4H^JEH;>Z|d2%{J%|ma6K5zfaX9ekIe9I--1NRt1@i0hGqIiLOC}fE+ppL`p z`oC^fiOFb+W?mI^BX<=78S~wtK;$vv z8Q2o2j#+CH@0GQCOaKx^XQ^%I_y(`l_XygWF?D$=3>{4;ngA>o36w0_U7C|j(UG(K z?&MaF^W)kD{OS)ihA5i$gh+2MH_k1!z|DO395-jhbH|-3q)-5#=O>Uj!#xZh_iylL zyL%1Tgt#WNg<4LXSr6El-8H_$$#Oi+-1}Sp%E&OPokrgb(;a8k#=q|6Q-%Byz`A#a zQc&^18WMNIh_spz0PjA{Msxek0H?S^0PMH1evqS7jLFiXI6gx{AQ3{7kCL7a#-~v9iAbEqMl@ z?ywJoU8qfN$6yy)DG9`mN(5qDP_$mt`0*|{i_tx@TUxyPH-E$sXY}IT4WlR)y|HIW z$&C#6xO^sDyxe@^1H+?Ic!--#Ztg8irh*}IGh3rRHNYfoMk+in5J>K{eAl-*U=t7Ip6;yg3#;t5I&Jq7ORpUZ&OA5gR+ec zIo0IMI3ryAV<^_3?lAEB%&P0vI{W@J8j&VuZ8$Elcg2{?0R#yI=oBY+)gf#YM>( zGY5D-MT$eyIu`Ku$Do~S7DwJJ9k4m_4R2ENPTFaDwq*C~7sqDvLK-a>r{)EE1kmqJ zJwC&pe@=oZn}T-~ZqTi-gS&%{r>IrYYJf z6}54PX5Gwa=jKutsj_7M?#ErFXGFiL9+(3^u<;(!14c<)-nJ=R{GVtjb+GLRyywEt z$etmzYu|2q&@Nn@isUUAk_+M5)-*(TN>R$5SW5el__RUn)y(UHSD~zRpQPvONS^r{ zbK0=@+nTG2UTL$I*!LlzH-FSIKW%TM5K8z0iFCwY-_uj^2K1n=a1qP50 z?BsVq-jy5{|G2W($HRK94>Kpcly^{$tX8)uUU-Nu-Z?hu91HSFy8umaVbK$M(j|qh zJxW<={w!2oN1KXX>nai_h2E8`y_Aybfqx3sp3fi2L-n0OMaP!0);ukf9ay#Shv*O;RTg_U zFS(IjBs1T<{u53_n`{}t43)*-MmqFcRy~1^@0p`KSBG#r5&Jg3tiun{1Ijim%!_vJ zur#tK-H?T1OOgw4zYd7_j{TI&r*B|~o{SaZFlby6H{yA?IGtcK`6fplyVo4hue6<& zy)w2azjj%9sN5xYHmnd(C=s#EZLd2t4c$GYJ$r@g0yLH)@27AK0pAw)XSRMTb5r5O zV4jwo7deaTtzpIMdB#1qF*nsCo4vBvnwMW%^A%j=O$|-kRe5?=#9Y~+-LG?rqn8fq zaNVlvEeA#ZEtz=R5Cp@rR5h~~eJrUvAupF~$pkV5D=L?x~2df!x9IWIT_x z{;7Bj^AOvHZ>%gt<;CxYYLqIUd2Tr#@)P)L0B#jwE&iA1?jX@LJa@aEdJk89CVCR! zVGR78zZ!^tS=RKCy__@Yb-;&-VH=(k>~Fd|Am_#%=yTK0Z!5VE=+*A2;c{O;r8{!1 z4VyAgiK?MhCYgtP?%aNdQzeVmNUd^Vu)Zw52=!S^()3Yn1O8TzAyRyo%J^3UG-b#O zR~<%FVgB^t>NU|h9}HaIR^6KCKR8hNOm<)#Kd$`EzW?WPqE*K{?x`}oDJ zkK($c9|uov4{$&17(C<{eLE;CwIF~ug}s2wc9(pM-kSMd&~7Jk7Cd{xsoR^p_3^Bc z?tR$3$5T=my+PwDEPIoAY;va`Cg+r~-SG*=h~diP-+)W1)cC>lCf8*vonhG@PyPk% zH`u6nN4M-0lK^~}B{+IEyU@LZ#69y2#<80$D%`@aaQAQF1cO|?@m1D0yfkk>3thQd zLs3#Z9!K4h8@iPpHHWubquW)#TaB@-wn524H^Oj?u2JGdpiO{ zWa+}c{-8pzDoAC`Ll2vWE$u@!I@cgdcQt=>f-!FENGcp3#}`b``dekZ3Qc+ue)CiG zGbMEeqyUV*$t<_QDg+%g0iG5kj1)!!Y!iLlJmjjLmSOGH-tTc!(6(}28eM_WKJsRY z_k`q!lp$$rFyjP<2fLu>2n|IblG9Pw)B0C>%+Tl+KJv5AA*wToI_SAaWqn7%G)5Px zl6x5ptwUve$#YF)VMOG`co`NX@91 zL!*b}UJiitTT2M5^A{PchvN656*>m~SP@?uj{h*?p2{Axz&T(mqz-QRS(K3 zjr2g8M-k4Fo^JA9bDBn;P3q&bf~;)K`O${OmsIqc7dbYZ=+nL;u^0Ng=ey9f%FZZj z{dYw%Kdf}XkCDCngYoB}m~Ywrx_ww5>RJI=qL3EAae!so;1h-@ZBHa9lDJ*!rRXo+`9pDZ(xRMPUS-YcSd`||E;9# zf`D!#^}1H?R;0mW_$vKl_@Oj>q!6^(2l#s!{0)d95$7Bad`|Kk3P}Eb`-N>ey)gO7 zPgDcAyp~yYZGm4Uymed<>4cWT!z26F9oYAEY4pCeWDKcmZL&(9xyY`jl@>#I%bsjMA8 z%f5{DEfe}uS$Bl_Ky^k2a`Z(S-oP!kJ7;%UhIub*EiV8iibhe!(lpzQZnqvgCM^;| zHSK9B4{kjxgguuVOv3{t2f0+Kgq8>M* z95 zgUJS`WJS6oQV{Fu1@1JG$VtgN%eX9)<}R(|>paTnM{_?e?e(wxeI|cr$Z-FV3>j*# z2SmT+#1iCbQn)X?Y=Tr1jE~;>cU1a0K(MdSTd@`Kvrv#ezDXEFZyAPrziw3Hzq&af zg{Qe8oSb9q$zJUSHrVCdtU-K0ZM^d${NRtBZ5Ebn6Y?+fxcPX+`%|Xf`2Mf+efwnQ z`^w!~%y)#c?D>AFJTuUi^F4Zx|8c&5?%i^}ze@iO=KDi_|IhQiqmlZL=KJSA{qN`d zq8tA=^L^c<=J~#qzccgw?BEO;em~zg<3jU4&-XXPWwx5{Wgztj^F4G{i}`-|LgxFl zw|+O@d2^fR8~&_M=)K>H=Bv{6X}eBkU9p&WFDl(jrOco{JX(V?%I;}~jBzknu%H`V zZC5|R!!7^5E$Hw0p1q)VVFGMHukZ`HP5O7EU(i4G`hy8(JvU~r=Yuk&jr_Icdft`h z>GgbLu%3@-y`ISh7r(f`-FCg7-?RVwdUhXbdHuI_d6w2CLA_#FU|bjJe|c-WnE?r#B43xbQB$fWKELCPqyq4y=(%fZK{} zA>ZVq3uvMwmfF2adaKdje4}hj?(sBAN@Svh`2Eh#`^+M0B4W4MKHXw`*MHt}e7j|j zZ;w{vd;6jm)o8YF zls&#HY4pDspS_5g4>0x@26~=t!auu}XA0GF4i(y*ZlM%QX}`6D4vOw5Ey@o1QU(Sc z5+x(v;9RUTgHHF4XUj|i6~AGeuCluB6YYo;5e z$DIe+lGXK8a zKh^Gobi1KyH`}*so0Y%eO0|>GC&S-fvz)g2;7B*iIfyGHkjyr&!#e@rpC@p_lVemf(`_Zj=`MqW1d)uZi%#0oblsQ$Ds zo@M&N3U_@_tgCW>UqXkfeV!F_0m{AQx4yq&zNmtJj>lkeb8b$gguky0{_Y3E$2J`w z?Z}rCRMsX3|CmizMlYt|s^|qOh@O?D-cBhCURzG>l1^*+ti^Doj#O=7JsbdUaIhrIqYwrdHO_@{BtF(cugQ*59c-2?(#r#k*U-L|M7#$vn53d`m{0Tv>M|``^!cUumDZ z?O07+E2~y=0Mb-7a!Pft?dUbyowB3=X^8^&(^@f4qG-%5y1i+fegK?c&aFSWx&fLR zogdSlW90iHJuAim;#lp&mu|Z&Ouc^+KB(6kVs70}`}l^g7^;PXgB|wVR7`l+_x05z zCl^sOc_FnpKeCyfu^KA(#{*OHK!V|&$|~ODy(~X@CUvqFyO;lFU4I4qf4|BfBQb{8 zp(CUEt@R7JgXjOiGpK}acqg@(8N#jTD0M1NThwcR-4pfgAELg3XUEsRS?O37M<=fXK|ss!f`8 zZZ)^KnPNb2eO8ucpN>KPH+&7|c$?*&#~yn_wKlEq+(X=)sIrtW9E|*CSSjBOwq}am zpDw~rNEKury4vOuODqsw4zCBL-?Nfh!c*O;?E|@qcoga0y-IfS@i%HTjqZJZDKYA5 z|A2X;+sCZX@(XC?ZJ*I6OlmCjm`u6Ujy<)Dm=9yS0FN8?3WfmMZU&ZTLT=LgojLsp ze3nGiJi>RYR={^}UMaqVRy?2w1wu8-Dq2}Jj@#g9esUf?wP3)U5n?|X8hk26*_nIw z(HvPgQQtlECl=y`y#K|#CyFjVP2y_>^XAT1SFw2+<-c0o5U`2+8Y5BW-iY?%$>F0w z1yMrV=m`Rhy?LQ~&;#Dp05`(!E?F8dGe7+{*j2XJDc5&~-xqzn z0p+n>XG~P~TkjERJX1BEQ!~#pdM{w?s~X1fHjIla6PH>pQ)JSM4Rk_YTW(Fi`chy0~P_N9;d!A&L6`2s5Vpty#x`1BjMmKaLC z^@xgeY+DM%T%l

PgrA36Gxe=n0RW@aPF|e%J3$c;&u__uY^1>F?Rj3EsM&;o0-;^}Ppnd$zx0 zK7i}>L-@g8KZdK%1fFkfe+F-#XFiAbf7^TkPuw^37uxH0@aPGTp77`ikDhS#>HW`3 zdcyVkA$+Tz@aPGTp77`ikDl=8317Xyd%~k9JbJ>TCp>z>)u;Epm-K||^+WhdJ>k(4 z9zEgF6COR`(Gy<2$a}&^e{8;ompk(#Jb$tI37-9t`5B)0e(!&Ed*=T70X%gd!qsgI z*YgGw`qs`fgV+A=apv%Y`x0LNh3%~2>b8Na+YYX7d$_tC;p%pRtJ@i#c(>kzx}DW+ z09Usm-Mfw9>NbI^+Z;aiZVR}&E#d06hO65Ku5LTHy6xfWc7!*7==U>R-Og}z>*d|f zt#=#1)oln@w+X!U_tP0%-R5w0Tfo(A30Jo@T-`Qsb=$#f@3yD=&x<(1)$K(0ZfCf< z^}es$S>1;4=Fjaqj^XMyfvejLu5NR2<1+Ze8H6S{Ys!PRXJSGOg6`=|c(8(iHsaCO_k)ol+~ zwiVAZ4578VLpMk{`wg_d8NI64o_cdzJMpS z`4WEc*RSE3`v#u4@8G%*_i*(*!qx2r&;HWRd4`YNhdk(49zEgF6COR` z(Gwm$;f=ptJ9zYjM^AY4ghx+!^!(v&&*qKRe++M5Yd(Qj?lX9Ov`iPT+bV?;d-;rja;N4WZ*=>GkaGd$kkf27;9P)~UDghx+!^n^!G zc=UuvPk8i%=jsWMp77`ikDhe(gh$UG?ek(49zEfidcvb8 zJbJ>TCtW?^(eokQo~ys}_jh>oghx+!^n^!Gc=UuvPk8i%w{NoZ@90TCp>z>qbIyjPk8i%M^AY4q^l=9dKTTDnR>#bCp>z>qbEFi!lNfV zdcvb8{Gguj=n0RW@aRcbPk8ivShwfl;P)pydcvb8JbJ>TCp>z>qbEFi!dL1EkDl=8 z36Gw1^@K;yE8U*Cdcvb8JbJ>TCp>z>qbEFi!lNgAs-E!Z36Gxe=t);kc=UXDw`cn| zet**a>yQaNdcvb8JbJ>TCp>z>qbEGo*Gur|36Gxe=t);kc=Y_SZqHIZ;cKJ^ShjkDl=836Gxe=n0RW@aPGTp77>1 z{`Dt3dcvb8JbKdA6COPu+3i{VwZFf^qbEFi!lNfVdcvb8JbJ>TCtW?^(Gwm$;n9<> zp77}TsBX`Zdcvb8JbJ>TCp>z>qbEFi!lNg=QcrmFghx+!^rWjNJbEs=J?l64{Rxkr z@aPGTp77`ikDl=836GxeQa$0(6COR`(UY#8@aXyIZqKQD!lNfVdcvb8JbJ=&|NG!e zxPHFM8Xi62xq8B*Cp>z>qbFTG;nDLk-JZ?s{r-eUPk8i%M^AY4ghx+!^n^!Gc&484 z=n0RW@aRcbPk8ivY`15jp77`ikDl=836Gxe=n0RW@aPFo)e{~);n5QwJ?ZKRkDfo? z?U|@2JbJ>TCp>z>qbEFi!lNfVdcqU+ghx+!^n^!Gx_ZK+=TCHdu3qQw@9^jekDl=8 z36Gxe=n0RW@aPF|_ICaqJbJ>TCp>!6)e{~)f3n*%RZn>Ighx+!^n^!Gc=UuvPk8jC zt0z2q!lNfVdeYSs9zB1m+jI5zet*IX_X)glpTYI>K<04$Jdg!kKM!O{zs1!T|6Xqm z*Utmlz^8tm9b7*TWDnQR13AK@C%jcpc;a8549jlM=|6f;c=Uu<|6s45!J{WUdcvb8 zT|ME^6FyQ;c=UuvPk8i%M^AY4{ONAbL_Oir6P~FjJbJ>TCp>!6)e{~);eGXlM^AY4 zghx+!^n|Nt`ZL|0mG>ONz>qbEFi!u#q8kNXooRZn>Ighx+! z^n^!Gc=Uw#)sucpdw=Qu{3Si%(Gwm$;p&;g58iVQ*UvvG;QIL|3wV78JAVn+&p%nh z_47|w^tbx`57*BzsNk8uehbgtcksj4**R;tb`Egu9O3%80S#O`EnGWicy?DiPx1@h z>#m(XTss5!)^}34c1CdRjN#Ke*?BU!cBXLc%;4=^Y$u0nX9+Lg;ny9W{k)F+3mSfPk8i%M^AY4ghx+!^n_Q9^z> zqbEFi!lNfVdcvdUFLiqs>IsjY@aPGTp77`ikDlTCp>!6)e{~);Uo2gM^AY4ghx+!^n^!Gc=Uuv&nI+y_SF*} zJ>k(49zE&m36Gxe`rrNjghx+!^n^!Gc=UuvPk8i%N6%mG_RRe2iUB-&!lNfVdeYSs z9zEex^@K-Hc=UuvPk8i%M^AY4gh$UOc6%o336Gxe=n0RWboGQsPk8fAzdzy86COR` z(Gwm$;n5QwJ>k*wSGqlG|9Wx&kDl=836Gw1^@K-Hc%h!~=n0RW@aPGTp77`ikDl=8 zx$5>zb$`O6Cp>z>qbFTG;n5SGs3$yn!lNfVdcvb8JbJ>TCp>!oYPV;j`x72L;n5Qw zJ?ZKRkDl<=zxn$+JbJ>TCp>z>qbEFi!lNfVdS27*S*a&Hdcvb8JbKdA6COR`se01& z=XZGYghx+!^n^!Gc=Uuv&nIWhE>HH1e`c=V*JCp>z>xBu$*Cp_*? zc=UuvPk8i%M^AY4gh$UOcY7Yx6CU>`JbJ>TCtW?^(G#AjCp>z>qbEFi!lNfVdcvb8 zJbM0Gx93(p;n5QwJ>k)luAcDdN&gqWKjG069zEgF6COR`(Gwm$;nDNgyFFLx36Gxe z=n0RWboGQsPk64L@aPGTp77`ikDl=836Gxe==qdx&q6)n(Gwm$;n9<>p77`iZ}t68 zc=UuvPk8i%M^AY4ghx+!^jvp)PSq10J>k(49zE&m36Gxe`2IXRdcvb8JbJ>TCp_1G zhX}6ce9rLb`P6RDk$S?TCp>z>qbFTG;n5Qw-=Bv^Pk8i%M^AY4ghx+!^n^#xr*(Vw z)e{~);n5QwJ?ZKRkDl=O{yaQ-!lNfVdcvb8JbJ>TCp>ySz1y?(e~&Yu>+4T=^n^!G zx_ZK+Cw!!T-vN)F@aPGTp77`ikDl=836Gx7==MCQCp_*?c=UuvPr7=-qbI!fKL@Sh z(Gwm$;n5QwJ>k(49zEgF^O@bATlIuTPk8i%M^CzX!lNgAs-E!Z36Gxe=n0RW@aPGT zp77}T8{M8O^@K-Hc=UuvPr7=-)w6&%{_n>Za6NZX!fSv13a*_sT>ssN3a*_kTsu3s zp1Y{w+Bv|rbA;=^v(Uh`)55iLrr+u6i|-F4&+1-Z?eyW=8Nl`2MGDu>2(Fzm{f>5? z46dCyJbS3Tk|D+wQ~;Pnfn+%a-YMSPutD{o+tOYxKEbwslR>=Z$ITd;VbtYeEUgz{T`mV zAK`la37-1v&+zE^>~7EY*w(P7kf{5`i168 z_~91jYq&mdZs7X7xr4|1J3QXs;qm?s-}-sZaDCqFJ*V4KpEn0^^&isx^X3??&zp02 z^+nzj9zEgF6COR`(Gwm$;n5QwJ>e_$gh$Wcx}+yOdeYSs9zEeB^@K-Hc=UuvPk8i% zM^AY4ghx+!p`P&Q`P@r-!lNf$J>k(4Uik*wd6)ErM^CzX!lNgAs-E!Z36Gxe=n0RW@aPGTp77`iAE_ridj9q$J>k)luAcDd z2~Si1_z6$km+;Czf34yA`$QYK{yxzTuD?&Tr{Ci0i?7p;aQ%Iv6Wz~qhU@PW^)}s} z`uju!c=Uv~>Iv7^OF6voZu9?-+uK#Z_4kPuaQ%Iv60W~bw1n&L6K&wdm)P~)!Kdzf zcGs#(*BHR{_cey_gP&&%*WZ7c!1ecuW^i5KIb7Fw z0oV1d;Ki3(&kbCEUt+fsq;rja;2YBn}Il}dQg9d)^*SB!(oZ*L@97-8b;* z(BJRi>Hjd_!`oY#AK`~vo1fs7`x)MM@BJ>Wm+ueYdcPRL_4#NF*Uvqkz_+)wbI#zE z`x4%MjlF&iufN)S1J~!@9bBJ(_i%mwJ;KYc^q%nStIW^vm3!~^x;<0h8Nj0_{NOud zck(4o~b8YJ>k*w1>K&Bdcvb8JbJ>TCp>z>qbEFi z!lNhs+E-tE-Lix0&o6s;^n_2p*6&Yv+@J91`ND3`;&!$(fJaYw^n^!Gc=UuvPk8i% zM^CzX!lNfVdcyna36Gxe==uBIo>TRNM^AY4ghx+!^n^!Gc=UuvPk6k)!{hxO9zEfQ z+xz_qkDl=8x$X8GsV6*o!lNfVdcvb8JbJ>TCp>z>qbEFi!lNgArJnHU36GwC(Cyh* zPk8i%M^AY4ghx+!^n^!Gc=V*}{T&|f@9^jepQ}9zEgF6COR` z(Gwm$;n5QwJ?ZKRkDl=83Gb^XJbJ>T=O1-@uGAAAJ>k(49zEgF6COR`(Gwm$>FNoO zp77`iKluCU2_8M+(esbHJ=@#*=XZGYghx+!^n^!Gc=UuvPk8jCt0z2q!lNgArJnHU z36GvH>h?USCp>z>qbEFi!lNf#Jqvh#7rVX-_~?%2CA|7N^A%h>Yxu$6A1k*K?Tes}AChL`TW zKj~gyyaH@a$W>KYaVm=Dl6F|I~c|U)|GQKZG}Tzxv|O%VYRqVy~aT`}Z)P z!5cs49A5eB7x30QY~Y3a4nF;9`+fKDgTK8;_{#kR-+G5Lym0Tmq}x+{2Jl2Z>HhYP z;jQtj!?WAp%kDRL{#1MY48DDm`5fN%Z?FzV-7T;X3~bp7_ogzVh?;{-WEb@8=)Dr+)q+T<0IdYyW-c@WRi(fb0BA zc(t}}Yk1-3-@r#Jd;N~?=ikG1{v*8b-?#Ud-995f{{UXx!S0_Syze_>_|(roq5q1V ze+KXS`R8z*e?fnW?QG!flf4f-zm=VT51;zZ5kB(spWw|CZT}2!pJ3j5X}71&KY(xj z_npxF{4==DKZm!!ZolsW-uLq_;f0@n4L|t#H*lSQ2e1A2J;4h<{~12|GV9-~yM1!s z8Nl0X?Cl!D6F>hLzV-7@;5z>dKJwppN%!-w;msG>`8V)`ciz$c{CoJy@AD(w&wqmJ z{AYOjG{4_o*6lg+odG;kA9(W|+nLdyVLpdv?hAP8zJxbVx1BY-cHhAD_U_>MZ`sZs zUOw0S2tPdA`~=^6w==x0?Df5ucY9X;`XRjVZew`k9VT#fo59s>4p+AYyz*{KxVo+3 z>b8Na+YYX7d$_tC;p%pRt6T3C-JXee8^G0V2v@f;T-_#cb(_IU?>2|4+XAj`OSrnN z;p(=5tJ@B)ZhN@8o#3nAwEOc6SGV3@bvvuu0IqIBxVnwuxp$ku)olh>w>ezh7I1Z2 z!qsgJSGNsZ-S+U(->;8wbvwb;?F?79-YdJE)olRJ{o~RQu5M#^?H_06@YK)0fb0BA zxX!--zI&cB0ae*QgN=Rd-A{@$y)ed=e~eLH~b{6o0TKZfi46S&SlgQtG}Ib7#o zz;*r&JooeO;5z>vuJa$^I{yi-^Pk~~pTGC&Zcm+m0N42^@WjtQgX{crxX!--;mg&cB3be*QIF z=ik6}{vBNB-@|qOBRui*pWr(G8LsmWU(@Z`Jk$D*>H0bcuJg~}I{zH5^DpTB@o-7^ z?}x16I{zMC{*}?*Jtqb=GI{XFWu*GoxgzV{0q3w zU&3{sC0yrU!LR+9em}r<{taB`-@|qO16=1n!gc-zuJfPZI)4k#{eDhg-@PAnKM&zL z=LoKIj^R3I2G=waFsb$ZXGoLjigxr6JRHTL;vcA71$N9l+bu?Bf1O;X2O{uJerG>NbN{FSBk1T<2N9b)FLbHt(~9S8ukre+5^c z8eaUk^*PYJ&k?TkG;p2g1lM_5xcUtKrhC2AX9QQDFHhgEgCBm< z`b^a&IGJUh6~Q^PlJdg#T+fjzvsk9|Hm!1ekDuFpp; zT%V76f7`t-`uN$0PxbK%u8*H7T<00Wb^Z}tpHDNm&Oe3g{ByX@U%++#1zhJZ;X3~k zuJfF>zoI;&Uu9EoDE#(Ji&F&7Owkt@ORzo-q!YcVF=ebM{u2U4A(g` z_|Lw{o^fMuW#YS(C(l9o4WlEFSPfs0epI2dwmMm z{t&M7jNrQ8rf{97fa^R9xXx3;b)F?$=UKsZ|J3l&!oS{w>pVxe&eOnko)cW>Y2mtm z27lkZE~}T?bs52Ro-thK$>4{F*`F6C@a!)B@eQum7x4Brc0a7(I?o!e^Hgx{Z{Rx5 z7Owl}0M~h1xXyEi>paOnbUW)jJ-E)(hwJ{y;O!&*;}2ZtnZb3Q9Io@s;W|$N*Zs4G z>;Boob)Fqu=h?&ceUbxQ-zPc3NB4Q~#n*?;C4PdpZ?OBkh3oqvy?^XpFMWLO!}alb z0PlZ`ohQA-M{s={p1{>%3Rj02y!c-GeRFvKXm9TvuD5py*W0^->+M~`>j&EJyMgQN zs^Kqwoqs<8UcTiKb{*lb@YkQ)Z41 zW2t}nK-(F>b$y3$UEeWW*LMyt{rWE8y1q+z{Qx`98eaH)wShO^Vz1x9D}VhSuIqb* z>-wJH`PBB$bpQC=dt3M8gRa*AuIoF5>-A%J;~$?Va9!UST-SFFFTcyqzkuudF5$Yq zYq+lO9$vq}_K)zX`-%QW?+Gv7WZrvwx98#Y<^y=`K7=Q)u-A{_?bdt(PyWDs25(o_*SU z2yZ`PK882$6S(@%;OakztN#Mt|FHeOOL*<)T*DK8{RZB+@8GHXp6>mRaP{vs-JXXV zOfSCv9KZ|rA-uZ2y?zWYZ)iS&PyO{Xc;-HbtN#M7{!6&}ui@==>^vKI*olq z;n5SmRZn>Ighx+!^rWjNJbM0Hw`ZxI@aPGTp77`ikDl=836Gxe=m}q`Cp>z>qbEFi z($y0lJ>S{wS^S!R{Dikp@{gbJt@{ifJ>k(49`En)cz=gSPx#8uvx7%Zc=UuvPr7=- zqvyYOdnW1$kDl=836Gxe=n0RW@aPGTp726F;n5QwJ>k)luAcDd`5)b$t0(*Y36Gxe z=n0RW@aPGT_jh=_zr&*^e5#)C=n0RW@aRcbPk8h^b$h1j36Gxe=n0RW@aPGTp77`i zkDl<6dcvb8JbJ>TCtW?^(eppMJTCp_`%wS-4c zc=Uuf&-9+~=n0RW@aPGTp77}T?n`>YqbEFi!lNfVdcs$JUoGL$6COR`&C|RmJbJ>T zCp>z>qbEFizUPvj@aPGTp77`ikDl;UJ>k(49zEf;deT2)o%itQ36Gxe=n0RW@4cia zJbJ?Qd1MCH=aD%)dcqTbKV8D3Cp>z>EA@oO{Rxkr@aPGTp77}TzDs(-qbEFi!lNfV zdcq6!ghx+!^n{n{36Gxe=n0RW@aPGTp8wVDsh=-5hU@3cP2kZJ9zEgF6JGqby+1DD z`uUSgQraQ)o56I?%k@(kC{pB%Q`p7rnA+ckz~&o`gI6ZaWB zzW#*A*Pn2G9A3ipad-{ab=kn1-?4M<;PLe*T=&}%uKp*wzW#*A{rUcGLCqbEFi z!lNfVdcvb8JbJ>TCtW?^(Gwm$;n9<>p77}Tfo{*n@3%2Ldcvb8JbJ>TCtM#lmT-OC zSi_?yyi!ki^n^!Gc=V*JCp>z7u-mgxPk8i%M^AY4ghx+!^n^!Gc=Uvq>IsjY@aPGT zo^k(49zEgF6COR`(Gwm$;kkOkqbEFi!lNfV zdcvdUN4h<8^@K-Hc=UuvPk8i%$NM`x-rwQT6P~FjJbJ>TCp>z>qbEFieze=O{S&`G z;n5QwJ>k(49zEgF6COR`(G#AkCp>z>qbEFi!lNfVdY-#IOZ9|DPk8i%M^AY4ghx+! z^n^!Gc%q*0=n0RW@aPGTp77}Tv2M@4dcvb8JbJ>TCp>z>qbEFi!lNg=d6B(;?cmW9 z9zEgF6COR`(evZop2aKt{T<%C+0@aPFoe18Xzub1HQ z{du_hpXmB}2_D~{|3tTEUp?WCpK}7Q+-LCIeGX6E7x3r_kDl=832$EJ_a{7h!lNfV zdeYSs9zFlN+jG13`x9QePvBGc8NBa4haX;T`wMvVghx+!^n`DHe+O5eJ$(BrJI@h* z@cZfnZ{5%E#(nt7ZqLITy(fJ7cjgm#-+cy;KOe#4&qwg+36Gxe=m~HC*3P-3Uv;%T zzXXpzAHmiCMA!WZk3S!Ms@pSHPk8i%M^AY4ghx+!^n^!Gc=UuH)Ds@>@9^jekDhe( zgh$U$cYC&ezm4J16COR`(Gwm$;qmz$9-rUg(G$K^Pk8i%M^AY4q^l=9dL~c0ct42e z?bQ<=J>k(49zEgF6COR`(Gwm$;VbooM^AY4ghx-hdcvdUwYoj?H~Ys=`1S|gSxmEA@nL-Iws%AlHebNg2beG6?K8~R^ke+`^Prv=euOGl`_Y^+z^9c4>h@+XUnbC&S*tL}8+75onGdgz63;Mpjo#&-s*{C%Im? zLwa{Re+s{izkUeU>t}GCKZp1IJSAM`U&3|%4Lth{dwaKVz5W1yroa9O*ZI%zJFCz2 zFX;n+!;7rv5U%|h{PDkGug~FneF=Z#m)YC9gzJ9T!5{r;+pppI;zzS{1eG5mQyVCT=^BZ}r#j;d=cE{u1xg!t>|adCu_qS=KqZLATq=U*Cf_&#~9{;RoLt!1HI@>r;4H znGfNK`v_k6?>mM!{`=11kMG-cDd6g`fRCPU=PBXpu!N`n`V~BPU&B}K6+Cl4!&ld~ zpEHx(uzOv$ulml5`=ke7efrK9K7!}3w%1SLiGTcGz%ze+2_L!d;X3Dm?yo=6{hY~- zx^I`xIfRcMW#PvOP&?0%TR%j^4n z0-Vv_~Ehk`Wjw)hdq3>u+9f~_VeZ^ z`071(yLf+T;mLc=&+x5#a+B`${eN`bd;C20-2d?rWf9gX+vPN&Z08YbD>TtzOJypt zm5Y&FEhS4X_R49JY8_%rxt30=aIHfc`F z+^j!z``*9L+iPC)p7*@xu>1LZv$t9O8a$WR>4nvA(0^s_!`*q^geSkYd;s^=XA3@* zhw!<)4ezO+2wvQ7+wH*p+T+*b8N=(pwR{54?`HV{e7Lgw5bo_{`4K$OIE>-my)8e1 zr|L6>*Y9WfDLmT2d;yOyx8t6}qbtk{c(|?Aso$eIf82T6fV=aw33umd0C(qU3+~R- z2=30)4&0rmG2ES}UAQ|>`|xBt+usB}+{SzWPyeFh4$mK8`3d}4+v>Rn?(VOq^rxP< zo}U@q-Cxb%(J_{v!-Hp-=kVlY^Cf(Kw0QxK zguDH1!?R~vK8DXvHSfZG<$Lf{hh-hWhZ>jSqZFefXC8_uo(-9_YNt z;alp%x72TJs1FYxrSXApsSn>$f5#2=;k|uSAHJnNd`ta*+E5=}KT`GKTk6BN)PF#= zete46nZff|_2FCU!(ILKfz|rKMOJ4DkKSNDhr9d&?(zlP zIv?y*-EOj{&7UsZz5f}(d&;Nqd^fAJguBlXf`?YO+uK9ig=hQNd&m^-E5C%heDJVp zeV6aTqeE>RQh1^MSMV?GYWK0;!>jeP3-sO+K3Bd8clkE_a~IluV+42a!+Y@FpY8o{ zAMWx4`nT-!;yFB!H+HV>*GYlxuMe*)-+{kC`55jgKZ3th`7t~kw%7ABgTGe!8QkTU z@XM7i;Kes>92&b+_xJtE`|!E)A^erfx8bgzE<97d2hUZ11plh?V|b{~BQp4pl%K)f zdAEe$u6zM^pO4fZQ5~NQKZm>e-tN_Lc!KKJ z;Pd_LI@^RFr+ff+>q!KEmhv5VvA5Ol!(Xg?0(a-v6n?()8Qk@g!$-<5;qLR++8)*M zd9U(yxEr4qd~mYXH@NFRhP(B!3wQHp0C(%*5boB)2|Rp=&8r+9>|(xz7s@yHtd7I5 zY56X^_eAp^e7=YI6h3;4jZX$oR6mDbsr(Y|@{PT!eY*A2hr9JNgkP=tZFo=p^x@Yl zpTOPtkKrFyegcnGe*t&vXAXDuy}hgZ>(A`67Ke^7F73Zc!bTL5I&Z-;lm>>KZ0NPGrPWw;jYgN?)sd;U7t&M z{v_M3|Hx|pg}e#RkFtCh?yh%ZxPOf0C-AX6gL@ZWvObPWxU28)Q|;5$Z^B*u5bnL% z>UZIBq(0&EXPBq(-tp!u_)br-dEz~)+Gn8pKKwZ?%QxZf__pC^Dj&gJz6T#D--o;L z9Km0%{21=)XYem7KZCpc3Vx&V-lMDI6KZ@~a5tVI+>K`pAF6&A?)G;8KUw)9++Dw> z@LQD6;4YuTSIRHp{t5Pds@h|!;}B^a+VqobzD4lh1oHvh)tS*%XAXCDYWr6EanEG| zeEcliZVb-$&xkL3+`Pu_;R`^+9ZRlX1RpJV-` za93vmcXe{OtJ653+P|w4!d;y<+|^0ouFeGR>ZEX2X9;(8>IYW)bafhVS0{qII(@jS zlfYe_Dcse`;jYdS?&=I4TkYS?w-jFg7dyUFcp#s{3(bcG+*7{xxaxM@eMQn zX$Ie4`5D~hm+(;e0`Btlu)1GIE8l>-d<%X}X#I!q;0zmw82*C)w)^2O+`Zo$z}@$s zhj4d4Fol2N3sygayZMvD-=qGQa9{n`4z7-mdtR=?>&gdk*MAG{_O}DSLf@B;;jaG# z{sHwrfM>6__x}_4pAWX@%Nrk9k={=tKWiWZvMcF z(=~tKUst{hcjxZ_ev|S;c&_?W_^*`D;I4iS|Gn}{xTpEhcw%)NJdM8(clAT~-IQ;` z-S~9jZhw1lx4$E}o6lpo>nDS|_dheZo1aU#n?D8I&7a00)$wtkFZghG9~;8m=L>DP zyD#m+-RBEExH}(*aQFGb2=4lyz`uE{&M&z8p4AlY{m|xl26x}Hn!)EcS$+;re{8;h z50%g1^_wlfgvYsg0iS>0d<7rMTZdMUqx-p}5boap#PItcXXDm|yLmN$@2va~?(!*o zZ{??OmtVl!%I9#GuN_w1-&>Tg!`*Rjz>964x4!@J;qJIM;rX2`AHc_VHgCa$zuNH% z;l5}2HhlgU%SZI>EZ>30`g}izXMeUjU3mH@^B(+$ozGs6!vLNRY`bH4yyNNX`~)7! zQ+WDft22ckvWsnZzQLCp+&jE_++Cdp{5PuKgkK^LH+Tm=*Esax*`a5w$6*LhuQpHN z;h8oLb9nK5^9B47kFfD6;7`%!547vWi}rQ`1qe~ zUajE83oY**SsjPD&bu1i)%W3n>Nnwe&*}&8p6a*Yu6_iMo^Jhj;KhrqeoR;WF5J~m z;PJ^;e*h0(VD*Raq3Vy|Zaqmi_-upc@H^?auQqu7N!8=!^34q%Zt%_q?``nG1|M(m z=?0%~@Z|>gj{3*@+t}d225)chc!T#h_;7*cwOts9G<=1)}IC3-A5JhK=(`aCs)TI)%`#KpUd0uZ|r4#cHlS5yYL^# z6ZjwHL-^hIw)$hZt22e)Px(1~FZmMg@?KOOha;44z+FCoKS%ix?(&@t-h+Q$bp{)J zyuqg%e7?b#8{9j#Iu5R%#s&{Iczc7#8@#{4hZ}qXf49z~4E{rn=N#_#YYBICyyL3l zaJRtbVE~U`YS;G`JbbyGk0IRE>A;_&`aSsB@&P;^+IGkA`Af_v@G!A{X7GC7@^g5s z`~rT+BW)a(@TbXF@PC%qj<1equH({#zd-pG{5A46+~qs)ix?X)_EV^)4CnPBY6xTzuD$V7aqua z@I>B+59JBm&D#-tez9$L3@?V}6S%K@3NPMj^LYxt(j6DL8|MYwjq?)zF?U?xu1@WQ z>T&t7w%dT;B5%UuH(CE7JQ>+IwBeCFg7@SdxEr57e5m=5!0-Pko6keI8=ooM*Lsq{ zvvaKf8T=^KFW~OFUw>+KJQL-8xO>hG;4gTL_21s$G5jLsd+=-IgAG33;8XZ#RA&y~ zabK;g@ZTu!J*_$p&Kq#|UL}ABIxa1EPaeYS*V*xk;X_?ty72tJE#KSVLwKq>Be<7Y zo$&^rz;D*LP2oS6&)|>P&&E05;4Ao%%GWy8@ppCn4c>yEsyc1Bs}pbVKKzZUGk{O! zBl!2_=?0&{n=OqG{OR%n?((%0tK;(@$~WM*$OHHe``dOycqs3{&zAQ#_+W#NH~4ge z&*6_dK<8TMnX~2J~arWWcyvxSF34gfi1n|FV{9Evy zln>!&AnYlBA{yt~1Z4L;i7=?0%|@O*=> zHhBGC{_!|8H+Zi;Rf%(UH`oe zKG@*n4L;rA^9{b-;9mD1?{8y+2OGS-!Q%}+gr|?T>s<<;%ct<6d=8HfvN{WRCePtL z)mg&d_#|83R`9Fj_2*W{?PKyL{3dw_U&%Wgytlyz@Ewk_K1cAk%2W6UyNMez>bKxWsZJa2>UZHMC_jY9hiZJ_^TW-@ z@Z@;&3H)r;&)_eMY#bIFynr{RR=;*eb=;i$@XJ&`fd5S1hVO8!_0xerLEeR5aGd3n z4L;i7=?0%|@ErawZFdF#A9?Nh)$wt8AN~d91NiWE8|M%nYraMBh3drc@5p=b|CJ~3 zY+HNpI)vZ#cpK+2+-*07yX|K1y6Vi~u1*d=L&tpu-$ixmXI97Ac@utn$NCR9cnAK# z6D{9`KSth%pD7=}6Zr_<({Y@@U49C`T6JddseA$djC=|Ig?t4+QR{8%CDrkaAN+{* zd&>~+ec^5uE%j);w;coVGB7L}j!Y=Fj2|Rtl0c#(? zi=C{_5Z-^4y@wpbb6sDi@ZoJ%e-5v2v-f(tIlQ=o`4T=K**FyNq55CJ^WClg+Dog) z%e!U!^>*v<@NZVX0grDwc%5&;>xbEK4B+FYZMOw4_Ikp)P8;5Phix~4N7Hbf@4%Bg z*}v})!~F-?@$JI%+pJCxK7ZDk>-qzD)-@l(gJbPDj^OogTK{8saJ#;b2T%UR>ZkDW zQ|EbSF4l5dk?kqcL^`fKWIHZ1w4A2ZFdC^kGA?= zzdGNFt8Jdt;OT9aufsq0?{& zuJ56B;Nin;p2zUy$B$WWw+l}{VEfyHC-=1Ts}E1#ZTSQqk1Ric51-LoZ+8e!|IhYo z1P`CA@7vH%vg0*@*JB&!6dpgswwu9wr`h>3gU1J3odw+cq3v%D4?L}h@ch%7pY(fK zegz-zZO7gFx9a@#-8_V62U$N2`1tF#T^}C*!0I>Q^`)�o;3|jYA7Q*U$Hb@ZkH_ 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 z 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